[Wed Nov 4 04:57:44.927000 2026] [Ecto.Adapters.SQL:debug] [pid 1006585] [client -] QUERY OK source="global_table" db=0.9ms queue=3.7ms idle=108.7ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 04:57:45.091000 2026] [Bandit:info] [pid 1006585] [client -] Running DaProductAppWeb.Endpoint with Bandit 1.6.7 at 0.0.0.0:4030 (http) [Wed Nov 4 04:57:45.102000 2026] [Phoenix.Endpoint.Supervisor:info] [pid 1006585] [client -] Access DaProductAppWeb.Endpoint at http://localhost:4030 [Wed Nov 4 04:57:45.103000 2026] [DaProductApp.MQTT.Handler:info] [pid 1006585] [client -] Device phoenix_client_node_devteam connected [Wed Nov 4 04:57:46.090000 2026] [Ecto.Adapters.SQL:debug] [pid 1006585] [client -] QUERY OK source="tabby_sim_payments" db=13.4ms queue=1.5ms idle=1257.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 04:57:46Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 04:57:46.124000 2026] [Ecto.Adapters.SQL:debug] [pid 1006585] [client -] QUERY OK source="tabby_sim_payments" db=26.8ms queue=2.5ms idle=1277.7ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 04:57:46], true, "33fefd74-e13d-434e-8ef4-96e0ae48920f", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 04:57:46.124000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1006585] [client -] [TabbySim] payment=33fefd74-e13d-434e-8ef4-96e0ae48920f CREATED -> EXPIRED [Wed Nov 4 04:57:46.126000 2026] [Ecto.Adapters.SQL:debug] [pid 1006585] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms queue=0.6ms idle=1309.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["33fefd74-e13d-434e-8ef4-96e0ae48920f"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 04:57:46.136000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1006585] [client -] [TabbySim] webhook not sent: event=expire payment=33fefd74-e13d-434e-8ef4-96e0ae48920f [Wed Nov 4 04:57:46.138000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1006585] [client -] [TabbySim] payment=33fefd74-e13d-434e-8ef4-96e0ae48920f expired (expires_at 2026-11-03 13:38:34Z, session_status=created) [Wed Nov 4 04:57:46.258000 2026] [Ecto.Adapters.SQL:debug] [pid 1006585] [client -] QUERY OK source="tabby_sim_payments" db=119.9ms idle=1323.1ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 04:57:46], true, "0a903583-fcce-4d31-bd91-024b21ff8a07", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 04:57:46.258000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1006585] [client -] [TabbySim] payment=0a903583-fcce-4d31-bd91-024b21ff8a07 CREATED -> EXPIRED [Wed Nov 4 04:57:46.263000 2026] [Ecto.Adapters.SQL:debug] [pid 1006585] [client -] QUERY OK source="tabby_sim_payments" db=4.0ms queue=0.1ms idle=1443.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["0a903583-fcce-4d31-bd91-024b21ff8a07"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 04:57:46.263000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1006585] [client -] [TabbySim] webhook not sent: event=expire payment=0a903583-fcce-4d31-bd91-024b21ff8a07 [Wed Nov 4 04:57:46.263000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1006585] [client -] [TabbySim] payment=0a903583-fcce-4d31-bd91-024b21ff8a07 expired (expires_at 2026-11-03 13:38:46Z, session_status=created) [Wed Nov 4 04:57:46.360000 2026] [Ecto.Adapters.SQL:debug] [pid 1006585] [client -] QUERY OK source="tabby_sim_payments" db=96.4ms idle=1448.6ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 04:57:46], true, "f980c4bf-2654-43fd-bf18-e060c0854057", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 04:57:46.360000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1006585] [client -] [TabbySim] payment=f980c4bf-2654-43fd-bf18-e060c0854057 CREATED -> EXPIRED [Wed Nov 4 04:57:46.365000 2026] [Ecto.Adapters.SQL:debug] [pid 1006585] [client -] QUERY OK source="tabby_sim_payments" db=2.6ms idle=1544.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["f980c4bf-2654-43fd-bf18-e060c0854057"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 04:57:46.366000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1006585] [client -] [TabbySim] webhook not sent: event=expire payment=f980c4bf-2654-43fd-bf18-e060c0854057 [Wed Nov 4 04:57:46.366000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1006585] [client -] [TabbySim] payment=f980c4bf-2654-43fd-bf18-e060c0854057 expired (expires_at 2026-11-03 13:38:48Z, session_status=created) [Wed Nov 4 04:57:46.431000 2026] [Ecto.Adapters.SQL:debug] [pid 1006585] [client -] QUERY OK source="tabby_sim_payments" db=64.5ms idle=1417.5ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 04:57:46], true, "c6c435b6-b55f-4ee4-a793-554428c2d99a", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 04:57:46.431000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1006585] [client -] [TabbySim] payment=c6c435b6-b55f-4ee4-a793-554428c2d99a CREATED -> EXPIRED [Wed Nov 4 04:57:46.433000 2026] [Ecto.Adapters.SQL:debug] [pid 1006585] [client -] QUERY OK source="tabby_sim_payments" db=1.5ms idle=518.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["c6c435b6-b55f-4ee4-a793-554428c2d99a"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 04:57:46.433000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1006585] [client -] [TabbySim] webhook not sent: event=expire payment=c6c435b6-b55f-4ee4-a793-554428c2d99a [Wed Nov 4 04:57:46.433000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1006585] [client -] [TabbySim] payment=c6c435b6-b55f-4ee4-a793-554428c2d99a expired (expires_at 2026-11-03 13:38:50Z, session_status=created) [Wed Nov 4 04:57:46.501000 2026] [Ecto.Adapters.SQL:debug] [pid 1006585] [client -] QUERY OK source="tabby_sim_payments" db=67.4ms idle=391.7ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 04:57:46], true, "6fc588fe-464d-4de5-9943-686cdc8794d1", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 04:57:46.501000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1006585] [client -] [TabbySim] payment=6fc588fe-464d-4de5-9943-686cdc8794d1 CREATED -> EXPIRED [Wed Nov 4 04:57:46.503000 2026] [Ecto.Adapters.SQL:debug] [pid 1006585] [client -] QUERY OK source="tabby_sim_payments" db=1.3ms idle=416.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["6fc588fe-464d-4de5-9943-686cdc8794d1"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 04:57:46.503000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1006585] [client -] [TabbySim] webhook not sent: event=expire payment=6fc588fe-464d-4de5-9943-686cdc8794d1 [Wed Nov 4 04:57:46.503000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1006585] [client -] [TabbySim] payment=6fc588fe-464d-4de5-9943-686cdc8794d1 expired (expires_at 2026-11-03 13:39:08Z, session_status=created) [Wed Nov 4 04:57:46.586000 2026] [Ecto.Adapters.SQL:debug] [pid 1006585] [client -] QUERY OK source="tabby_sim_payments" db=81.7ms queue=0.1ms idle=383.7ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 04:57:46], true, "a065a2b5-394e-47a4-9fd0-098ea150dab6", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 04:57:46.586000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1006585] [client -] [TabbySim] payment=a065a2b5-394e-47a4-9fd0-098ea150dab6 CREATED -> EXPIRED [Wed Nov 4 04:57:46.587000 2026] [Ecto.Adapters.SQL:debug] [pid 1006585] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=460.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["a065a2b5-394e-47a4-9fd0-098ea150dab6"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 04:57:46.587000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1006585] [client -] [TabbySim] webhook not sent: event=expire payment=a065a2b5-394e-47a4-9fd0-098ea150dab6 [Wed Nov 4 04:57:46.588000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1006585] [client -] [TabbySim] payment=a065a2b5-394e-47a4-9fd0-098ea150dab6 expired (expires_at 2026-11-03 13:39:34Z, session_status=created) [Wed Nov 4 04:57:46.677000 2026] [Ecto.Adapters.SQL:debug] [pid 1006585] [client -] QUERY OK source="tabby_sim_payments" db=88.3ms idle=330.6ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 04:57:46], true, "6c53ce3f-b044-41e8-b2a7-d42391ab0b1e", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 04:57:46.678000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1006585] [client -] [TabbySim] payment=6c53ce3f-b044-41e8-b2a7-d42391ab0b1e CREATED -> EXPIRED [Wed Nov 4 04:57:46.682000 2026] [Ecto.Adapters.SQL:debug] [pid 1006585] [client -] QUERY OK source="tabby_sim_payments" db=3.2ms idle=415.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["6c53ce3f-b044-41e8-b2a7-d42391ab0b1e"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 04:57:46.682000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1006585] [client -] [TabbySim] webhook not sent: event=expire payment=6c53ce3f-b044-41e8-b2a7-d42391ab0b1e [Wed Nov 4 04:57:46.682000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1006585] [client -] [TabbySim] payment=6c53ce3f-b044-41e8-b2a7-d42391ab0b1e expired (expires_at 2026-11-03 13:39:39Z, session_status=created) [Wed Nov 4 04:57:46.799000 2026] [Ecto.Adapters.SQL:debug] [pid 1006585] [client -] QUERY OK source="tabby_sim_payments" db=116.0ms idle=322.5ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 04:57:46], true, "3960ab84-491d-4387-b4fc-527414486485", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 04:57:46.802000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1006585] [client -] [TabbySim] payment=3960ab84-491d-4387-b4fc-527414486485 CREATED -> EXPIRED [Wed Nov 4 04:57:46.806000 2026] [Ecto.Adapters.SQL:debug] [pid 1006585] [client -] QUERY OK source="tabby_sim_payments" db=1.9ms queue=0.2ms idle=437.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["3960ab84-491d-4387-b4fc-527414486485"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 04:57:46.808000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1006585] [client -] [TabbySim] webhook not sent: event=expire payment=3960ab84-491d-4387-b4fc-527414486485 [Wed Nov 4 04:57:46.808000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1006585] [client -] [TabbySim] payment=3960ab84-491d-4387-b4fc-527414486485 expired (expires_at 2026-11-03 13:40:22Z, session_status=created) [Wed Nov 4 04:57:46.875000 2026] [Ecto.Adapters.SQL:debug] [pid 1006585] [client -] QUERY OK source="tabby_sim_payments" db=66.4ms idle=377.7ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 04:57:46], true, "19823745-287c-4436-881d-9623c34e233a", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 04:57:46.876000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1006585] [client -] [TabbySim] payment=19823745-287c-4436-881d-9623c34e233a CREATED -> EXPIRED [Wed Nov 4 04:57:46.877000 2026] [Ecto.Adapters.SQL:debug] [pid 1006585] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=443.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["19823745-287c-4436-881d-9623c34e233a"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 04:57:46.878000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1006585] [client -] [TabbySim] payment=19823745-287c-4436-881d-9623c34e233a expired (expires_at 2026-11-03 13:40:24Z, session_status=rejected) [Wed Nov 4 04:57:46.924000 2026] [Ecto.Adapters.SQL:debug] [pid 1006585] [client -] QUERY OK source="tabby_sim_payments" db=45.7ms idle=376.6ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 04:57:46], true, "b16eb74e-5ec7-463f-a1e3-39d82413a50c", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 04:57:46.924000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1006585] [client -] [TabbySim] payment=b16eb74e-5ec7-463f-a1e3-39d82413a50c CREATED -> EXPIRED [Wed Nov 4 04:57:46.926000 2026] [Ecto.Adapters.SQL:debug] [pid 1006585] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms queue=0.2ms idle=338.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["b16eb74e-5ec7-463f-a1e3-39d82413a50c"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 04:57:46.926000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1006585] [client -] [TabbySim] webhook not sent: event=expire payment=b16eb74e-5ec7-463f-a1e3-39d82413a50c [Wed Nov 4 04:57:46.926000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1006585] [client -] [TabbySim] payment=b16eb74e-5ec7-463f-a1e3-39d82413a50c expired (expires_at 2026-11-03 13:40:29Z, session_status=created) [Wed Nov 4 04:57:47.009000 2026] [Ecto.Adapters.SQL:debug] [pid 1006585] [client -] QUERY OK source="tabby_sim_payments" db=81.8ms queue=0.5ms idle=339.3ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 04:57:46], true, "2fcd9935-bd35-4887-8c6f-9ebebce2f37a", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 04:57:47.009000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1006585] [client -] [TabbySim] payment=2fcd9935-bd35-4887-8c6f-9ebebce2f37a CREATED -> EXPIRED [Wed Nov 4 04:57:47.011000 2026] [Ecto.Adapters.SQL:debug] [pid 1006585] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms queue=0.1ms idle=332.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["2fcd9935-bd35-4887-8c6f-9ebebce2f37a"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 04:57:47.011000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1006585] [client -] [TabbySim] payment=2fcd9935-bd35-4887-8c6f-9ebebce2f37a expired (expires_at 2026-11-03 13:40:31Z, session_status=rejected) [Wed Nov 4 04:57:47.072000 2026] [Ecto.Adapters.SQL:debug] [pid 1006585] [client -] QUERY OK source="tabby_sim_payments" db=60.4ms queue=0.1ms idle=330.2ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 04:57:47], true, "ec6c1bb9-c7bb-41f3-b526-72d379e5df74", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 04:57:47.073000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1006585] [client -] [TabbySim] payment=ec6c1bb9-c7bb-41f3-b526-72d379e5df74 CREATED -> EXPIRED [Wed Nov 4 04:57:47.074000 2026] [Ecto.Adapters.SQL:debug] [pid 1006585] [client -] QUERY OK source="tabby_sim_payments" db=1.3ms idle=275.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["ec6c1bb9-c7bb-41f3-b526-72d379e5df74"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 04:57:47.074000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1006585] [client -] [TabbySim] webhook not sent: event=expire payment=ec6c1bb9-c7bb-41f3-b526-72d379e5df74 [Wed Nov 4 04:57:47.075000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1006585] [client -] [TabbySim] payment=ec6c1bb9-c7bb-41f3-b526-72d379e5df74 expired (expires_at 2026-11-03 13:40:34Z, session_status=created) [Wed Nov 4 04:57:47.135000 2026] [Ecto.Adapters.SQL:debug] [pid 1006585] [client -] QUERY OK source="tabby_sim_payments" db=59.4ms idle=270.2ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 04:57:47], true, "9ce40ad1-06bd-440c-8e17-34e54e920b12", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 04:57:47.135000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1006585] [client -] [TabbySim] payment=9ce40ad1-06bd-440c-8e17-34e54e920b12 CREATED -> EXPIRED [Wed Nov 4 04:57:47.137000 2026] [Ecto.Adapters.SQL:debug] [pid 1006585] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms queue=0.4ms idle=260.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["9ce40ad1-06bd-440c-8e17-34e54e920b12"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 04:57:47.137000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1006585] [client -] [TabbySim] webhook not sent: event=expire payment=9ce40ad1-06bd-440c-8e17-34e54e920b12 [Wed Nov 4 04:57:47.137000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1006585] [client -] [TabbySim] payment=9ce40ad1-06bd-440c-8e17-34e54e920b12 expired (expires_at 2026-11-03 13:41:03Z, session_status=created) [Wed Nov 4 04:57:48.495000 2026] [Ecto.Adapters.SQL:debug] [pid 1006585] [client -] QUERY OK source="tabby_sim_payments" db=1357.7ms idle=259.9ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 04:57:47], true, "93732ea5-0179-46c9-bc83-600c0843f96d", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 04:57:48.496000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1006585] [client -] [TabbySim] payment=93732ea5-0179-46c9-bc83-600c0843f96d CREATED -> EXPIRED [Wed Nov 4 04:57:48.500000 2026] [Ecto.Adapters.SQL:debug] [pid 1006585] [client -] QUERY OK source="tabby_sim_payments" db=3.8ms idle=1572.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["93732ea5-0179-46c9-bc83-600c0843f96d"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 04:57:48.500000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1006585] [client -] [TabbySim] webhook not sent: event=expire payment=93732ea5-0179-46c9-bc83-600c0843f96d [Wed Nov 4 04:57:48.502000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1006585] [client -] [TabbySim] payment=93732ea5-0179-46c9-bc83-600c0843f96d expired (expires_at 2026-11-03 13:41:18Z, session_status=created) [Wed Nov 4 04:57:48.505000 2026] [Ecto.Adapters.SQL:debug] [pid 1006585] [client -] QUERY OK source="tabby_sim_payments" db=1.6ms idle=1577.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 04:57:48Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 04:57:48.505000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1006585] [client -] [TabbySim] expiry job: 14 payment(s) were due [Wed Nov 4 04:57:48.508000 2026] [Ecto.Adapters.SQL:debug] [pid 1006585] [client -] QUERY OK source="tabby_sim_payments" db=1.6ms queue=1.2ms idle=1496.2ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 04:57:48Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 04:57:48.516000 2026] [Ecto.Adapters.SQL:debug] [pid 1006585] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms queue=0.5ms idle=1503.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 04:57:48.518000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1006585] [client -] [TabbySim] expiry job: no CREATED payment left, not rescheduling [Wed Nov 4 04:58:34.009000 2026] [Phoenix.Logger:info] [pid 1006585] [client 115.99.167.137:56185] GET /tabby/demo [Wed Nov 4 04:58:34.090000 2026] [Phoenix.Logger:info] [pid 1006585] [client 115.99.167.137:56185] Sent 404 in 80ms [Wed Nov 4 04:58:34.094000 2026] [Plug.Debugger:debug] [pid 1006585] [client 115.99.167.137:56185] ** (Phoenix.Router.NoRouteError) no route found for GET /tabby/demo (DaProductAppWeb.Router) (da_product_app 0.1.0) lib/da_product_app_web/plugs/tabby_demo_gate.ex:18: DaProductAppWeb.Plugs.TabbyDemoGate.call/2 (da_product_app 0.1.0) DaProductAppWeb.Router.tabby_demo/2 (da_product_app 0.1.0) lib/da_product_app_web/router.ex:1: DaProductAppWeb.Router.__pipe_through14__/1 (phoenix 1.7.19) lib/phoenix/router.ex:475: Phoenix.Router.__call__/5 (da_product_app 0.1.0) lib/da_product_app_web/endpoint.ex:1: DaProductAppWeb.Endpoint.plug_builder_call/2 (da_product_app 0.1.0) /home/prem/canarabank/saaskit/da_product_app_changed/deps/plug/lib/plug/debugger.ex:136: DaProductAppWeb.Endpoint."call (overridable 3)"/2 (da_product_app 0.1.0) lib/da_product_app_web/endpoint.ex:1: DaProductAppWeb.Endpoint.call/2 (phoenix 1.7.19) lib/phoenix/endpoint/sync_code_reload_plug.ex:22: Phoenix.Endpoint.SyncCodeReloadPlug.do_call/4 (bandit 1.6.7) lib/bandit/pipeline.ex:129: Bandit.Pipeline.call_plug!/2 (bandit 1.6.7) lib/bandit/pipeline.ex:40: Bandit.Pipeline.run/4 (bandit 1.6.7) lib/bandit/http1/handler.ex:12: Bandit.HTTP1.Handler.handle_data/3 (bandit 1.6.7) lib/bandit/delegating_handler.ex:18: Bandit.DelegatingHandler.handle_data/3 (bandit 1.6.7) lib/bandit/delegating_handler.ex:8: Bandit.DelegatingHandler.handle_continue/2 (stdlib 5.2.3.2) gen_server.erl:1085: :gen_server.try_handle_continue/3 (stdlib 5.2.3.2) gen_server.erl:995: :gen_server.loop/7 (stdlib 5.2.3.2) proc_lib.erl:241: :proc_lib.init_p_do_apply/3 [Wed Nov 4 04:58:40.462000 2026] [Phoenix.Logger:info] [pid 1006585] [client 115.99.167.137:56185] GET /tabby/demo [Wed Nov 4 04:58:40.481000 2026] [Phoenix.Logger:info] [pid 1006585] [client 115.99.167.137:56185] Sent 404 in 19ms [Wed Nov 4 04:58:40.485000 2026] [Plug.Debugger:debug] [pid 1006585] [client 115.99.167.137:56185] ** (Phoenix.Router.NoRouteError) no route found for GET /tabby/demo (DaProductAppWeb.Router) (da_product_app 0.1.0) lib/da_product_app_web/plugs/tabby_demo_gate.ex:18: DaProductAppWeb.Plugs.TabbyDemoGate.call/2 (da_product_app 0.1.0) DaProductAppWeb.Router.tabby_demo/2 (da_product_app 0.1.0) lib/da_product_app_web/router.ex:1: DaProductAppWeb.Router.__pipe_through14__/1 (phoenix 1.7.19) lib/phoenix/router.ex:475: Phoenix.Router.__call__/5 (da_product_app 0.1.0) lib/da_product_app_web/endpoint.ex:1: DaProductAppWeb.Endpoint.plug_builder_call/2 (da_product_app 0.1.0) /home/prem/canarabank/saaskit/da_product_app_changed/deps/plug/lib/plug/debugger.ex:136: DaProductAppWeb.Endpoint."call (overridable 3)"/2 (da_product_app 0.1.0) lib/da_product_app_web/endpoint.ex:1: DaProductAppWeb.Endpoint.call/2 (phoenix 1.7.19) lib/phoenix/endpoint/sync_code_reload_plug.ex:22: Phoenix.Endpoint.SyncCodeReloadPlug.do_call/4 (bandit 1.6.7) lib/bandit/pipeline.ex:129: Bandit.Pipeline.call_plug!/2 (bandit 1.6.7) lib/bandit/pipeline.ex:40: Bandit.Pipeline.run/4 (bandit 1.6.7) lib/bandit/http1/handler.ex:12: Bandit.HTTP1.Handler.handle_data/3 (bandit 1.6.7) lib/bandit/delegating_handler.ex:18: Bandit.DelegatingHandler.handle_data/3 (bandit 1.6.7) lib/bandit/delegating_handler.ex:8: Bandit.DelegatingHandler.handle_info/2 (stdlib 5.2.3.2) gen_server.erl:1095: :gen_server.try_handle_info/3 (stdlib 5.2.3.2) gen_server.erl:1183: :gen_server.handle_msg/6 (stdlib 5.2.3.2) proc_lib.erl:241: :proc_lib.init_p_do_apply/3 [Wed Nov 4 05:00:39.442000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="global_table" db=0.7ms queue=3.6ms idle=56.3ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 05:00:39.560000 2026] [DaProductApp.MQTT.Handler:info] [pid 1009151] [client -] Device phoenix_client_node_devteam connected [Wed Nov 4 05:00:39.564000 2026] [Bandit:info] [pid 1009151] [client -] Running DaProductAppWeb.Endpoint with Bandit 1.6.7 at 0.0.0.0:4030 (http) [Wed Nov 4 05:00:39.576000 2026] [Phoenix.Endpoint.Supervisor:info] [pid 1009151] [client -] Access DaProductAppWeb.Endpoint at http://localhost:4030 [Wed Nov 4 05:00:44.412000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:64242] GET /tabby/demo [Wed Nov 4 05:00:44.456000 2026] [DaProductAppWeb.Plugs.TabbyDemoGate:warn] [pid 1009151] [client 115.99.167.137:64242] [Tabby] demo 401 GET /tabby/demo [Wed Nov 4 05:00:44.458000 2026] [DaProductAppWeb.Router:debug] [pid 1009151] [client 115.99.167.137:64242] Phoenix.Router halted in :tabby_demo/2 [Wed Nov 4 05:00:44.458000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:64242] Sent 401 in 45ms [Wed Nov 4 05:00:55.710000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:64242] GET /tabby/demo [Wed Nov 4 05:00:55.730000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:64242] Sent 200 in 19ms [Wed Nov 4 05:00:56.176000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:64242] POST /tabby/demo/summary [Wed Nov 4 05:00:56.185000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:64242] Sent 200 in 9ms [Wed Nov 4 05:00:57.019000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:64242] POST /tabby/demo/eligibility [Wed Nov 4 05:00:57.314000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:43018] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:00:57.318000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 127.0.0.1:43018] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:00:57.332000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:43018] QUERY OK source="tabby_sim_faults" db=0.5ms queue=2.4ms idle=1830.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:00:57.391000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:43018] QUERY OK db=31.0ms queue=0.6ms idle=776.2ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["2e867305-85aa-40e0-aeb4-75c9bfbc6017", "CREATED", "AED", "b0dc7425-3c7b-4e3d-be85-7f4ddac54751", "slice9", ~U[2026-11-04 05:12:57Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("1050.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:10:57Z], "created", false, ~N[2026-11-04 05:00:57], ~N[2026-11-04 05:00:57]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:00:57.394000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1009151] [client 127.0.0.1:43018] [TabbySim] checkout payment=2e867305-85aa-40e0-aeb4-75c9bfbc6017 session=b0dc7425-3c7b-4e3d-be85-7f4ddac54751 decision=created reason=nil amount=1050.00 AED [Wed Nov 4 05:00:57.399000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:43018] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.5ms idle=583.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:00:57.456000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1009151] [client 127.0.0.1:43018] [TabbySim] expiry job 399142 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:00:57.459000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:43018] Sent 200 in 145ms [Wed Nov 4 05:00:57.466000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:64242] [Tabby] checkout post /api/v2/checkout -> 200 (441 ms, attempt 1) [Wed Nov 4 05:00:57.468000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:64242] [Tabby] session created payment=2e867305-85aa-40e0-aeb4-75c9bfbc6017 [Wed Nov 4 05:00:57.469000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1009151] [client 115.99.167.137:64242] [Tabby] eligibility: show (amount=1050.00 AED) [Wed Nov 4 05:00:57.469000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:64242] Sent 200 in 450ms [Wed Nov 4 05:01:09.525000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:64242] POST /tabby/demo/summary [Wed Nov 4 05:01:09.525000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:64242] Sent 200 in 654µs [Wed Nov 4 05:01:10.312000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:64242] POST /tabby/demo/eligibility [Wed Nov 4 05:01:10.560000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:43018] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:01:10.560000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 127.0.0.1:43018] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1065.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:01:10.562000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:43018] QUERY OK source="tabby_sim_faults" db=1.3ms queue=0.1ms idle=1173.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:01:10.607000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:43018] QUERY OK db=43.6ms queue=0.5ms idle=1092.3ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["919c2c76-f4b1-464d-962a-99c8196d454e", "CREATED", "AED", "bf273a2d-9b07-4122-bbb4-cba12b2cc531", "slice9", ~U[2026-11-04 05:13:10Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1065.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("1065.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:11:10Z], "created", false, ~N[2026-11-04 05:01:10], ~N[2026-11-04 05:01:10]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:01:10.607000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1009151] [client 127.0.0.1:43018] [TabbySim] checkout payment=919c2c76-f4b1-464d-962a-99c8196d454e session=bf273a2d-9b07-4122-bbb4-cba12b2cc531 decision=created reason=nil amount=1065.00 AED [Wed Nov 4 05:01:10.609000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:43018] QUERY OK source="tabby_sim_payments" db=1.1ms idle=980.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:01:10.610000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:43018] Sent 200 in 50ms [Wed Nov 4 05:01:10.611000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:64242] [Tabby] checkout post /api/v2/checkout -> 200 (298 ms, attempt 1) [Wed Nov 4 05:01:10.611000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:64242] [Tabby] session created payment=919c2c76-f4b1-464d-962a-99c8196d454e [Wed Nov 4 05:01:10.612000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1009151] [client 115.99.167.137:64242] [Tabby] eligibility: show (amount=1065.00 AED) [Wed Nov 4 05:01:10.612000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:64242] Sent 200 in 299ms [Wed Nov 4 05:01:10.631000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:65160] POST /tabby/demo/summary [Wed Nov 4 05:01:10.632000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:65160] Sent 200 in 592µs [Wed Nov 4 05:01:11.438000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:65160] POST /tabby/demo/eligibility [Wed Nov 4 05:01:11.699000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:43018] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:01:11.699000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 127.0.0.1:43018] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:01:11.700000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:43018] QUERY OK source="tabby_sim_faults" db=0.6ms idle=1137.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:01:11.735000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:43018] QUERY OK db=33.8ms idle=1094.0ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["bee07bde-78b8-4aee-a04a-f626b40768fd", "CREATED", "AED", "5c537cf3-d14d-4d44-bfc4-247a67f67909", "slice9", ~U[2026-11-04 05:13:11Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("1050.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:11:11Z], "created", false, ~N[2026-11-04 05:01:11], ~N[2026-11-04 05:01:11]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:01:11.735000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1009151] [client 127.0.0.1:43018] [TabbySim] checkout payment=bee07bde-78b8-4aee-a04a-f626b40768fd session=5c537cf3-d14d-4d44-bfc4-247a67f67909 decision=created reason=nil amount=1050.00 AED [Wed Nov 4 05:01:11.736000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:43018] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1126.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:01:11.738000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:43018] Sent 200 in 39ms [Wed Nov 4 05:01:11.739000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:65160] [Tabby] checkout post /api/v2/checkout -> 200 (301 ms, attempt 1) [Wed Nov 4 05:01:11.739000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:65160] [Tabby] session created payment=bee07bde-78b8-4aee-a04a-f626b40768fd [Wed Nov 4 05:01:11.739000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1009151] [client 115.99.167.137:65160] [Tabby] eligibility: show (amount=1050.00 AED) [Wed Nov 4 05:01:11.739000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:65160] Sent 200 in 301ms [Wed Nov 4 05:01:26.188000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:65160] POST /tabby/demo/place [Wed Nov 4 05:01:26.224000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 115.99.167.137:65160] QUERY OK db=22.9ms queue=1.9ms idle=862.1ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`order_reference`,`amount`,`needs_attention`,`success_url`,`cancel_url`,`failure_url`,`captured_amount`,`refunded_amount`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["65d64e34-1186-4fcd-b980-5c0cb0e15bd9", "new", "AED", "slice9", "DEMO-DAEB6343", Decimal.new("1050.00"), false, "http://78.47.213.209:4030/tabby/demo/result/success?lang=en&order=DEMO-DAEB6343", "http://78.47.213.209:4030/tabby/demo/result/cancel?lang=en&order=DEMO-DAEB6343", "http://78.47.213.209:4030/tabby/demo/result/failure?lang=en&order=DEMO-DAEB6343", Decimal.new("0"), Decimal.new("0"), ~N[2026-11-04 05:01:26], ~N[2026-11-04 05:01:26]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Wed Nov 4 05:01:26.492000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:37894] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:01:26.495000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 127.0.0.1:37894] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "en", "merchant_code" => "slice9", "merchant_urls" => %{"cancel" => "http://78.47.213.209:4030/tabby/return/65d64e34-1186-4fcd-b980-5c0cb0e15bd9/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/65d64e34-1186-4fcd-b980-5c0cb0e15bd9/failure", "success" => "http://78.47.213.209:4030/tabby/return/65d64e34-1186-4fcd-b980-5c0cb0e15bd9/success"}, "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 2, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-DAEB6343"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:01:26.496000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:37894] QUERY OK source="tabby_sim_faults" db=0.9ms queue=0.1ms idle=1157.2ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:01:26.556000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:37894] QUERY OK db=58.0ms queue=0.4ms idle=1158.7ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`lang`,`amount`,`buyer`,`buyer_history`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`shipping_address`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["9216c663-a90d-4f48-a4c5-52fb907d4ef6", "CREATED", "AED", "24f7deda-1de4-4e13-a353-10c4e7565a92", "slice9", ~U[2026-11-04 05:13:26Z], %{"lang" => "en", "merchant_code" => "slice9", "merchant_urls" => %{"cancel" => "http://78.47.213.209:4030/tabby/return/65d64e34-1186-4fcd-b980-5c0cb0e15bd9/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/65d64e34-1186-4fcd-b980-5c0cb0e15bd9/failure", "success" => "http://78.47.213.209:4030/tabby/return/65d64e34-1186-4fcd-b980-5c0cb0e15bd9/success"}, "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 2, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-DAEB6343"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "0", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo headphones", "unit_price" => "650"}, %{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 2, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo smartwatch", "unit_price" => "200"}], "reference_id" => "DEMO-DAEB6343", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "en", Decimal.new("1050.00"), %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, %{"registered_since" => "2023-02-01T10:00:00Z"}, [], true, %{"cancel" => "http://78.47.213.209:4030/tabby/return/65d64e34-1186-4fcd-b980-5c0cb0e15bd9/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/65d64e34-1186-4fcd-b980-5c0cb0e15bd9/failure", "success" => "http://78.47.213.209:4030/tabby/return/65d64e34-1186-4fcd-b980-5c0cb0e15bd9/success"}, [], ~U[2026-11-04 05:11:26Z], "created", %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}, false, ~N[2026-11-04 05:01:26], ~N[2026-11-04 05:01:26]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:01:26.556000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1009151] [client 127.0.0.1:37894] [TabbySim] checkout payment=9216c663-a90d-4f48-a4c5-52fb907d4ef6 session=24f7deda-1de4-4e13-a353-10c4e7565a92 decision=created reason=nil amount=1050.00 AED [Wed Nov 4 05:01:26.558000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:37894] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1218.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:01:26.559000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:37894] Sent 200 in 67ms [Wed Nov 4 05:01:26.560000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:65160] [Tabby] checkout post /api/v2/checkout -> 200 (335 ms, attempt 1) [Wed Nov 4 05:01:26.560000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:65160] [Tabby] session created payment=9216c663-a90d-4f48-a4c5-52fb907d4ef6 [Wed Nov 4 05:01:26.562000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 115.99.167.137:65160] QUERY OK source="tabby_payments" db=0.3ms queue=0.6ms idle=884.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["65d64e34-1186-4fcd-b980-5c0cb0e15bd9"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Wed Nov 4 05:01:26.653000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 115.99.167.137:65160] QUERY OK source="tabby_payments" db=89.9ms queue=0.3ms idle=578.0ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-04 05:21:26Z], "9216c663-a90d-4f48-a4c5-52fb907d4ef6", "24f7deda-1de4-4e13-a353-10c4e7565a92", ~N[2026-11-04 05:01:26], "65d64e34-1186-4fcd-b980-5c0cb0e15bd9"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Wed Nov 4 05:01:26.653000 2026] [DaProductApp.Tabby.Sessions:info] [pid 1009151] [client 115.99.167.137:65160] [Tabby] session created attempt=65d64e34-1186-4fcd-b980-5c0cb0e15bd9 payment=9216c663-a90d-4f48-a4c5-52fb907d4ef6 [Wed Nov 4 05:01:26.720000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:65160] Sent 200 in 531ms [Wed Nov 4 05:01:27.129000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:65160] GET /tabby-sim/hpp/24f7deda-1de4-4e13-a353-10c4e7565a92 [Wed Nov 4 05:01:27.130000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 115.99.167.137:65160] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "24f7deda-1de4-4e13-a353-10c4e7565a92"} Pipelines: [:tabby_sim_hpp] [Wed Nov 4 05:01:27.136000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 115.99.167.137:65160] QUERY OK source="tabby_sim_payments" db=0.9ms queue=0.4ms idle=579.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["24f7deda-1de4-4e13-a353-10c4e7565a92"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Wed Nov 4 05:01:27.139000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:65160] Sent 200 in 9ms [Wed Nov 4 05:01:40.797000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:65160] POST /tabby-sim/hpp/24f7deda-1de4-4e13-a353-10c4e7565a92 [Wed Nov 4 05:01:40.797000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 115.99.167.137:65160] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "approve", "otp" => "8888", "session_id" => "24f7deda-1de4-4e13-a353-10c4e7565a92"} Pipelines: [:tabby_sim_hpp] [Wed Nov 4 05:01:40.799000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 115.99.167.137:65160] QUERY OK source="tabby_sim_payments" db=1.3ms idle=459.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["24f7deda-1de4-4e13-a353-10c4e7565a92"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Wed Nov 4 05:01:40.852000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 115.99.167.137:65160] QUERY OK source="tabby_sim_payments" db=51.1ms queue=1.4ms idle=461.2ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["AUTHORIZED", ~N[2026-11-04 05:01:40], "9216c663-a90d-4f48-a4c5-52fb907d4ef6", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:01:40.853000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1009151] [client 115.99.167.137:65160] [TabbySim] payment=9216c663-a90d-4f48-a4c5-52fb907d4ef6 CREATED -> AUTHORIZED [Wed Nov 4 05:01:40.854000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 115.99.167.137:65160] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.6ms idle=514.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["9216c663-a90d-4f48-a4c5-52fb907d4ef6"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:01:40.865000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 115.99.167.137:65160] QUERY OK source="tabby_sim_webhooks" db=0.5ms queue=1.8ms idle=524.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["slice9"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Wed Nov 4 05:01:40.865000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1009151] [client 115.99.167.137:65160] [TabbySim] no webhook registered for merchant_code=slice9; event=authorize payment=9216c663-a90d-4f48-a4c5-52fb907d4ef6 [Wed Nov 4 05:01:40.865000 2026] [DaProductApp.TabbySim.Hpp:info] [pid 1009151] [client 115.99.167.137:65160] [TabbySim] hpp payment=9216c663-a90d-4f48-a4c5-52fb907d4ef6 action=approve status=AUTHORIZED [Wed Nov 4 05:01:40.865000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:65160] Sent 302 in 68ms [Wed Nov 4 05:01:41.262000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:65160] GET /tabby/return/65d64e34-1186-4fcd-b980-5c0cb0e15bd9/success [Wed Nov 4 05:01:41.268000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 115.99.167.137:65160] QUERY OK source="tabby_payments" db=2.0ms idle=927.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["65d64e34-1186-4fcd-b980-5c0cb0e15bd9"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:01:41.326000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:65160] Sent 302 in 64ms [Wed Nov 4 05:01:41.432000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=631.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["65d64e34-1186-4fcd-b980-5c0cb0e15bd9"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:01:41.760000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:37894] GET /tabby-sim/api/v2/payments/9216c663-a90d-4f48-a4c5-52fb907d4ef6 [Wed Nov 4 05:01:41.760000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 127.0.0.1:37894] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "9216c663-a90d-4f48-a4c5-52fb907d4ef6"} Pipelines: [:tabby_sim_api] [Wed Nov 4 05:01:41.767000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:37894] QUERY OK source="tabby_sim_faults" db=1.0ms queue=0.4ms idle=496.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "9216c663-a90d-4f48-a4c5-52fb907d4ef6"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 05:01:41.768000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:37894] QUERY OK source="tabby_sim_faults" db=0.3ms idle=492.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:01:41.769000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:37894] QUERY OK source="tabby_sim_payments" db=0.9ms idle=441.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["9216c663-a90d-4f48-a4c5-52fb907d4ef6"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Wed Nov 4 05:01:41.770000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:37894] Sent 200 in 10ms [Wed Nov 4 05:01:41.771000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client -] [Tabby] retrieve get /api/v2/payments/9216c663-a90d-4f48-a4c5-52fb907d4ef6 -> 200 (339 ms, attempt 1) [Wed Nov 4 05:01:41.849000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_payments" db=72.2ms queue=0.6ms idle=350.8ms UPDATE `tabby_payments` AS t0 SET t0.`authorized_at` = ?, t0.`winner_key` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [~U[2026-11-04 05:01:41Z], "b1461bd9fd30512dea9cf6c22920609d32eb2ed1eaf67a2332f85a8a79dc9217", "authorized", ~N[2026-11-04 05:01:41], "65d64e34-1186-4fcd-b980-5c0cb0e15bd9", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Wed Nov 4 05:01:41.850000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=417.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["65d64e34-1186-4fcd-b980-5c0cb0e15bd9"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:01:41.851000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1009151] [client -] [Tabby] verify: attempt=65d64e34-1186-4fcd-b980-5c0cb0e15bd9 payment=9216c663-a90d-4f48-a4c5-52fb907d4ef6 created -> authorized [Wed Nov 4 05:01:41.895000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:65160] GET /tabby/demo/result/success [Wed Nov 4 05:01:41.896000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:65160] Sent 200 in 717µs [Wed Nov 4 05:01:42.210000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_payments" db=1.1ms idle=441.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["65d64e34-1186-4fcd-b980-5c0cb0e15bd9"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:01:42.276000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_payments" db=57.6ms queue=0.3ms idle=368.5ms UPDATE `tabby_payments` AS t0 SET t0.`capture_reference_id` = ?, t0.`claimed_at` = ?, t0.`claimed_by` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["capture-DEMO-DAEB6343", ~U[2026-11-04 05:01:42Z], "nonode@nohost", "capturing", ~N[2026-11-04 05:01:42], "65d64e34-1186-4fcd-b980-5c0cb0e15bd9", "authorized"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Wed Nov 4 05:01:42.277000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=425.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["65d64e34-1186-4fcd-b980-5c0cb0e15bd9"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:01:42.277000 2026] [DaProductApp.Tabby.Capture:info] [pid 1009151] [client -] [Tabby] capture: attempt=65d64e34-1186-4fcd-b980-5c0cb0e15bd9 payment=9216c663-a90d-4f48-a4c5-52fb907d4ef6 claimed (authorized -> capturing) [Wed Nov 4 05:01:42.471000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:65160] GET /tabby/demo/status/65d64e34-1186-4fcd-b980-5c0cb0e15bd9 [Wed Nov 4 05:01:42.475000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 115.99.167.137:65160] QUERY OK source="tabby_payments" db=1.1ms idle=313.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["65d64e34-1186-4fcd-b980-5c0cb0e15bd9"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:01:42.475000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:65160] Sent 200 in 4ms [Wed Nov 4 05:01:42.667000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:37894] POST /tabby-sim/api/v2/payments/9216c663-a90d-4f48-a4c5-52fb907d4ef6/captures [Wed Nov 4 05:01:42.667000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 127.0.0.1:37894] Processing with DaProductAppWeb.TabbySim.PaymentsController.capture/2 Parameters: %{"amount" => "1050.00", "id" => "9216c663-a90d-4f48-a4c5-52fb907d4ef6", "reference_id" => "capture-DEMO-DAEB6343"} Pipelines: [:tabby_sim_api] [Wed Nov 4 05:01:42.669000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:37894] QUERY OK source="tabby_sim_faults" db=1.0ms idle=464.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["capture", "9216c663-a90d-4f48-a4c5-52fb907d4ef6"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 05:01:42.671000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:37894] QUERY OK source="tabby_sim_faults" db=1.3ms idle=465.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["capture"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:01:42.672000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:37894] QUERY OK source="tabby_sim_payments" db=0.9ms idle=460.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["9216c663-a90d-4f48-a4c5-52fb907d4ef6"] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:227 [Wed Nov 4 05:01:42.672000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:37894] QUERY OK db=0.3ms idle=417.8ms begin [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Wed Nov 4 05:01:42.674000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:37894] QUERY OK source="tabby_sim_payments" db=0.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) FOR UPDATE ["9216c663-a90d-4f48-a4c5-52fb907d4ef6"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:231 [Wed Nov 4 05:01:42.675000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:37894] QUERY OK source="tabby_sim_payments" db=0.4ms UPDATE `tabby_sim_payments` SET `status` = ?, `captures` = ?, `closed_at` = ?, `updated_at` = ? WHERE `id` = ? ["CLOSED", [%{"amount" => "1050", "created_at" => "2026-11-04T05:01:42Z", "discount_amount" => "0", "id" => "a220ff2d-6e2e-47e8-b77f-6c5761a62e68", "items" => nil, "reference_id" => "capture-DEMO-DAEB6343", "shipping_amount" => "0", "tax_amount" => "0"}], ~U[2026-11-04 05:01:42Z], ~N[2026-11-04 05:01:42], "9216c663-a90d-4f48-a4c5-52fb907d4ef6"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:244 [Wed Nov 4 05:01:42.676000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1009151] [client 127.0.0.1:37894] [TabbySim] capture payment=9216c663-a90d-4f48-a4c5-52fb907d4ef6 status=CLOSED [Wed Nov 4 05:01:42.736000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:37894] QUERY OK db=60.3ms commit [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Wed Nov 4 05:01:42.737000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:37894] QUERY OK source="tabby_sim_webhooks" db=1.0ms idle=459.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["slice9"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Wed Nov 4 05:01:42.738000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1009151] [client 127.0.0.1:37894] [TabbySim] no webhook registered for merchant_code=slice9; event=capture payment=9216c663-a90d-4f48-a4c5-52fb907d4ef6 [Wed Nov 4 05:01:42.740000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:37894] QUERY OK source="tabby_sim_webhooks" db=2.0ms idle=449.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["slice9"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Wed Nov 4 05:01:42.740000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1009151] [client 127.0.0.1:37894] [TabbySim] no webhook registered for merchant_code=slice9; event=close payment=9216c663-a90d-4f48-a4c5-52fb907d4ef6 [Wed Nov 4 05:01:42.741000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:37894] Sent 200 in 73ms [Wed Nov 4 05:01:42.741000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client -] [Tabby] capture post /api/v2/payments/9216c663-a90d-4f48-a4c5-52fb907d4ef6/captures -> 200 (464 ms, attempt 1) [Wed Nov 4 05:01:42.856000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_payments" db=113.0ms queue=0.7ms idle=330.8ms UPDATE `tabby_payments` AS t0 SET t0.`captured_amount` = ?, t0.`captured_at` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [Decimal.new("1050"), ~U[2026-11-04 05:01:42Z], "captured", ~N[2026-11-04 05:01:42], "65d64e34-1186-4fcd-b980-5c0cb0e15bd9", "capturing"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Wed Nov 4 05:01:42.857000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=381.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["65d64e34-1186-4fcd-b980-5c0cb0e15bd9"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:01:42.857000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1009151] [client -] [Tabby] verify: attempt=65d64e34-1186-4fcd-b980-5c0cb0e15bd9 payment=9216c663-a90d-4f48-a4c5-52fb907d4ef6 capturing -> captured [Wed Nov 4 05:01:42.857000 2026] [DaProductApp.Tabby.Capture:info] [pid 1009151] [client -] [Tabby] capture: attempt=65d64e34-1186-4fcd-b980-5c0cb0e15bd9 payment=9216c663-a90d-4f48-a4c5-52fb907d4ef6 is captured [Wed Nov 4 05:01:45.192000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:65160] GET /tabby/demo/status/65d64e34-1186-4fcd-b980-5c0cb0e15bd9 [Wed Nov 4 05:01:45.195000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 115.99.167.137:65160] QUERY OK source="tabby_payments" db=1.4ms idle=853.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["65d64e34-1186-4fcd-b980-5c0cb0e15bd9"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:01:45.195000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:65160] Sent 200 in 2ms [Wed Nov 4 05:01:48.495000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:65160] GET /tabby/demo [Wed Nov 4 05:01:48.495000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:65160] Sent 200 in 647µs [Wed Nov 4 05:01:48.930000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:65160] POST /tabby/demo/summary [Wed Nov 4 05:01:48.930000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:65160] Sent 200 in 674µs [Wed Nov 4 05:01:49.742000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:65160] POST /tabby/demo/eligibility [Wed Nov 4 05:01:50.011000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:43018] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:01:50.011000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 127.0.0.1:43018] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:01:50.013000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:43018] QUERY OK source="tabby_sim_faults" db=1.5ms idle=1672.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:01:50.056000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:43018] QUERY OK db=40.4ms queue=0.6ms idle=1635.9ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["39829256-b8bc-44e6-9633-f824609da5dd", "CREATED", "AED", "f072bc4d-f7d6-4132-95fe-eb480b4d0315", "slice9", ~U[2026-11-04 05:13:50Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:11:50Z], "created", false, ~N[2026-11-04 05:01:50], ~N[2026-11-04 05:01:50]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:01:50.056000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1009151] [client 127.0.0.1:43018] [TabbySim] checkout payment=39829256-b8bc-44e6-9633-f824609da5dd session=f072bc4d-f7d6-4132-95fe-eb480b4d0315 decision=created reason=nil amount=850.00 AED [Wed Nov 4 05:01:50.057000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:43018] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1328.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:01:50.059000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:43018] Sent 200 in 48ms [Wed Nov 4 05:01:50.060000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:65160] [Tabby] checkout post /api/v2/checkout -> 200 (317 ms, attempt 1) [Wed Nov 4 05:01:50.060000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:65160] [Tabby] session created payment=39829256-b8bc-44e6-9633-f824609da5dd [Wed Nov 4 05:01:50.060000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1009151] [client 115.99.167.137:65160] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 05:01:50.060000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:65160] Sent 200 in 317ms [Wed Nov 4 05:01:57.865000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.8ms idle=524.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:01:57Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:01:57.866000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1009151] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:01:57.867000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.5ms idle=527.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:01:57Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:01:57.868000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=528.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:01:57.922000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1009151] [client -] [TabbySim] expiry job 399146 scheduled in 60s (4 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:02:58.203000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=863.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:02:58Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:02:58.204000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1009151] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:02:58.204000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=864.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:02:58Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:02:58.205000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=865.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:02:58.237000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1009151] [client -] [TabbySim] expiry job 399151 scheduled in 60s (4 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:03:27.304000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_payments" db=0.7ms queue=0.5ms idle=1960.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["slice9", ~U[2026-10-17 05:03:27Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:03:27.306000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_payments" db=0.4ms queue=0.7ms idle=1962.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["slice9", ~N[2026-11-04 05:01:27], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:03:27.307000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_payments" db=0.6ms queue=0.4ms idle=1963.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:03:27.309000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_payments" db=0.5ms queue=0.7ms idle=1965.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", ~N[2026-11-04 05:01:27], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:03:27.311000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_payments" db=0.4ms queue=0.8ms idle=1101.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["slice9", ~U[2026-11-04 04:58:27Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:03:27.316000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_webhook_events" db=1.9ms queue=0.5ms idle=971.7ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-04 05:01:27Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Wed Nov 4 05:03:27.320000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_refunds" db=0.5ms queue=0.5ms idle=976.7ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["slice9", ~N[2026-11-04 05:01:27], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Wed Nov 4 05:03:27.321000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_payments" db=0.4ms queue=0.5ms idle=978.1ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:03:27.323000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_payments" db=0.3ms queue=0.7ms idle=110.5ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["slice9", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:03:27.324000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_webhook_events" db=0.4ms queue=0.6ms idle=28.2ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Wed Nov 4 05:03:27.325000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_refunds" db=0.3ms queue=0.5ms idle=19.7ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Wed Nov 4 05:03:27.325000 2026] [DaProductApp.Tabby.Poller:debug] [pid 1009151] [client -] [Tabby] poll: nothing to do; 0 attempt(s) still watched [Wed Nov 4 05:03:30.606000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:60742] GET /tabby/demo/result/success [Wed Nov 4 05:03:30.606000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:60742] Sent 200 in 621µs [Wed Nov 4 05:03:31.050000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:60742] GET /tabby/demo/status/65d64e34-1186-4fcd-b980-5c0cb0e15bd9 [Wed Nov 4 05:03:31.051000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 115.99.167.137:60742] QUERY OK source="tabby_payments" db=0.5ms idle=708.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["65d64e34-1186-4fcd-b980-5c0cb0e15bd9"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:03:31.051000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:60742] Sent 200 in 1ms [Wed Nov 4 05:03:59.464000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1121.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:03:59Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:03:59.464000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1009151] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:03:59.465000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1121.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:03:59Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:03:59.467000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=1122.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:03:59.538000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1009151] [client -] [TabbySim] expiry job 399152 scheduled in 60s (4 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:04:23.053000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:60742] GET /tabby/demo/result/success [Wed Nov 4 05:04:23.053000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:60742] Sent 200 in 499µs [Wed Nov 4 05:04:23.545000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:60742] GET /tabby/demo/status/65d64e34-1186-4fcd-b980-5c0cb0e15bd9 [Wed Nov 4 05:04:23.546000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 115.99.167.137:60742] QUERY OK source="tabby_payments" db=0.5ms queue=0.1ms idle=1092.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["65d64e34-1186-4fcd-b980-5c0cb0e15bd9"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:04:23.546000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:60742] Sent 200 in 1ms [Wed Nov 4 05:04:28.877000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:60742] GET /tabby/demo [Wed Nov 4 05:04:28.878000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:60742] Sent 200 in 897µs [Wed Nov 4 05:04:29.315000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:60742] POST /tabby/demo/summary [Wed Nov 4 05:04:29.315000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:60742] Sent 200 in 675µs [Wed Nov 4 05:04:30.098000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:60742] POST /tabby/demo/eligibility [Wed Nov 4 05:04:30.364000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:34178] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:04:30.364000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 127.0.0.1:34178] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:04:30.365000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:34178] QUERY OK source="tabby_sim_faults" db=0.5ms idle=1021.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:04:30.407000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:34178] QUERY OK db=40.3ms queue=0.8ms idle=1022.9ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["1166b8ca-0775-4752-9b49-083c3a1ac6e2", "CREATED", "AED", "f125a693-ae79-499c-bbbc-801f8100c2c4", "slice9", ~U[2026-11-04 05:16:30Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:14:30Z], "created", false, ~N[2026-11-04 05:04:30], ~N[2026-11-04 05:04:30]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:04:30.407000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1009151] [client 127.0.0.1:34178] [TabbySim] checkout payment=1166b8ca-0775-4752-9b49-083c3a1ac6e2 session=f125a693-ae79-499c-bbbc-801f8100c2c4 decision=created reason=nil amount=850.00 AED [Wed Nov 4 05:04:30.408000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:34178] QUERY OK source="tabby_sim_payments" db=0.5ms idle=932.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:04:30.410000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:34178] Sent 200 in 46ms [Wed Nov 4 05:04:30.410000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:60742] [Tabby] checkout post /api/v2/checkout -> 200 (312 ms, attempt 1) [Wed Nov 4 05:04:30.411000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:60742] [Tabby] session created payment=1166b8ca-0775-4752-9b49-083c3a1ac6e2 [Wed Nov 4 05:04:30.411000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1009151] [client 115.99.167.137:60742] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 05:04:30.411000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:60742] Sent 200 in 313ms [Wed Nov 4 05:04:31.011000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:52095] GET /tabby/demo [Wed Nov 4 05:04:31.013000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:52095] Sent 200 in 1ms [Wed Nov 4 05:04:31.504000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:52095] POST /tabby/demo/summary [Wed Nov 4 05:04:31.505000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:52095] Sent 200 in 713µs [Wed Nov 4 05:04:32.305000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:52095] POST /tabby/demo/eligibility [Wed Nov 4 05:04:32.605000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:34178] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:04:32.606000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 127.0.0.1:34178] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:04:32.607000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:34178] QUERY OK source="tabby_sim_faults" db=0.9ms idle=406.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:04:32.683000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:34178] QUERY OK db=75.1ms queue=0.3ms idle=265.4ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["ac199acd-8e21-42ba-88cb-3ec10c437f57", "CREATED", "AED", "dca38e62-c6aa-4fa4-bc65-b3bbfe7a163c", "slice9", ~U[2026-11-04 05:16:32Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:14:32Z], "created", false, ~N[2026-11-04 05:04:32], ~N[2026-11-04 05:04:32]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:04:32.684000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1009151] [client 127.0.0.1:34178] [TabbySim] checkout payment=ac199acd-8e21-42ba-88cb-3ec10c437f57 session=dca38e62-c6aa-4fa4-bc65-b3bbfe7a163c decision=created reason=nil amount=850.00 AED [Wed Nov 4 05:04:32.684000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:34178] QUERY OK source="tabby_sim_payments" db=0.4ms idle=341.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:04:32.686000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:34178] Sent 200 in 80ms [Wed Nov 4 05:04:32.687000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:52095] [Tabby] checkout post /api/v2/checkout -> 200 (382 ms, attempt 1) [Wed Nov 4 05:04:32.687000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:52095] [Tabby] session created payment=ac199acd-8e21-42ba-88cb-3ec10c437f57 [Wed Nov 4 05:04:32.687000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1009151] [client 115.99.167.137:52095] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 05:04:32.687000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:52095] Sent 200 in 382ms [Wed Nov 4 05:04:33.231000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:52095] GET /tabby/demo [Wed Nov 4 05:04:33.232000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:52095] Sent 200 in 781µs [Wed Nov 4 05:04:33.688000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:52095] POST /tabby/demo/summary [Wed Nov 4 05:04:33.688000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:52095] Sent 200 in 580µs [Wed Nov 4 05:04:34.542000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:52095] POST /tabby/demo/eligibility [Wed Nov 4 05:04:34.812000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:34178] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:04:34.813000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 127.0.0.1:34178] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:04:34.813000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:34178] QUERY OK source="tabby_sim_faults" db=0.4ms idle=522.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:04:34.850000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:34178] QUERY OK db=35.2ms queue=0.3ms idle=472.1ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["ab5998cf-3663-4153-8399-abcd87b38b8d", "CREATED", "AED", "b3f5ba6a-6f21-4872-b20c-59d8d44f61ec", "slice9", ~U[2026-11-04 05:16:34Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:14:34Z], "created", false, ~N[2026-11-04 05:04:34], ~N[2026-11-04 05:04:34]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:04:34.850000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1009151] [client 127.0.0.1:34178] [TabbySim] checkout payment=ab5998cf-3663-4153-8399-abcd87b38b8d session=b3f5ba6a-6f21-4872-b20c-59d8d44f61ec decision=created reason=nil amount=850.00 AED [Wed Nov 4 05:04:34.852000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:34178] QUERY OK source="tabby_sim_payments" db=1.0ms idle=508.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:04:34.854000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:34178] Sent 200 in 41ms [Wed Nov 4 05:04:34.854000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:52095] [Tabby] checkout post /api/v2/checkout -> 200 (312 ms, attempt 1) [Wed Nov 4 05:04:34.854000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:52095] [Tabby] session created payment=ab5998cf-3663-4153-8399-abcd87b38b8d [Wed Nov 4 05:04:34.855000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1009151] [client 115.99.167.137:52095] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 05:04:34.855000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:52095] Sent 200 in 313ms [Wed Nov 4 05:04:37.118000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:52095] GET /tabby/demo [Wed Nov 4 05:04:37.118000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:52095] Sent 200 in 624µs [Wed Nov 4 05:04:37.525000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:52095] POST /tabby/demo/summary [Wed Nov 4 05:04:37.525000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:52095] Sent 200 in 589µs [Wed Nov 4 05:04:38.321000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:52095] POST /tabby/demo/eligibility [Wed Nov 4 05:04:38.556000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:34178] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:04:38.556000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 127.0.0.1:34178] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:04:38.557000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:34178] QUERY OK source="tabby_sim_faults" db=0.4ms idle=343.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:04:38.589000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:34178] QUERY OK db=31.2ms idle=215.3ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["5b5be9f2-6e26-4aac-b8a7-29d338b61f76", "CREATED", "AED", "5ef853af-d6e9-43a0-ac50-a8aa1e7d061f", "slice9", ~U[2026-11-04 05:16:38Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:14:38Z], "created", false, ~N[2026-11-04 05:04:38], ~N[2026-11-04 05:04:38]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:04:38.589000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1009151] [client 127.0.0.1:34178] [TabbySim] checkout payment=5b5be9f2-6e26-4aac-b8a7-29d338b61f76 session=5ef853af-d6e9-43a0-ac50-a8aa1e7d061f decision=created reason=nil amount=850.00 AED [Wed Nov 4 05:04:38.590000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:34178] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.1ms idle=247.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:04:38.592000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:34178] Sent 200 in 36ms [Wed Nov 4 05:04:38.592000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:52095] [Tabby] checkout post /api/v2/checkout -> 200 (271 ms, attempt 1) [Wed Nov 4 05:04:38.592000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:52095] [Tabby] session created payment=5b5be9f2-6e26-4aac-b8a7-29d338b61f76 [Wed Nov 4 05:04:38.593000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1009151] [client 115.99.167.137:52095] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 05:04:38.593000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:52095] Sent 200 in 272ms [Wed Nov 4 05:05:00.791000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=1.7ms idle=447.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:05:00Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:05:00.791000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1009151] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:05:00.794000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=2.6ms idle=449.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:05:00Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:05:00.797000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=453.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:05:00.869000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1009151] [client -] [TabbySim] expiry job 399157 scheduled in 60s (8 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:06:02.137000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1787.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:06:02Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:06:02.137000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1009151] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:06:02.140000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=2.9ms queue=0.1ms idle=1788.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:06:02Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:06:02.142000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms queue=0.1ms idle=1792.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:06:02.182000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1009151] [client -] [TabbySim] expiry job 399160 scheduled in 60s (8 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:07:03.442000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=2.0ms idle=1092.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:07:03Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:07:03.443000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1009151] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:07:03.444000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=1.4ms queue=0.1ms idle=1094.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:07:03Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:07:03.446000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=1096.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:07:03.548000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1009151] [client -] [TabbySim] expiry job 399164 scheduled in 60s (8 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:08:04.499000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=1.8ms idle=1143.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:08:04Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:08:04.500000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1009151] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:08:04.502000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=1.8ms queue=0.1ms idle=1146.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:08:04Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:08:04.504000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=1.5ms idle=1148.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:08:05.631000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1009151] [client -] [TabbySim] expiry job 399167 scheduled in 60s (8 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:08:14.143000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:58541] POST /tabby/demo/eligibility [Wed Nov 4 05:08:14.608000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:62751] POST /tabby/demo/eligibility [Wed Nov 4 05:08:16.482000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:58849] POST /tabby/demo/eligibility [Wed Nov 4 05:08:17.148000 2026] [DaProductApp.Tabby.Client:warn] [pid 1009151] [client 115.99.167.137:58541] [Tabby] checkout /api/v2/checkout failed: kind=timeout status=nil error_type=nil attempt=1 (3002 ms) detail=- [Wed Nov 4 05:08:17.151000 2026] [DaProductApp.Tabby.Eligibility:warn] [pid 1009151] [client 115.99.167.137:58541] [Tabby] eligibility: timeout; showing Tabby (fail-safe) (amount=850.00 AED) [Wed Nov 4 05:08:17.151000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:58541] Sent 200 in 3008ms [Wed Nov 4 05:08:17.338000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:45376] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:08:17.338000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 127.0.0.1:45376] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:08:17.340000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:45376] QUERY OK source="tabby_sim_faults" db=0.8ms idle=986.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:08:17.610000 2026] [DaProductApp.Tabby.Client:warn] [pid 1009151] [client 115.99.167.137:62751] [Tabby] checkout /api/v2/checkout failed: kind=timeout status=nil error_type=nil attempt=1 (3002 ms) detail=- [Wed Nov 4 05:08:17.610000 2026] [DaProductApp.Tabby.Eligibility:warn] [pid 1009151] [client 115.99.167.137:62751] [Tabby] eligibility: timeout; showing Tabby (fail-safe) (amount=850.00 AED) [Wed Nov 4 05:08:17.610000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:62751] Sent 200 in 3002ms [Wed Nov 4 05:08:18.083000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:45380] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:08:18.083000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 127.0.0.1:45380] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:08:18.084000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:45380] QUERY OK source="tabby_sim_faults" db=0.5ms idle=1731.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:08:18.494000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:45376] QUERY OK db=1150.4ms queue=2.3ms idle=988.6ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["034b5ff0-81e9-473a-a7d0-47e3157f39dc", "CREATED", "AED", "7437cf48-0dbd-4d0c-b849-5d1e2b26d0bd", "slice9", ~U[2026-11-04 05:20:17Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:18:17Z], "created", false, ~N[2026-11-04 05:08:17], ~N[2026-11-04 05:08:17]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:08:18.494000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1009151] [client 127.0.0.1:45376] [TabbySim] checkout payment=034b5ff0-81e9-473a-a7d0-47e3157f39dc session=7437cf48-0dbd-4d0c-b849-5d1e2b26d0bd decision=created reason=nil amount=850.00 AED [Wed Nov 4 05:08:18.496000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:45376] QUERY OK source="tabby_sim_payments" db=1.1ms queue=0.1ms idle=410.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:08:18.498000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:45376] Sent 200 in 1160ms [Wed Nov 4 05:08:19.270000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:45380] QUERY OK db=1184.3ms queue=0.2ms idle=1687.7ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["f08025bc-4d7b-4b12-91a3-128cb02317f3", "CREATED", "AED", "be8315c5-2540-4d3a-b8af-6921ab4f29a7", "slice9", ~U[2026-11-04 05:20:18Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:18:18Z], "created", false, ~N[2026-11-04 05:08:18], ~N[2026-11-04 05:08:18]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:08:19.270000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1009151] [client 127.0.0.1:45380] [TabbySim] checkout payment=f08025bc-4d7b-4b12-91a3-128cb02317f3 session=be8315c5-2540-4d3a-b8af-6921ab4f29a7 decision=created reason=nil amount=850.00 AED [Wed Nov 4 05:08:19.272000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:45380] QUERY OK source="tabby_sim_payments" db=1.0ms queue=0.2ms idle=777.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:08:19.273000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:45380] Sent 200 in 1190ms [Wed Nov 4 05:08:19.355000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:45392] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:08:19.355000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 127.0.0.1:45392] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:08:19.363000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:45392] QUERY OK source="tabby_sim_faults" db=7.0ms idle=861.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:08:19.405000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:58541] POST /tabby/demo/eligibility [Wed Nov 4 05:08:19.485000 2026] [DaProductApp.Tabby.Client:warn] [pid 1009151] [client 115.99.167.137:58849] [Tabby] checkout /api/v2/checkout failed: kind=timeout status=nil error_type=nil attempt=1 (3002 ms) detail=- [Wed Nov 4 05:08:19.485000 2026] [DaProductApp.Tabby.Eligibility:warn] [pid 1009151] [client 115.99.167.137:58849] [Tabby] eligibility: timeout; showing Tabby (fail-safe) (amount=850.00 AED) [Wed Nov 4 05:08:19.485000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:58849] Sent 200 in 3003ms [Wed Nov 4 05:08:20.218000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:45392] QUERY OK db=851.8ms queue=1.9ms idle=868.6ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["4ed5fc89-16f4-4535-92d1-c2b1ad707546", "CREATED", "AED", "e832fa0a-cba0-4bab-857a-e02a1c8cf418", "slice9", ~U[2026-11-04 05:20:19Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:18:19Z], "created", false, ~N[2026-11-04 05:08:19], ~N[2026-11-04 05:08:19]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:08:20.219000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1009151] [client 127.0.0.1:45392] [TabbySim] checkout payment=4ed5fc89-16f4-4535-92d1-c2b1ad707546 session=e832fa0a-cba0-4bab-857a-e02a1c8cf418 decision=created reason=nil amount=850.00 AED [Wed Nov 4 05:08:20.221000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:45392] QUERY OK source="tabby_sim_payments" db=1.5ms idle=949.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:08:20.229000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:45392] Sent 200 in 874ms [Wed Nov 4 05:08:20.309000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:62751] POST /tabby/demo/eligibility [Wed Nov 4 05:08:21.580000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:51294] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:08:21.580000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 127.0.0.1:51294] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:08:21.581000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51294] QUERY OK source="tabby_sim_faults" db=0.5ms idle=226.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:08:22.203000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51294] QUERY OK db=620.2ms queue=0.8ms idle=226.9ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`rejection_reason`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["44323a33-7648-4ba5-8107-00d6111520fb", "CREATED", "AED", "ef8248a4-fb20-41bd-86b7-fb0cd0d12341", "slice9", ~U[2026-11-04 05:20:21Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), "not_available", %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:18:21Z], "rejected", false, ~N[2026-11-04 05:08:21], ~N[2026-11-04 05:08:21]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:08:22.203000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1009151] [client 127.0.0.1:51294] [TabbySim] checkout payment=44323a33-7648-4ba5-8107-00d6111520fb session=ef8248a4-fb20-41bd-86b7-fb0cd0d12341 decision=rejected reason="not_available" amount=850.00 AED [Wed Nov 4 05:08:22.204000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51294] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.1ms idle=848.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:08:22.206000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:51294] Sent 200 in 626ms [Wed Nov 4 05:08:22.207000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:58541] [Tabby] checkout post /api/v2/checkout -> 200 (2801 ms, attempt 1) [Wed Nov 4 05:08:22.207000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:58541] [Tabby] session rejected by pre-scoring (business outcome) reason=not_available [Wed Nov 4 05:08:22.207000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1009151] [client 115.99.167.137:58541] [Tabby] eligibility: hide reason=not_available (amount=850.00 AED) [Wed Nov 4 05:08:22.207000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:58541] Sent 200 in 2801ms [Wed Nov 4 05:08:22.288000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:58849] POST /tabby/demo/eligibility [Wed Nov 4 05:08:22.288000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:51310] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:08:22.289000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 127.0.0.1:51310] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:08:22.290000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51310] QUERY OK source="tabby_sim_faults" db=1.1ms queue=0.1ms idle=795.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:08:22.867000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51310] QUERY OK db=575.1ms queue=0.5ms idle=713.6ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`rejection_reason`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["84a1484f-8685-4644-9bd8-c2e4e9f8fd04", "CREATED", "AED", "f2c48e6c-3539-4ebe-a46b-353b24e5fc6c", "slice9", ~U[2026-11-04 05:20:22Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), "not_available", %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:18:22Z], "rejected", false, ~N[2026-11-04 05:08:22], ~N[2026-11-04 05:08:22]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:08:22.869000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1009151] [client 127.0.0.1:51310] [TabbySim] checkout payment=84a1484f-8685-4644-9bd8-c2e4e9f8fd04 session=f2c48e6c-3539-4ebe-a46b-353b24e5fc6c decision=rejected reason="not_available" amount=850.00 AED [Wed Nov 4 05:08:22.870000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51310] QUERY OK source="tabby_sim_payments" db=0.8ms idle=666.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:08:22.873000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:51310] Sent 200 in 584ms [Wed Nov 4 05:08:22.874000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:62751] [Tabby] checkout post /api/v2/checkout -> 200 (2564 ms, attempt 1) [Wed Nov 4 05:08:22.874000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:62751] [Tabby] session rejected by pre-scoring (business outcome) reason=not_available [Wed Nov 4 05:08:22.874000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1009151] [client 115.99.167.137:62751] [Tabby] eligibility: hide reason=not_available (amount=850.00 AED) [Wed Nov 4 05:08:22.874000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:62751] Sent 200 in 2565ms [Wed Nov 4 05:08:22.952000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:52810] POST /tabby/demo/summary [Wed Nov 4 05:08:22.953000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:52810] Sent 200 in 717µs [Wed Nov 4 05:08:23.505000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:51294] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:08:23.505000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 127.0.0.1:51294] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:08:23.506000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51294] QUERY OK source="tabby_sim_faults" db=0.6ms idle=638.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:08:24.997000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51294] QUERY OK db=1490.3ms idle=636.4ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["af959582-b3a5-48f7-be35-52bf339cee46", "CREATED", "AED", "7243e30a-796a-4f04-bab0-ca7a8b8ec72c", "slice9", ~U[2026-11-04 05:20:23Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:18:23Z], "created", false, ~N[2026-11-04 05:08:23], ~N[2026-11-04 05:08:23]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:08:24.997000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1009151] [client 127.0.0.1:51294] [TabbySim] checkout payment=af959582-b3a5-48f7-be35-52bf339cee46 session=7243e30a-796a-4f04-bab0-ca7a8b8ec72c decision=created reason=nil amount=850.00 AED [Wed Nov 4 05:08:24.999000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51294] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1645.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:08:25.001000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:51294] Sent 200 in 1496ms [Wed Nov 4 05:08:25.002000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:58849] [Tabby] checkout post /api/v2/checkout -> 200 (2713 ms, attempt 1) [Wed Nov 4 05:08:25.002000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:58849] [Tabby] session created payment=af959582-b3a5-48f7-be35-52bf339cee46 [Wed Nov 4 05:08:25.002000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1009151] [client 115.99.167.137:58849] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 05:08:25.002000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:58849] Sent 200 in 2713ms [Wed Nov 4 05:08:25.082000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:62751] POST /tabby/demo/summary [Wed Nov 4 05:08:25.082000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:62751] Sent 200 in 508µs [Wed Nov 4 05:08:27.024000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:62751] POST /tabby/demo/eligibility [Wed Nov 4 05:08:27.791000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:51310] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:08:27.791000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 127.0.0.1:51310] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:08:27.792000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51310] QUERY OK source="tabby_sim_faults" db=0.7ms idle=542.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:08:28.201000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51310] QUERY OK db=407.6ms idle=440.9ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["8cf61cc0-9ce9-4f6e-865d-1f16671de738", "CREATED", "AED", "8e8c4e25-5776-4126-8ba1-11c260433087", "slice9", ~U[2026-11-04 05:20:27Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("5000.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:18:27Z], "created", false, ~N[2026-11-04 05:08:27], ~N[2026-11-04 05:08:27]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:08:28.201000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1009151] [client 127.0.0.1:51310] [TabbySim] checkout payment=8cf61cc0-9ce9-4f6e-865d-1f16671de738 session=8e8c4e25-5776-4126-8ba1-11c260433087 decision=created reason=nil amount=5000.00 AED [Wed Nov 4 05:08:28.203000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51310] QUERY OK source="tabby_sim_payments" db=1.6ms idle=849.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:08:28.205000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:51310] Sent 200 in 413ms [Wed Nov 4 05:08:28.205000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:62751] [Tabby] checkout post /api/v2/checkout -> 200 (1180 ms, attempt 1) [Wed Nov 4 05:08:28.206000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:62751] [Tabby] session created payment=8cf61cc0-9ce9-4f6e-865d-1f16671de738 [Wed Nov 4 05:08:28.206000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1009151] [client 115.99.167.137:62751] [Tabby] eligibility: show (amount=5000.00 AED) [Wed Nov 4 05:08:28.206000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:62751] Sent 200 in 1182ms [Wed Nov 4 05:08:28.287000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:58849] POST /tabby/demo/summary [Wed Nov 4 05:08:28.287000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:58849] Sent 200 in 600µs [Wed Nov 4 05:08:29.563000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:52810] POST /tabby/demo/summary [Wed Nov 4 05:08:29.564000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:52810] Sent 200 in 802µs [Wed Nov 4 05:08:31.237000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:52810] POST /tabby/demo/eligibility [Wed Nov 4 05:08:32.098000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:51294] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:08:32.099000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 127.0.0.1:51294] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:08:32.100000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51294] QUERY OK source="tabby_sim_faults" db=0.7ms idle=1356.6ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:08:32.376000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51294] QUERY OK db=275.0ms queue=0.4ms idle=1272.2ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`rejection_reason`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`rejection_reason_code`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["6c10c9b1-9498-4954-bf01-1978247d3915", "CREATED", "AED", "3bcdcd3a-be11-4cc7-9a8f-59bd6ea48abf", "slice9", ~U[2026-11-04 05:20:32Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("5095.00"), "order_amount_too_high", %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], "not_enough_limit", ~U[2026-11-04 05:18:32Z], "rejected", false, ~N[2026-11-04 05:08:32], ~N[2026-11-04 05:08:32]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:08:32.377000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1009151] [client 127.0.0.1:51294] [TabbySim] checkout payment=6c10c9b1-9498-4954-bf01-1978247d3915 session=3bcdcd3a-be11-4cc7-9a8f-59bd6ea48abf decision=rejected reason="order_amount_too_high" amount=5095.00 AED [Wed Nov 4 05:08:32.379000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51294] QUERY OK source="tabby_sim_payments" db=1.9ms queue=0.2ms idle=1024.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:08:32.382000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:51294] Sent 200 in 283ms [Wed Nov 4 05:08:32.383000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:52810] [Tabby] checkout post /api/v2/checkout -> 200 (1145 ms, attempt 1) [Wed Nov 4 05:08:32.383000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:52810] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Wed Nov 4 05:08:32.383000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1009151] [client 115.99.167.137:52810] [Tabby] eligibility: hide reason=order_amount_too_high (amount=5095.00 AED) [Wed Nov 4 05:08:32.383000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:52810] Sent 200 in 1145ms [Wed Nov 4 05:08:33.141000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:58849] POST /tabby/demo/eligibility [Wed Nov 4 05:08:33.657000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:51310] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:08:33.657000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 127.0.0.1:51310] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:08:33.658000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51310] QUERY OK source="tabby_sim_faults" db=0.4ms idle=1281.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:08:34.264000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51310] QUERY OK db=605.3ms idle=1279.1ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`rejection_reason`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["db3809ba-f95f-4c29-ae09-c8662dee527c", "CREATED", "AED", "f2863af6-997c-4242-9d21-0046fb1e9f13", "slice9", ~U[2026-11-04 05:20:33Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("5095.00"), "not_available", %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:18:33Z], "rejected", false, ~N[2026-11-04 05:08:33], ~N[2026-11-04 05:08:33]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:08:34.264000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1009151] [client 127.0.0.1:51310] [TabbySim] checkout payment=db3809ba-f95f-4c29-ae09-c8662dee527c session=f2863af6-997c-4242-9d21-0046fb1e9f13 decision=rejected reason="not_available" amount=5095.00 AED [Wed Nov 4 05:08:34.633000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51310] QUERY OK source="tabby_sim_payments" db=368.1ms idle=1801.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:08:34.637000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:51310] Sent 200 in 980ms [Wed Nov 4 05:08:34.638000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:58849] [Tabby] checkout post /api/v2/checkout -> 200 (1496 ms, attempt 1) [Wed Nov 4 05:08:34.639000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:58849] [Tabby] session rejected by pre-scoring (business outcome) reason=not_available [Wed Nov 4 05:08:34.639000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1009151] [client 115.99.167.137:58849] [Tabby] eligibility: hide reason=not_available (amount=5095.00 AED) [Wed Nov 4 05:08:34.639000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:58849] Sent 200 in 1498ms [Wed Nov 4 05:08:37.431000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:58849] POST /tabby/demo/eligibility [Wed Nov 4 05:08:38.041000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:51294] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:08:38.042000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 127.0.0.1:51294] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:08:38.044000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51294] QUERY OK source="tabby_sim_faults" db=2.2ms queue=0.1ms idle=1689.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:08:38.309000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51294] QUERY OK db=262.8ms queue=0.4ms idle=1693.0ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`rejection_reason`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`rejection_reason_code`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["cf529b3b-bac5-4728-aefd-11d1a3151d8f", "CREATED", "AED", "3155cfd2-0aef-48b0-85d8-663cdfae4e76", "slice9", ~U[2026-11-04 05:20:38Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("5095.00"), "order_amount_too_high", %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], "not_enough_limit", ~U[2026-11-04 05:18:38Z], "rejected", false, ~N[2026-11-04 05:08:38], ~N[2026-11-04 05:08:38]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:08:38.309000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1009151] [client 127.0.0.1:51294] [TabbySim] checkout payment=cf529b3b-bac5-4728-aefd-11d1a3151d8f session=3155cfd2-0aef-48b0-85d8-663cdfae4e76 decision=rejected reason="order_amount_too_high" amount=5095.00 AED [Wed Nov 4 05:08:38.310000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51294] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1311.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:08:38.311000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:51294] Sent 200 in 270ms [Wed Nov 4 05:08:38.312000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:58849] [Tabby] checkout post /api/v2/checkout -> 200 (881 ms, attempt 1) [Wed Nov 4 05:08:38.312000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:58849] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Wed Nov 4 05:08:38.312000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1009151] [client 115.99.167.137:58849] [Tabby] eligibility: hide reason=order_amount_too_high (amount=5095.00 AED) [Wed Nov 4 05:08:38.312000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:58849] Sent 200 in 881ms [Wed Nov 4 05:08:42.012000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:58849] POST /tabby/demo/summary [Wed Nov 4 05:08:42.012000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:58849] Sent 200 in 517µs [Wed Nov 4 05:08:43.628000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:58849] POST /tabby/demo/eligibility [Wed Nov 4 05:08:44.008000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:52810] POST /tabby/demo/summary [Wed Nov 4 05:08:44.008000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:52810] Sent 200 in 505µs [Wed Nov 4 05:08:44.107000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:51310] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:08:44.107000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 127.0.0.1:51310] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:08:44.108000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51310] QUERY OK source="tabby_sim_faults" db=0.4ms idle=926.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:08:44.589000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51310] QUERY OK db=480.0ms queue=0.3ms idle=815.9ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["cdab2343-746a-4f38-b778-c38d55b8e99d", "CREATED", "AED", "56513c51-fc2e-42c8-8dc7-05be0ce334fe", "slice9", ~U[2026-11-04 05:20:44Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:18:44Z], "created", false, ~N[2026-11-04 05:08:44], ~N[2026-11-04 05:08:44]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:08:44.589000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1009151] [client 127.0.0.1:51310] [TabbySim] checkout payment=cdab2343-746a-4f38-b778-c38d55b8e99d session=56513c51-fc2e-42c8-8dc7-05be0ce334fe decision=created reason=nil amount=850.00 AED [Wed Nov 4 05:08:44.591000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51310] QUERY OK source="tabby_sim_payments" db=1.6ms idle=1237.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:08:44.593000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:51310] Sent 200 in 486ms [Wed Nov 4 05:08:44.594000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:58849] [Tabby] checkout post /api/v2/checkout -> 200 (966 ms, attempt 1) [Wed Nov 4 05:08:44.594000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:58849] [Tabby] session created payment=cdab2343-746a-4f38-b778-c38d55b8e99d [Wed Nov 4 05:08:44.594000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1009151] [client 115.99.167.137:58849] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 05:08:44.595000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:58849] Sent 200 in 967ms [Wed Nov 4 05:08:45.516000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:52810] POST /tabby/demo/eligibility [Wed Nov 4 05:08:46.768000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:51294] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:08:46.769000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 127.0.0.1:51294] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:08:46.771000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51294] QUERY OK source="tabby_sim_faults" db=1.0ms idle=1417.6ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:08:47.066000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51294] QUERY OK db=294.2ms idle=1419.5ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["e55e5ee7-e03a-4d8c-9bfe-9661cdca43c3", "CREATED", "AED", "063b77d6-0021-4ab7-86ea-477a1651875c", "slice9", ~U[2026-11-04 05:20:46Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("5000.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:18:46Z], "created", false, ~N[2026-11-04 05:08:46], ~N[2026-11-04 05:08:46]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:08:47.066000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1009151] [client 127.0.0.1:51294] [TabbySim] checkout payment=e55e5ee7-e03a-4d8c-9bfe-9661cdca43c3 session=063b77d6-0021-4ab7-86ea-477a1651875c decision=created reason=nil amount=5000.00 AED [Wed Nov 4 05:08:47.067000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51294] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.2ms idle=1714.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:08:47.074000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:51294] Sent 200 in 305ms [Wed Nov 4 05:08:47.075000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:52810] [Tabby] checkout post /api/v2/checkout -> 200 (1559 ms, attempt 1) [Wed Nov 4 05:08:47.075000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:52810] [Tabby] session created payment=e55e5ee7-e03a-4d8c-9bfe-9661cdca43c3 [Wed Nov 4 05:08:47.076000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1009151] [client 115.99.167.137:52810] [Tabby] eligibility: show (amount=5000.00 AED) [Wed Nov 4 05:08:47.076000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:52810] Sent 200 in 1559ms [Wed Nov 4 05:08:47.098000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:58849] POST /tabby/demo/summary [Wed Nov 4 05:08:47.098000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:58849] Sent 200 in 514µs [Wed Nov 4 05:08:48.108000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:62751] POST /tabby/demo/summary [Wed Nov 4 05:08:48.108000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:62751] Sent 200 in 585µs [Wed Nov 4 05:08:49.248000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:62751] POST /tabby/demo/eligibility [Wed Nov 4 05:08:49.849000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:51310] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:08:49.850000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 127.0.0.1:51310] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:08:49.851000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51310] QUERY OK source="tabby_sim_faults" db=0.7ms idle=1497.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:08:49.947000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51310] QUERY OK db=94.0ms queue=0.5ms idle=1499.6ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`rejection_reason`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`rejection_reason_code`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["7181b110-5a20-4d77-807c-d1be264c7ae6", "CREATED", "AED", "88533fb2-c9d7-41be-aae2-99cb537c9a79", "slice9", ~U[2026-11-04 05:20:49Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("5095.00"), "order_amount_too_high", %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], "not_enough_limit", ~U[2026-11-04 05:18:49Z], "rejected", false, ~N[2026-11-04 05:08:49], ~N[2026-11-04 05:08:49]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:08:49.947000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1009151] [client 127.0.0.1:51310] [TabbySim] checkout payment=7181b110-5a20-4d77-807c-d1be264c7ae6 session=88533fb2-c9d7-41be-aae2-99cb537c9a79 decision=rejected reason="order_amount_too_high" amount=5095.00 AED [Wed Nov 4 05:08:49.948000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51310] QUERY OK source="tabby_sim_payments" db=1.3ms idle=1056.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:08:49.951000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:51310] Sent 200 in 101ms [Wed Nov 4 05:08:49.954000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:62751] [Tabby] checkout post /api/v2/checkout -> 200 (706 ms, attempt 1) [Wed Nov 4 05:08:49.954000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:62751] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Wed Nov 4 05:08:49.954000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1009151] [client 115.99.167.137:62751] [Tabby] eligibility: hide reason=order_amount_too_high (amount=5095.00 AED) [Wed Nov 4 05:08:49.955000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:62751] Sent 200 in 707ms [Wed Nov 4 05:08:52.396000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:62751] POST /tabby/demo/eligibility [Wed Nov 4 05:08:53.210000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:51294] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:08:53.210000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 127.0.0.1:51294] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:08:53.212000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51294] QUERY OK source="tabby_sim_faults" db=1.5ms idle=1858.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:08:53.425000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51294] QUERY OK db=211.3ms queue=0.3ms idle=1860.2ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`rejection_reason`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`rejection_reason_code`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["0955d3f8-6d3c-48af-981e-34e209192c46", "CREATED", "AED", "c0895fc0-8d6a-4659-89d5-1d950a8ff04c", "slice9", ~U[2026-11-04 05:20:53Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("5095.00"), "order_amount_too_high", %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], "not_enough_limit", ~U[2026-11-04 05:18:53Z], "rejected", false, ~N[2026-11-04 05:08:53], ~N[2026-11-04 05:08:53]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:08:53.425000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1009151] [client 127.0.0.1:51294] [TabbySim] checkout payment=0955d3f8-6d3c-48af-981e-34e209192c46 session=c0895fc0-8d6a-4659-89d5-1d950a8ff04c decision=rejected reason="order_amount_too_high" amount=5095.00 AED [Wed Nov 4 05:08:53.426000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51294] QUERY OK source="tabby_sim_payments" db=1.3ms idle=694.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:08:53.429000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:51294] Sent 200 in 219ms [Wed Nov 4 05:08:53.430000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:62751] [Tabby] checkout post /api/v2/checkout -> 200 (1034 ms, attempt 1) [Wed Nov 4 05:08:53.430000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:62751] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Wed Nov 4 05:08:53.431000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1009151] [client 115.99.167.137:62751] [Tabby] eligibility: hide reason=order_amount_too_high (amount=5095.00 AED) [Wed Nov 4 05:08:53.431000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:62751] Sent 200 in 1035ms [Wed Nov 4 05:08:57.656000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:62751] POST /tabby/demo/eligibility [Wed Nov 4 05:08:58.988000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:51310] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:08:58.989000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 127.0.0.1:51310] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:08:58.990000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51310] QUERY OK source="tabby_sim_faults" db=0.5ms idle=1636.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:08:59.497000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51310] QUERY OK db=505.9ms idle=1638.4ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`rejection_reason`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["a58bf0f4-d125-4195-8393-f558b14a1d3a", "CREATED", "AED", "4f9f5474-79a5-4ac6-9119-91778a22deb2", "slice9", ~U[2026-11-04 05:20:58Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("5095.00"), "not_available", %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:18:58Z], "rejected", false, ~N[2026-11-04 05:08:58], ~N[2026-11-04 05:08:58]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:08:59.497000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1009151] [client 127.0.0.1:51310] [TabbySim] checkout payment=a58bf0f4-d125-4195-8393-f558b14a1d3a session=4f9f5474-79a5-4ac6-9119-91778a22deb2 decision=rejected reason="not_available" amount=5095.00 AED [Wed Nov 4 05:08:59.498000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:51310] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1145.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:08:59.500000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:51310] Sent 200 in 511ms [Wed Nov 4 05:08:59.501000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:62751] [Tabby] checkout post /api/v2/checkout -> 200 (1844 ms, attempt 1) [Wed Nov 4 05:08:59.501000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:62751] [Tabby] session rejected by pre-scoring (business outcome) reason=not_available [Wed Nov 4 05:08:59.501000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1009151] [client 115.99.167.137:62751] [Tabby] eligibility: hide reason=not_available (amount=5095.00 AED) [Wed Nov 4 05:08:59.501000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:62751] Sent 200 in 1844ms [Wed Nov 4 05:09:07.105000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=1.7ms idle=1750.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:09:07Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:09:07.105000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1009151] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:09:07.107000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=2.0ms idle=1752.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:09:07Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:09:07.108000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1755.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:09:07.610000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1009151] [client -] [TabbySim] expiry job 399168 scheduled in 60s (23 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:10:08.502000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1147.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:10:08Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:10:08.502000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1009151] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:10:08.504000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=1.4ms idle=1146.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:10:08Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:10:08.505000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=150.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:10:08.578000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1009151] [client -] [TabbySim] expiry job 399174 scheduled in 60s (23 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:10:39.456000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="global_table" db=1.1ms idle=1084.8ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 05:11:09.669000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=1314.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:11:09Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:11:09.670000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1009151] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:11:09.672000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=1.5ms idle=1316.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:11:09Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:11:09.673000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1318.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:11:09.721000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1009151] [client -] [TabbySim] expiry job 399175 scheduled in 60s (23 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:11:28.076000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1009151] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 05:11:28.081000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1009151] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 05:11:28.082000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1009151] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 05:11:28.083000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1009151] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_controller.ex [Wed Nov 4 05:11:28.083000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1009151] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_controller.ex [Wed Nov 4 05:11:28.084000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1009151] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_controller.ex [Wed Nov 4 05:11:32.543000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:50964] GET /tabby/demo [Wed Nov 4 05:11:32.552000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:50964] Sent 200 in 8ms [Wed Nov 4 05:11:33.047000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:50964] POST /tabby/demo/summary [Wed Nov 4 05:11:33.048000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:50964] Sent 200 in 1ms [Wed Nov 4 05:11:33.968000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:50964] POST /tabby/demo/eligibility [Wed Nov 4 05:11:34.383000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:43758] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:11:34.383000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 127.0.0.1:43758] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:11:34.384000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:43758] QUERY OK source="tabby_sim_faults" db=0.5ms idle=1024.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:11:34.433000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:43758] QUERY OK db=46.9ms queue=1.0ms idle=1025.5ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`rejection_reason`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`rejection_reason_code`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["8bbabfa2-3c17-4549-afd1-27d9abc73f15", "CREATED", "AED", "cf5df62d-90f5-4cea-b5bf-59c0974e66f2", "slice9", ~U[2026-11-04 05:23:34Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("5095.00"), "order_amount_too_high", %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], "not_enough_limit", ~U[2026-11-04 05:21:34Z], "rejected", false, ~N[2026-11-04 05:11:34], ~N[2026-11-04 05:11:34]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:11:34.433000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1009151] [client 127.0.0.1:43758] [TabbySim] checkout payment=8bbabfa2-3c17-4549-afd1-27d9abc73f15 session=cf5df62d-90f5-4cea-b5bf-59c0974e66f2 decision=rejected reason="order_amount_too_high" amount=5095.00 AED [Wed Nov 4 05:11:34.436000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:43758] QUERY OK source="tabby_sim_payments" db=1.2ms idle=1075.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:11:34.438000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:43758] Sent 200 in 54ms [Wed Nov 4 05:11:34.441000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:50964] [Tabby] checkout post /api/v2/checkout -> 200 (472 ms, attempt 1) [Wed Nov 4 05:11:34.441000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:50964] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Wed Nov 4 05:11:34.442000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1009151] [client 115.99.167.137:50964] [Tabby] eligibility: hide reason=order_amount_too_high (amount=5095.00 AED) [Wed Nov 4 05:11:34.442000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:50964] Sent 200 in 474ms [Wed Nov 4 05:12:10.120000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1740.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:12:10Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:12:10.120000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1009151] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:12:10.121000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.1ms idle=1741.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:12:10Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:12:10.122000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1086.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:12:10.162000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1009151] [client -] [TabbySim] expiry job 399181 scheduled in 47s (24 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:12:26.477000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:50964] POST /tabby/demo/summary [Wed Nov 4 05:12:26.478000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:50964] Sent 200 in 777µs [Wed Nov 4 05:12:27.352000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:50964] POST /tabby/demo/eligibility [Wed Nov 4 05:12:27.613000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:43758] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:12:27.613000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 127.0.0.1:43758] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:12:27.614000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:43758] QUERY OK source="tabby_sim_faults" db=0.5ms queue=0.1ms idle=382.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:12:27.690000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:43758] QUERY OK db=74.7ms queue=0.1ms idle=236.5ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["04090ac9-9dd7-404d-a498-f43887a42fd5", "CREATED", "AED", "061aeee4-52a3-49a1-922f-62c8a06acf30", "slice9", ~U[2026-11-04 05:24:27Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:22:27Z], "created", false, ~N[2026-11-04 05:12:27], ~N[2026-11-04 05:12:27]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:12:27.690000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1009151] [client 127.0.0.1:43758] [TabbySim] checkout payment=04090ac9-9dd7-404d-a498-f43887a42fd5 session=061aeee4-52a3-49a1-922f-62c8a06acf30 decision=created reason=nil amount=850.00 AED [Wed Nov 4 05:12:27.691000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:43758] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.4ms idle=312.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:12:27.693000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:43758] Sent 200 in 80ms [Wed Nov 4 05:12:27.694000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:50964] [Tabby] checkout post /api/v2/checkout -> 200 (342 ms, attempt 1) [Wed Nov 4 05:12:27.694000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:50964] [Tabby] session created payment=04090ac9-9dd7-404d-a498-f43887a42fd5 [Wed Nov 4 05:12:27.694000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1009151] [client 115.99.167.137:50964] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 05:12:27.694000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:50964] Sent 200 in 342ms [Wed Nov 4 05:12:30.410000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:50964] POST /tabby/demo/summary [Wed Nov 4 05:12:30.410000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:50964] Sent 200 in 656µs [Wed Nov 4 05:12:31.264000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:50964] POST /tabby/demo/eligibility [Wed Nov 4 05:12:31.570000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:43758] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:12:31.570000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 127.0.0.1:43758] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1500.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:12:31.571000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:43758] QUERY OK source="tabby_sim_faults" db=0.6ms idle=539.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:12:31.642000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:43758] QUERY OK db=69.8ms idle=473.8ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["6a38ca2f-357f-48ed-811b-444e9ed81088", "CREATED", "AED", "42d3a6a1-7030-4359-8963-53089589c26d", "slice9", ~U[2026-11-04 05:24:31Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1500.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("1500.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:22:31Z], "created", false, ~N[2026-11-04 05:12:31], ~N[2026-11-04 05:12:31]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:12:31.642000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1009151] [client 127.0.0.1:43758] [TabbySim] checkout payment=6a38ca2f-357f-48ed-811b-444e9ed81088 session=42d3a6a1-7030-4359-8963-53089589c26d decision=created reason=nil amount=1500.00 AED [Wed Nov 4 05:12:31.643000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:43758] QUERY OK source="tabby_sim_payments" db=0.9ms idle=527.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:12:31.645000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:43758] Sent 200 in 75ms [Wed Nov 4 05:12:31.645000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:50964] [Tabby] checkout post /api/v2/checkout -> 200 (379 ms, attempt 1) [Wed Nov 4 05:12:31.645000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:50964] [Tabby] session created payment=6a38ca2f-357f-48ed-811b-444e9ed81088 [Wed Nov 4 05:12:31.646000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1009151] [client 115.99.167.137:50964] [Tabby] eligibility: show (amount=1500.00 AED) [Wed Nov 4 05:12:31.646000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:50964] Sent 200 in 381ms [Wed Nov 4 05:12:58.319000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=935.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:12:58Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:12:58.371000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=50.6ms queue=0.8ms idle=936.4ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:12:58], true, "2e867305-85aa-40e0-aeb4-75c9bfbc6017", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:12:58.371000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1009151] [client -] [TabbySim] payment=2e867305-85aa-40e0-aeb4-75c9bfbc6017 CREATED -> EXPIRED [Wed Nov 4 05:12:58.373000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=1.6ms idle=988.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["2e867305-85aa-40e0-aeb4-75c9bfbc6017"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:12:58.373000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1009151] [client -] [TabbySim] webhook not sent: event=expire payment=2e867305-85aa-40e0-aeb4-75c9bfbc6017 [Wed Nov 4 05:12:58.379000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1009151] [client -] [TabbySim] payment=2e867305-85aa-40e0-aeb4-75c9bfbc6017 expired (expires_at 2026-11-04 05:12:57Z, session_status=created) [Wed Nov 4 05:12:58.380000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms queue=0.1ms idle=996.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:12:58Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:12:58.381000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1009151] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:12:58.382000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=998.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:12:58Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:12:58.383000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=999.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:12:58.425000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1009151] [client -] [TabbySim] expiry job 399182 scheduled in 12s (25 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:13:08.325000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:50964] POST /tabby/demo/place [Wed Nov 4 05:13:08.360000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 115.99.167.137:50964] QUERY OK db=34.2ms queue=0.4ms idle=1943.0ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`order_reference`,`amount`,`needs_attention`,`success_url`,`cancel_url`,`failure_url`,`captured_amount`,`refunded_amount`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["a72d4c88-3e87-45cb-a593-dc2e47594fc1", "new", "AED", "slice9", "DEMO-EF06ED6A", Decimal.new("1500.00"), false, "http://78.47.213.209:4030/tabby/demo/result/success?lang=en&order=DEMO-EF06ED6A", "http://78.47.213.209:4030/tabby/demo/result/cancel?lang=en&order=DEMO-EF06ED6A", "http://78.47.213.209:4030/tabby/demo/result/failure?lang=en&order=DEMO-EF06ED6A", Decimal.new("0"), Decimal.new("0"), ~N[2026-11-04 05:13:08], ~N[2026-11-04 05:13:08]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Wed Nov 4 05:13:08.603000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:54380] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:13:08.604000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 127.0.0.1:54380] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "en", "merchant_code" => "slice9", "merchant_urls" => %{"cancel" => "http://78.47.213.209:4030/tabby/return/a72d4c88-3e87-45cb-a593-dc2e47594fc1/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/a72d4c88-3e87-45cb-a593-dc2e47594fc1/failure", "success" => "http://78.47.213.209:4030/tabby/return/a72d4c88-3e87-45cb-a593-dc2e47594fc1/success"}, "payment" => %{"amount" => "1500.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 2, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-EF06ED6A"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:13:08.605000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:54380] QUERY OK source="tabby_sim_faults" db=0.5ms idle=1221.6ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:13:08.680000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:54380] QUERY OK db=73.7ms queue=0.4ms idle=472.8ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`lang`,`amount`,`buyer`,`buyer_history`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`shipping_address`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["7adcaa48-f399-4919-9c2b-18aca3ff250a", "CREATED", "AED", "cbca51bb-2529-4983-afb8-10afd3aa07df", "slice9", ~U[2026-11-04 05:25:08Z], %{"lang" => "en", "merchant_code" => "slice9", "merchant_urls" => %{"cancel" => "http://78.47.213.209:4030/tabby/return/a72d4c88-3e87-45cb-a593-dc2e47594fc1/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/a72d4c88-3e87-45cb-a593-dc2e47594fc1/failure", "success" => "http://78.47.213.209:4030/tabby/return/a72d4c88-3e87-45cb-a593-dc2e47594fc1/success"}, "payment" => %{"amount" => "1500.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 2, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-EF06ED6A"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "0", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 2, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo headphones", "unit_price" => "650"}, %{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo smartwatch", "unit_price" => "200"}], "reference_id" => "DEMO-EF06ED6A", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "en", Decimal.new("1500.00"), %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, %{"registered_since" => "2023-02-01T10:00:00Z"}, [], true, %{"cancel" => "http://78.47.213.209:4030/tabby/return/a72d4c88-3e87-45cb-a593-dc2e47594fc1/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/a72d4c88-3e87-45cb-a593-dc2e47594fc1/failure", "success" => "http://78.47.213.209:4030/tabby/return/a72d4c88-3e87-45cb-a593-dc2e47594fc1/success"}, [], ~U[2026-11-04 05:23:08Z], "created", %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}, false, ~N[2026-11-04 05:13:08], ~N[2026-11-04 05:13:08]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:13:08.680000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1009151] [client 127.0.0.1:54380] [TabbySim] checkout payment=7adcaa48-f399-4919-9c2b-18aca3ff250a session=cbca51bb-2529-4983-afb8-10afd3aa07df decision=created reason=nil amount=1500.00 AED [Wed Nov 4 05:13:08.681000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:54380] QUERY OK source="tabby_sim_payments" db=0.6ms idle=464.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:13:08.683000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:54380] Sent 200 in 79ms [Wed Nov 4 05:13:08.684000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:50964] [Tabby] checkout post /api/v2/checkout -> 200 (323 ms, attempt 1) [Wed Nov 4 05:13:08.684000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:50964] [Tabby] session created payment=7adcaa48-f399-4919-9c2b-18aca3ff250a [Wed Nov 4 05:13:08.685000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 115.99.167.137:50964] QUERY OK source="tabby_payments" db=0.7ms idle=324.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["a72d4c88-3e87-45cb-a593-dc2e47594fc1"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Wed Nov 4 05:13:08.737000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 115.99.167.137:50964] QUERY OK source="tabby_payments" db=50.6ms queue=0.3ms idle=303.5ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-04 05:33:08Z], "7adcaa48-f399-4919-9c2b-18aca3ff250a", "cbca51bb-2529-4983-afb8-10afd3aa07df", ~N[2026-11-04 05:13:08], "a72d4c88-3e87-45cb-a593-dc2e47594fc1"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Wed Nov 4 05:13:08.737000 2026] [DaProductApp.Tabby.Sessions:info] [pid 1009151] [client 115.99.167.137:50964] [Tabby] session created attempt=a72d4c88-3e87-45cb-a593-dc2e47594fc1 payment=7adcaa48-f399-4919-9c2b-18aca3ff250a [Wed Nov 4 05:13:08.784000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:50964] Sent 200 in 459ms [Wed Nov 4 05:13:09.217000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:50964] GET /tabby-sim/hpp/cbca51bb-2529-4983-afb8-10afd3aa07df [Wed Nov 4 05:13:09.217000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 115.99.167.137:50964] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "cbca51bb-2529-4983-afb8-10afd3aa07df"} Pipelines: [:tabby_sim_hpp] [Wed Nov 4 05:13:09.219000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 115.99.167.137:50964] QUERY OK source="tabby_sim_payments" db=1.5ms idle=612.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["cbca51bb-2529-4983-afb8-10afd3aa07df"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Wed Nov 4 05:13:09.220000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:50964] Sent 200 in 2ms [Wed Nov 4 05:13:11.405000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=1020.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:13:11Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:13:11.493000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=87.4ms idle=1023.1ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:13:11], true, "919c2c76-f4b1-464d-962a-99c8196d454e", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:13:11.493000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1009151] [client -] [TabbySim] payment=919c2c76-f4b1-464d-962a-99c8196d454e CREATED -> EXPIRED [Wed Nov 4 05:13:11.494000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1111.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["919c2c76-f4b1-464d-962a-99c8196d454e"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:13:11.495000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1009151] [client -] [TabbySim] webhook not sent: event=expire payment=919c2c76-f4b1-464d-962a-99c8196d454e [Wed Nov 4 05:13:11.495000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1009151] [client -] [TabbySim] payment=919c2c76-f4b1-464d-962a-99c8196d454e expired (expires_at 2026-11-04 05:13:10Z, session_status=created) [Wed Nov 4 05:13:11.574000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=79.1ms idle=1112.4ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:13:11], true, "bee07bde-78b8-4aee-a04a-f626b40768fd", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:13:11.574000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1009151] [client -] [TabbySim] payment=bee07bde-78b8-4aee-a04a-f626b40768fd CREATED -> EXPIRED [Wed Nov 4 05:13:11.575000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.1ms idle=1192.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["bee07bde-78b8-4aee-a04a-f626b40768fd"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:13:11.575000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1009151] [client -] [TabbySim] webhook not sent: event=expire payment=bee07bde-78b8-4aee-a04a-f626b40768fd [Wed Nov 4 05:13:11.576000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1009151] [client -] [TabbySim] payment=bee07bde-78b8-4aee-a04a-f626b40768fd expired (expires_at 2026-11-04 05:13:11Z, session_status=created) [Wed Nov 4 05:13:11.577000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1193.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:13:11Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:13:11.577000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1009151] [client -] [TabbySim] expiry job: 2 payment(s) were due [Wed Nov 4 05:13:11.578000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1194.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:13:11Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:13:11.579000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=256.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:13:11.655000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1009151] [client -] [TabbySim] expiry job 399184 scheduled in 39s (24 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:13:15.309000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:50964] POST /tabby-sim/hpp/cbca51bb-2529-4983-afb8-10afd3aa07df [Wed Nov 4 05:13:15.310000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 115.99.167.137:50964] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "approve", "otp" => "7890", "session_id" => "cbca51bb-2529-4983-afb8-10afd3aa07df"} Pipelines: [:tabby_sim_hpp] [Wed Nov 4 05:13:15.311000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 115.99.167.137:50964] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.1ms idle=1927.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["cbca51bb-2529-4983-afb8-10afd3aa07df"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Wed Nov 4 05:13:15.311000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:50964] Sent 200 in 2ms [Wed Nov 4 05:13:18.688000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:50964] POST /tabby-sim/hpp/cbca51bb-2529-4983-afb8-10afd3aa07df [Wed Nov 4 05:13:18.689000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 115.99.167.137:50964] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "reject", "otp" => "", "session_id" => "cbca51bb-2529-4983-afb8-10afd3aa07df"} Pipelines: [:tabby_sim_hpp] [Wed Nov 4 05:13:18.690000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 115.99.167.137:50964] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1306.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["cbca51bb-2529-4983-afb8-10afd3aa07df"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Wed Nov 4 05:13:18.714000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 115.99.167.137:50964] QUERY OK source="tabby_sim_payments" db=23.3ms idle=1307.5ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["REJECTED", ~N[2026-11-04 05:13:18], "7adcaa48-f399-4919-9c2b-18aca3ff250a", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:13:18.714000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1009151] [client 115.99.167.137:50964] [TabbySim] payment=7adcaa48-f399-4919-9c2b-18aca3ff250a CREATED -> REJECTED [Wed Nov 4 05:13:18.716000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 115.99.167.137:50964] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1331.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["7adcaa48-f399-4919-9c2b-18aca3ff250a"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:13:18.717000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 115.99.167.137:50964] QUERY OK source="tabby_sim_webhooks" db=0.9ms idle=1332.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["slice9"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Wed Nov 4 05:13:18.717000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1009151] [client 115.99.167.137:50964] [TabbySim] no webhook registered for merchant_code=slice9; event=reject payment=7adcaa48-f399-4919-9c2b-18aca3ff250a [Wed Nov 4 05:13:18.717000 2026] [DaProductApp.TabbySim.Hpp:info] [pid 1009151] [client 115.99.167.137:50964] [TabbySim] hpp payment=7adcaa48-f399-4919-9c2b-18aca3ff250a action=reject status=REJECTED [Wed Nov 4 05:13:18.718000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:50964] Sent 302 in 29ms [Wed Nov 4 05:13:19.133000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:50964] GET /tabby/return/a72d4c88-3e87-45cb-a593-dc2e47594fc1/failure [Wed Nov 4 05:13:19.134000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 115.99.167.137:50964] QUERY OK source="tabby_payments" db=0.6ms idle=750.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["a72d4c88-3e87-45cb-a593-dc2e47594fc1"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:13:19.188000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:50964] Sent 302 in 55ms [Wed Nov 4 05:13:19.266000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=575.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["a72d4c88-3e87-45cb-a593-dc2e47594fc1"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:13:19.517000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:54380] GET /tabby-sim/api/v2/payments/7adcaa48-f399-4919-9c2b-18aca3ff250a [Wed Nov 4 05:13:19.517000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 127.0.0.1:54380] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "7adcaa48-f399-4919-9c2b-18aca3ff250a"} Pipelines: [:tabby_sim_api] [Wed Nov 4 05:13:19.519000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:54380] QUERY OK source="tabby_sim_faults" db=1.2ms idle=383.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "7adcaa48-f399-4919-9c2b-18aca3ff250a"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 05:13:19.520000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:54380] QUERY OK source="tabby_sim_faults" db=0.5ms idle=383.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:13:19.522000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:54380] QUERY OK source="tabby_sim_payments" db=1.2ms idle=332.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["7adcaa48-f399-4919-9c2b-18aca3ff250a"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Wed Nov 4 05:13:19.522000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:54380] Sent 200 in 5ms [Wed Nov 4 05:13:19.523000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client -] [Tabby] retrieve get /api/v2/payments/7adcaa48-f399-4919-9c2b-18aca3ff250a -> 200 (257 ms, attempt 1) [Wed Nov 4 05:13:19.616000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_payments" db=92.1ms queue=0.3ms idle=258.7ms UPDATE `tabby_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["rejected", ~N[2026-11-04 05:13:19], "a72d4c88-3e87-45cb-a593-dc2e47594fc1", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Wed Nov 4 05:13:19.618000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_payments" db=0.9ms idle=351.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["a72d4c88-3e87-45cb-a593-dc2e47594fc1"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:13:19.618000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1009151] [client -] [Tabby] verify: attempt=a72d4c88-3e87-45cb-a593-dc2e47594fc1 payment=7adcaa48-f399-4919-9c2b-18aca3ff250a created -> rejected [Wed Nov 4 05:13:19.712000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:50964] GET /tabby/demo/result/failure [Wed Nov 4 05:13:19.712000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:50964] Sent 200 in 578µs [Wed Nov 4 05:13:51.548000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=1.4ms idle=1159.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:13:51Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:13:51.593000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=44.7ms idle=1161.0ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:13:51], true, "39829256-b8bc-44e6-9633-f824609da5dd", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:13:51.594000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1009151] [client -] [TabbySim] payment=39829256-b8bc-44e6-9633-f824609da5dd CREATED -> EXPIRED [Wed Nov 4 05:13:51.595000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1134.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["39829256-b8bc-44e6-9633-f824609da5dd"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:13:51.595000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1009151] [client -] [TabbySim] webhook not sent: event=expire payment=39829256-b8bc-44e6-9633-f824609da5dd [Wed Nov 4 05:13:51.595000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1009151] [client -] [TabbySim] payment=39829256-b8bc-44e6-9633-f824609da5dd expired (expires_at 2026-11-04 05:13:50Z, session_status=created) [Wed Nov 4 05:13:51.596000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=207.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:13:51Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:13:51.597000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1009151] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:13:51.598000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=1.3ms idle=209.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:13:51Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:13:51.599000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=210.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:13:51.643000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1009151] [client -] [TabbySim] expiry job 399186 scheduled in 60s (22 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:14:52.854000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1466.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:14:52Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:14:52.855000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1009151] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:14:52.856000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1467.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:14:52Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:14:52.856000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1468.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:14:52.928000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1009151] [client -] [TabbySim] expiry job 399189 scheduled in 60s (22 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:15:09.106000 2026] [Bandit.Logger:error] [pid 1009151] [client -] ** (Bandit.TransportError) Unrecoverable error: timeout [Wed Nov 4 05:15:09.999000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_payments" db=1.2ms idle=1610.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["slice9", ~U[2026-10-17 05:15:09Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:15:10.001000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_payments" db=1.6ms idle=1612.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["slice9", ~N[2026-11-04 05:13:09], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:15:10.005000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_payments" db=2.5ms queue=0.2ms idle=1614.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:15:10.007000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_payments" db=1.6ms queue=0.1ms idle=1617.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", ~N[2026-11-04 05:13:09], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:15:10.010000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_payments" db=1.8ms queue=0.3ms idle=1619.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["slice9", ~U[2026-11-04 05:10:09Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:15:10.012000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_webhook_events" db=1.3ms idle=1622.5ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-04 05:13:09Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Wed Nov 4 05:15:10.015000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_refunds" db=2.0ms idle=1126.1ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["slice9", ~N[2026-11-04 05:13:09], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Wed Nov 4 05:15:10.016000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_payments" db=1.0ms queue=0.1ms idle=628.1ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:15:10.018000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_payments" db=1.0ms idle=123.9ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["slice9", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:15:10.019000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_webhook_events" db=0.8ms idle=20.2ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Wed Nov 4 05:15:10.021000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_refunds" db=1.6ms idle=19.6ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Wed Nov 4 05:15:10.021000 2026] [DaProductApp.Tabby.Poller:debug] [pid 1009151] [client -] [Tabby] poll: nothing to do; 0 attempt(s) still watched [Wed Nov 4 05:15:12.805000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:57386] GET /tabby/demo/result/failure [Wed Nov 4 05:15:12.805000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:57386] Sent 200 in 619µs [Wed Nov 4 05:15:15.823000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:57386] GET /tabby/demo [Wed Nov 4 05:15:15.825000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:57386] Sent 200 in 2ms [Wed Nov 4 05:15:16.318000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:57386] POST /tabby/demo/summary [Wed Nov 4 05:15:16.319000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:57386] Sent 200 in 589µs [Wed Nov 4 05:15:17.166000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:57386] POST /tabby/demo/eligibility [Wed Nov 4 05:15:17.468000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:54154] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:15:17.468000 2026] [Phoenix.Logger:debug] [pid 1009151] [client 127.0.0.1:54154] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1500.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:15:17.469000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:54154] QUERY OK source="tabby_sim_faults" db=0.5ms idle=972.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:15:17.533000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:54154] QUERY OK db=62.6ms idle=552.8ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["86e6b45c-03cf-4930-8279-6ffac3e4c990", "CREATED", "AED", "a34c4f96-c7a2-4078-a915-4f1e73fa00c6", "slice9", ~U[2026-11-04 05:27:17Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1500.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("1500.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:25:17Z], "created", false, ~N[2026-11-04 05:15:17], ~N[2026-11-04 05:15:17]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:15:17.533000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1009151] [client 127.0.0.1:54154] [TabbySim] checkout payment=86e6b45c-03cf-4930-8279-6ffac3e4c990 session=a34c4f96-c7a2-4078-a915-4f1e73fa00c6 decision=created reason=nil amount=1500.00 AED [Wed Nov 4 05:15:17.534000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client 127.0.0.1:54154] QUERY OK source="tabby_sim_payments" db=0.7ms idle=581.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:15:17.535000 2026] [Phoenix.Logger:info] [pid 1009151] [client 127.0.0.1:54154] Sent 200 in 67ms [Wed Nov 4 05:15:17.536000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:57386] [Tabby] checkout post /api/v2/checkout -> 200 (370 ms, attempt 1) [Wed Nov 4 05:15:17.536000 2026] [DaProductApp.Tabby.Client:info] [pid 1009151] [client 115.99.167.137:57386] [Tabby] session created payment=86e6b45c-03cf-4930-8279-6ffac3e4c990 [Wed Nov 4 05:15:17.536000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1009151] [client 115.99.167.137:57386] [Tabby] eligibility: show (amount=1500.00 AED) [Wed Nov 4 05:15:17.537000 2026] [Phoenix.Logger:info] [pid 1009151] [client 115.99.167.137:57386] Sent 200 in 371ms [Wed Nov 4 05:15:53.109000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1721.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:15:53Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:15:53.110000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1009151] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:15:53.110000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1722.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:15:53Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:15:53.111000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.1ms idle=1723.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:15:53.143000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1009151] [client -] [TabbySim] expiry job 399193 scheduled in 37s (23 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:16:31.299000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1909.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:16:31Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:16:31.357000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=57.7ms queue=0.1ms idle=1081.0ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:16:31], true, "1166b8ca-0775-4752-9b49-083c3a1ac6e2", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:16:31.357000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1009151] [client -] [TabbySim] payment=1166b8ca-0775-4752-9b49-083c3a1ac6e2 CREATED -> EXPIRED [Wed Nov 4 05:16:31.359000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=1.3ms queue=0.1ms idle=969.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["1166b8ca-0775-4752-9b49-083c3a1ac6e2"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:16:31.359000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1009151] [client -] [TabbySim] webhook not sent: event=expire payment=1166b8ca-0775-4752-9b49-083c3a1ac6e2 [Wed Nov 4 05:16:31.359000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1009151] [client -] [TabbySim] payment=1166b8ca-0775-4752-9b49-083c3a1ac6e2 expired (expires_at 2026-11-04 05:16:30Z, session_status=created) [Wed Nov 4 05:16:31.361000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=971.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:16:31Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:16:31.361000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1009151] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:16:31.362000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=973.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:16:31Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:16:31.363000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=974.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:16:31.436000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1009151] [client -] [TabbySim] expiry job 399197 scheduled in 1s (22 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:16:33.324000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1738.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:16:33Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:16:33.371000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=45.6ms idle=1101.0ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:16:33], true, "ac199acd-8e21-42ba-88cb-3ec10c437f57", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:16:33.371000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1009151] [client -] [TabbySim] payment=ac199acd-8e21-42ba-88cb-3ec10c437f57 CREATED -> EXPIRED [Wed Nov 4 05:16:33.373000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=1.4ms idle=982.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["ac199acd-8e21-42ba-88cb-3ec10c437f57"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:16:33.373000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1009151] [client -] [TabbySim] webhook not sent: event=expire payment=ac199acd-8e21-42ba-88cb-3ec10c437f57 [Wed Nov 4 05:16:33.373000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1009151] [client -] [TabbySim] payment=ac199acd-8e21-42ba-88cb-3ec10c437f57 expired (expires_at 2026-11-04 05:16:32Z, session_status=created) [Wed Nov 4 05:16:33.374000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=984.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:16:33Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:16:33.375000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1009151] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:16:33.377000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=2.4ms idle=985.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:16:33Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:16:33.379000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=1.4ms idle=988.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:16:33.424000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1009151] [client -] [TabbySim] expiry job 399199 scheduled in 1s (21 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:16:35.331000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=1796.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:16:35Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:16:35.365000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=32.8ms idle=1101.7ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:16:35], true, "ab5998cf-3663-4153-8399-abcd87b38b8d", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:16:35.365000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1009151] [client -] [TabbySim] payment=ab5998cf-3663-4153-8399-abcd87b38b8d CREATED -> EXPIRED [Wed Nov 4 05:16:35.366000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=976.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["ab5998cf-3663-4153-8399-abcd87b38b8d"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:16:35.366000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1009151] [client -] [TabbySim] webhook not sent: event=expire payment=ab5998cf-3663-4153-8399-abcd87b38b8d [Wed Nov 4 05:16:35.366000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1009151] [client -] [TabbySim] payment=ab5998cf-3663-4153-8399-abcd87b38b8d expired (expires_at 2026-11-04 05:16:34Z, session_status=created) [Wed Nov 4 05:16:35.368000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=978.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:16:35Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:16:35.368000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1009151] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:16:35.369000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=979.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:16:35Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:16:35.370000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=980.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:16:35.423000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1009151] [client -] [TabbySim] expiry job 399200 scheduled in 3s (20 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:16:40.393000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1003.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:16:40Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:16:40.426000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=32.4ms idle=1005.1ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:16:40], true, "5b5be9f2-6e26-4aac-b8a7-29d338b61f76", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:16:40.426000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1009151] [client -] [TabbySim] payment=5b5be9f2-6e26-4aac-b8a7-29d338b61f76 CREATED -> EXPIRED [Wed Nov 4 05:16:40.428000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=168.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["5b5be9f2-6e26-4aac-b8a7-29d338b61f76"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:16:40.428000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1009151] [client -] [TabbySim] webhook not sent: event=expire payment=5b5be9f2-6e26-4aac-b8a7-29d338b61f76 [Wed Nov 4 05:16:40.428000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1009151] [client -] [TabbySim] payment=5b5be9f2-6e26-4aac-b8a7-29d338b61f76 expired (expires_at 2026-11-04 05:16:38Z, session_status=created) [Wed Nov 4 05:16:40.430000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.2ms idle=40.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:16:40Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:16:40.430000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1009151] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:16:40.431000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=41.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:16:40Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:16:40.432000 2026] [Ecto.Adapters.SQL:debug] [pid 1009151] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=43.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:16:40.478000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1009151] [client -] [TabbySim] expiry job 399201 scheduled in 60s (19 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:16:52.786000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="global_table" db=0.4ms queue=4.5ms idle=70.6ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 05:16:52.940000 2026] [Bandit:info] [pid 1026202] [client -] Running DaProductAppWeb.Endpoint with Bandit 1.6.7 at 0.0.0.0:4030 (http) [Wed Nov 4 05:16:52.942000 2026] [DaProductApp.MQTT.Handler:info] [pid 1026202] [client -] Device phoenix_client_node_devteam connected [Wed Nov 4 05:16:52.954000 2026] [Phoenix.Endpoint.Supervisor:info] [pid 1026202] [client -] Access DaProductAppWeb.Endpoint at http://localhost:4030 [Wed Nov 4 05:16:54.525000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1026202] [client -] Live reload: priv/static/assets/app.js [Wed Nov 4 05:16:54.552000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1026202] [client -] Live reload: priv/static/assets/app.js [Wed Nov 4 05:16:54.553000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1026202] [client -] Live reload: priv/static/assets/app.js [Wed Nov 4 05:16:56.299000 2026] [Phoenix.Logger:info] [pid 1026202] [client 115.99.167.137:63779] GET /tabby/demo [Wed Nov 4 05:16:56.388000 2026] [Phoenix.Logger:info] [pid 1026202] [client 115.99.167.137:63779] Sent 200 in 89ms [Wed Nov 4 05:16:56.902000 2026] [Phoenix.Logger:info] [pid 1026202] [client 115.99.167.137:63779] POST /tabby/demo/summary [Wed Nov 4 05:16:56.913000 2026] [Phoenix.Logger:info] [pid 1026202] [client 115.99.167.137:63779] Sent 200 in 11ms [Wed Nov 4 05:16:57.924000 2026] [Phoenix.Logger:info] [pid 1026202] [client 115.99.167.137:63779] POST /tabby/demo/eligibility [Wed Nov 4 05:16:58.250000 2026] [Phoenix.Logger:info] [pid 1026202] [client 127.0.0.1:47066] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:16:58.253000 2026] [Phoenix.Logger:debug] [pid 1026202] [client 127.0.0.1:47066] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1500.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:16:58.266000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client 127.0.0.1:47066] QUERY OK source="tabby_sim_faults" db=0.9ms queue=0.5ms idle=1604.2ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:16:58.337000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client 127.0.0.1:47066] QUERY OK db=34.6ms queue=0.6ms idle=1631.8ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["fe0d6ed2-7459-4d87-8fe8-2f8e297f4cd8", "CREATED", "AED", "5b96961e-2178-4d9a-a075-c97899be216b", "slice9", ~U[2026-11-04 05:28:58Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1500.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("1500.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:26:58Z], "created", false, ~N[2026-11-04 05:16:58], ~N[2026-11-04 05:16:58]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:16:58.341000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1026202] [client 127.0.0.1:47066] [TabbySim] checkout payment=fe0d6ed2-7459-4d87-8fe8-2f8e297f4cd8 session=5b96961e-2178-4d9a-a075-c97899be216b decision=created reason=nil amount=1500.00 AED [Wed Nov 4 05:16:58.348000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client 127.0.0.1:47066] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.4ms idle=1642.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:16:58.360000 2026] [Phoenix.Logger:info] [pid 1026202] [client 127.0.0.1:47066] Sent 200 in 110ms [Wed Nov 4 05:16:58.369000 2026] [DaProductApp.Tabby.Client:info] [pid 1026202] [client 115.99.167.137:63779] [Tabby] checkout post /api/v2/checkout -> 200 (435 ms, attempt 1) [Wed Nov 4 05:16:58.371000 2026] [DaProductApp.Tabby.Client:info] [pid 1026202] [client 115.99.167.137:63779] [Tabby] session created payment=fe0d6ed2-7459-4d87-8fe8-2f8e297f4cd8 [Wed Nov 4 05:16:58.371000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1026202] [client 115.99.167.137:63779] [Tabby] eligibility: show (amount=1500.00 AED) [Wed Nov 4 05:16:58.371000 2026] [Phoenix.Logger:info] [pid 1026202] [client 115.99.167.137:63779] Sent 200 in 447ms [Wed Nov 4 05:17:00.367000 2026] [Phoenix.Logger:info] [pid 1026202] [client 115.99.167.137:63779] GET /tabby/demo [Wed Nov 4 05:17:00.369000 2026] [Phoenix.Logger:info] [pid 1026202] [client 115.99.167.137:63779] Sent 200 in 2ms [Wed Nov 4 05:17:00.907000 2026] [Phoenix.Logger:info] [pid 1026202] [client 115.99.167.137:63779] POST /tabby/demo/summary [Wed Nov 4 05:17:00.908000 2026] [Phoenix.Logger:info] [pid 1026202] [client 115.99.167.137:63779] Sent 200 in 934µs [Wed Nov 4 05:17:01.736000 2026] [Phoenix.Logger:info] [pid 1026202] [client 115.99.167.137:63779] POST /tabby/demo/eligibility [Wed Nov 4 05:17:02.127000 2026] [Phoenix.Logger:info] [pid 1026202] [client 127.0.0.1:47066] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:17:02.127000 2026] [Phoenix.Logger:debug] [pid 1026202] [client 127.0.0.1:47066] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1500.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:17:02.129000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client 127.0.0.1:47066] QUERY OK source="tabby_sim_faults" db=0.9ms idle=1329.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:17:02.165000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client 127.0.0.1:47066] QUERY OK db=35.7ms idle=623.9ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["ff442c58-e726-4c69-9fa5-e60c1d0d5220", "CREATED", "AED", "30a1b4e9-860f-4156-8f83-d0b87719009d", "slice9", ~U[2026-11-04 05:29:02Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1500.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("1500.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:27:02Z], "created", false, ~N[2026-11-04 05:17:02], ~N[2026-11-04 05:17:02]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:17:02.166000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1026202] [client 127.0.0.1:47066] [TabbySim] checkout payment=ff442c58-e726-4c69-9fa5-e60c1d0d5220 session=30a1b4e9-860f-4156-8f83-d0b87719009d decision=created reason=nil amount=1500.00 AED [Wed Nov 4 05:17:02.170000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client 127.0.0.1:47066] QUERY OK source="tabby_sim_payments" db=1.3ms queue=2.7ms idle=576.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:17:02.173000 2026] [Phoenix.Logger:info] [pid 1026202] [client 127.0.0.1:47066] Sent 200 in 46ms [Wed Nov 4 05:17:02.175000 2026] [DaProductApp.Tabby.Client:info] [pid 1026202] [client 115.99.167.137:63779] [Tabby] checkout post /api/v2/checkout -> 200 (438 ms, attempt 1) [Wed Nov 4 05:17:02.175000 2026] [DaProductApp.Tabby.Client:info] [pid 1026202] [client 115.99.167.137:63779] [Tabby] session created payment=ff442c58-e726-4c69-9fa5-e60c1d0d5220 [Wed Nov 4 05:17:02.176000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1026202] [client 115.99.167.137:63779] [Tabby] eligibility: show (amount=1500.00 AED) [Wed Nov 4 05:17:02.176000 2026] [Phoenix.Logger:info] [pid 1026202] [client 115.99.167.137:63779] Sent 200 in 440ms [Wed Nov 4 05:17:41.020000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.5ms idle=1358.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:17:41Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:17:41.021000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1026202] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:17:41.022000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.6ms idle=1360.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:17:41Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:17:41.023000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1362.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:17:41.061000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1026202] [client -] [TabbySim] expiry job 399204 scheduled in 60s (21 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:17:54.915000 2026] [Phoenix.Logger:info] [pid 1026202] [client 115.99.167.137:63779] POST /tabby/demo/summary [Wed Nov 4 05:17:54.916000 2026] [Phoenix.Logger:info] [pid 1026202] [client 115.99.167.137:63779] Sent 200 in 943µs [Wed Nov 4 05:17:55.713000 2026] [Phoenix.Logger:info] [pid 1026202] [client 115.99.167.137:63779] POST /tabby/demo/eligibility [Wed Nov 4 05:17:55.972000 2026] [Phoenix.Logger:info] [pid 1026202] [client 127.0.0.1:47066] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:17:55.972000 2026] [Phoenix.Logger:debug] [pid 1026202] [client 127.0.0.1:47066] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:17:55.974000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client 127.0.0.1:47066] QUERY OK source="tabby_sim_faults" db=0.8ms queue=0.3ms idle=1312.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:17:56.015000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client 127.0.0.1:47066] QUERY OK db=39.4ms queue=0.4ms idle=1314.0ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["6a7aa26b-e323-4135-9df6-164381c4263f", "CREATED", "AED", "770e45e7-09ea-47f7-aa97-51325c21d97e", "slice9", ~U[2026-11-04 05:29:55Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:27:55Z], "created", false, ~N[2026-11-04 05:17:55], ~N[2026-11-04 05:17:55]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:17:56.015000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1026202] [client 127.0.0.1:47066] [TabbySim] checkout payment=6a7aa26b-e323-4135-9df6-164381c4263f session=770e45e7-09ea-47f7-aa97-51325c21d97e decision=created reason=nil amount=850.00 AED [Wed Nov 4 05:17:56.017000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client 127.0.0.1:47066] QUERY OK source="tabby_sim_payments" db=1.0ms queue=0.1ms idle=1312.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:17:56.019000 2026] [Phoenix.Logger:info] [pid 1026202] [client 127.0.0.1:47066] Sent 200 in 46ms [Wed Nov 4 05:17:56.019000 2026] [DaProductApp.Tabby.Client:info] [pid 1026202] [client 115.99.167.137:63779] [Tabby] checkout post /api/v2/checkout -> 200 (306 ms, attempt 1) [Wed Nov 4 05:17:56.019000 2026] [DaProductApp.Tabby.Client:info] [pid 1026202] [client 115.99.167.137:63779] [Tabby] session created payment=6a7aa26b-e323-4135-9df6-164381c4263f [Wed Nov 4 05:17:56.020000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1026202] [client 115.99.167.137:63779] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 05:17:56.020000 2026] [Phoenix.Logger:info] [pid 1026202] [client 115.99.167.137:63779] Sent 200 in 306ms [Wed Nov 4 05:18:42.274000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=1073.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:18:42Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:18:42.274000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1026202] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:18:42.275000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1071.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:18:42Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:18:42.276000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=615.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:18:42.331000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1026202] [client -] [TabbySim] expiry job 399207 scheduled in 60s (22 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:18:55.509000 2026] [Phoenix.Logger:info] [pid 1026202] [client 115.99.167.137:63779] POST /tabby/demo/place [Wed Nov 4 05:18:55.548000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client 115.99.167.137:63779] QUERY OK db=23.7ms queue=0.5ms idle=1863.4ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`order_reference`,`amount`,`needs_attention`,`success_url`,`cancel_url`,`failure_url`,`captured_amount`,`refunded_amount`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["87a6c559-0bd8-4d45-85c1-f812c212379b", "new", "AED", "slice9", "DEMO-A3D54B27", Decimal.new("850.00"), false, "http://78.47.213.209:4030/tabby/demo/result/success?lang=en&order=DEMO-A3D54B27", "http://78.47.213.209:4030/tabby/demo/result/cancel?lang=en&order=DEMO-A3D54B27", "http://78.47.213.209:4030/tabby/demo/result/failure?lang=en&order=DEMO-A3D54B27", Decimal.new("0"), Decimal.new("0"), ~N[2026-11-04 05:18:55], ~N[2026-11-04 05:18:55]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Wed Nov 4 05:18:55.798000 2026] [Phoenix.Logger:info] [pid 1026202] [client 127.0.0.1:38790] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:18:55.802000 2026] [Phoenix.Logger:debug] [pid 1026202] [client 127.0.0.1:38790] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "en", "merchant_code" => "slice9", "merchant_urls" => %{"cancel" => "http://78.47.213.209:4030/tabby/return/87a6c559-0bd8-4d45-85c1-f812c212379b/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/87a6c559-0bd8-4d45-85c1-f812c212379b/failure", "success" => "http://78.47.213.209:4030/tabby/return/87a6c559-0bd8-4d45-85c1-f812c212379b/success"}, "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-A3D54B27"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:18:55.803000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client 127.0.0.1:38790] QUERY OK source="tabby_sim_faults" db=1.0ms idle=1142.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:18:55.846000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client 127.0.0.1:38790] QUERY OK db=40.8ms queue=0.7ms idle=559.9ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`lang`,`amount`,`buyer`,`buyer_history`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`shipping_address`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["4afac367-44d4-4b89-8bad-062add04f09d", "CREATED", "AED", "39b42425-e3f4-4f16-a4d8-7a71d81dfeb9", "slice9", ~U[2026-11-04 05:30:55Z], %{"lang" => "en", "merchant_code" => "slice9", "merchant_urls" => %{"cancel" => "http://78.47.213.209:4030/tabby/return/87a6c559-0bd8-4d45-85c1-f812c212379b/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/87a6c559-0bd8-4d45-85c1-f812c212379b/failure", "success" => "http://78.47.213.209:4030/tabby/return/87a6c559-0bd8-4d45-85c1-f812c212379b/success"}, "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-A3D54B27"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "0", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo headphones", "unit_price" => "650"}, %{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo smartwatch", "unit_price" => "200"}], "reference_id" => "DEMO-A3D54B27", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "en", Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, %{"registered_since" => "2023-02-01T10:00:00Z"}, [], true, %{"cancel" => "http://78.47.213.209:4030/tabby/return/87a6c559-0bd8-4d45-85c1-f812c212379b/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/87a6c559-0bd8-4d45-85c1-f812c212379b/failure", "success" => "http://78.47.213.209:4030/tabby/return/87a6c559-0bd8-4d45-85c1-f812c212379b/success"}, [], ~U[2026-11-04 05:28:55Z], "created", %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}, false, ~N[2026-11-04 05:18:55], ~N[2026-11-04 05:18:55]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:18:55.847000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1026202] [client 127.0.0.1:38790] [TabbySim] checkout payment=4afac367-44d4-4b89-8bad-062add04f09d session=39b42425-e3f4-4f16-a4d8-7a71d81dfeb9 decision=created reason=nil amount=850.00 AED [Wed Nov 4 05:18:55.848000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client 127.0.0.1:38790] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.1ms idle=601.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:18:55.851000 2026] [Phoenix.Logger:info] [pid 1026202] [client 127.0.0.1:38790] Sent 200 in 53ms [Wed Nov 4 05:18:55.852000 2026] [DaProductApp.Tabby.Client:info] [pid 1026202] [client 115.99.167.137:63779] [Tabby] checkout post /api/v2/checkout -> 200 (304 ms, attempt 1) [Wed Nov 4 05:18:55.852000 2026] [DaProductApp.Tabby.Client:info] [pid 1026202] [client 115.99.167.137:63779] [Tabby] session created payment=4afac367-44d4-4b89-8bad-062add04f09d [Wed Nov 4 05:18:55.854000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client 115.99.167.137:63779] QUERY OK source="tabby_payments" db=0.5ms queue=0.5ms idle=304.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["87a6c559-0bd8-4d45-85c1-f812c212379b"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Wed Nov 4 05:18:55.908000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client 115.99.167.137:63779] QUERY OK source="tabby_payments" db=53.1ms queue=0.8ms idle=245.2ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-04 05:38:55Z], "4afac367-44d4-4b89-8bad-062add04f09d", "39b42425-e3f4-4f16-a4d8-7a71d81dfeb9", ~N[2026-11-04 05:18:55], "87a6c559-0bd8-4d45-85c1-f812c212379b"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Wed Nov 4 05:18:55.909000 2026] [DaProductApp.Tabby.Sessions:info] [pid 1026202] [client 115.99.167.137:63779] [Tabby] session created attempt=87a6c559-0bd8-4d45-85c1-f812c212379b payment=4afac367-44d4-4b89-8bad-062add04f09d [Wed Nov 4 05:18:55.945000 2026] [Phoenix.Logger:info] [pid 1026202] [client 115.99.167.137:63779] Sent 200 in 436ms [Wed Nov 4 05:18:56.412000 2026] [Phoenix.Logger:info] [pid 1026202] [client 115.99.167.137:63779] GET /tabby-sim/hpp/39b42425-e3f4-4f16-a4d8-7a71d81dfeb9 [Wed Nov 4 05:18:56.412000 2026] [Phoenix.Logger:debug] [pid 1026202] [client 115.99.167.137:63779] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "39b42425-e3f4-4f16-a4d8-7a71d81dfeb9"} Pipelines: [:tabby_sim_hpp] [Wed Nov 4 05:18:56.418000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client 115.99.167.137:63779] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.5ms idle=570.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["39b42425-e3f4-4f16-a4d8-7a71d81dfeb9"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Wed Nov 4 05:18:56.421000 2026] [Phoenix.Logger:info] [pid 1026202] [client 115.99.167.137:63779] Sent 200 in 9ms [Wed Nov 4 05:18:59.500000 2026] [Phoenix.Logger:info] [pid 1026202] [client 115.99.167.137:63779] POST /tabby-sim/hpp/39b42425-e3f4-4f16-a4d8-7a71d81dfeb9 [Wed Nov 4 05:18:59.500000 2026] [Phoenix.Logger:debug] [pid 1026202] [client 115.99.167.137:63779] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "approve", "otp" => "5555", "session_id" => "39b42425-e3f4-4f16-a4d8-7a71d81dfeb9"} Pipelines: [:tabby_sim_hpp] [Wed Nov 4 05:18:59.501000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client 115.99.167.137:63779] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1840.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["39b42425-e3f4-4f16-a4d8-7a71d81dfeb9"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Wed Nov 4 05:18:59.502000 2026] [Phoenix.Logger:info] [pid 1026202] [client 115.99.167.137:63779] Sent 200 in 1ms [Wed Nov 4 05:19:04.121000 2026] [Phoenix.Logger:info] [pid 1026202] [client 115.99.167.137:63779] GET /tabby-sim/hpp/39b42425-e3f4-4f16-a4d8-7a71d81dfeb9 [Wed Nov 4 05:19:04.121000 2026] [Phoenix.Logger:debug] [pid 1026202] [client 115.99.167.137:63779] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "39b42425-e3f4-4f16-a4d8-7a71d81dfeb9"} Pipelines: [:tabby_sim_hpp] [Wed Nov 4 05:19:04.123000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client 115.99.167.137:63779] QUERY OK source="tabby_sim_payments" db=1.1ms queue=0.1ms idle=1460.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["39b42425-e3f4-4f16-a4d8-7a71d81dfeb9"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Wed Nov 4 05:19:04.123000 2026] [Phoenix.Logger:info] [pid 1026202] [client 115.99.167.137:63779] Sent 200 in 2ms [Wed Nov 4 05:19:05.658000 2026] [Phoenix.Logger:info] [pid 1026202] [client 115.99.167.137:63779] GET /tabby/demo [Wed Nov 4 05:19:05.661000 2026] [Phoenix.Logger:info] [pid 1026202] [client 115.99.167.137:63779] Sent 200 in 3ms [Wed Nov 4 05:19:06.100000 2026] [Phoenix.Logger:info] [pid 1026202] [client 115.99.167.137:63779] POST /tabby/demo/summary [Wed Nov 4 05:19:06.102000 2026] [Phoenix.Logger:info] [pid 1026202] [client 115.99.167.137:63779] Sent 200 in 1ms [Wed Nov 4 05:19:06.941000 2026] [Phoenix.Logger:info] [pid 1026202] [client 115.99.167.137:63779] POST /tabby/demo/eligibility [Wed Nov 4 05:19:07.228000 2026] [Phoenix.Logger:info] [pid 1026202] [client 127.0.0.1:52454] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:19:07.228000 2026] [Phoenix.Logger:debug] [pid 1026202] [client 127.0.0.1:52454] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:19:07.230000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client 127.0.0.1:52454] QUERY OK source="tabby_sim_faults" db=0.9ms idle=1567.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:19:07.253000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client 127.0.0.1:52454] QUERY OK db=21.4ms queue=0.7ms idle=1325.3ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["851e5486-74fa-43a8-b1f5-a0bc00e24b92", "CREATED", "AED", "28c7996e-2c3d-46c6-965b-33b8b3ba2718", "slice9", ~U[2026-11-04 05:31:07Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:29:07Z], "created", false, ~N[2026-11-04 05:19:07], ~N[2026-11-04 05:19:07]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:19:07.253000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1026202] [client 127.0.0.1:52454] [TabbySim] checkout payment=851e5486-74fa-43a8-b1f5-a0bc00e24b92 session=28c7996e-2c3d-46c6-965b-33b8b3ba2718 decision=created reason=nil amount=850.00 AED [Wed Nov 4 05:19:07.256000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client 127.0.0.1:52454] QUERY OK source="tabby_sim_payments" db=2.4ms idle=1264.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:19:07.259000 2026] [Phoenix.Logger:info] [pid 1026202] [client 127.0.0.1:52454] Sent 200 in 31ms [Wed Nov 4 05:19:07.260000 2026] [DaProductApp.Tabby.Client:info] [pid 1026202] [client 115.99.167.137:63779] [Tabby] checkout post /api/v2/checkout -> 200 (318 ms, attempt 1) [Wed Nov 4 05:19:07.261000 2026] [DaProductApp.Tabby.Client:info] [pid 1026202] [client 115.99.167.137:63779] [Tabby] session created payment=851e5486-74fa-43a8-b1f5-a0bc00e24b92 [Wed Nov 4 05:19:07.261000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1026202] [client 115.99.167.137:63779] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 05:19:07.261000 2026] [Phoenix.Logger:info] [pid 1026202] [client 115.99.167.137:63779] Sent 200 in 320ms [Wed Nov 4 05:19:43.701000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1039.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:19:43Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:19:43.701000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1026202] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:19:43.702000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1041.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:19:43Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:19:43.703000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1042.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:19:43.737000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1026202] [client -] [TabbySim] expiry job 399209 scheduled in 34s (24 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:20:18.779000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1117.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:20:18Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:20:18.844000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=64.9ms queue=0.5ms idle=1118.6ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:20:18], true, "034b5ff0-81e9-473a-a7d0-47e3157f39dc", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:20:18.845000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1026202] [client -] [TabbySim] payment=034b5ff0-81e9-473a-a7d0-47e3157f39dc CREATED -> EXPIRED [Wed Nov 4 05:20:18.846000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.5ms idle=1185.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["034b5ff0-81e9-473a-a7d0-47e3157f39dc"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:20:18.852000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1026202] [client -] [TabbySim] webhook not sent: event=expire payment=034b5ff0-81e9-473a-a7d0-47e3157f39dc [Wed Nov 4 05:20:18.854000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1026202] [client -] [TabbySim] payment=034b5ff0-81e9-473a-a7d0-47e3157f39dc expired (expires_at 2026-11-04 05:20:17Z, session_status=created) [Wed Nov 4 05:20:18.900000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=45.5ms idle=1194.2ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:20:18], true, "f08025bc-4d7b-4b12-91a3-128cb02317f3", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:20:18.900000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1026202] [client -] [TabbySim] payment=f08025bc-4d7b-4b12-91a3-128cb02317f3 CREATED -> EXPIRED [Wed Nov 4 05:20:18.902000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms queue=0.1ms idle=1240.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["f08025bc-4d7b-4b12-91a3-128cb02317f3"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:20:18.902000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1026202] [client -] [TabbySim] webhook not sent: event=expire payment=f08025bc-4d7b-4b12-91a3-128cb02317f3 [Wed Nov 4 05:20:18.902000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1026202] [client -] [TabbySim] payment=f08025bc-4d7b-4b12-91a3-128cb02317f3 expired (expires_at 2026-11-04 05:20:18Z, session_status=created) [Wed Nov 4 05:20:18.904000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=1.3ms idle=1234.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:20:18Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:20:18.904000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1026202] [client -] [TabbySim] expiry job: 2 payment(s) were due [Wed Nov 4 05:20:18.905000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=244.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:20:18Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:20:18.906000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.1ms idle=245.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:20:18.965000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1026202] [client -] [TabbySim] expiry job 399215 scheduled in 1s (22 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:20:20.852000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=190.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:20:20Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:20:20.943000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=90.5ms idle=192.2ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:20:20], true, "4ed5fc89-16f4-4535-92d1-c2b1ad707546", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:20:20.944000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1026202] [client -] [TabbySim] payment=4ed5fc89-16f4-4535-92d1-c2b1ad707546 CREATED -> EXPIRED [Wed Nov 4 05:20:20.946000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=1.7ms idle=283.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["4ed5fc89-16f4-4535-92d1-c2b1ad707546"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:20:20.946000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1026202] [client -] [TabbySim] webhook not sent: event=expire payment=4ed5fc89-16f4-4535-92d1-c2b1ad707546 [Wed Nov 4 05:20:20.946000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1026202] [client -] [TabbySim] payment=4ed5fc89-16f4-4535-92d1-c2b1ad707546 expired (expires_at 2026-11-04 05:20:19Z, session_status=created) [Wed Nov 4 05:20:20.951000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=3.1ms idle=286.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:20:20Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:20:20.951000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1026202] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:20:20.952000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=290.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:20:20Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:20:20.954000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms queue=0.1ms idle=291.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:20:21.061000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1026202] [client -] [TabbySim] expiry job 399216 scheduled in 1s (21 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:20:22.756000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=94.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:20:22Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:20:22.814000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=57.6ms queue=0.1ms idle=95.5ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:20:22], true, "44323a33-7648-4ba5-8107-00d6111520fb", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:20:22.814000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1026202] [client -] [TabbySim] payment=44323a33-7648-4ba5-8107-00d6111520fb CREATED -> EXPIRED [Wed Nov 4 05:20:22.815000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=153.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["44323a33-7648-4ba5-8107-00d6111520fb"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:20:22.815000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1026202] [client -] [TabbySim] payment=44323a33-7648-4ba5-8107-00d6111520fb expired (expires_at 2026-11-04 05:20:21Z, session_status=rejected) [Wed Nov 4 05:20:22.852000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=36.7ms idle=155.0ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:20:22], true, "84a1484f-8685-4644-9bd8-c2e4e9f8fd04", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:20:22.853000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1026202] [client -] [TabbySim] payment=84a1484f-8685-4644-9bd8-c2e4e9f8fd04 CREATED -> EXPIRED [Wed Nov 4 05:20:22.854000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=192.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["84a1484f-8685-4644-9bd8-c2e4e9f8fd04"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:20:22.854000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1026202] [client -] [TabbySim] payment=84a1484f-8685-4644-9bd8-c2e4e9f8fd04 expired (expires_at 2026-11-04 05:20:22Z, session_status=rejected) [Wed Nov 4 05:20:22.855000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=193.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:20:22Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:20:22.855000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1026202] [client -] [TabbySim] expiry job: 2 payment(s) were due [Wed Nov 4 05:20:22.856000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=194.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:20:22Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:20:22.857000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=195.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:20:22.906000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1026202] [client -] [TabbySim] expiry job 399217 scheduled in 1s (19 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:20:24.766000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=105.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:20:24Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:20:24.831000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=64.4ms idle=106.4ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:20:24], true, "af959582-b3a5-48f7-be35-52bf339cee46", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:20:24.831000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1026202] [client -] [TabbySim] payment=af959582-b3a5-48f7-be35-52bf339cee46 CREATED -> EXPIRED [Wed Nov 4 05:20:24.832000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=171.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["af959582-b3a5-48f7-be35-52bf339cee46"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:20:24.833000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1026202] [client -] [TabbySim] webhook not sent: event=expire payment=af959582-b3a5-48f7-be35-52bf339cee46 [Wed Nov 4 05:20:24.833000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1026202] [client -] [TabbySim] payment=af959582-b3a5-48f7-be35-52bf339cee46 expired (expires_at 2026-11-04 05:20:23Z, session_status=created) [Wed Nov 4 05:20:24.834000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=172.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:20:24Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:20:24.834000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1026202] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:20:24.836000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=1.5ms queue=0.1ms idle=173.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:20:24Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:20:24.836000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=175.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:20:24.901000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1026202] [client -] [TabbySim] expiry job 399218 scheduled in 3s (18 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:20:28.769000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=107.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:20:28Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:20:28.824000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=54.9ms idle=109.1ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:20:28], true, "8cf61cc0-9ce9-4f6e-865d-1f16671de738", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:20:28.825000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1026202] [client -] [TabbySim] payment=8cf61cc0-9ce9-4f6e-865d-1f16671de738 CREATED -> EXPIRED [Wed Nov 4 05:20:28.826000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=164.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["8cf61cc0-9ce9-4f6e-865d-1f16671de738"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:20:28.826000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1026202] [client -] [TabbySim] webhook not sent: event=expire payment=8cf61cc0-9ce9-4f6e-865d-1f16671de738 [Wed Nov 4 05:20:28.826000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1026202] [client -] [TabbySim] payment=8cf61cc0-9ce9-4f6e-865d-1f16671de738 expired (expires_at 2026-11-04 05:20:27Z, session_status=created) [Wed Nov 4 05:20:28.828000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=166.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:20:28Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:20:28.828000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1026202] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:20:28.829000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=167.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:20:28Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:20:28.830000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=168.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:20:28.873000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1026202] [client -] [TabbySim] expiry job 399219 scheduled in 4s (17 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:20:33.832000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1171.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:20:33Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:20:33.891000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=58.0ms idle=1171.9ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:20:33], true, "6c10c9b1-9498-4954-bf01-1978247d3915", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:20:33.891000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1026202] [client -] [TabbySim] payment=6c10c9b1-9498-4954-bf01-1978247d3915 CREATED -> EXPIRED [Wed Nov 4 05:20:33.892000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1230.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["6c10c9b1-9498-4954-bf01-1978247d3915"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:20:33.892000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1026202] [client -] [TabbySim] payment=6c10c9b1-9498-4954-bf01-1978247d3915 expired (expires_at 2026-11-04 05:20:32Z, session_status=rejected) [Wed Nov 4 05:20:33.943000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=49.8ms idle=1231.6ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:20:33], true, "db3809ba-f95f-4c29-ae09-c8662dee527c", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:20:33.943000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1026202] [client -] [TabbySim] payment=db3809ba-f95f-4c29-ae09-c8662dee527c CREATED -> EXPIRED [Wed Nov 4 05:20:33.944000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1282.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["db3809ba-f95f-4c29-ae09-c8662dee527c"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:20:33.944000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1026202] [client -] [TabbySim] payment=db3809ba-f95f-4c29-ae09-c8662dee527c expired (expires_at 2026-11-04 05:20:33Z, session_status=rejected) [Wed Nov 4 05:20:33.946000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1283.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:20:33Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:20:33.946000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1026202] [client -] [TabbySim] expiry job: 2 payment(s) were due [Wed Nov 4 05:20:33.947000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1234.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:20:33Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:20:33.947000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.1ms idle=286.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:20:34.054000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1026202] [client -] [TabbySim] expiry job 399220 scheduled in 5s (15 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:20:39.841000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=179.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:20:39Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:20:39.944000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=102.1ms idle=180.8ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:20:39], true, "cf529b3b-bac5-4728-aefd-11d1a3151d8f", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:20:39.944000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1026202] [client -] [TabbySim] payment=cf529b3b-bac5-4728-aefd-11d1a3151d8f CREATED -> EXPIRED [Wed Nov 4 05:20:39.945000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=283.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["cf529b3b-bac5-4728-aefd-11d1a3151d8f"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:20:39.945000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1026202] [client -] [TabbySim] payment=cf529b3b-bac5-4728-aefd-11d1a3151d8f expired (expires_at 2026-11-04 05:20:38Z, session_status=rejected) [Wed Nov 4 05:20:39.946000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=284.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:20:39Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:20:39.946000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1026202] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:20:39.947000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=286.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:20:39Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:20:39.948000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=286.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:20:40.042000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1026202] [client -] [TabbySim] expiry job 399221 scheduled in 5s (14 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:20:45.821000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=159.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:20:45Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:20:45.865000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=43.2ms idle=161.1ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:20:45], true, "cdab2343-746a-4f38-b778-c38d55b8e99d", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:20:45.865000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1026202] [client -] [TabbySim] payment=cdab2343-746a-4f38-b778-c38d55b8e99d CREATED -> EXPIRED [Wed Nov 4 05:20:45.866000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=204.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["cdab2343-746a-4f38-b778-c38d55b8e99d"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:20:45.866000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1026202] [client -] [TabbySim] webhook not sent: event=expire payment=cdab2343-746a-4f38-b778-c38d55b8e99d [Wed Nov 4 05:20:45.866000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1026202] [client -] [TabbySim] payment=cdab2343-746a-4f38-b778-c38d55b8e99d expired (expires_at 2026-11-04 05:20:44Z, session_status=created) [Wed Nov 4 05:20:45.867000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=206.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:20:45Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:20:45.868000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1026202] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:20:45.869000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=207.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:20:45Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:20:45.870000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=208.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:20:45.899000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1026202] [client -] [TabbySim] expiry job 399222 scheduled in 1s (13 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:20:48.931000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1270.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:20:48Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:20:49.050000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=118.2ms idle=1271.2ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:20:48], true, "e55e5ee7-e03a-4d8c-9bfe-9661cdca43c3", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:20:49.050000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1026202] [client -] [TabbySim] payment=e55e5ee7-e03a-4d8c-9bfe-9661cdca43c3 CREATED -> EXPIRED [Wed Nov 4 05:20:49.051000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1390.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["e55e5ee7-e03a-4d8c-9bfe-9661cdca43c3"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:20:49.051000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1026202] [client -] [TabbySim] webhook not sent: event=expire payment=e55e5ee7-e03a-4d8c-9bfe-9661cdca43c3 [Wed Nov 4 05:20:49.051000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1026202] [client -] [TabbySim] payment=e55e5ee7-e03a-4d8c-9bfe-9661cdca43c3 expired (expires_at 2026-11-04 05:20:46Z, session_status=created) [Wed Nov 4 05:20:49.052000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1391.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:20:49Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:20:49.108000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=55.2ms idle=1392.4ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:20:49], true, "7181b110-5a20-4d77-807c-d1be264c7ae6", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:20:49.108000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1026202] [client -] [TabbySim] payment=7181b110-5a20-4d77-807c-d1be264c7ae6 CREATED -> EXPIRED [Wed Nov 4 05:20:49.109000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1448.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["7181b110-5a20-4d77-807c-d1be264c7ae6"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:20:49.110000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1026202] [client -] [TabbySim] payment=7181b110-5a20-4d77-807c-d1be264c7ae6 expired (expires_at 2026-11-04 05:20:49Z, session_status=rejected) [Wed Nov 4 05:20:49.110000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1449.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:20:49Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:20:49.111000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1026202] [client -] [TabbySim] expiry job: 2 payment(s) were due [Wed Nov 4 05:20:49.111000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1288.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:20:49Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:20:49.112000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=284.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:20:49.198000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1026202] [client -] [TabbySim] expiry job 399223 scheduled in 4s (11 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:20:55.126000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=464.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:20:55Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:20:55.174000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=47.5ms queue=0.1ms idle=465.7ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:20:55], true, "0955d3f8-6d3c-48af-981e-34e209192c46", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:20:55.174000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1026202] [client -] [TabbySim] payment=0955d3f8-6d3c-48af-981e-34e209192c46 CREATED -> EXPIRED [Wed Nov 4 05:20:55.175000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms queue=0.1ms idle=513.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["0955d3f8-6d3c-48af-981e-34e209192c46"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:20:55.176000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1026202] [client -] [TabbySim] payment=0955d3f8-6d3c-48af-981e-34e209192c46 expired (expires_at 2026-11-04 05:20:53Z, session_status=rejected) [Wed Nov 4 05:20:55.177000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=515.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:20:55Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:20:55.177000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1026202] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:20:55.178000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=516.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:20:55Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:20:55.178000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=517.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:20:55.265000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1026202] [client -] [TabbySim] expiry job 399224 scheduled in 3s (10 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:20:57.133000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_payments" db=0.8ms queue=0.8ms idle=470.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["slice9", ~U[2026-10-17 05:20:57Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:20:57.135000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_payments" db=0.4ms queue=1.2ms idle=472.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["slice9", ~N[2026-11-04 05:18:57], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:20:57.137000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_payments" db=0.4ms queue=0.6ms idle=475.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:20:57.139000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_payments" db=0.6ms queue=0.6ms idle=476.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", ~N[2026-11-04 05:18:57], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:20:57.140000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_payments" db=0.8ms queue=0.3ms idle=478.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["slice9", ~U[2026-11-04 05:15:57Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:20:57.141000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_payments" db=1.1ms idle=479.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["87a6c559-0bd8-4d45-85c1-f812c212379b"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:20:57.463000 2026] [Phoenix.Logger:info] [pid 1026202] [client 127.0.0.1:36722] GET /tabby-sim/api/v2/payments/4afac367-44d4-4b89-8bad-062add04f09d [Wed Nov 4 05:20:57.463000 2026] [Phoenix.Logger:debug] [pid 1026202] [client 127.0.0.1:36722] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "4afac367-44d4-4b89-8bad-062add04f09d"} Pipelines: [:tabby_sim_api] [Wed Nov 4 05:20:57.471000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client 127.0.0.1:36722] QUERY OK source="tabby_sim_faults" db=0.6ms queue=1.5ms idle=417.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "4afac367-44d4-4b89-8bad-062add04f09d"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 05:20:57.472000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client 127.0.0.1:36722] QUERY OK source="tabby_sim_faults" db=1.0ms idle=347.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:20:57.473000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client 127.0.0.1:36722] QUERY OK source="tabby_sim_payments" db=0.5ms idle=339.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["4afac367-44d4-4b89-8bad-062add04f09d"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Wed Nov 4 05:20:57.473000 2026] [Phoenix.Logger:info] [pid 1026202] [client 127.0.0.1:36722] Sent 200 in 10ms [Wed Nov 4 05:20:57.474000 2026] [DaProductApp.Tabby.Client:info] [pid 1026202] [client -] [Tabby] retrieve get /api/v2/payments/4afac367-44d4-4b89-8bad-062add04f09d -> 200 (332 ms, attempt 1) [Wed Nov 4 05:20:57.480000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1026202] [client -] [Tabby] verify: attempt=87a6c559-0bd8-4d45-85c1-f812c212379b payment=4afac367-44d4-4b89-8bad-062add04f09d is still CREATED at Tabby; it will be looked at again [Wed Nov 4 05:20:57.484000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_webhook_events" db=0.5ms queue=0.7ms idle=347.7ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-04 05:18:57Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Wed Nov 4 05:20:57.488000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_refunds" db=0.4ms queue=0.6ms idle=349.7ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["slice9", ~N[2026-11-04 05:18:57], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Wed Nov 4 05:20:57.489000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_payments" db=0.5ms queue=0.4ms idle=349.6ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:20:57.490000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_payments" db=0.4ms queue=0.3ms idle=349.6ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["slice9", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:20:57.492000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_webhook_events" db=0.2ms queue=0.5ms idle=349.3ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Wed Nov 4 05:20:57.493000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_refunds" db=0.3ms queue=0.4ms idle=271.8ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Wed Nov 4 05:20:57.493000 2026] [DaProductApp.Tabby.Poller:info] [pid 1026202] [client -] [Tabby] poll: handled 1 (created:pending=1); 1 attempt(s) still watched [Wed Nov 4 05:21:00.235000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1573.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:21:00Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:21:00.321000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=86.0ms idle=1574.6ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:21:00], true, "a58bf0f4-d125-4195-8393-f558b14a1d3a", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:21:00.321000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1026202] [client -] [TabbySim] payment=a58bf0f4-d125-4195-8393-f558b14a1d3a CREATED -> EXPIRED [Wed Nov 4 05:21:00.322000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1661.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["a58bf0f4-d125-4195-8393-f558b14a1d3a"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:21:00.322000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1026202] [client -] [TabbySim] payment=a58bf0f4-d125-4195-8393-f558b14a1d3a expired (expires_at 2026-11-04 05:20:58Z, session_status=rejected) [Wed Nov 4 05:21:00.324000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=1662.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:21:00Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:21:00.325000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1026202] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:21:00.325000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1664.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:21:00Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:21:00.326000 2026] [Ecto.Adapters.SQL:debug] [pid 1026202] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1665.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:21:00.388000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1026202] [client -] [TabbySim] expiry job 399226 scheduled in 60s (9 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:22:53.303000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="global_table" db=0.5ms queue=4.2ms idle=82.4ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 05:22:53.430000 2026] [Bandit:info] [pid 1031735] [client -] Running DaProductAppWeb.Endpoint with Bandit 1.6.7 at 0.0.0.0:4030 (http) [Wed Nov 4 05:22:53.437000 2026] [DaProductApp.MQTT.Handler:info] [pid 1031735] [client -] Device phoenix_client_node_devteam connected [Wed Nov 4 05:22:53.444000 2026] [Phoenix.Endpoint.Supervisor:info] [pid 1031735] [client -] Access DaProductAppWeb.Endpoint at http://localhost:4030 [Wed Nov 4 05:22:54.483000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.5ms idle=1264.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:22:54Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:22:54.484000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:22:54.485000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.3ms idle=1272.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:22:54Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:22:54.493000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.4ms idle=1279.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:22:54.562000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399232 scheduled in 40s (9 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:22:58.469000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.5ms queue=1.1ms idle=337.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["slice9", ~U[2026-10-17 05:22:58Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:22:58.482000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=7.8ms queue=0.5ms idle=343.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["slice9", ~N[2026-11-04 05:20:58], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:22:58.485000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.4ms queue=1.5ms idle=356.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", ~N[2026-11-04 05:20:58], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:22:58.488000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.4ms queue=1.8ms idle=359.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["slice9", ~U[2026-11-04 05:17:58Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:22:58.491000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.6ms queue=1.9ms idle=362.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:22:58.493000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.3ms queue=0.9ms idle=365.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["87a6c559-0bd8-4d45-85c1-f812c212379b"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:22:59.011000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:47728] GET /tabby-sim/api/v2/payments/4afac367-44d4-4b89-8bad-062add04f09d [Wed Nov 4 05:22:59.077000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:47728] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "4afac367-44d4-4b89-8bad-062add04f09d"} Pipelines: [:tabby_sim_api] [Wed Nov 4 05:22:59.112000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:47728] QUERY OK source="tabby_sim_faults" db=0.4ms queue=0.7ms idle=777.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "4afac367-44d4-4b89-8bad-062add04f09d"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 05:22:59.116000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:47728] QUERY OK source="tabby_sim_faults" db=1.5ms queue=2.0ms idle=674.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:22:59.119000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:47728] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.8ms idle=652.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["4afac367-44d4-4b89-8bad-062add04f09d"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Wed Nov 4 05:22:59.137000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:47728] Sent 200 in 126ms [Wed Nov 4 05:22:59.163000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client -] [Tabby] retrieve get /api/v2/payments/4afac367-44d4-4b89-8bad-062add04f09d -> 200 (656 ms, attempt 1) [Wed Nov 4 05:22:59.175000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1031735] [client -] [Tabby] verify: attempt=87a6c559-0bd8-4d45-85c1-f812c212379b payment=4afac367-44d4-4b89-8bad-062add04f09d is still CREATED at Tabby; it will be looked at again [Wed Nov 4 05:22:59.182000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=0.4ms queue=1.1ms idle=703.2ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-04 05:20:58Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Wed Nov 4 05:22:59.190000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=0.6ms queue=0.9ms idle=703.4ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["slice9", ~N[2026-11-04 05:20:58], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Wed Nov 4 05:22:59.192000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.3ms queue=0.5ms idle=702.3ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:22:59.194000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.9ms queue=1.1ms idle=700.7ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["slice9", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:22:59.198000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=1.7ms queue=1.3ms idle=701.4ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Wed Nov 4 05:22:59.202000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=0.6ms queue=2.5ms idle=432.8ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Wed Nov 4 05:22:59.202000 2026] [DaProductApp.Tabby.Poller:info] [pid 1031735] [client -] [Tabby] poll: handled 1 (created:pending=1); 1 attempt(s) still watched [Wed Nov 4 05:23:33.881000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:40188] GET /tabby/demo [Wed Nov 4 05:23:33.887000 2026] [DaProductAppWeb.Plugs.TabbyDemoGate:warn] [pid 1031735] [client 78.47.213.209:40188] [Tabby] demo 401 GET /tabby/demo [Wed Nov 4 05:23:33.887000 2026] [DaProductAppWeb.Router:debug] [pid 1031735] [client 78.47.213.209:40188] Phoenix.Router halted in :tabby_demo/2 [Wed Nov 4 05:23:33.887000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:40188] Sent 401 in 6ms [Wed Nov 4 05:23:35.679000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=549.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:23:35Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:23:35.747000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=67.3ms queue=0.3ms idle=550.7ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:23:35], true, "8bbabfa2-3c17-4549-afd1-27d9abc73f15", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:23:35.748000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=8bbabfa2-3c17-4549-afd1-27d9abc73f15 CREATED -> EXPIRED [Wed Nov 4 05:23:35.749000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=618.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["8bbabfa2-3c17-4549-afd1-27d9abc73f15"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:23:35.755000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=8bbabfa2-3c17-4549-afd1-27d9abc73f15 expired (expires_at 2026-11-04 05:23:34Z, session_status=rejected) [Wed Nov 4 05:23:35.759000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=2.7ms queue=1.3ms idle=625.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:23:35Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:23:35.760000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:23:35.761000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms queue=0.1ms idle=630.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:23:35Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:23:35.763000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=631.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:23:35.887000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399234 scheduled in 52s (8 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:24:14.828000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:49708] GET /tabby/demo [Wed Nov 4 05:24:14.828000 2026] [DaProductAppWeb.Plugs.TabbyDemoGate:warn] [pid 1031735] [client 78.47.213.209:49708] [Tabby] demo 401 GET /tabby/demo [Wed Nov 4 05:24:14.828000 2026] [DaProductAppWeb.Router:debug] [pid 1031735] [client 78.47.213.209:49708] Phoenix.Router halted in :tabby_demo/2 [Wed Nov 4 05:24:14.829000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:49708] Sent 401 in 1ms [Wed Nov 4 05:24:24.504000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:35154] GET /tabby/demo [Wed Nov 4 05:24:24.509000 2026] [DaProductAppWeb.Plugs.TabbyDemoGate:warn] [pid 1031735] [client 78.47.213.209:35154] [Tabby] demo 401 GET /tabby/demo [Wed Nov 4 05:24:24.509000 2026] [DaProductAppWeb.Router:debug] [pid 1031735] [client 78.47.213.209:35154] Phoenix.Router halted in :tabby_demo/2 [Wed Nov 4 05:24:24.510000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:35154] Sent 401 in 5ms [Wed Nov 4 05:24:29.066000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1931.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:24:29Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:24:29.116000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=49.0ms queue=0.1ms idle=1128.1ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:24:29], true, "04090ac9-9dd7-404d-a498-f43887a42fd5", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:24:29.116000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=04090ac9-9dd7-404d-a498-f43887a42fd5 CREATED -> EXPIRED [Wed Nov 4 05:24:29.117000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1160.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["04090ac9-9dd7-404d-a498-f43887a42fd5"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:24:29.120000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=04090ac9-9dd7-404d-a498-f43887a42fd5 [Wed Nov 4 05:24:29.120000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=04090ac9-9dd7-404d-a498-f43887a42fd5 expired (expires_at 2026-11-04 05:24:27Z, session_status=created) [Wed Nov 4 05:24:29.121000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=987.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:24:29Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:24:29.121000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:24:29.122000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=988.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:24:29Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:24:29.124000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=989.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:24:29.157000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399237 scheduled in 2s (7 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:24:32.046000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1911.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:24:32Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:24:32.084000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=37.1ms queue=0.1ms idle=1913.3ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:24:32], true, "6a38ca2f-357f-48ed-811b-444e9ed81088", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:24:32.084000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=6a38ca2f-357f-48ed-811b-444e9ed81088 CREATED -> EXPIRED [Wed Nov 4 05:24:32.085000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1951.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["6a38ca2f-357f-48ed-811b-444e9ed81088"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:24:32.086000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=6a38ca2f-357f-48ed-811b-444e9ed81088 [Wed Nov 4 05:24:32.086000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=6a38ca2f-357f-48ed-811b-444e9ed81088 expired (expires_at 2026-11-04 05:24:31Z, session_status=created) [Wed Nov 4 05:24:32.086000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1952.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:24:32Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:24:32.086000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:24:32.088000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1121.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:24:32Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:24:32.089000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=954.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:24:32.128000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399238 scheduled in 60s (6 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:25:00.147000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=1012.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["slice9", ~U[2026-10-17 05:25:00Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:25:00.149000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.6ms queue=0.1ms idle=1014.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["slice9", ~N[2026-11-04 05:23:00], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:25:00.152000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=2.5ms queue=0.1ms idle=1016.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", ~N[2026-11-04 05:23:00], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:25:00.154000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.8ms queue=0.2ms idle=1019.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["slice9", ~U[2026-11-04 05:20:00Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:25:00.156000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.2ms idle=1020.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:25:00.157000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.6ms queue=0.4ms idle=1022.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["87a6c559-0bd8-4d45-85c1-f812c212379b"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:25:00.435000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:48450] GET /tabby-sim/api/v2/payments/4afac367-44d4-4b89-8bad-062add04f09d [Wed Nov 4 05:25:00.437000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:48450] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "4afac367-44d4-4b89-8bad-062add04f09d"} Pipelines: [:tabby_sim_api] [Wed Nov 4 05:25:00.441000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:48450] QUERY OK source="tabby_sim_faults" db=2.6ms idle=293.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "4afac367-44d4-4b89-8bad-062add04f09d"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 05:25:00.446000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:48450] QUERY OK source="tabby_sim_faults" db=3.8ms idle=294.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:25:00.453000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:48450] QUERY OK source="tabby_sim_payments" db=5.8ms idle=298.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["4afac367-44d4-4b89-8bad-062add04f09d"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Wed Nov 4 05:25:00.463000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:48450] Sent 200 in 27ms [Wed Nov 4 05:25:00.466000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client -] [Tabby] retrieve get /api/v2/payments/4afac367-44d4-4b89-8bad-062add04f09d -> 200 (309 ms, attempt 1) [Wed Nov 4 05:25:00.466000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1031735] [client -] [Tabby] verify: attempt=87a6c559-0bd8-4d45-85c1-f812c212379b payment=4afac367-44d4-4b89-8bad-062add04f09d is still CREATED at Tabby; it will be looked at again [Wed Nov 4 05:25:00.468000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=1.0ms idle=315.0ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-04 05:23:00Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Wed Nov 4 05:25:00.471000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=1.1ms idle=315.9ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["slice9", ~N[2026-11-04 05:23:00], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Wed Nov 4 05:25:00.474000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.9ms idle=316.0ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:25:00.476000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=2.1ms idle=316.6ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["slice9", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:25:00.477000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=0.8ms queue=0.1ms idle=246.6ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Wed Nov 4 05:25:00.478000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=0.7ms idle=174.9ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Wed Nov 4 05:25:00.478000 2026] [DaProductApp.Tabby.Poller:info] [pid 1031735] [client -] [Tabby] poll: handled 1 (created:pending=1); 1 attempt(s) still watched [Wed Nov 4 05:25:01.624000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:56966] GET /tabby/demo [Wed Nov 4 05:25:01.656000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:56966] Sent 200 in 32ms [Wed Nov 4 05:25:33.500000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1365.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:25:33Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:25:33.501000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:25:33.502000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1225.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:25:33Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:25:33.503000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1076.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:25:33.540000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399242 scheduled in 60s (6 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:25:43.159000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:43798] POST /tabby/demo/summary [Wed Nov 4 05:25:43.160000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:43798] Sent 403 in 755µs [Wed Nov 4 05:25:51.944000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:47332] POST /tabby/demo/summary [Wed Nov 4 05:25:51.946000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:47332] Sent 200 in 2ms [Wed Nov 4 05:26:05.211000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:45994] POST /tabby/demo/summary [Wed Nov 4 05:26:05.212000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:45994] Sent 200 in 538µs [Wed Nov 4 05:26:13.046000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:47208] POST /tabby/demo/summary [Wed Nov 4 05:26:13.046000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:47208] Sent 400 in 440µs [Wed Nov 4 05:26:35.021000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1078.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:26:35Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:26:35.022000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:26:35.022000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1059.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:26:35Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:26:35.023000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.1ms idle=888.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:26:35.091000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399245 scheduled in 42s (6 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:27:02.303000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=2.7ms idle=166.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["slice9", ~U[2026-10-17 05:27:02Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:27:02.304000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=169.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["slice9", ~N[2026-11-04 05:25:02], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:27:02.306000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=170.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", ~N[2026-11-04 05:25:02], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:27:02.309000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=2.2ms idle=172.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["slice9", ~U[2026-11-04 05:22:02Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:27:02.315000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=3.6ms queue=1.5ms idle=174.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:27:02.323000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=4.8ms idle=182.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["87a6c559-0bd8-4d45-85c1-f812c212379b"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:27:02.664000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:38784] GET /tabby-sim/api/v2/payments/4afac367-44d4-4b89-8bad-062add04f09d [Wed Nov 4 05:27:02.665000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:38784] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "4afac367-44d4-4b89-8bad-062add04f09d"} Pipelines: [:tabby_sim_api] [Wed Nov 4 05:27:02.666000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38784] QUERY OK source="tabby_sim_faults" db=1.0ms queue=0.1ms idle=493.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "4afac367-44d4-4b89-8bad-062add04f09d"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 05:27:02.668000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38784] QUERY OK source="tabby_sim_faults" db=1.1ms idle=366.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:27:02.674000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38784] QUERY OK source="tabby_sim_payments" db=6.4ms idle=364.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["4afac367-44d4-4b89-8bad-062add04f09d"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Wed Nov 4 05:27:02.675000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:38784] Sent 200 in 10ms [Wed Nov 4 05:27:02.676000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client -] [Tabby] retrieve get /api/v2/payments/4afac367-44d4-4b89-8bad-062add04f09d -> 200 (353 ms, attempt 1) [Wed Nov 4 05:27:02.676000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1031735] [client -] [Tabby] verify: attempt=87a6c559-0bd8-4d45-85c1-f812c212379b payment=4afac367-44d4-4b89-8bad-062add04f09d is still CREATED at Tabby; it will be looked at again [Wed Nov 4 05:27:02.682000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=1.4ms queue=0.4ms idle=376.0ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-04 05:25:02Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Wed Nov 4 05:27:02.685000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=2.6ms idle=377.1ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["slice9", ~N[2026-11-04 05:25:02], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Wed Nov 4 05:27:02.689000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.1ms queue=2.4ms idle=376.2ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:27:02.690000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=374.7ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["slice9", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:27:02.693000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=2.3ms idle=367.7ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Wed Nov 4 05:27:02.695000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=1.0ms decode=0.3ms idle=258.4ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Wed Nov 4 05:27:02.695000 2026] [DaProductApp.Tabby.Poller:info] [pid 1031735] [client -] [Tabby] poll: handled 1 (created:pending=1); 1 attempt(s) still watched [Wed Nov 4 05:27:17.225000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:52002] GET /tabby/demo [Wed Nov 4 05:27:17.225000 2026] [DaProductAppWeb.Plugs.TabbyDemoGate:warn] [pid 1031735] [client 78.47.213.209:52002] [Tabby] demo 401 GET /tabby/demo [Wed Nov 4 05:27:17.225000 2026] [DaProductAppWeb.Router:debug] [pid 1031735] [client 78.47.213.209:52002] Phoenix.Router halted in :tabby_demo/2 [Wed Nov 4 05:27:17.226000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:52002] Sent 401 in 939µs [Wed Nov 4 05:27:18.415000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=280.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:27:18Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:27:18.456000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=40.5ms idle=281.4ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:27:18], true, "86e6b45c-03cf-4930-8279-6ffac3e4c990", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:27:18.456000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=86e6b45c-03cf-4930-8279-6ffac3e4c990 CREATED -> EXPIRED [Wed Nov 4 05:27:18.457000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=322.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["86e6b45c-03cf-4930-8279-6ffac3e4c990"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:27:18.458000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=86e6b45c-03cf-4930-8279-6ffac3e4c990 [Wed Nov 4 05:27:18.458000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=86e6b45c-03cf-4930-8279-6ffac3e4c990 expired (expires_at 2026-11-04 05:27:17Z, session_status=created) [Wed Nov 4 05:27:18.459000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=323.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:27:18Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:27:18.459000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:27:18.460000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=325.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:27:18Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:27:18.462000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=326.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:27:18.522000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399250 scheduled in 60s (5 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:27:33.224000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:35862] GET /tabby/demo [Wed Nov 4 05:27:33.224000 2026] [DaProductAppWeb.Plugs.TabbyDemoGate:warn] [pid 1031735] [client 78.47.213.209:35862] [Tabby] demo 401 GET /tabby/demo [Wed Nov 4 05:27:33.225000 2026] [DaProductAppWeb.Router:debug] [pid 1031735] [client 78.47.213.209:35862] Phoenix.Router halted in :tabby_demo/2 [Wed Nov 4 05:27:33.225000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:35862] Sent 401 in 1ms [Wed Nov 4 05:27:40.727000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:42690] GET /tabby/demo [Wed Nov 4 05:27:40.731000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:42690] Sent 200 in 3ms [Wed Nov 4 05:27:50.741000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:33976] POST /tabby/demo/summary [Wed Nov 4 05:27:50.741000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:33976] Sent 403 in 472µs [Wed Nov 4 05:28:00.470000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:43376] POST /tabby/demo/summary [Wed Nov 4 05:28:00.470000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:43376] Sent 200 in 555µs [Wed Nov 4 05:28:14.412000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:42982] POST /tabby/demo/summary [Wed Nov 4 05:28:14.412000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:42982] Sent 200 in 628µs [Wed Nov 4 05:28:18.727000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=589.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:28:18Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:28:18.727000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:28:18.728000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=590.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:28:18Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:28:18.729000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=591.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:28:18.804000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399253 scheduled in 40s (5 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:28:24.912000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:41448] POST /tabby/demo/summary [Wed Nov 4 05:28:24.912000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:41448] Sent 400 in 625µs [Wed Nov 4 05:28:34.852000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:43200] POST /tabby/demo/summary [Wed Nov 4 05:28:34.852000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:43200] Sent 200 in 555µs [Wed Nov 4 05:28:59.986000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1848.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:28:59Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:29:00.060000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=73.8ms idle=1849.2ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:28:59], true, "fe0d6ed2-7459-4d87-8fe8-2f8e297f4cd8", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:29:00.061000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=fe0d6ed2-7459-4d87-8fe8-2f8e297f4cd8 CREATED -> EXPIRED [Wed Nov 4 05:29:00.062000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1924.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["fe0d6ed2-7459-4d87-8fe8-2f8e297f4cd8"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:29:00.062000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=fe0d6ed2-7459-4d87-8fe8-2f8e297f4cd8 [Wed Nov 4 05:29:00.063000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=fe0d6ed2-7459-4d87-8fe8-2f8e297f4cd8 expired (expires_at 2026-11-04 05:28:58Z, session_status=created) [Wed Nov 4 05:29:00.063000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1925.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:29:00Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:29:00.064000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:29:00.065000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1926.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:29:00Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:29:00.066000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1927.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:29:00.118000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399254 scheduled in 2s (4 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:29:00.396000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:54636] GET /tabby/demo/img/headphones [Wed Nov 4 05:29:00.396000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:54636] Sent 404 in 563µs [Wed Nov 4 05:29:03.106000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=5.1ms idle=1963.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:29:03Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:29:03.151000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=43.5ms idle=1204.0ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:29:03], true, "ff442c58-e726-4c69-9fa5-e60c1d0d5220", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:29:03.151000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=ff442c58-e726-4c69-9fa5-e60c1d0d5220 CREATED -> EXPIRED [Wed Nov 4 05:29:03.154000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.9ms queue=0.5ms idle=1013.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["ff442c58-e726-4c69-9fa5-e60c1d0d5220"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:29:03.154000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=ff442c58-e726-4c69-9fa5-e60c1d0d5220 [Wed Nov 4 05:29:03.155000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=ff442c58-e726-4c69-9fa5-e60c1d0d5220 expired (expires_at 2026-11-04 05:29:02Z, session_status=created) [Wed Nov 4 05:29:03.162000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=6.0ms queue=1.3ms idle=1016.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:29:03Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:29:03.163000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:29:03.164000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms queue=0.1ms idle=1023.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:29:03Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:29:03.172000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=7.9ms idle=1025.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:29:03.223000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399255 scheduled in 52s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:29:04.105000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.8ms idle=949.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["slice9", ~U[2026-10-17 05:29:04Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:29:04.112000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=2.5ms queue=0.1ms idle=947.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["slice9", ~N[2026-11-04 05:27:04], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:29:04.113000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.7ms queue=0.4ms idle=948.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", ~N[2026-11-04 05:27:04], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:29:04.116000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.2ms idle=941.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["slice9", ~U[2026-11-04 05:24:04Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:29:04.120000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=4.2ms idle=940.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:29:04.124000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.7ms queue=1.4ms idle=897.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["87a6c559-0bd8-4d45-85c1-f812c212379b"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:29:04.546000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:60402] GET /tabby-sim/api/v2/payments/4afac367-44d4-4b89-8bad-062add04f09d [Wed Nov 4 05:29:04.547000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:60402] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "4afac367-44d4-4b89-8bad-062add04f09d"} Pipelines: [:tabby_sim_api] [Wed Nov 4 05:29:04.552000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:60402] QUERY OK source="tabby_sim_faults" db=1.5ms idle=539.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "4afac367-44d4-4b89-8bad-062add04f09d"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 05:29:04.563000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:60402] QUERY OK source="tabby_sim_faults" db=5.6ms queue=1.8ms idle=452.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:29:04.575000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:60402] QUERY OK source="tabby_sim_payments" db=11.3ms idle=458.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["4afac367-44d4-4b89-8bad-062add04f09d"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Wed Nov 4 05:29:04.577000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:60402] Sent 200 in 31ms [Wed Nov 4 05:29:04.581000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client -] [Tabby] retrieve get /api/v2/payments/4afac367-44d4-4b89-8bad-062add04f09d -> 200 (456 ms, attempt 1) [Wed Nov 4 05:29:04.581000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1031735] [client -] [Tabby] verify: attempt=87a6c559-0bd8-4d45-85c1-f812c212379b payment=4afac367-44d4-4b89-8bad-062add04f09d is still CREATED at Tabby; it will be looked at again [Wed Nov 4 05:29:04.589000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=6.9ms idle=469.6ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-04 05:27:04Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Wed Nov 4 05:29:04.597000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=7.3ms idle=475.8ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["slice9", ~N[2026-11-04 05:27:04], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Wed Nov 4 05:29:04.600000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=2.7ms idle=482.1ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:29:04.603000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.7ms queue=0.5ms idle=479.9ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["slice9", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:29:04.604000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=0.8ms idle=478.9ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Wed Nov 4 05:29:04.605000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=0.6ms queue=0.1ms idle=334.5ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Wed Nov 4 05:29:04.605000 2026] [DaProductApp.Tabby.Poller:info] [pid 1031735] [client -] [Tabby] poll: handled 1 (created:pending=1); 1 attempt(s) still watched [Wed Nov 4 05:29:51.820000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:39674] GET /tabby/demo/img/..%2F..%2Fconfig [Wed Nov 4 05:29:51.820000 2026] [Phoenix.Logger:info] [pid 1031735] [client 78.47.213.209:39674] Sent 404 in 413µs [Wed Nov 4 05:29:56.246000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1107.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:29:56Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:29:56.279000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=31.1ms idle=1109.0ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:29:56], true, "6a7aa26b-e323-4135-9df6-164381c4263f", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:29:56.279000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=6a7aa26b-e323-4135-9df6-164381c4263f CREATED -> EXPIRED [Wed Nov 4 05:29:56.280000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms queue=0.1ms idle=1140.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["6a7aa26b-e323-4135-9df6-164381c4263f"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:29:56.280000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=6a7aa26b-e323-4135-9df6-164381c4263f [Wed Nov 4 05:29:56.280000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=6a7aa26b-e323-4135-9df6-164381c4263f expired (expires_at 2026-11-04 05:29:55Z, session_status=created) [Wed Nov 4 05:29:56.281000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1122.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:29:56Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:29:56.282000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:29:56.283000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=143.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:29:56Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:29:56.284000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=144.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:29:56.339000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399257 scheduled in 59s (2 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:30:00.433000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="report_requests" db=0.4ms queue=0.3ms idle=294.3ms SELECT r0.`id`, r0.`report_id`, r0.`report_type`, r0.`requester_ref`, r0.`filters`, r0.`status`, r0.`progress_percentage`, r0.`row_count`, r0.`file_path`, r0.`file_size`, r0.`download_token`, r0.`download_count`, r0.`last_downloaded_at`, r0.`error_message`, r0.`expires_at`, r0.`completed_at`, r0.`inserted_at`, r0.`updated_at` FROM `report_requests` AS r0 WHERE (NOT (r0.`expires_at` IS NULL) AND (r0.`expires_at` < ?)) [~U[2026-11-04 05:30:00Z]] ↳ DaProductApp.Workers.ReportRetentionWorker.perform/1, at: lib/da_product_app/workers/report_retention_worker.ex:18 [Wed Nov 4 05:30:00.614000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="report_requests" db=1.0ms idle=474.6ms SELECT r0.`id`, r0.`report_id`, r0.`report_type`, r0.`requester_ref`, r0.`filters`, r0.`status`, r0.`progress_percentage`, r0.`row_count`, r0.`file_path`, r0.`file_size`, r0.`download_token`, r0.`download_count`, r0.`last_downloaded_at`, r0.`error_message`, r0.`expires_at`, r0.`completed_at`, r0.`inserted_at`, r0.`updated_at` FROM `report_requests` AS r0 WHERE (NOT (r0.`expires_at` IS NULL) AND (r0.`expires_at` < ?)) [~U[2026-11-04 05:30:00Z]] ↳ DaProductApp.Workers.ReportRetentionWorker.perform/1, at: lib/da_product_app/workers/report_retention_worker.ex:18 [Wed Nov 4 05:30:56.777000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1637.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:30:56Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:30:56.853000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=75.9ms idle=1639.2ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:30:56], true, "4afac367-44d4-4b89-8bad-062add04f09d", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:30:56.854000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=4afac367-44d4-4b89-8bad-062add04f09d CREATED -> EXPIRED [Wed Nov 4 05:30:56.855000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms queue=0.1ms idle=1244.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["4afac367-44d4-4b89-8bad-062add04f09d"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:30:56.855000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=4afac367-44d4-4b89-8bad-062add04f09d [Wed Nov 4 05:30:56.856000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=4afac367-44d4-4b89-8bad-062add04f09d expired (expires_at 2026-11-04 05:30:55Z, session_status=created) [Wed Nov 4 05:30:56.856000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=717.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:30:56Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:30:56.856000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:30:56.857000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.1ms idle=718.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:30:56Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:30:56.858000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=719.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:30:56.975000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399272 scheduled in 11s (1 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:31:05.801000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.7ms idle=1661.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["slice9", ~U[2026-10-17 05:31:05Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:31:05.803000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.5ms idle=1663.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["slice9", ~N[2026-11-04 05:29:05], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:31:05.805000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.1ms idle=1665.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", ~N[2026-11-04 05:29:05], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:31:05.806000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.5ms queue=0.2ms idle=1667.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["slice9", ~U[2026-11-04 05:26:05Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:31:05.808000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.6ms idle=1668.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:31:05.810000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.1ms idle=1670.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["87a6c559-0bd8-4d45-85c1-f812c212379b"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:31:06.089000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44488] GET /tabby-sim/api/v2/payments/4afac367-44d4-4b89-8bad-062add04f09d [Wed Nov 4 05:31:06.089000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:44488] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "4afac367-44d4-4b89-8bad-062add04f09d"} Pipelines: [:tabby_sim_api] [Wed Nov 4 05:31:06.091000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44488] QUERY OK source="tabby_sim_faults" db=0.6ms idle=372.6ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "4afac367-44d4-4b89-8bad-062add04f09d"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 05:31:06.092000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44488] QUERY OK source="tabby_sim_faults" db=0.4ms idle=292.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:31:06.093000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44488] QUERY OK source="tabby_sim_payments" db=1.5ms idle=290.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["4afac367-44d4-4b89-8bad-062add04f09d"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Wed Nov 4 05:31:06.094000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44488] Sent 200 in 4ms [Wed Nov 4 05:31:06.095000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client -] [Tabby] retrieve get /api/v2/payments/4afac367-44d4-4b89-8bad-062add04f09d -> 200 (283 ms, attempt 1) [Wed Nov 4 05:31:06.152000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=55.6ms queue=0.5ms idle=292.6ms UPDATE `tabby_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["expired", ~N[2026-11-04 05:31:06], "87a6c559-0bd8-4d45-85c1-f812c212379b", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Wed Nov 4 05:31:06.153000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.9ms queue=0.1ms idle=347.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["87a6c559-0bd8-4d45-85c1-f812c212379b"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:31:06.154000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1031735] [client -] [Tabby] verify: attempt=87a6c559-0bd8-4d45-85c1-f812c212379b payment=4afac367-44d4-4b89-8bad-062add04f09d created -> expired [Wed Nov 4 05:31:06.156000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=1.9ms idle=347.6ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-04 05:29:05Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Wed Nov 4 05:31:06.158000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=1.5ms idle=347.9ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["slice9", ~N[2026-11-04 05:29:05], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Wed Nov 4 05:31:06.160000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.1ms queue=0.3ms idle=348.2ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:31:06.162000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.2ms queue=0.2ms idle=273.4ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["slice9", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:31:06.163000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=0.2ms queue=0.1ms idle=189.7ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Wed Nov 4 05:31:06.164000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=0.6ms queue=0.1ms idle=72.2ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Wed Nov 4 05:31:06.164000 2026] [DaProductApp.Tabby.Poller:info] [pid 1031735] [client -] [Tabby] poll: handled 1 (created:recorded_expired=1); 0 attempt(s) still watched [Wed Nov 4 05:31:09.883000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1744.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:31:09Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:31:09.968000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=84.6ms idle=1745.3ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:31:09], true, "851e5486-74fa-43a8-b1f5-a0bc00e24b92", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:31:09.968000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=851e5486-74fa-43a8-b1f5-a0bc00e24b92 CREATED -> EXPIRED [Wed Nov 4 05:31:09.970000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1830.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["851e5486-74fa-43a8-b1f5-a0bc00e24b92"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:31:09.970000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=851e5486-74fa-43a8-b1f5-a0bc00e24b92 [Wed Nov 4 05:31:09.970000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=851e5486-74fa-43a8-b1f5-a0bc00e24b92 expired (expires_at 2026-11-04 05:31:07Z, session_status=created) [Wed Nov 4 05:31:09.971000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1832.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:31:09Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:31:09.971000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:31:09.972000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1833.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:31:09Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:31:09.973000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.1ms idle=1834.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:31:09.973000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job: no CREATED payment left, not rescheduling [Wed Nov 4 05:32:53.317000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="global_table" db=0.7ms idle=1174.6ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 05:35:47.723000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] GET /tabby/demo [Wed Nov 4 05:35:47.725000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] Sent 200 in 2ms [Wed Nov 4 05:35:48.129000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] POST /tabby/demo/summary [Wed Nov 4 05:35:48.130000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] Sent 200 in 821µs [Wed Nov 4 05:35:49.898000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] POST /tabby/demo/eligibility [Wed Nov 4 05:35:50.184000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:42076] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:35:50.184000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:42076] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:35:50.188000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK source="tabby_sim_faults" db=0.9ms idle=1047.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:35:50.298000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK db=98.1ms queue=0.4ms idle=1057.6ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["61ac3557-3276-4e9d-8291-070d25d78c54", "CREATED", "AED", "7387e89e-7cf0-4c57-bb46-1844eff4d616", "slice9", ~U[2026-11-04 05:47:50Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:45:50Z], ~N[2026-11-04 05:35:50], ~N[2026-11-04 05:35:50]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:35:50.300000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:42076] [TabbySim] checkout payment=61ac3557-3276-4e9d-8291-070d25d78c54 session=7387e89e-7cf0-4c57-bb46-1844eff4d616 decision=created reason=nil amount=850.00 AED [Wed Nov 4 05:35:50.301000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1161.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:35:50.369000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client 127.0.0.1:42076] [TabbySim] expiry job 399282 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:35:50.369000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:42076] Sent 200 in 185ms [Wed Nov 4 05:35:50.370000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] checkout post /api/v2/checkout -> 200 (467 ms, attempt 1) [Wed Nov 4 05:35:50.373000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] session created payment=61ac3557-3276-4e9d-8291-070d25d78c54 [Wed Nov 4 05:35:50.373000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 05:35:50.373000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] Sent 200 in 475ms [Wed Nov 4 05:36:06.442000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] POST /tabby/demo/summary [Wed Nov 4 05:36:06.443000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] Sent 200 in 774µs [Wed Nov 4 05:36:06.769000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62751] POST /tabby/demo/summary [Wed Nov 4 05:36:06.770000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62751] Sent 200 in 560µs [Wed Nov 4 05:36:07.489000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62751] POST /tabby/demo/summary [Wed Nov 4 05:36:07.490000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62751] Sent 200 in 790µs [Wed Nov 4 05:36:07.592000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] POST /tabby/demo/eligibility [Wed Nov 4 05:36:07.851000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:42076] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:36:07.851000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:42076] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "6700.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:36:07.852000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK source="tabby_sim_faults" db=0.5ms queue=0.1ms idle=1520.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:36:07.892000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK db=39.1ms queue=0.3ms idle=1337.6ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`rejection_reason`,`rejection_reason_code`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["9e64e852-18c9-4327-81b7-ce1132c2996a", "CREATED", "AED", "56511970-29ea-425c-bda1-6a2d26c7cdcc", "slice9", ~U[2026-11-04 05:48:07Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "6700.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "rejected", false, Decimal.new("6700.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], "order_amount_too_high", "not_enough_limit", ~U[2026-11-04 05:46:07Z], ~N[2026-11-04 05:36:07], ~N[2026-11-04 05:36:07]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:36:07.892000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:42076] [TabbySim] checkout payment=9e64e852-18c9-4327-81b7-ce1132c2996a session=56511970-29ea-425c-bda1-6a2d26c7cdcc decision=rejected reason="order_amount_too_high" amount=6700.00 AED [Wed Nov 4 05:36:07.893000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.1ms idle=1294.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:36:07.895000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:42076] Sent 200 in 44ms [Wed Nov 4 05:36:07.896000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] checkout post /api/v2/checkout -> 200 (304 ms, attempt 1) [Wed Nov 4 05:36:07.896000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Wed Nov 4 05:36:07.896000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] eligibility: hide reason=order_amount_too_high (amount=6700.00 AED) [Wed Nov 4 05:36:07.896000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] Sent 200 in 304ms [Wed Nov 4 05:36:08.308000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] POST /tabby/demo/eligibility [Wed Nov 4 05:36:08.566000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:42076] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:36:08.566000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:42076] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "6700.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:36:08.567000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK source="tabby_sim_faults" db=0.4ms idle=714.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:36:08.601000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK db=33.1ms idle=675.3ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`rejection_reason`,`rejection_reason_code`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["e21c1e67-cbc1-4dd9-ac24-503638884290", "CREATED", "AED", "4e67d148-1c58-4599-9cca-df6580d61fb8", "slice9", ~U[2026-11-04 05:48:08Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "6700.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "rejected", false, Decimal.new("6700.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], "order_amount_too_high", "not_enough_limit", ~U[2026-11-04 05:46:08Z], ~N[2026-11-04 05:36:08], ~N[2026-11-04 05:36:08]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:36:08.601000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:42076] [TabbySim] checkout payment=e21c1e67-cbc1-4dd9-ac24-503638884290 session=4e67d148-1c58-4599-9cca-df6580d61fb8 decision=rejected reason="order_amount_too_high" amount=6700.00 AED [Wed Nov 4 05:36:08.602000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK source="tabby_sim_payments" db=0.5ms idle=707.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:36:08.603000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:42076] Sent 200 in 37ms [Wed Nov 4 05:36:08.604000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] checkout post /api/v2/checkout -> 200 (295 ms, attempt 1) [Wed Nov 4 05:36:08.604000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Wed Nov 4 05:36:08.604000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] eligibility: hide reason=order_amount_too_high (amount=6700.00 AED) [Wed Nov 4 05:36:08.604000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] Sent 200 in 295ms [Wed Nov 4 05:36:33.963000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] POST /tabby/demo/summary [Wed Nov 4 05:36:33.963000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] Sent 200 in 599µs [Wed Nov 4 05:36:34.436000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] POST /tabby/demo/summary [Wed Nov 4 05:36:34.436000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] Sent 200 in 614µs [Wed Nov 4 05:36:34.755000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62751] POST /tabby/demo/eligibility [Wed Nov 4 05:36:34.986000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:42076] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:36:34.987000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:42076] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:36:34.988000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK source="tabby_sim_faults" db=1.2ms idle=848.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:36:35.030000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK db=39.9ms queue=1.1ms idle=849.9ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["21589009-8e1f-460c-9d49-ad456ee4e130", "CREATED", "AED", "b78252c4-8dcf-458f-bcc1-57bd7caa649e", "slice9", ~U[2026-11-04 05:48:34Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:46:34Z], ~N[2026-11-04 05:36:34], ~N[2026-11-04 05:36:34]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:36:35.031000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:42076] [TabbySim] checkout payment=21589009-8e1f-460c-9d49-ad456ee4e130 session=b78252c4-8dcf-458f-bcc1-57bd7caa649e decision=created reason=nil amount=850.00 AED [Wed Nov 4 05:36:35.032000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK source="tabby_sim_payments" db=1.0ms idle=891.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:36:35.035000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:42076] Sent 200 in 48ms [Wed Nov 4 05:36:35.035000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:62751] [Tabby] checkout post /api/v2/checkout -> 200 (279 ms, attempt 1) [Wed Nov 4 05:36:35.035000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:62751] [Tabby] session created payment=21589009-8e1f-460c-9d49-ad456ee4e130 [Wed Nov 4 05:36:35.036000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:62751] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 05:36:35.036000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62751] Sent 200 in 280ms [Wed Nov 4 05:36:35.252000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] POST /tabby/demo/eligibility [Wed Nov 4 05:36:35.515000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:42076] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:36:35.515000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:42076] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:36:35.516000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK source="tabby_sim_faults" db=0.8ms idle=636.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:36:35.581000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK db=64.0ms queue=0.3ms idle=528.2ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["ae5022ac-b295-4f57-b34a-61da49a056b1", "CREATED", "AED", "fe544aaa-7a40-48cd-bc51-1aef637e7fb6", "slice9", ~U[2026-11-04 05:48:35Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:46:35Z], ~N[2026-11-04 05:36:35], ~N[2026-11-04 05:36:35]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:36:35.582000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:42076] [TabbySim] checkout payment=ae5022ac-b295-4f57-b34a-61da49a056b1 session=fe544aaa-7a40-48cd-bc51-1aef637e7fb6 decision=created reason=nil amount=850.00 AED [Wed Nov 4 05:36:35.582000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK source="tabby_sim_payments" db=0.4ms idle=551.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:36:35.584000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:42076] Sent 200 in 69ms [Wed Nov 4 05:36:35.584000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] checkout post /api/v2/checkout -> 200 (332 ms, attempt 1) [Wed Nov 4 05:36:35.584000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] session created payment=ae5022ac-b295-4f57-b34a-61da49a056b1 [Wed Nov 4 05:36:35.584000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 05:36:35.585000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] Sent 200 in 333ms [Wed Nov 4 05:36:50.173000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] POST /tabby/demo/summary [Wed Nov 4 05:36:50.174000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] Sent 200 in 611µs [Wed Nov 4 05:36:50.983000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] POST /tabby/demo/eligibility [Wed Nov 4 05:36:51.297000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=443.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:36:51Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:36:51.297000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:36:51.299000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=189.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:36:51Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:36:51.300000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=160.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:36:51.335000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399286 scheduled in 60s (5 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:36:51.343000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:42076] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:36:51.344000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:42076] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "650.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:36:51.346000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK source="tabby_sim_faults" db=1.1ms queue=0.2ms idle=205.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:36:51.400000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK db=53.2ms queue=0.4ms idle=161.5ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["415f227a-5784-4e1b-8431-f395826db08e", "CREATED", "AED", "25c37d93-53a8-40c9-92c3-5d7590dede12", "slice9", ~U[2026-11-04 05:48:51Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "650.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("650.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:46:51Z], ~N[2026-11-04 05:36:51], ~N[2026-11-04 05:36:51]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:36:51.400000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:42076] [TabbySim] checkout payment=415f227a-5784-4e1b-8431-f395826db08e session=25c37d93-53a8-40c9-92c3-5d7590dede12 decision=created reason=nil amount=650.00 AED [Wed Nov 4 05:36:51.401000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.4ms idle=104.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:36:51.403000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:42076] Sent 200 in 59ms [Wed Nov 4 05:36:51.404000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] checkout post /api/v2/checkout -> 200 (421 ms, attempt 1) [Wed Nov 4 05:36:51.404000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] session created payment=415f227a-5784-4e1b-8431-f395826db08e [Wed Nov 4 05:36:51.404000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] eligibility: show (amount=650.00 AED) [Wed Nov 4 05:36:51.404000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] Sent 200 in 421ms [Wed Nov 4 05:37:06.038000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] POST /tabby/demo/summary [Wed Nov 4 05:37:06.038000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] Sent 200 in 552µs [Wed Nov 4 05:37:07.012000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] POST /tabby/demo/eligibility [Wed Nov 4 05:37:07.324000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:42076] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:37:07.325000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:42076] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "970.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:37:07.325000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK source="tabby_sim_faults" db=0.4ms idle=803.6ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:37:07.388000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK db=62.3ms idle=542.6ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["5d74aab3-a84d-4535-94af-ff39ad7a59ba", "CREATED", "AED", "59dfdcbd-e3dc-49f1-9969-235b304e88c1", "slice9", ~U[2026-11-04 05:49:07Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "970.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("970.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:47:07Z], ~N[2026-11-04 05:37:07], ~N[2026-11-04 05:37:07]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:37:07.389000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:42076] [TabbySim] checkout payment=5d74aab3-a84d-4535-94af-ff39ad7a59ba session=59dfdcbd-e3dc-49f1-9969-235b304e88c1 decision=created reason=nil amount=970.00 AED [Wed Nov 4 05:37:07.390000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.1ms idle=521.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:37:07.392000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:42076] Sent 200 in 68ms [Wed Nov 4 05:37:07.393000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] checkout post /api/v2/checkout -> 200 (381 ms, attempt 1) [Wed Nov 4 05:37:07.393000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] session created payment=5d74aab3-a84d-4535-94af-ff39ad7a59ba [Wed Nov 4 05:37:07.393000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] eligibility: show (amount=970.00 AED) [Wed Nov 4 05:37:07.393000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] Sent 200 in 381ms [Wed Nov 4 05:37:52.547000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1406.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:37:52Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:37:52.547000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:37:52.548000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1407.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:37:52Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:37:52.549000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1409.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:37:52.619000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399289 scheduled in 60s (7 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:38:05.423000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] POST /tabby/demo/summary [Wed Nov 4 05:38:05.423000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] Sent 200 in 553µs [Wed Nov 4 05:38:06.222000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] POST /tabby/demo/eligibility [Wed Nov 4 05:38:06.488000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:42076] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:38:06.488000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:42076] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "873.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:38:06.489000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK source="tabby_sim_faults" db=0.5ms idle=1001.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:38:06.669000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK db=178.6ms queue=0.5ms idle=472.4ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["1fefe561-8526-4433-bf83-fc58d6a6228b", "CREATED", "AED", "f6b818ed-0a43-4257-8d72-4c626a03976b", "slice9", ~U[2026-11-04 05:50:06Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "873.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("873.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:48:06Z], ~N[2026-11-04 05:38:06], ~N[2026-11-04 05:38:06]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:38:06.669000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:42076] [TabbySim] checkout payment=1fefe561-8526-4433-bf83-fc58d6a6228b session=f6b818ed-0a43-4257-8d72-4c626a03976b decision=created reason=nil amount=873.00 AED [Wed Nov 4 05:38:06.670000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK source="tabby_sim_payments" db=0.5ms idle=567.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:38:06.672000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:42076] Sent 200 in 184ms [Wed Nov 4 05:38:06.673000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] checkout post /api/v2/checkout -> 200 (450 ms, attempt 1) [Wed Nov 4 05:38:06.673000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] session created payment=1fefe561-8526-4433-bf83-fc58d6a6228b [Wed Nov 4 05:38:06.673000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] eligibility: show (amount=873.00 AED) [Wed Nov 4 05:38:06.673000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] Sent 200 in 451ms [Wed Nov 4 05:38:21.219000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] POST /tabby/demo/summary [Wed Nov 4 05:38:21.219000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] Sent 200 in 664µs [Wed Nov 4 05:38:22.171000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] POST /tabby/demo/eligibility [Wed Nov 4 05:38:22.437000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:42076] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:38:22.438000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:42076] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "970.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:38:22.439000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK source="tabby_sim_faults" db=0.5ms idle=419.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:38:22.488000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK db=48.4ms idle=300.2ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["f7fe86e2-7dbc-4eca-91ed-2a7561c3bb49", "CREATED", "AED", "10dc87b3-d53e-4047-b6f4-e68b482e68f4", "slice9", ~U[2026-11-04 05:50:22Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "970.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("970.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:48:22Z], ~N[2026-11-04 05:38:22], ~N[2026-11-04 05:38:22]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:38:22.488000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:42076] [TabbySim] checkout payment=f7fe86e2-7dbc-4eca-91ed-2a7561c3bb49 session=10dc87b3-d53e-4047-b6f4-e68b482e68f4 decision=created reason=nil amount=970.00 AED [Wed Nov 4 05:38:22.489000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK source="tabby_sim_payments" db=0.8ms idle=349.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:38:22.491000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:42076] Sent 200 in 53ms [Wed Nov 4 05:38:22.492000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] checkout post /api/v2/checkout -> 200 (321 ms, attempt 1) [Wed Nov 4 05:38:22.492000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] session created payment=f7fe86e2-7dbc-4eca-91ed-2a7561c3bb49 [Wed Nov 4 05:38:22.492000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] eligibility: show (amount=970.00 AED) [Wed Nov 4 05:38:22.492000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] Sent 200 in 321ms [Wed Nov 4 05:38:28.462000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] POST /tabby/demo/summary [Wed Nov 4 05:38:28.462000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] Sent 200 in 541µs [Wed Nov 4 05:38:29.247000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] POST /tabby/demo/eligibility [Wed Nov 4 05:38:29.470000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:42076] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:38:29.470000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:42076] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "873.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:38:29.471000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK source="tabby_sim_faults" db=0.8ms idle=1331.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:38:29.501000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK db=29.0ms idle=1332.4ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["1e7a7758-0eb7-46a8-8991-981e6f5604ec", "CREATED", "AED", "f797ae8a-f37e-4f64-9b23-684358990b5e", "slice9", ~U[2026-11-04 05:50:29Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "873.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("873.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:48:29Z], ~N[2026-11-04 05:38:29], ~N[2026-11-04 05:38:29]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:38:29.501000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:42076] [TabbySim] checkout payment=1e7a7758-0eb7-46a8-8991-981e6f5604ec session=f797ae8a-f37e-4f64-9b23-684358990b5e decision=created reason=nil amount=873.00 AED [Wed Nov 4 05:38:29.502000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1362.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:38:29.503000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:42076] Sent 200 in 33ms [Wed Nov 4 05:38:29.504000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] checkout post /api/v2/checkout -> 200 (257 ms, attempt 1) [Wed Nov 4 05:38:29.504000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] session created payment=1e7a7758-0eb7-46a8-8991-981e6f5604ec [Wed Nov 4 05:38:29.504000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] eligibility: show (amount=873.00 AED) [Wed Nov 4 05:38:29.504000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] Sent 200 in 257ms [Wed Nov 4 05:38:49.893000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] POST /tabby/demo/place [Wed Nov 4 05:38:49.958000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:54703] QUERY OK db=58.0ms queue=0.4ms idle=1299.3ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`amount`,`needs_attention`,`order_reference`,`cancel_url`,`captured_amount`,`failure_url`,`refunded_amount`,`success_url`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["b764f4fe-99a1-4bd0-afaf-2271ac21324d", "new", "AED", "slice9", Decimal.new("873.00"), false, "DEMO-976F25D5", "http://78.47.213.209:4030/tabby/demo/result/cancel?lang=en&order=DEMO-976F25D5", Decimal.new("0"), "http://78.47.213.209:4030/tabby/demo/result/failure?lang=en&order=DEMO-976F25D5", Decimal.new("0"), "http://78.47.213.209:4030/tabby/demo/result/success?lang=en&order=DEMO-976F25D5", ~N[2026-11-04 05:38:49], ~N[2026-11-04 05:38:49]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Wed Nov 4 05:38:50.184000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:35496] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:38:50.184000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:35496] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "en", "merchant_code" => "slice9", "merchant_urls" => %{"cancel" => "http://78.47.213.209:4030/tabby/return/b764f4fe-99a1-4bd0-afaf-2271ac21324d/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/b764f4fe-99a1-4bd0-afaf-2271ac21324d/failure", "success" => "http://78.47.213.209:4030/tabby/return/b764f4fe-99a1-4bd0-afaf-2271ac21324d/success"}, "payment" => %{"amount" => "873.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"discount_amount" => "97.00", "items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo sneakers", "unit_price" => "320.00"}], "reference_id" => "DEMO-976F25D5"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:38:50.185000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:35496] QUERY OK source="tabby_sim_faults" db=0.5ms idle=1045.6ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:38:50.210000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:35496] QUERY OK db=23.0ms queue=0.4ms idle=1046.7ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`buyer_history`,`captures`,`is_test`,`lang`,`merchant_urls`,`refunds`,`session_expires_at`,`shipping_address`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["84d13949-ac96-43b5-bac5-d7b9bb450f73", "CREATED", "AED", "d1f3a725-3d35-40a6-a1b0-74b70358c9d1", "slice9", ~U[2026-11-04 05:50:50Z], %{"lang" => "en", "merchant_code" => "slice9", "merchant_urls" => %{"cancel" => "http://78.47.213.209:4030/tabby/return/b764f4fe-99a1-4bd0-afaf-2271ac21324d/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/b764f4fe-99a1-4bd0-afaf-2271ac21324d/failure", "success" => "http://78.47.213.209:4030/tabby/return/b764f4fe-99a1-4bd0-afaf-2271ac21324d/success"}, "payment" => %{"amount" => "873.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"discount_amount" => "97.00", "items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo sneakers", "unit_price" => "320.00"}], "reference_id" => "DEMO-976F25D5"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "97", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo headphones", "unit_price" => "650"}, %{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo sneakers", "unit_price" => "320"}], "reference_id" => "DEMO-976F25D5", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("873.00"), %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, %{"registered_since" => "2023-02-01T10:00:00Z"}, [], true, "en", %{"cancel" => "http://78.47.213.209:4030/tabby/return/b764f4fe-99a1-4bd0-afaf-2271ac21324d/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/b764f4fe-99a1-4bd0-afaf-2271ac21324d/failure", "success" => "http://78.47.213.209:4030/tabby/return/b764f4fe-99a1-4bd0-afaf-2271ac21324d/success"}, [], ~U[2026-11-04 05:48:50Z], %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}, ~N[2026-11-04 05:38:50], ~N[2026-11-04 05:38:50]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:38:50.210000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:35496] [TabbySim] checkout payment=84d13949-ac96-43b5-bac5-d7b9bb450f73 session=d1f3a725-3d35-40a6-a1b0-74b70358c9d1 decision=created reason=nil amount=873.00 AED [Wed Nov 4 05:38:50.211000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:35496] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1071.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:38:50.212000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:35496] Sent 200 in 28ms [Wed Nov 4 05:38:50.213000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] checkout post /api/v2/checkout -> 200 (255 ms, attempt 1) [Wed Nov 4 05:38:50.213000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] session created payment=84d13949-ac96-43b5-bac5-d7b9bb450f73 [Wed Nov 4 05:38:50.214000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:54703] QUERY OK source="tabby_payments" db=0.6ms idle=610.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["b764f4fe-99a1-4bd0-afaf-2271ac21324d"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Wed Nov 4 05:38:50.278000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:54703] QUERY OK source="tabby_payments" db=63.3ms queue=0.8ms idle=528.8ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-04 05:58:50Z], "84d13949-ac96-43b5-bac5-d7b9bb450f73", "d1f3a725-3d35-40a6-a1b0-74b70358c9d1", ~N[2026-11-04 05:38:50], "b764f4fe-99a1-4bd0-afaf-2271ac21324d"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Wed Nov 4 05:38:50.279000 2026] [DaProductApp.Tabby.Sessions:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] session created attempt=b764f4fe-99a1-4bd0-afaf-2271ac21324d payment=84d13949-ac96-43b5-bac5-d7b9bb450f73 [Wed Nov 4 05:38:50.313000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] Sent 200 in 420ms [Wed Nov 4 05:38:50.754000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] GET /tabby-sim/hpp/d1f3a725-3d35-40a6-a1b0-74b70358c9d1 [Wed Nov 4 05:38:50.754000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 115.99.167.137:54703] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "d1f3a725-3d35-40a6-a1b0-74b70358c9d1"} Pipelines: [:tabby_sim_hpp] [Wed Nov 4 05:38:50.763000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:54703] QUERY OK source="tabby_sim_payments" db=2.1ms queue=0.6ms idle=551.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["d1f3a725-3d35-40a6-a1b0-74b70358c9d1"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Wed Nov 4 05:38:50.781000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] Sent 200 in 26ms [Wed Nov 4 05:38:53.760000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1619.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:38:53Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:38:53.760000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:38:53.761000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.1ms idle=1621.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:38:53Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:38:53.762000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1622.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:38:53.828000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399293 scheduled in 60s (11 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:38:54.142000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] GET /tabby/demo [Wed Nov 4 05:38:54.145000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] Sent 200 in 3ms [Wed Nov 4 05:38:54.606000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] POST /tabby/demo/summary [Wed Nov 4 05:38:54.607000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] Sent 200 in 853µs [Wed Nov 4 05:38:55.420000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] POST /tabby/demo/eligibility [Wed Nov 4 05:38:55.682000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:42076] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:38:55.682000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:42076] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "873.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:38:55.685000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK source="tabby_sim_faults" db=1.9ms queue=0.1ms idle=543.6ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:38:55.721000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK db=35.2ms idle=546.2ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["12f7c32c-356f-44e8-965b-6c27ed1c8e85", "CREATED", "AED", "391b3bad-58f4-4cea-9807-171ba0e1fa8d", "slice9", ~U[2026-11-04 05:50:55Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "873.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("873.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:48:55Z], ~N[2026-11-04 05:38:55], ~N[2026-11-04 05:38:55]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:38:55.721000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:42076] [TabbySim] checkout payment=12f7c32c-356f-44e8-965b-6c27ed1c8e85 session=391b3bad-58f4-4cea-9807-171ba0e1fa8d decision=created reason=nil amount=873.00 AED [Wed Nov 4 05:38:55.724000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK source="tabby_sim_payments" db=2.0ms queue=0.1ms idle=582.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:38:55.727000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:42076] Sent 200 in 45ms [Wed Nov 4 05:38:55.730000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] checkout post /api/v2/checkout -> 200 (309 ms, attempt 1) [Wed Nov 4 05:38:55.731000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] session created payment=12f7c32c-356f-44e8-965b-6c27ed1c8e85 [Wed Nov 4 05:38:55.732000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] eligibility: show (amount=873.00 AED) [Wed Nov 4 05:38:55.732000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] Sent 200 in 312ms [Wed Nov 4 05:38:59.155000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] POST /tabby/demo/summary [Wed Nov 4 05:38:59.155000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] Sent 200 in 542µs [Wed Nov 4 05:39:00.088000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] POST /tabby/demo/eligibility [Wed Nov 4 05:39:00.390000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:42076] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:39:00.391000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:42076] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "970.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:39:00.392000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK source="tabby_sim_faults" db=0.5ms idle=1252.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:39:00.529000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK db=135.6ms queue=0.4ms idle=1254.0ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["bb8377e0-2e20-4816-a6ea-58a1be925a09", "CREATED", "AED", "9fc65b42-d6fe-41a2-b9e3-2eab39e5ce5d", "slice9", ~U[2026-11-04 05:51:00Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "970.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("970.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:49:00Z], ~N[2026-11-04 05:39:00], ~N[2026-11-04 05:39:00]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:39:00.530000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:42076] [TabbySim] checkout payment=bb8377e0-2e20-4816-a6ea-58a1be925a09 session=9fc65b42-d6fe-41a2-b9e3-2eab39e5ce5d decision=created reason=nil amount=970.00 AED [Wed Nov 4 05:39:00.540000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK source="tabby_sim_payments" db=10.2ms idle=1390.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:39:00.544000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:42076] Sent 200 in 153ms [Wed Nov 4 05:39:00.545000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] checkout post /api/v2/checkout -> 200 (456 ms, attempt 1) [Wed Nov 4 05:39:00.545000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] session created payment=bb8377e0-2e20-4816-a6ea-58a1be925a09 [Wed Nov 4 05:39:00.546000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] eligibility: show (amount=970.00 AED) [Wed Nov 4 05:39:00.546000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] Sent 200 in 457ms [Wed Nov 4 05:39:13.744000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] POST /tabby/demo/summary [Wed Nov 4 05:39:13.745000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] Sent 200 in 1ms [Wed Nov 4 05:39:29.789000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] POST /tabby/demo/summary [Wed Nov 4 05:39:29.789000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] Sent 200 in 587µs [Wed Nov 4 05:39:30.675000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] POST /tabby/demo/eligibility [Wed Nov 4 05:39:30.955000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:42076] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:39:30.955000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:42076] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "985.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:39:30.957000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK source="tabby_sim_faults" db=0.6ms idle=1116.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:39:31.061000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK db=103.5ms idle=818.1ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["d2514d25-1eb9-4806-a2f1-15ba7511624c", "CREATED", "AED", "4bd8c001-9299-4c51-a657-e94061ee0c30", "slice9", ~U[2026-11-04 05:51:30Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "985.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("985.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:49:30Z], ~N[2026-11-04 05:39:30], ~N[2026-11-04 05:39:30]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:39:31.061000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:42076] [TabbySim] checkout payment=d2514d25-1eb9-4806-a2f1-15ba7511624c session=4bd8c001-9299-4c51-a657-e94061ee0c30 decision=created reason=nil amount=985.00 AED [Wed Nov 4 05:39:31.063000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK source="tabby_sim_payments" db=0.9ms idle=922.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:39:31.064000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:42076] Sent 200 in 109ms [Wed Nov 4 05:39:31.066000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] checkout post /api/v2/checkout -> 200 (391 ms, attempt 1) [Wed Nov 4 05:39:31.066000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] session created payment=d2514d25-1eb9-4806-a2f1-15ba7511624c [Wed Nov 4 05:39:31.066000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:54703] [Tabby] eligibility: show (amount=985.00 AED) [Wed Nov 4 05:39:31.066000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] Sent 200 in 391ms [Wed Nov 4 05:39:41.798000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] GET /tabby/demo [Wed Nov 4 05:39:41.802000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] Sent 200 in 3ms [Wed Nov 4 05:39:42.239000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] POST /tabby/demo/summary [Wed Nov 4 05:39:42.239000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54703] Sent 200 in 521µs [Wed Nov 4 05:39:43.072000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:59749] POST /tabby/demo/eligibility [Wed Nov 4 05:39:43.311000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:42076] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:39:43.311000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:42076] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "985.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:39:43.312000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK source="tabby_sim_faults" db=0.4ms idle=1172.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:39:43.341000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK db=28.4ms idle=1173.4ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["c0dc763c-b963-410f-bb7c-995af26b5d9a", "CREATED", "AED", "84a7ab84-30f8-40fc-a90e-3117297af6ec", "slice9", ~U[2026-11-04 05:51:43Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "985.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("985.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:49:43Z], ~N[2026-11-04 05:39:43], ~N[2026-11-04 05:39:43]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:39:43.341000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:42076] [TabbySim] checkout payment=c0dc763c-b963-410f-bb7c-995af26b5d9a session=84a7ab84-30f8-40fc-a90e-3117297af6ec decision=created reason=nil amount=985.00 AED [Wed Nov 4 05:39:43.342000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42076] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.1ms idle=1202.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:39:43.344000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:42076] Sent 200 in 33ms [Wed Nov 4 05:39:43.344000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:59749] [Tabby] checkout post /api/v2/checkout -> 200 (271 ms, attempt 1) [Wed Nov 4 05:39:43.344000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:59749] [Tabby] session created payment=c0dc763c-b963-410f-bb7c-995af26b5d9a [Wed Nov 4 05:39:43.345000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:59749] [Tabby] eligibility: show (amount=985.00 AED) [Wed Nov 4 05:39:43.345000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:59749] Sent 200 in 273ms [Wed Nov 4 05:39:54.080000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1940.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:39:54Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:39:54.080000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:39:54.081000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1177.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:39:54Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:39:54.082000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=942.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:39:54.139000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399294 scheduled in 60s (15 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:40:51.505000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.9ms idle=1362.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["slice9", ~U[2026-10-17 05:40:51Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:40:51.507000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=1363.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["slice9", ~N[2026-11-04 05:38:51], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:40:51.508000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=1364.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", ~N[2026-11-04 05:38:51], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:40:51.509000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.6ms queue=0.1ms idle=1365.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["slice9", ~U[2026-11-04 05:35:51Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:40:51.510000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=1107.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:40:51.510000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.3ms idle=367.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["b764f4fe-99a1-4bd0-afaf-2271ac21324d"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:40:51.770000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:41388] GET /tabby-sim/api/v2/payments/84d13949-ac96-43b5-bac5-d7b9bb450f73 [Wed Nov 4 05:40:51.770000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:41388] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "84d13949-ac96-43b5-bac5-d7b9bb450f73"} Pipelines: [:tabby_sim_api] [Wed Nov 4 05:40:51.772000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41388] QUERY OK source="tabby_sim_faults" db=0.8ms idle=365.6ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "84d13949-ac96-43b5-bac5-d7b9bb450f73"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 05:40:51.773000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41388] QUERY OK source="tabby_sim_faults" db=0.4ms idle=267.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:40:51.774000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41388] QUERY OK source="tabby_sim_payments" db=0.9ms idle=267.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["84d13949-ac96-43b5-bac5-d7b9bb450f73"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Wed Nov 4 05:40:51.774000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:41388] Sent 200 in 4ms [Wed Nov 4 05:40:51.775000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client -] [Tabby] retrieve get /api/v2/payments/84d13949-ac96-43b5-bac5-d7b9bb450f73 -> 200 (265 ms, attempt 1) [Wed Nov 4 05:40:51.775000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1031735] [client -] [Tabby] verify: attempt=b764f4fe-99a1-4bd0-afaf-2271ac21324d payment=84d13949-ac96-43b5-bac5-d7b9bb450f73 is still CREATED at Tabby; it will be looked at again [Wed Nov 4 05:40:51.777000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=1.2ms idle=268.7ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-04 05:38:51Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Wed Nov 4 05:40:51.778000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=0.9ms queue=0.2ms idle=269.1ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["slice9", ~N[2026-11-04 05:38:51], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Wed Nov 4 05:40:51.779000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=269.6ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:40:51.780000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.3ms idle=269.8ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["slice9", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:40:51.781000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=0.7ms idle=269.9ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Wed Nov 4 05:40:51.782000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=0.4ms idle=216.8ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Wed Nov 4 05:40:51.782000 2026] [DaProductApp.Tabby.Poller:info] [pid 1031735] [client -] [Tabby] poll: handled 1 (created:pending=1); 1 attempt(s) still watched [Wed Nov 4 05:40:55.615000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=472.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:40:55Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:40:55.616000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:40:55.616000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=473.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:40:55Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:40:55.617000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=474.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:40:55.677000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399302 scheduled in 60s (15 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:41:13.144000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54105] POST /tabby/demo/summary [Wed Nov 4 05:41:13.144000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54105] Sent 200 in 553µs [Wed Nov 4 05:41:13.975000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54105] POST /tabby/demo/eligibility [Wed Nov 4 05:41:14.231000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:38648] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:41:14.232000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:38648] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1305.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:41:14.235000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38648] QUERY OK source="tabby_sim_faults" db=0.6ms queue=0.1ms idle=1092.2ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:41:14.267000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38648] QUERY OK db=30.5ms queue=0.5ms idle=1093.4ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["32f35c23-ba15-4954-80b2-baf3e1ad6813", "CREATED", "AED", "1a970727-38f5-4a5d-a8d5-def5fabed1a6", "slice9", ~U[2026-11-04 05:53:14Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1305.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1305.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:51:14Z], ~N[2026-11-04 05:41:14], ~N[2026-11-04 05:41:14]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:41:14.267000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:38648] [TabbySim] checkout payment=32f35c23-ba15-4954-80b2-baf3e1ad6813 session=1a970727-38f5-4a5d-a8d5-def5fabed1a6 decision=created reason=nil amount=1305.00 AED [Wed Nov 4 05:41:14.268000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38648] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.3ms idle=1125.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:41:14.270000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:38648] Sent 200 in 39ms [Wed Nov 4 05:41:14.271000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:54105] [Tabby] checkout post /api/v2/checkout -> 200 (296 ms, attempt 1) [Wed Nov 4 05:41:14.272000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:54105] [Tabby] session created payment=32f35c23-ba15-4954-80b2-baf3e1ad6813 [Wed Nov 4 05:41:14.272000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:54105] [Tabby] eligibility: show (amount=1305.00 AED) [Wed Nov 4 05:41:14.272000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54105] Sent 200 in 297ms [Wed Nov 4 05:41:45.396000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54105] POST /tabby/demo/place [Wed Nov 4 05:41:45.457000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:54105] QUERY OK db=60.2ms idle=1254.9ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`amount`,`needs_attention`,`order_reference`,`cancel_url`,`captured_amount`,`failure_url`,`refunded_amount`,`success_url`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["9ce3ade2-0e41-40ed-ab12-0930ef90cebe", "new", "AED", "slice9", Decimal.new("1305.00"), false, "DEMO-5089D76E", "http://78.47.213.209:4030/tabby/demo/result/cancel?lang=en&order=DEMO-5089D76E", Decimal.new("0"), "http://78.47.213.209:4030/tabby/demo/result/failure?lang=en&order=DEMO-5089D76E", Decimal.new("0"), "http://78.47.213.209:4030/tabby/demo/result/success?lang=en&order=DEMO-5089D76E", ~N[2026-11-04 05:41:45], ~N[2026-11-04 05:41:45]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Wed Nov 4 05:41:45.738000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:41388] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:41:45.738000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:41388] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "en", "merchant_code" => "slice9", "merchant_urls" => %{"cancel" => "http://78.47.213.209:4030/tabby/return/9ce3ade2-0e41-40ed-ab12-0930ef90cebe/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/9ce3ade2-0e41-40ed-ab12-0930ef90cebe/failure", "success" => "http://78.47.213.209:4030/tabby/return/9ce3ade2-0e41-40ed-ab12-0930ef90cebe/success"}, "payment" => %{"amount" => "1305.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+966512345678"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 2, "title" => "Demo sneakers", "unit_price" => "320.00"}], "reference_id" => "DEMO-5089D76E", "shipping_amount" => "15.00"}, "shipping_address" => %{"address" => "Demo Tower 4, Office 302, DIFC", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:41:45.739000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41388] QUERY OK source="tabby_sim_faults" db=0.4ms idle=596.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:41:45.788000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41388] QUERY OK db=46.2ms queue=1.3ms idle=597.6ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`buyer_history`,`captures`,`is_test`,`lang`,`merchant_urls`,`refunds`,`session_expires_at`,`shipping_address`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["f2898b2c-ed95-45a3-a546-41fe6b179113", "CREATED", "AED", "232ae1b9-be71-4baf-9b1e-9fc345576f18", "slice9", ~U[2026-11-04 05:53:45Z], %{"lang" => "en", "merchant_code" => "slice9", "merchant_urls" => %{"cancel" => "http://78.47.213.209:4030/tabby/return/9ce3ade2-0e41-40ed-ab12-0930ef90cebe/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/9ce3ade2-0e41-40ed-ab12-0930ef90cebe/failure", "success" => "http://78.47.213.209:4030/tabby/return/9ce3ade2-0e41-40ed-ab12-0930ef90cebe/success"}, "payment" => %{"amount" => "1305.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+966512345678"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 2, "title" => "Demo sneakers", "unit_price" => "320.00"}], "reference_id" => "DEMO-5089D76E", "shipping_amount" => "15.00"}, "shipping_address" => %{"address" => "Demo Tower 4, Office 302, DIFC", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "0", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo headphones", "unit_price" => "650"}, %{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 2, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo sneakers", "unit_price" => "320"}], "reference_id" => "DEMO-5089D76E", "shipping_amount" => "15", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1305.00"), %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+966512345678"}, %{"registered_since" => "2023-02-01T10:00:00Z"}, [], true, "en", %{"cancel" => "http://78.47.213.209:4030/tabby/return/9ce3ade2-0e41-40ed-ab12-0930ef90cebe/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/9ce3ade2-0e41-40ed-ab12-0930ef90cebe/failure", "success" => "http://78.47.213.209:4030/tabby/return/9ce3ade2-0e41-40ed-ab12-0930ef90cebe/success"}, [], ~U[2026-11-04 05:51:45Z], %{"address" => "Demo Tower 4, Office 302, DIFC", "city" => "Dubai", "zip" => "00000"}, ~N[2026-11-04 05:41:45], ~N[2026-11-04 05:41:45]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:41:45.788000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:41388] [TabbySim] checkout payment=f2898b2c-ed95-45a3-a546-41fe6b179113 session=232ae1b9-be71-4baf-9b1e-9fc345576f18 decision=created reason=nil amount=1305.00 AED [Wed Nov 4 05:41:45.789000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41388] QUERY OK source="tabby_sim_payments" db=0.8ms queue=0.2ms idle=646.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:41:45.791000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:41388] Sent 200 in 53ms [Wed Nov 4 05:41:45.792000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:54105] [Tabby] checkout post /api/v2/checkout -> 200 (334 ms, attempt 1) [Wed Nov 4 05:41:45.792000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:54105] [Tabby] session created payment=f2898b2c-ed95-45a3-a546-41fe6b179113 [Wed Nov 4 05:41:45.793000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:54105] QUERY OK source="tabby_payments" db=0.4ms idle=610.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9ce3ade2-0e41-40ed-ab12-0930ef90cebe"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Wed Nov 4 05:41:45.848000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:54105] QUERY OK source="tabby_payments" db=54.8ms queue=0.5ms idle=527.5ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-04 06:01:45Z], "f2898b2c-ed95-45a3-a546-41fe6b179113", "232ae1b9-be71-4baf-9b1e-9fc345576f18", ~N[2026-11-04 05:41:45], "9ce3ade2-0e41-40ed-ab12-0930ef90cebe"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Wed Nov 4 05:41:45.849000 2026] [DaProductApp.Tabby.Sessions:info] [pid 1031735] [client 115.99.167.137:54105] [Tabby] session created attempt=9ce3ade2-0e41-40ed-ab12-0930ef90cebe payment=f2898b2c-ed95-45a3-a546-41fe6b179113 [Wed Nov 4 05:41:45.850000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54105] Sent 200 in 454ms [Wed Nov 4 05:41:46.311000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54105] GET /tabby-sim/hpp/232ae1b9-be71-4baf-9b1e-9fc345576f18 [Wed Nov 4 05:41:46.311000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 115.99.167.137:54105] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "232ae1b9-be71-4baf-9b1e-9fc345576f18"} Pipelines: [:tabby_sim_hpp] [Wed Nov 4 05:41:46.312000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:54105] QUERY OK source="tabby_sim_payments" db=0.8ms queue=0.1ms idle=680.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["232ae1b9-be71-4baf-9b1e-9fc345576f18"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Wed Nov 4 05:41:46.313000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54105] Sent 200 in 2ms [Wed Nov 4 05:41:52.416000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54105] POST /tabby-sim/hpp/232ae1b9-be71-4baf-9b1e-9fc345576f18 [Wed Nov 4 05:41:52.416000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 115.99.167.137:54105] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "approve", "otp" => "8888", "session_id" => "232ae1b9-be71-4baf-9b1e-9fc345576f18"} Pipelines: [:tabby_sim_hpp] [Wed Nov 4 05:41:52.417000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:54105] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1274.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["232ae1b9-be71-4baf-9b1e-9fc345576f18"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Wed Nov 4 05:41:52.452000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:54105] QUERY OK source="tabby_sim_payments" db=34.2ms queue=0.3ms idle=1275.7ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["AUTHORIZED", ~N[2026-11-04 05:41:52], "f2898b2c-ed95-45a3-a546-41fe6b179113", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:41:52.453000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client 115.99.167.137:54105] [TabbySim] payment=f2898b2c-ed95-45a3-a546-41fe6b179113 CREATED -> AUTHORIZED [Wed Nov 4 05:41:52.454000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:54105] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1310.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["f2898b2c-ed95-45a3-a546-41fe6b179113"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:41:52.457000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:54105] QUERY OK source="tabby_sim_webhooks" db=0.3ms queue=0.3ms idle=1314.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["slice9"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Wed Nov 4 05:41:52.457000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client 115.99.167.137:54105] [TabbySim] no webhook registered for merchant_code=slice9; event=authorize payment=f2898b2c-ed95-45a3-a546-41fe6b179113 [Wed Nov 4 05:41:52.457000 2026] [DaProductApp.TabbySim.Hpp:info] [pid 1031735] [client 115.99.167.137:54105] [TabbySim] hpp payment=f2898b2c-ed95-45a3-a546-41fe6b179113 action=approve status=AUTHORIZED [Wed Nov 4 05:41:52.458000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54105] Sent 302 in 41ms [Wed Nov 4 05:41:52.836000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54105] GET /tabby/return/9ce3ade2-0e41-40ed-ab12-0930ef90cebe/success [Wed Nov 4 05:41:52.841000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:54105] QUERY OK source="tabby_payments" db=0.8ms idle=698.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9ce3ade2-0e41-40ed-ab12-0930ef90cebe"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:41:52.884000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54105] Sent 302 in 48ms [Wed Nov 4 05:41:52.973000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=519.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9ce3ade2-0e41-40ed-ab12-0930ef90cebe"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:41:53.238000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:41388] GET /tabby-sim/api/v2/payments/f2898b2c-ed95-45a3-a546-41fe6b179113 [Wed Nov 4 05:41:53.238000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:41388] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "f2898b2c-ed95-45a3-a546-41fe6b179113"} Pipelines: [:tabby_sim_api] [Wed Nov 4 05:41:53.239000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41388] QUERY OK source="tabby_sim_faults" db=0.9ms idle=507.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "f2898b2c-ed95-45a3-a546-41fe6b179113"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 05:41:53.240000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41388] QUERY OK source="tabby_sim_faults" db=0.5ms idle=398.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:41:53.242000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41388] QUERY OK source="tabby_sim_payments" db=1.0ms idle=395.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["f2898b2c-ed95-45a3-a546-41fe6b179113"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Wed Nov 4 05:41:53.243000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:41388] Sent 200 in 5ms [Wed Nov 4 05:41:53.244000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client -] [Tabby] retrieve get /api/v2/payments/f2898b2c-ed95-45a3-a546-41fe6b179113 -> 200 (271 ms, attempt 1) [Wed Nov 4 05:41:53.280000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=35.2ms queue=0.4ms idle=360.6ms UPDATE `tabby_payments` AS t0 SET t0.`winner_key` = ?, t0.`authorized_at` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["3a2cfc769690518581fdd93b2fed7122df074c88f2c204b10ef5fe2407d3389e", ~U[2026-11-04 05:41:53Z], "authorized", ~N[2026-11-04 05:41:53], "9ce3ade2-0e41-40ed-ab12-0930ef90cebe", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Wed Nov 4 05:41:53.281000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.1ms idle=308.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9ce3ade2-0e41-40ed-ab12-0930ef90cebe"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:41:53.281000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1031735] [client -] [Tabby] verify: attempt=9ce3ade2-0e41-40ed-ab12-0930ef90cebe payment=f2898b2c-ed95-45a3-a546-41fe6b179113 created -> authorized [Wed Nov 4 05:41:53.300000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54105] GET /tabby/demo/result/success [Wed Nov 4 05:41:53.300000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54105] Sent 200 in 657µs [Wed Nov 4 05:41:53.437000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.1ms idle=253.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9ce3ade2-0e41-40ed-ab12-0930ef90cebe"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:41:53.492000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=49.7ms queue=0.3ms idle=201.7ms UPDATE `tabby_payments` AS t0 SET t0.`claimed_at` = ?, t0.`capture_reference_id` = ?, t0.`claimed_by` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [~U[2026-11-04 05:41:53Z], "capture-DEMO-5089D76E", "nonode@nohost", "capturing", ~N[2026-11-04 05:41:53], "9ce3ade2-0e41-40ed-ab12-0930ef90cebe", "authorized"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Wed Nov 4 05:41:53.493000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=250.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9ce3ade2-0e41-40ed-ab12-0930ef90cebe"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:41:53.494000 2026] [DaProductApp.Tabby.Capture:info] [pid 1031735] [client -] [Tabby] capture: attempt=9ce3ade2-0e41-40ed-ab12-0930ef90cebe payment=f2898b2c-ed95-45a3-a546-41fe6b179113 claimed (authorized -> capturing) [Wed Nov 4 05:41:53.741000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54105] GET /tabby/demo/status/9ce3ade2-0e41-40ed-ab12-0930ef90cebe [Wed Nov 4 05:41:53.746000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:54105] QUERY OK source="tabby_payments" db=0.8ms idle=312.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9ce3ade2-0e41-40ed-ab12-0930ef90cebe"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:41:53.746000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54105] Sent 200 in 5ms [Wed Nov 4 05:41:53.785000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:41388] POST /tabby-sim/api/v2/payments/f2898b2c-ed95-45a3-a546-41fe6b179113/captures [Wed Nov 4 05:41:53.785000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:41388] Processing with DaProductAppWeb.TabbySim.PaymentsController.capture/2 Parameters: %{"amount" => "1305.00", "id" => "f2898b2c-ed95-45a3-a546-41fe6b179113", "reference_id" => "capture-DEMO-5089D76E"} Pipelines: [:tabby_sim_api] [Wed Nov 4 05:41:53.787000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41388] QUERY OK source="tabby_sim_faults" db=0.9ms idle=348.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["capture", "f2898b2c-ed95-45a3-a546-41fe6b179113"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 05:41:53.787000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41388] QUERY OK source="tabby_sim_faults" db=0.4ms idle=304.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["capture"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:41:53.789000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41388] QUERY OK source="tabby_sim_payments" db=1.4ms idle=295.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["f2898b2c-ed95-45a3-a546-41fe6b179113"] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:227 [Wed Nov 4 05:41:53.789000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41388] QUERY OK db=0.2ms idle=295.8ms begin [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Wed Nov 4 05:41:53.791000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41388] QUERY OK source="tabby_sim_payments" db=0.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) FOR UPDATE ["f2898b2c-ed95-45a3-a546-41fe6b179113"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:231 [Wed Nov 4 05:41:53.792000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41388] QUERY OK source="tabby_sim_payments" db=0.6ms UPDATE `tabby_sim_payments` SET `status` = ?, `closed_at` = ?, `captures` = ?, `updated_at` = ? WHERE `id` = ? ["CLOSED", ~U[2026-11-04 05:41:53Z], [%{"amount" => "1305", "created_at" => "2026-11-04T05:41:53Z", "discount_amount" => "0", "id" => "eaa4b57b-21a5-4ceb-9e79-c216cd66b285", "items" => nil, "reference_id" => "capture-DEMO-5089D76E", "shipping_amount" => "0", "tax_amount" => "0"}], ~N[2026-11-04 05:41:53], "f2898b2c-ed95-45a3-a546-41fe6b179113"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:244 [Wed Nov 4 05:41:53.793000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client 127.0.0.1:41388] [TabbySim] capture payment=f2898b2c-ed95-45a3-a546-41fe6b179113 status=CLOSED [Wed Nov 4 05:41:53.818000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41388] QUERY OK db=24.8ms commit [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Wed Nov 4 05:41:53.820000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41388] QUERY OK source="tabby_sim_webhooks" db=1.6ms idle=271.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["slice9"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Wed Nov 4 05:41:53.820000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client 127.0.0.1:41388] [TabbySim] no webhook registered for merchant_code=slice9; event=capture payment=f2898b2c-ed95-45a3-a546-41fe6b179113 [Wed Nov 4 05:41:53.821000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41388] QUERY OK source="tabby_sim_webhooks" db=1.4ms idle=252.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["slice9"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Wed Nov 4 05:41:53.822000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client 127.0.0.1:41388] [TabbySim] no webhook registered for merchant_code=slice9; event=close payment=f2898b2c-ed95-45a3-a546-41fe6b179113 [Wed Nov 4 05:41:53.822000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:41388] Sent 200 in 37ms [Wed Nov 4 05:41:53.823000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client -] [Tabby] capture post /api/v2/payments/f2898b2c-ed95-45a3-a546-41fe6b179113/captures -> 200 (329 ms, attempt 1) [Wed Nov 4 05:41:53.878000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=54.1ms queue=0.4ms idle=191.8ms UPDATE `tabby_payments` AS t0 SET t0.`captured_amount` = ?, t0.`captured_at` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [Decimal.new("1305"), ~U[2026-11-04 05:41:53Z], "captured", ~N[2026-11-04 05:41:53], "9ce3ade2-0e41-40ed-ab12-0930ef90cebe", "capturing"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Wed Nov 4 05:41:53.880000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.3ms idle=224.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9ce3ade2-0e41-40ed-ab12-0930ef90cebe"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:41:53.881000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1031735] [client -] [Tabby] verify: attempt=9ce3ade2-0e41-40ed-ab12-0930ef90cebe payment=f2898b2c-ed95-45a3-a546-41fe6b179113 capturing -> captured [Wed Nov 4 05:41:53.881000 2026] [DaProductApp.Tabby.Capture:info] [pid 1031735] [client -] [Tabby] capture: attempt=9ce3ade2-0e41-40ed-ab12-0930ef90cebe payment=f2898b2c-ed95-45a3-a546-41fe6b179113 is captured [Wed Nov 4 05:41:56.858000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1714.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:41:56Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:41:56.858000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:41:56.859000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1716.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:41:56Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:41:56.860000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1717.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:41:56.909000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399306 scheduled in 60s (16 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:41:56.946000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54105] GET /tabby/demo/status/9ce3ade2-0e41-40ed-ab12-0930ef90cebe [Wed Nov 4 05:41:56.998000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:54105] QUERY OK source="tabby_payments" db=50.9ms idle=214.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9ce3ade2-0e41-40ed-ab12-0930ef90cebe"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:41:56.998000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54105] Sent 200 in 52ms [Wed Nov 4 05:42:30.131000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54105] GET /tabby/demo [Wed Nov 4 05:42:30.134000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54105] Sent 200 in 3ms [Wed Nov 4 05:42:30.644000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54105] POST /tabby/demo/summary [Wed Nov 4 05:42:30.644000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54105] Sent 200 in 587µs [Wed Nov 4 05:42:31.529000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54105] POST /tabby/demo/eligibility [Wed Nov 4 05:42:31.794000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:58698] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:42:31.794000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:58698] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:42:31.795000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:58698] QUERY OK source="tabby_sim_faults" db=0.5ms queue=0.1ms idle=1651.2ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:42:31.838000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:58698] QUERY OK db=41.5ms queue=0.6ms idle=1652.4ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["bbd0ae59-9f04-4a08-954b-0d9499c2f62d", "CREATED", "AED", "c2ec71a1-598b-4539-805e-acc721d67662", "slice9", ~U[2026-11-04 05:54:31Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:52:31Z], ~N[2026-11-04 05:42:31], ~N[2026-11-04 05:42:31]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:42:31.838000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:58698] [TabbySim] checkout payment=bbd0ae59-9f04-4a08-954b-0d9499c2f62d session=c2ec71a1-598b-4539-805e-acc721d67662 decision=created reason=nil amount=850.00 AED [Wed Nov 4 05:42:31.839000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:58698] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.3ms idle=1417.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:42:31.842000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:58698] Sent 200 in 47ms [Wed Nov 4 05:42:31.842000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:54105] [Tabby] checkout post /api/v2/checkout -> 200 (314 ms, attempt 1) [Wed Nov 4 05:42:31.843000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:54105] [Tabby] session created payment=bbd0ae59-9f04-4a08-954b-0d9499c2f62d [Wed Nov 4 05:42:31.843000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:54105] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 05:42:31.843000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54105] Sent 200 in 314ms [Wed Nov 4 05:42:53.082000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.2ms idle=1937.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["slice9", ~U[2026-10-17 05:42:53Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:42:53.084000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.7ms idle=1939.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["slice9", ~N[2026-11-04 05:40:53], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:42:53.086000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=1941.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", ~N[2026-11-04 05:40:53], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:42:53.087000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.8ms queue=0.1ms idle=1942.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["slice9", ~U[2026-11-04 05:37:53Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:42:53.088000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=1944.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:42:53.088000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=1092.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["b764f4fe-99a1-4bd0-afaf-2271ac21324d"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:42:53.317000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="global_table" db=0.9ms idle=166.4ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 05:42:53.343000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:41388] GET /tabby-sim/api/v2/payments/84d13949-ac96-43b5-bac5-d7b9bb450f73 [Wed Nov 4 05:42:53.344000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:41388] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "84d13949-ac96-43b5-bac5-d7b9bb450f73"} Pipelines: [:tabby_sim_api] [Wed Nov 4 05:42:53.345000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41388] QUERY OK source="tabby_sim_faults" db=0.9ms idle=345.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "84d13949-ac96-43b5-bac5-d7b9bb450f73"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 05:42:53.346000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41388] QUERY OK source="tabby_sim_faults" db=0.5ms idle=264.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:42:53.347000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41388] QUERY OK source="tabby_sim_payments" db=0.7ms idle=263.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["84d13949-ac96-43b5-bac5-d7b9bb450f73"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Wed Nov 4 05:42:53.347000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:41388] Sent 200 in 3ms [Wed Nov 4 05:42:53.348000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client -] [Tabby] retrieve get /api/v2/payments/84d13949-ac96-43b5-bac5-d7b9bb450f73 -> 200 (259 ms, attempt 1) [Wed Nov 4 05:42:53.348000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1031735] [client -] [Tabby] verify: attempt=b764f4fe-99a1-4bd0-afaf-2271ac21324d payment=84d13949-ac96-43b5-bac5-d7b9bb450f73 is still CREATED at Tabby; it will be looked at again [Wed Nov 4 05:42:53.349000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=0.4ms idle=264.3ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-04 05:40:53Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Wed Nov 4 05:42:53.351000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=0.8ms queue=0.7ms idle=263.8ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["slice9", ~N[2026-11-04 05:40:53], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Wed Nov 4 05:42:53.352000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=264.5ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:42:53.353000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.3ms idle=264.8ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["slice9", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:42:53.354000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=0.7ms queue=0.1ms idle=264.7ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Wed Nov 4 05:42:53.355000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=1.0ms idle=215.7ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Wed Nov 4 05:42:53.356000 2026] [DaProductApp.Tabby.Poller:info] [pid 1031735] [client -] [Tabby] poll: handled 1 (created:pending=1); 1 attempt(s) still watched [Wed Nov 4 05:42:58.210000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1066.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:42:58Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:42:58.210000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:42:58.211000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1067.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:42:58Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:42:58.212000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1068.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:42:58.245000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399312 scheduled in 60s (17 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:43:59.508000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1364.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:43:59Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:43:59.508000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:43:59.509000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1365.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:43:59Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:43:59.510000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1365.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:43:59.556000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399313 scheduled in 60s (17 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:44:39.146000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:50731] POST /tabby/demo/summary [Wed Nov 4 05:44:39.147000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:50731] Sent 200 in 889µs [Wed Nov 4 05:44:40.054000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:50731] POST /tabby/demo/eligibility [Wed Nov 4 05:44:40.281000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:60748] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:44:40.281000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:60748] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:44:40.282000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:60748] QUERY OK source="tabby_sim_faults" db=0.7ms idle=1138.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:44:40.321000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:60748] QUERY OK db=38.0ms idle=1139.8ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["fd75778d-e980-4f92-b43f-b55c3b399d72", "CREATED", "AED", "dfee5c5b-94f2-4553-bb05-7b3dbf5fc90d", "slice9", ~U[2026-11-04 05:56:40Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1050.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:54:40Z], ~N[2026-11-04 05:44:40], ~N[2026-11-04 05:44:40]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:44:40.322000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:60748] [TabbySim] checkout payment=fd75778d-e980-4f92-b43f-b55c3b399d72 session=dfee5c5b-94f2-4553-bb05-7b3dbf5fc90d decision=created reason=nil amount=1050.00 AED [Wed Nov 4 05:44:40.323000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:60748] QUERY OK source="tabby_sim_payments" db=0.8ms queue=0.5ms idle=1178.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:44:40.325000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:60748] Sent 200 in 44ms [Wed Nov 4 05:44:40.325000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:50731] [Tabby] checkout post /api/v2/checkout -> 200 (272 ms, attempt 1) [Wed Nov 4 05:44:40.326000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:50731] [Tabby] session created payment=fd75778d-e980-4f92-b43f-b55c3b399d72 [Wed Nov 4 05:44:40.326000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:50731] [Tabby] eligibility: show (amount=1050.00 AED) [Wed Nov 4 05:44:40.326000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:50731] Sent 200 in 272ms [Wed Nov 4 05:44:44.103000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:50731] POST /tabby/demo/summary [Wed Nov 4 05:44:44.103000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:50731] Sent 200 in 807µs [Wed Nov 4 05:44:44.914000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:50731] POST /tabby/demo/eligibility [Wed Nov 4 05:44:45.162000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:60748] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:44:45.162000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:60748] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1700.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:44:45.163000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:60748] QUERY OK source="tabby_sim_faults" db=0.5ms idle=1019.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:44:45.201000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:60748] QUERY OK db=37.3ms idle=1020.5ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["b0bcbda9-4b98-46a0-8aa7-e0a660ad946e", "CREATED", "AED", "be35513e-3c93-4ddf-b7e1-bc3e96b9d73b", "slice9", ~U[2026-11-04 05:56:45Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1700.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1700.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:54:45Z], ~N[2026-11-04 05:44:45], ~N[2026-11-04 05:44:45]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:44:45.201000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:60748] [TabbySim] checkout payment=b0bcbda9-4b98-46a0-8aa7-e0a660ad946e session=be35513e-3c93-4ddf-b7e1-bc3e96b9d73b decision=created reason=nil amount=1700.00 AED [Wed Nov 4 05:44:45.202000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:60748] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1058.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:44:45.204000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:60748] Sent 200 in 42ms [Wed Nov 4 05:44:45.205000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:50731] [Tabby] checkout post /api/v2/checkout -> 200 (291 ms, attempt 1) [Wed Nov 4 05:44:45.205000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:50731] [Tabby] session created payment=b0bcbda9-4b98-46a0-8aa7-e0a660ad946e [Wed Nov 4 05:44:45.205000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:50731] [Tabby] eligibility: show (amount=1700.00 AED) [Wed Nov 4 05:44:45.205000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:50731] Sent 200 in 291ms [Wed Nov 4 05:44:54.720000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.7ms queue=0.2ms idle=1575.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["slice9", ~U[2026-10-17 05:44:54Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:44:54.722000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.9ms queue=0.3ms idle=1577.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["slice9", ~N[2026-11-04 05:42:54], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:44:54.722000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.4ms queue=0.1ms idle=1075.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", ~N[2026-11-04 05:42:54], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:44:54.724000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.2ms idle=579.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["slice9", ~U[2026-11-04 05:39:54Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:44:54.726000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.5ms idle=581.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:44:54.727000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=583.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["b764f4fe-99a1-4bd0-afaf-2271ac21324d"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:44:54.994000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:38428] GET /tabby-sim/api/v2/payments/84d13949-ac96-43b5-bac5-d7b9bb450f73 [Wed Nov 4 05:44:54.994000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:38428] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "84d13949-ac96-43b5-bac5-d7b9bb450f73"} Pipelines: [:tabby_sim_api] [Wed Nov 4 05:44:54.995000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38428] QUERY OK source="tabby_sim_faults" db=0.5ms idle=345.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "84d13949-ac96-43b5-bac5-d7b9bb450f73"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 05:44:54.996000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38428] QUERY OK source="tabby_sim_faults" db=0.4ms queue=0.1ms idle=276.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:44:54.996000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38428] QUERY OK source="tabby_sim_payments" db=0.4ms idle=276.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["84d13949-ac96-43b5-bac5-d7b9bb450f73"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Wed Nov 4 05:44:54.997000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:38428] Sent 200 in 3ms [Wed Nov 4 05:44:54.997000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client -] [Tabby] retrieve get /api/v2/payments/84d13949-ac96-43b5-bac5-d7b9bb450f73 -> 200 (271 ms, attempt 1) [Wed Nov 4 05:44:54.998000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1031735] [client -] [Tabby] verify: attempt=b764f4fe-99a1-4bd0-afaf-2271ac21324d payment=84d13949-ac96-43b5-bac5-d7b9bb450f73 is still CREATED at Tabby; it will be looked at again [Wed Nov 4 05:44:54.999000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=0.4ms queue=0.1ms idle=276.3ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-04 05:42:54Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Wed Nov 4 05:44:55.000000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=0.7ms idle=276.3ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["slice9", ~N[2026-11-04 05:42:54], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Wed Nov 4 05:44:55.000000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=275.8ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:44:55.001000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.3ms idle=275.1ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["slice9", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:44:55.002000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=0.5ms idle=274.0ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Wed Nov 4 05:44:55.002000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=0.3ms idle=211.2ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Wed Nov 4 05:44:55.003000 2026] [DaProductApp.Tabby.Poller:info] [pid 1031735] [client -] [Tabby] poll: handled 1 (created:pending=1); 1 attempt(s) still watched [Wed Nov 4 05:45:00.926000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=782.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:45:00Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:45:00.926000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:45:00.927000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=783.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:45:00Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:45:00.928000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.1ms idle=784.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:45:00.995000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399320 scheduled in 60s (19 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:45:03.070000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:50731] POST /tabby/demo/summary [Wed Nov 4 05:45:03.071000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:50731] Sent 200 in 808µs [Wed Nov 4 05:45:04.059000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:50731] POST /tabby/demo/eligibility [Wed Nov 4 05:45:04.342000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:60748] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:45:04.343000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:60748] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:45:04.344000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:60748] QUERY OK source="tabby_sim_faults" db=0.8ms idle=553.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:45:04.366000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:60748] QUERY OK db=19.5ms queue=1.4ms idle=504.2ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["28a0a0e9-59d8-4ed0-999d-8590daac55b9", "CREATED", "AED", "f5427ecd-f36d-48ea-b88f-d8b5d9d0603b", "slice9", ~U[2026-11-04 05:57:04Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:55:04Z], ~N[2026-11-04 05:45:04], ~N[2026-11-04 05:45:04]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:45:04.366000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:60748] [TabbySim] checkout payment=28a0a0e9-59d8-4ed0-999d-8590daac55b9 session=f5427ecd-f36d-48ea-b88f-d8b5d9d0603b decision=created reason=nil amount=850.00 AED [Wed Nov 4 05:45:04.367000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:60748] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.2ms idle=442.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:45:04.371000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:60748] Sent 200 in 29ms [Wed Nov 4 05:45:04.372000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:50731] [Tabby] checkout post /api/v2/checkout -> 200 (312 ms, attempt 1) [Wed Nov 4 05:45:04.372000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:50731] [Tabby] session created payment=28a0a0e9-59d8-4ed0-999d-8590daac55b9 [Wed Nov 4 05:45:04.372000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:50731] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 05:45:04.372000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:50731] Sent 200 in 313ms [Wed Nov 4 05:45:04.717000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:56128] POST /tabby/demo/summary [Wed Nov 4 05:45:04.718000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:56128] Sent 200 in 549µs [Wed Nov 4 05:45:05.165000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:50731] POST /tabby/demo/summary [Wed Nov 4 05:45:05.166000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:50731] Sent 200 in 1ms [Wed Nov 4 05:45:10.757000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:56128] POST /tabby/demo/summary [Wed Nov 4 05:45:10.757000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:56128] Sent 200 in 562µs [Wed Nov 4 05:45:11.723000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:56128] POST /tabby/demo/eligibility [Wed Nov 4 05:45:12.027000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:60748] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:45:12.027000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:60748] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1500.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:45:12.028000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:60748] QUERY OK source="tabby_sim_faults" db=0.6ms idle=1884.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:45:12.113000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:60748] QUERY OK db=84.3ms idle=1470.0ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["4dfc34e9-3420-40b3-a92c-bdc393b1df77", "CREATED", "AED", "5d114088-b3e3-46c0-8d23-39e277392689", "slice9", ~U[2026-11-04 05:57:12Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1500.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1500.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:55:12Z], ~N[2026-11-04 05:45:12], ~N[2026-11-04 05:45:12]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:45:12.113000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:60748] [TabbySim] checkout payment=4dfc34e9-3420-40b3-a92c-bdc393b1df77 session=5d114088-b3e3-46c0-8d23-39e277392689 decision=created reason=nil amount=1500.00 AED [Wed Nov 4 05:45:12.115000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:60748] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1470.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:45:12.117000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:60748] Sent 200 in 90ms [Wed Nov 4 05:45:12.117000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:56128] [Tabby] checkout post /api/v2/checkout -> 200 (395 ms, attempt 1) [Wed Nov 4 05:45:12.118000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:56128] [Tabby] session created payment=4dfc34e9-3420-40b3-a92c-bdc393b1df77 [Wed Nov 4 05:45:12.118000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:56128] [Tabby] eligibility: show (amount=1500.00 AED) [Wed Nov 4 05:45:12.118000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:56128] Sent 200 in 395ms [Wed Nov 4 05:45:15.079000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:56128] POST /tabby/demo/summary [Wed Nov 4 05:45:15.079000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:56128] Sent 200 in 684µs [Wed Nov 4 05:45:15.868000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:56128] POST /tabby/demo/eligibility [Wed Nov 4 05:45:16.142000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:60748] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:45:16.143000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:60748] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1700.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:45:16.144000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:60748] QUERY OK source="tabby_sim_faults" db=0.4ms queue=0.1ms idle=999.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:45:16.163000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:60748] QUERY OK db=18.3ms idle=1000.9ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["2872f197-2c67-46a0-8a8d-71b9415c38f9", "CREATED", "AED", "d5a0f86b-8ef6-4e61-9a61-8599cc8f597f", "slice9", ~U[2026-11-04 05:57:16Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1700.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1700.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:55:16Z], ~N[2026-11-04 05:45:16], ~N[2026-11-04 05:45:16]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:45:16.163000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:60748] [TabbySim] checkout payment=2872f197-2c67-46a0-8a8d-71b9415c38f9 session=d5a0f86b-8ef6-4e61-9a61-8599cc8f597f decision=created reason=nil amount=1700.00 AED [Wed Nov 4 05:45:16.164000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:60748] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1020.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:45:16.166000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:60748] Sent 200 in 23ms [Wed Nov 4 05:45:16.167000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:56128] [Tabby] checkout post /api/v2/checkout -> 200 (297 ms, attempt 1) [Wed Nov 4 05:45:16.167000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:56128] [Tabby] session created payment=2872f197-2c67-46a0-8a8d-71b9415c38f9 [Wed Nov 4 05:45:16.167000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:56128] [Tabby] eligibility: show (amount=1700.00 AED) [Wed Nov 4 05:45:16.167000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:56128] Sent 200 in 298ms [Wed Nov 4 05:45:20.675000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:56128] POST /tabby/demo/summary [Wed Nov 4 05:45:20.676000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:56128] Sent 200 in 893µs [Wed Nov 4 05:45:21.556000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:56128] POST /tabby/demo/eligibility [Wed Nov 4 05:45:21.813000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:60748] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:45:21.813000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:60748] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1530.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:45:21.814000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:60748] QUERY OK source="tabby_sim_faults" db=0.4ms queue=0.1ms idle=1335.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:45:21.847000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:60748] QUERY OK db=31.8ms idle=1253.7ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["afdec1d2-eea5-40cf-b385-053331089f14", "CREATED", "AED", "219de5d8-756a-4e9d-9d6c-2b6f53d9466d", "slice9", ~U[2026-11-04 05:57:21Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1530.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1530.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:55:21Z], ~N[2026-11-04 05:45:21], ~N[2026-11-04 05:45:21]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:45:21.847000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:60748] [TabbySim] checkout payment=afdec1d2-eea5-40cf-b385-053331089f14 session=219de5d8-756a-4e9d-9d6c-2b6f53d9466d decision=created reason=nil amount=1530.00 AED [Wed Nov 4 05:45:21.848000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:60748] QUERY OK source="tabby_sim_payments" db=0.7ms idle=998.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:45:21.850000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:60748] Sent 200 in 37ms [Wed Nov 4 05:45:21.851000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:56128] [Tabby] checkout post /api/v2/checkout -> 200 (295 ms, attempt 1) [Wed Nov 4 05:45:21.851000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:56128] [Tabby] session created payment=afdec1d2-eea5-40cf-b385-053331089f14 [Wed Nov 4 05:45:21.851000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:56128] [Tabby] eligibility: show (amount=1530.00 AED) [Wed Nov 4 05:45:21.851000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:56128] Sent 200 in 295ms [Wed Nov 4 05:45:33.775000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:56128] POST /tabby/demo/place [Wed Nov 4 05:45:33.826000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:56128] QUERY OK db=49.7ms queue=0.5ms idle=632.7ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`amount`,`needs_attention`,`order_reference`,`cancel_url`,`captured_amount`,`failure_url`,`refunded_amount`,`success_url`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["17cfc295-da78-48d5-978f-3cdac8700cb8", "new", "AED", "slice9", Decimal.new("1530.00"), false, "DEMO-09205838", "http://78.47.213.209:4030/tabby/demo/result/cancel?lang=en&order=DEMO-09205838", Decimal.new("0"), "http://78.47.213.209:4030/tabby/demo/result/failure?lang=en&order=DEMO-09205838", Decimal.new("0"), "http://78.47.213.209:4030/tabby/demo/result/success?lang=en&order=DEMO-09205838", ~N[2026-11-04 05:45:33], ~N[2026-11-04 05:45:33]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Wed Nov 4 05:45:34.122000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:38428] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:45:34.122000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:38428] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "en", "merchant_code" => "slice9", "merchant_urls" => %{"cancel" => "http://78.47.213.209:4030/tabby/return/17cfc295-da78-48d5-978f-3cdac8700cb8/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/17cfc295-da78-48d5-978f-3cdac8700cb8/failure", "success" => "http://78.47.213.209:4030/tabby/return/17cfc295-da78-48d5-978f-3cdac8700cb8/success"}, "payment" => %{"amount" => "1530.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"discount_amount" => "170.00", "items" => [%{"category" => "Demo", "quantity" => 2, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 2, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-09205838"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:45:34.123000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38428] QUERY OK source="tabby_sim_faults" db=0.6ms idle=979.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:45:34.168000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38428] QUERY OK db=43.6ms queue=0.3ms idle=980.6ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`buyer_history`,`captures`,`is_test`,`lang`,`merchant_urls`,`refunds`,`session_expires_at`,`shipping_address`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["f6357daf-3ff8-491d-88c1-ef4742ab498c", "CREATED", "AED", "fa6f027d-9a3d-4be3-88e0-d1defc31fc11", "slice9", ~U[2026-11-04 05:57:34Z], %{"lang" => "en", "merchant_code" => "slice9", "merchant_urls" => %{"cancel" => "http://78.47.213.209:4030/tabby/return/17cfc295-da78-48d5-978f-3cdac8700cb8/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/17cfc295-da78-48d5-978f-3cdac8700cb8/failure", "success" => "http://78.47.213.209:4030/tabby/return/17cfc295-da78-48d5-978f-3cdac8700cb8/success"}, "payment" => %{"amount" => "1530.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"discount_amount" => "170.00", "items" => [%{"category" => "Demo", "quantity" => 2, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 2, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-09205838"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "170", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 2, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo headphones", "unit_price" => "650"}, %{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 2, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo smartwatch", "unit_price" => "200"}], "reference_id" => "DEMO-09205838", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1530.00"), %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, %{"registered_since" => "2023-02-01T10:00:00Z"}, [], true, "en", %{"cancel" => "http://78.47.213.209:4030/tabby/return/17cfc295-da78-48d5-978f-3cdac8700cb8/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/17cfc295-da78-48d5-978f-3cdac8700cb8/failure", "success" => "http://78.47.213.209:4030/tabby/return/17cfc295-da78-48d5-978f-3cdac8700cb8/success"}, [], ~U[2026-11-04 05:55:34Z], %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}, ~N[2026-11-04 05:45:34], ~N[2026-11-04 05:45:34]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:45:34.168000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:38428] [TabbySim] checkout payment=f6357daf-3ff8-491d-88c1-ef4742ab498c session=fa6f027d-9a3d-4be3-88e0-d1defc31fc11 decision=created reason=nil amount=1530.00 AED [Wed Nov 4 05:45:34.169000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38428] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1025.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:45:34.171000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:38428] Sent 200 in 49ms [Wed Nov 4 05:45:34.172000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:56128] [Tabby] checkout post /api/v2/checkout -> 200 (345 ms, attempt 1) [Wed Nov 4 05:45:34.172000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:56128] [Tabby] session created payment=f6357daf-3ff8-491d-88c1-ef4742ab498c [Wed Nov 4 05:45:34.173000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:56128] QUERY OK source="tabby_payments" db=0.4ms idle=631.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["17cfc295-da78-48d5-978f-3cdac8700cb8"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Wed Nov 4 05:45:34.218000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:56128] QUERY OK source="tabby_payments" db=43.9ms queue=0.4ms idle=547.2ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-04 06:05:34Z], "f6357daf-3ff8-491d-88c1-ef4742ab498c", "fa6f027d-9a3d-4be3-88e0-d1defc31fc11", ~N[2026-11-04 05:45:34], "17cfc295-da78-48d5-978f-3cdac8700cb8"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Wed Nov 4 05:45:34.218000 2026] [DaProductApp.Tabby.Sessions:info] [pid 1031735] [client 115.99.167.137:56128] [Tabby] session created attempt=17cfc295-da78-48d5-978f-3cdac8700cb8 payment=f6357daf-3ff8-491d-88c1-ef4742ab498c [Wed Nov 4 05:45:34.220000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:56128] Sent 200 in 445ms [Wed Nov 4 05:45:34.673000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:56128] GET /tabby-sim/hpp/fa6f027d-9a3d-4be3-88e0-d1defc31fc11 [Wed Nov 4 05:45:34.673000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 115.99.167.137:56128] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "fa6f027d-9a3d-4be3-88e0-d1defc31fc11"} Pipelines: [:tabby_sim_hpp] [Wed Nov 4 05:45:34.674000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:56128] QUERY OK source="tabby_sim_payments" db=0.8ms idle=682.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["fa6f027d-9a3d-4be3-88e0-d1defc31fc11"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Wed Nov 4 05:45:34.675000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:56128] Sent 200 in 1ms [Wed Nov 4 05:45:38.441000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:56128] POST /tabby-sim/hpp/fa6f027d-9a3d-4be3-88e0-d1defc31fc11 [Wed Nov 4 05:45:38.441000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 115.99.167.137:56128] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "approve", "otp" => "8888", "session_id" => "fa6f027d-9a3d-4be3-88e0-d1defc31fc11"} Pipelines: [:tabby_sim_hpp] [Wed Nov 4 05:45:38.442000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:56128] QUERY OK source="tabby_sim_payments" db=0.6ms idle=298.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["fa6f027d-9a3d-4be3-88e0-d1defc31fc11"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Wed Nov 4 05:45:38.465000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:56128] QUERY OK source="tabby_sim_payments" db=22.4ms idle=299.2ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["AUTHORIZED", ~N[2026-11-04 05:45:38], "f6357daf-3ff8-491d-88c1-ef4742ab498c", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:45:38.465000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client 115.99.167.137:56128] [TabbySim] payment=f6357daf-3ff8-491d-88c1-ef4742ab498c CREATED -> AUTHORIZED [Wed Nov 4 05:45:38.466000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:56128] QUERY OK source="tabby_sim_payments" db=0.6ms idle=322.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["f6357daf-3ff8-491d-88c1-ef4742ab498c"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:45:38.467000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:56128] QUERY OK source="tabby_sim_webhooks" db=0.9ms idle=323.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["slice9"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Wed Nov 4 05:45:38.467000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client 115.99.167.137:56128] [TabbySim] no webhook registered for merchant_code=slice9; event=authorize payment=f6357daf-3ff8-491d-88c1-ef4742ab498c [Wed Nov 4 05:45:38.467000 2026] [DaProductApp.TabbySim.Hpp:info] [pid 1031735] [client 115.99.167.137:56128] [TabbySim] hpp payment=f6357daf-3ff8-491d-88c1-ef4742ab498c action=approve status=AUTHORIZED [Wed Nov 4 05:45:38.467000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:56128] Sent 302 in 26ms [Wed Nov 4 05:45:38.974000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:56128] GET /tabby/return/17cfc295-da78-48d5-978f-3cdac8700cb8/success [Wed Nov 4 05:45:38.974000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:56128] QUERY OK source="tabby_payments" db=0.3ms idle=830.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["17cfc295-da78-48d5-978f-3cdac8700cb8"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:45:39.011000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:56128] Sent 302 in 37ms [Wed Nov 4 05:45:39.094000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=628.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["17cfc295-da78-48d5-978f-3cdac8700cb8"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:45:39.365000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:38428] GET /tabby-sim/api/v2/payments/f6357daf-3ff8-491d-88c1-ef4742ab498c [Wed Nov 4 05:45:39.365000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:38428] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "f6357daf-3ff8-491d-88c1-ef4742ab498c"} Pipelines: [:tabby_sim_api] [Wed Nov 4 05:45:39.366000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38428] QUERY OK source="tabby_sim_faults" db=1.0ms idle=395.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "f6357daf-3ff8-491d-88c1-ef4742ab498c"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 05:45:39.367000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38428] QUERY OK source="tabby_sim_faults" db=0.4ms idle=392.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:45:39.368000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38428] QUERY OK source="tabby_sim_payments" db=0.7ms idle=391.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["f6357daf-3ff8-491d-88c1-ef4742ab498c"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Wed Nov 4 05:45:39.368000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:38428] Sent 200 in 3ms [Wed Nov 4 05:45:39.370000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client -] [Tabby] retrieve get /api/v2/payments/f6357daf-3ff8-491d-88c1-ef4742ab498c -> 200 (276 ms, attempt 1) [Wed Nov 4 05:45:39.407000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=37.2ms idle=359.4ms UPDATE `tabby_payments` AS t0 SET t0.`winner_key` = ?, t0.`authorized_at` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["eab4e1f9e85a5030983dd5789e61ccafcd5fd7c6e19df2e54be93eee65ace510", ~U[2026-11-04 05:45:39Z], "authorized", ~N[2026-11-04 05:45:39], "17cfc295-da78-48d5-978f-3cdac8700cb8", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Wed Nov 4 05:45:39.408000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=314.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["17cfc295-da78-48d5-978f-3cdac8700cb8"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:45:39.409000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1031735] [client -] [Tabby] verify: attempt=17cfc295-da78-48d5-978f-3cdac8700cb8 payment=f6357daf-3ff8-491d-88c1-ef4742ab498c created -> authorized [Wed Nov 4 05:45:39.425000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:56128] GET /tabby/demo/result/success [Wed Nov 4 05:45:39.426000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:56128] Sent 200 in 437µs [Wed Nov 4 05:45:39.529000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=209.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["17cfc295-da78-48d5-978f-3cdac8700cb8"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:45:39.563000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=33.7ms idle=163.1ms UPDATE `tabby_payments` AS t0 SET t0.`claimed_at` = ?, t0.`capture_reference_id` = ?, t0.`claimed_by` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [~U[2026-11-04 05:45:39Z], "capture-DEMO-09205838", "nonode@nohost", "capturing", ~N[2026-11-04 05:45:39], "17cfc295-da78-48d5-978f-3cdac8700cb8", "authorized"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Wed Nov 4 05:45:39.565000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=195.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["17cfc295-da78-48d5-978f-3cdac8700cb8"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:45:39.565000 2026] [DaProductApp.Tabby.Capture:info] [pid 1031735] [client -] [Tabby] capture: attempt=17cfc295-da78-48d5-978f-3cdac8700cb8 payment=f6357daf-3ff8-491d-88c1-ef4742ab498c claimed (authorized -> capturing) [Wed Nov 4 05:45:39.818000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:38428] POST /tabby-sim/api/v2/payments/f6357daf-3ff8-491d-88c1-ef4742ab498c/captures [Wed Nov 4 05:45:39.819000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:38428] Processing with DaProductAppWeb.TabbySim.PaymentsController.capture/2 Parameters: %{"amount" => "1530.00", "id" => "f6357daf-3ff8-491d-88c1-ef4742ab498c", "reference_id" => "capture-DEMO-09205838"} Pipelines: [:tabby_sim_api] [Wed Nov 4 05:45:39.820000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38428] QUERY OK source="tabby_sim_faults" db=0.9ms queue=0.1ms idle=327.2ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["capture", "f6357daf-3ff8-491d-88c1-ef4742ab498c"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 05:45:39.821000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38428] QUERY OK source="tabby_sim_faults" db=0.8ms idle=293.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["capture"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:45:39.823000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38428] QUERY OK source="tabby_sim_payments" db=0.7ms idle=293.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["f6357daf-3ff8-491d-88c1-ef4742ab498c"] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:227 [Wed Nov 4 05:45:39.823000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38428] QUERY OK db=0.2ms idle=259.6ms begin [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Wed Nov 4 05:45:39.825000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38428] QUERY OK source="tabby_sim_payments" db=0.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) FOR UPDATE ["f6357daf-3ff8-491d-88c1-ef4742ab498c"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:231 [Wed Nov 4 05:45:39.826000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38428] QUERY OK source="tabby_sim_payments" db=0.5ms UPDATE `tabby_sim_payments` SET `status` = ?, `closed_at` = ?, `captures` = ?, `updated_at` = ? WHERE `id` = ? ["CLOSED", ~U[2026-11-04 05:45:39Z], [%{"amount" => "1530", "created_at" => "2026-11-04T05:45:39Z", "discount_amount" => "0", "id" => "bf7af276-0966-4ba9-863f-ac660a43681c", "items" => nil, "reference_id" => "capture-DEMO-09205838", "shipping_amount" => "0", "tax_amount" => "0"}], ~N[2026-11-04 05:45:39], "f6357daf-3ff8-491d-88c1-ef4742ab498c"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:244 [Wed Nov 4 05:45:39.826000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client 127.0.0.1:38428] [TabbySim] capture payment=f6357daf-3ff8-491d-88c1-ef4742ab498c status=CLOSED [Wed Nov 4 05:45:39.856000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38428] QUERY OK db=29.2ms commit [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Wed Nov 4 05:45:39.859000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38428] QUERY OK source="tabby_sim_webhooks" db=2.8ms queue=0.2ms idle=291.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["slice9"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Wed Nov 4 05:45:39.859000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client 127.0.0.1:38428] [TabbySim] no webhook registered for merchant_code=slice9; event=capture payment=f6357daf-3ff8-491d-88c1-ef4742ab498c [Wed Nov 4 05:45:39.861000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38428] QUERY OK source="tabby_sim_webhooks" db=1.4ms idle=282.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["slice9"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Wed Nov 4 05:45:39.861000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client 127.0.0.1:38428] [TabbySim] no webhook registered for merchant_code=slice9; event=close payment=f6357daf-3ff8-491d-88c1-ef4742ab498c [Wed Nov 4 05:45:39.862000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:38428] Sent 200 in 43ms [Wed Nov 4 05:45:39.864000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client -] [Tabby] capture post /api/v2/payments/f6357daf-3ff8-491d-88c1-ef4742ab498c/captures -> 200 (299 ms, attempt 1) [Wed Nov 4 05:45:39.895000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:56128] GET /tabby/demo/status/17cfc295-da78-48d5-978f-3cdac8700cb8 [Wed Nov 4 05:45:39.896000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:56128] QUERY OK source="tabby_payments" db=0.6ms idle=214.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["17cfc295-da78-48d5-978f-3cdac8700cb8"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:45:39.898000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:56128] Sent 200 in 3ms [Wed Nov 4 05:45:39.944000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=79.8ms idle=238.9ms UPDATE `tabby_payments` AS t0 SET t0.`captured_amount` = ?, t0.`captured_at` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [Decimal.new("1530"), ~U[2026-11-04 05:45:39Z], "captured", ~N[2026-11-04 05:45:39], "17cfc295-da78-48d5-978f-3cdac8700cb8", "capturing"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Wed Nov 4 05:45:39.946000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.2ms queue=0.1ms idle=235.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["17cfc295-da78-48d5-978f-3cdac8700cb8"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:45:39.947000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1031735] [client -] [Tabby] verify: attempt=17cfc295-da78-48d5-978f-3cdac8700cb8 payment=f6357daf-3ff8-491d-88c1-ef4742ab498c capturing -> captured [Wed Nov 4 05:45:39.947000 2026] [DaProductApp.Tabby.Capture:info] [pid 1031735] [client -] [Tabby] capture: attempt=17cfc295-da78-48d5-978f-3cdac8700cb8 payment=f6357daf-3ff8-491d-88c1-ef4742ab498c is captured [Wed Nov 4 05:45:42.310000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:56128] GET /tabby/demo/status/17cfc295-da78-48d5-978f-3cdac8700cb8 [Wed Nov 4 05:45:42.311000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:56128] QUERY OK source="tabby_payments" db=0.6ms idle=1167.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["17cfc295-da78-48d5-978f-3cdac8700cb8"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:45:42.311000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:56128] Sent 200 in 1ms [Wed Nov 4 05:46:02.420000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=2.7ms idle=1274.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:46:02Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:46:02.420000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:46:02.428000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=3.7ms queue=1.7ms idle=1277.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:46:02Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:46:02.431000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms queue=1.4ms idle=1285.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:46:02.501000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399325 scheduled in 60s (23 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:46:44.395000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62016] GET /tabby/demo [Wed Nov 4 05:46:44.400000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62016] Sent 200 in 4ms [Wed Nov 4 05:46:44.854000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62016] POST /tabby/demo/summary [Wed Nov 4 05:46:44.854000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62016] Sent 200 in 584µs [Wed Nov 4 05:46:45.670000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62016] POST /tabby/demo/eligibility [Wed Nov 4 05:46:45.928000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:46:45.928000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:44252] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:46:45.929000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_faults" db=0.4ms idle=1730.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:46:45.976000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK db=46.0ms idle=1648.0ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["793aad3a-8969-462c-ba49-8e38ee48edb3", "CREATED", "AED", "b26ddf94-6b28-4cb8-b804-c1f58be331ae", "slice9", ~U[2026-11-04 05:58:45Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:56:45Z], ~N[2026-11-04 05:46:45], ~N[2026-11-04 05:46:45]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:46:45.976000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:44252] [TabbySim] checkout payment=793aad3a-8969-462c-ba49-8e38ee48edb3 session=b26ddf94-6b28-4cb8-b804-c1f58be331ae decision=created reason=nil amount=850.00 AED [Wed Nov 4 05:46:45.977000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1546.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:46:45.979000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] Sent 200 in 51ms [Wed Nov 4 05:46:45.980000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:62016] [Tabby] checkout post /api/v2/checkout -> 200 (310 ms, attempt 1) [Wed Nov 4 05:46:45.980000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:62016] [Tabby] session created payment=793aad3a-8969-462c-ba49-8e38ee48edb3 [Wed Nov 4 05:46:45.980000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:62016] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 05:46:45.980000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62016] Sent 200 in 310ms [Wed Nov 4 05:46:56.636000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.9ms idle=1492.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["slice9", ~U[2026-10-17 05:46:56Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:46:56.638000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.9ms idle=1493.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["slice9", ~N[2026-11-04 05:44:56], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:46:56.639000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=1495.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", ~N[2026-11-04 05:44:56], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:46:56.640000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=1495.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["slice9", ~U[2026-11-04 05:41:56Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:46:56.641000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=1496.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:46:56.642000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.3ms idle=1124.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["b764f4fe-99a1-4bd0-afaf-2271ac21324d"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:46:56.903000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:52410] GET /tabby-sim/api/v2/payments/84d13949-ac96-43b5-bac5-d7b9bb450f73 [Wed Nov 4 05:46:56.904000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:52410] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "84d13949-ac96-43b5-bac5-d7b9bb450f73"} Pipelines: [:tabby_sim_api] [Wed Nov 4 05:46:56.908000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:52410] QUERY OK source="tabby_sim_faults" db=3.8ms idle=385.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "84d13949-ac96-43b5-bac5-d7b9bb450f73"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 05:46:56.909000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:52410] QUERY OK source="tabby_sim_faults" db=0.5ms queue=0.2ms idle=273.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:46:56.910000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:52410] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.1ms idle=273.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["84d13949-ac96-43b5-bac5-d7b9bb450f73"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Wed Nov 4 05:46:56.910000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:52410] Sent 200 in 6ms [Wed Nov 4 05:46:56.911000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client -] [Tabby] retrieve get /api/v2/payments/84d13949-ac96-43b5-bac5-d7b9bb450f73 -> 200 (269 ms, attempt 1) [Wed Nov 4 05:46:56.911000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1031735] [client -] [Tabby] verify: attempt=b764f4fe-99a1-4bd0-afaf-2271ac21324d payment=84d13949-ac96-43b5-bac5-d7b9bb450f73 is still CREATED at Tabby; it will be looked at again [Wed Nov 4 05:46:56.913000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=1.6ms idle=273.5ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-04 05:44:56Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Wed Nov 4 05:46:56.914000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=0.5ms queue=0.2ms idle=274.6ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["slice9", ~N[2026-11-04 05:44:56], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Wed Nov 4 05:46:56.915000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.6ms queue=0.1ms idle=274.7ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:46:56.919000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.2ms queue=2.0ms idle=274.7ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["slice9", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:46:56.919000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=0.5ms idle=277.0ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Wed Nov 4 05:46:56.921000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=1.6ms idle=206.8ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Wed Nov 4 05:46:56.921000 2026] [DaProductApp.Tabby.Poller:info] [pid 1031735] [client -] [Tabby] poll: handled 1 (created:pending=1); 1 attempt(s) still watched [Wed Nov 4 05:46:58.954000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62016] POST /tabby/demo/summary [Wed Nov 4 05:46:58.954000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62016] Sent 200 in 514µs [Wed Nov 4 05:46:59.794000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62016] POST /tabby/demo/eligibility [Wed Nov 4 05:47:00.053000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:47:00.053000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:44252] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:47:00.054000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_faults" db=0.4ms idle=1909.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:47:00.131000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK db=76.0ms idle=1910.8ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["42703683-6a6f-436d-b5b6-c45b0f760721", "CREATED", "AED", "01760e63-2131-4ad2-a418-8bb02e14851f", "slice9", ~U[2026-11-04 05:59:00Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("5000.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:57:00Z], ~N[2026-11-04 05:47:00], ~N[2026-11-04 05:47:00]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:47:00.131000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:44252] [TabbySim] checkout payment=42703683-6a6f-436d-b5b6-c45b0f760721 session=01760e63-2131-4ad2-a418-8bb02e14851f decision=created reason=nil amount=5000.00 AED [Wed Nov 4 05:47:00.132000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1606.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:47:00.134000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] Sent 200 in 81ms [Wed Nov 4 05:47:00.135000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:62016] [Tabby] checkout post /api/v2/checkout -> 200 (341 ms, attempt 1) [Wed Nov 4 05:47:00.135000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:62016] [Tabby] session created payment=42703683-6a6f-436d-b5b6-c45b0f760721 [Wed Nov 4 05:47:00.135000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:62016] [Tabby] eligibility: show (amount=5000.00 AED) [Wed Nov 4 05:47:00.135000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62016] Sent 200 in 341ms [Wed Nov 4 05:47:01.084000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62016] POST /tabby/demo/summary [Wed Nov 4 05:47:01.084000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62016] Sent 200 in 779µs [Wed Nov 4 05:47:01.847000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62016] POST /tabby/demo/summary [Wed Nov 4 05:47:01.848000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62016] Sent 200 in 554µs [Wed Nov 4 05:47:02.030000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/summary [Wed Nov 4 05:47:02.030000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 819µs [Wed Nov 4 05:47:03.802000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=658.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:47:03Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:47:03.802000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:47:03.804000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=659.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:47:03Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:47:03.805000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=660.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:47:03.832000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399330 scheduled in 47s (25 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:47:04.431000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/summary [Wed Nov 4 05:47:04.432000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 569µs [Wed Nov 4 05:47:05.346000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/eligibility [Wed Nov 4 05:47:05.605000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:47:05.605000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:44252] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:47:05.607000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_faults" db=0.8ms queue=0.1ms idle=462.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:47:05.649000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK db=41.0ms queue=0.5ms idle=463.9ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`rejection_reason`,`rejection_reason_code`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["2259ab70-8f5b-45ec-9255-2dc0e2706a4d", "CREATED", "AED", "7803fd43-0794-48d3-9fe3-a88bd231822d", "slice9", ~U[2026-11-04 05:59:05Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "rejected", false, Decimal.new("5095.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], "order_amount_too_high", "not_enough_limit", ~U[2026-11-04 05:57:05Z], ~N[2026-11-04 05:47:05], ~N[2026-11-04 05:47:05]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:47:05.649000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:44252] [TabbySim] checkout payment=2259ab70-8f5b-45ec-9255-2dc0e2706a4d session=7803fd43-0794-48d3-9fe3-a88bd231822d decision=rejected reason="order_amount_too_high" amount=5095.00 AED [Wed Nov 4 05:47:05.650000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_payments" db=0.6ms idle=506.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:47:05.652000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] Sent 200 in 46ms [Wed Nov 4 05:47:05.652000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] checkout post /api/v2/checkout -> 200 (306 ms, attempt 1) [Wed Nov 4 05:47:05.652000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Wed Nov 4 05:47:05.653000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] eligibility: hide reason=order_amount_too_high (amount=5095.00 AED) [Wed Nov 4 05:47:05.653000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 307ms [Wed Nov 4 05:47:14.303000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/eligibility [Wed Nov 4 05:47:14.601000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:47:14.601000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:44252] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:47:14.602000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_faults" db=0.5ms idle=1458.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:47:14.630000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK db=26.6ms queue=0.4ms idle=1459.4ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`rejection_reason`,`rejection_reason_code`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["617495c2-7b88-4127-8ded-f9458c748934", "CREATED", "AED", "5da52965-5017-4daf-a743-b25934c11448", "slice9", ~U[2026-11-04 05:59:14Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "rejected", false, Decimal.new("5095.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], "order_amount_too_high", "not_enough_limit", ~U[2026-11-04 05:57:14Z], ~N[2026-11-04 05:47:14], ~N[2026-11-04 05:47:14]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:47:14.630000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:44252] [TabbySim] checkout payment=617495c2-7b88-4127-8ded-f9458c748934 session=5da52965-5017-4daf-a743-b25934c11448 decision=rejected reason="order_amount_too_high" amount=5095.00 AED [Wed Nov 4 05:47:14.631000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1487.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:47:14.633000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] Sent 200 in 32ms [Wed Nov 4 05:47:14.634000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] checkout post /api/v2/checkout -> 200 (331 ms, attempt 1) [Wed Nov 4 05:47:14.634000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Wed Nov 4 05:47:14.634000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] eligibility: hide reason=order_amount_too_high (amount=5095.00 AED) [Wed Nov 4 05:47:14.635000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 332ms [Wed Nov 4 05:47:19.470000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/eligibility [Wed Nov 4 05:47:19.726000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:47:19.726000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:44252] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:47:19.727000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_faults" db=0.3ms idle=1583.6ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:47:19.751000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK db=22.9ms idle=1584.4ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`rejection_reason`,`rejection_reason_code`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["017c259a-4ec4-44d0-a80c-90ca12f3678d", "CREATED", "AED", "08f01b90-dc1a-4dc5-be34-7cea6c4852e0", "slice9", ~U[2026-11-04 05:59:19Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "rejected", false, Decimal.new("5095.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], "order_amount_too_high", "not_enough_limit", ~U[2026-11-04 05:57:19Z], ~N[2026-11-04 05:47:19], ~N[2026-11-04 05:47:19]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:47:19.751000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:44252] [TabbySim] checkout payment=017c259a-4ec4-44d0-a80c-90ca12f3678d session=08f01b90-dc1a-4dc5-be34-7cea6c4852e0 decision=rejected reason="order_amount_too_high" amount=5095.00 AED [Wed Nov 4 05:47:19.752000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1023.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:47:19.754000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] Sent 200 in 27ms [Wed Nov 4 05:47:19.754000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] checkout post /api/v2/checkout -> 200 (284 ms, attempt 1) [Wed Nov 4 05:47:19.754000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Wed Nov 4 05:47:19.755000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] eligibility: hide reason=order_amount_too_high (amount=5095.00 AED) [Wed Nov 4 05:47:19.755000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 285ms [Wed Nov 4 05:47:22.229000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/eligibility [Wed Nov 4 05:47:22.512000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:47:22.512000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:44252] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:47:22.513000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_faults" db=0.5ms idle=1368.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:47:22.565000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK db=51.2ms idle=1369.7ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`rejection_reason`,`rejection_reason_code`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["0cefa218-a52d-4a93-93d1-ea837075f5f0", "CREATED", "AED", "835c6248-b0c2-4467-8bee-d2cbdfda668a", "slice9", ~U[2026-11-04 05:59:22Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "rejected", false, Decimal.new("5095.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], "order_amount_too_high", "not_enough_limit", ~U[2026-11-04 05:57:22Z], ~N[2026-11-04 05:47:22], ~N[2026-11-04 05:47:22]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:47:22.565000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:44252] [TabbySim] checkout payment=0cefa218-a52d-4a93-93d1-ea837075f5f0 session=835c6248-b0c2-4467-8bee-d2cbdfda668a decision=rejected reason="order_amount_too_high" amount=5095.00 AED [Wed Nov 4 05:47:22.566000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1421.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:47:22.567000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] Sent 200 in 55ms [Wed Nov 4 05:47:22.568000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] checkout post /api/v2/checkout -> 200 (339 ms, attempt 1) [Wed Nov 4 05:47:22.568000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Wed Nov 4 05:47:22.568000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] eligibility: hide reason=order_amount_too_high (amount=5095.00 AED) [Wed Nov 4 05:47:22.568000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 339ms [Wed Nov 4 05:47:26.335000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/eligibility [Wed Nov 4 05:47:26.604000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:47:26.604000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:44252] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:47:26.605000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_faults" db=0.5ms idle=980.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:47:26.669000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK db=63.4ms queue=0.4ms idle=859.9ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`rejection_reason`,`rejection_reason_code`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["43c1af16-7229-40f4-91f0-62390d6b7197", "CREATED", "AED", "c36664f1-c6ef-41db-947a-2a4c02142fc4", "slice9", ~U[2026-11-04 05:59:26Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "rejected", false, Decimal.new("5095.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], "order_amount_too_high", "not_enough_limit", ~U[2026-11-04 05:57:26Z], ~N[2026-11-04 05:47:26], ~N[2026-11-04 05:47:26]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:47:26.670000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:44252] [TabbySim] checkout payment=43c1af16-7229-40f4-91f0-62390d6b7197 session=c36664f1-c6ef-41db-947a-2a4c02142fc4 decision=rejected reason="order_amount_too_high" amount=5095.00 AED [Wed Nov 4 05:47:26.671000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_payments" db=0.9ms idle=536.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:47:26.673000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] Sent 200 in 68ms [Wed Nov 4 05:47:26.673000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] checkout post /api/v2/checkout -> 200 (338 ms, attempt 1) [Wed Nov 4 05:47:26.674000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Wed Nov 4 05:47:26.674000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] eligibility: hide reason=order_amount_too_high (amount=5095.00 AED) [Wed Nov 4 05:47:26.674000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 339ms [Wed Nov 4 05:47:35.823000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/eligibility [Wed Nov 4 05:47:36.074000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:47:36.074000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:44252] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:47:36.075000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_faults" db=0.4ms idle=1930.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:47:36.112000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK db=37.0ms idle=1931.9ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`rejection_reason`,`rejection_reason_code`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["9463fce6-63c7-49be-830a-3bad444d37b3", "CREATED", "AED", "46e958a2-fb35-4f5a-8b80-ca1884917d9c", "slice9", ~U[2026-11-04 05:59:36Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "rejected", false, Decimal.new("5095.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], "order_amount_too_high", "not_enough_limit", ~U[2026-11-04 05:57:36Z], ~N[2026-11-04 05:47:36], ~N[2026-11-04 05:47:36]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:47:36.113000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:44252] [TabbySim] checkout payment=9463fce6-63c7-49be-830a-3bad444d37b3 session=46e958a2-fb35-4f5a-8b80-ca1884917d9c decision=rejected reason="order_amount_too_high" amount=5095.00 AED [Wed Nov 4 05:47:36.114000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1969.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:47:36.116000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] Sent 200 in 42ms [Wed Nov 4 05:47:36.116000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] checkout post /api/v2/checkout -> 200 (292 ms, attempt 1) [Wed Nov 4 05:47:36.116000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Wed Nov 4 05:47:36.116000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] eligibility: hide reason=order_amount_too_high (amount=5095.00 AED) [Wed Nov 4 05:47:36.117000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 294ms [Wed Nov 4 05:47:36.641000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62016] POST /tabby/demo/summary [Wed Nov 4 05:47:36.641000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62016] Sent 200 in 517µs [Wed Nov 4 05:47:38.027000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62016] POST /tabby/demo/eligibility [Wed Nov 4 05:47:38.264000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:47:38.264000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:44252] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:47:38.265000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_faults" db=0.5ms idle=1121.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:47:38.310000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK db=44.5ms idle=1122.6ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`rejection_reason`,`rejection_reason_code`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["7d45a575-548a-4f20-8560-8de3e20d70c2", "CREATED", "AED", "cd01d67d-33af-42b8-959b-1b38ec6320ef", "slice9", ~U[2026-11-04 05:59:38Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "rejected", false, Decimal.new("5095.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], "order_amount_too_high", "not_enough_limit", ~U[2026-11-04 05:57:38Z], ~N[2026-11-04 05:47:38], ~N[2026-11-04 05:47:38]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:47:38.311000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:44252] [TabbySim] checkout payment=7d45a575-548a-4f20-8560-8de3e20d70c2 session=cd01d67d-33af-42b8-959b-1b38ec6320ef decision=rejected reason="order_amount_too_high" amount=5095.00 AED [Wed Nov 4 05:47:38.312000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.2ms idle=1168.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:47:38.313000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] Sent 200 in 49ms [Wed Nov 4 05:47:38.314000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:62016] [Tabby] checkout post /api/v2/checkout -> 200 (287 ms, attempt 1) [Wed Nov 4 05:47:38.314000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:62016] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Wed Nov 4 05:47:38.314000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:62016] [Tabby] eligibility: hide reason=order_amount_too_high (amount=5095.00 AED) [Wed Nov 4 05:47:38.315000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62016] Sent 200 in 288ms [Wed Nov 4 05:47:39.076000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62016] POST /tabby/demo/summary [Wed Nov 4 05:47:39.076000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62016] Sent 200 in 723µs [Wed Nov 4 05:47:40.366000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62016] POST /tabby/demo/eligibility [Wed Nov 4 05:47:40.603000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:47:40.603000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:44252] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:47:40.604000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_faults" db=0.6ms idle=460.2ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:47:40.643000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK db=38.6ms idle=461.3ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["24b59dd9-3f96-4428-ab2d-699ddd8ca027", "CREATED", "AED", "5509e49e-ce14-4048-b22f-f221a2f1e6c5", "slice9", ~U[2026-11-04 05:59:40Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("5000.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:57:40Z], ~N[2026-11-04 05:47:40], ~N[2026-11-04 05:47:40]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:47:40.643000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:44252] [TabbySim] checkout payment=24b59dd9-3f96-4428-ab2d-699ddd8ca027 session=5509e49e-ce14-4048-b22f-f221a2f1e6c5 decision=created reason=nil amount=5000.00 AED [Wed Nov 4 05:47:40.644000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_payments" db=0.7ms idle=500.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:47:40.646000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] Sent 200 in 43ms [Wed Nov 4 05:47:40.647000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:62016] [Tabby] checkout post /api/v2/checkout -> 200 (281 ms, attempt 1) [Wed Nov 4 05:47:40.647000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:62016] [Tabby] session created payment=24b59dd9-3f96-4428-ab2d-699ddd8ca027 [Wed Nov 4 05:47:40.647000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:62016] [Tabby] eligibility: show (amount=5000.00 AED) [Wed Nov 4 05:47:40.647000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62016] Sent 200 in 281ms [Wed Nov 4 05:47:44.441000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62016] POST /tabby/demo/eligibility [Wed Nov 4 05:47:44.729000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:47:44.730000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:44252] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:47:44.730000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_faults" db=0.4ms idle=586.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:47:44.764000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK db=32.0ms queue=0.6ms idle=587.1ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`rejection_reason`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["9a09ddba-0a5c-44f2-91ff-6a406f4c5142", "CREATED", "AED", "f9ca79e3-7ae2-4c59-9c43-4db6f61d97bb", "slice9", ~U[2026-11-04 05:59:44Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "rejected", false, Decimal.new("5000.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], "not_available", ~U[2026-11-04 05:57:44Z], ~N[2026-11-04 05:47:44], ~N[2026-11-04 05:47:44]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:47:44.764000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:44252] [TabbySim] checkout payment=9a09ddba-0a5c-44f2-91ff-6a406f4c5142 session=f9ca79e3-7ae2-4c59-9c43-4db6f61d97bb decision=rejected reason="not_available" amount=5000.00 AED [Wed Nov 4 05:47:44.765000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_payments" db=0.9ms idle=620.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:47:44.767000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] Sent 200 in 38ms [Wed Nov 4 05:47:44.768000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:62016] [Tabby] checkout post /api/v2/checkout -> 200 (327 ms, attempt 1) [Wed Nov 4 05:47:44.768000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:62016] [Tabby] session rejected by pre-scoring (business outcome) reason=not_available [Wed Nov 4 05:47:44.768000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:62016] [Tabby] eligibility: hide reason=not_available (amount=5000.00 AED) [Wed Nov 4 05:47:44.768000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62016] Sent 200 in 327ms [Wed Nov 4 05:47:47.342000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62016] POST /tabby/demo/summary [Wed Nov 4 05:47:47.342000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62016] Sent 200 in 575µs [Wed Nov 4 05:47:48.329000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62016] POST /tabby/demo/eligibility [Wed Nov 4 05:47:48.698000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:47:48.698000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:44252] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:47:48.699000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_faults" db=0.6ms queue=0.1ms idle=893.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:47:48.721000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK db=19.8ms queue=0.6ms idle=579.7ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`rejection_reason`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["6e392c77-323d-4f53-84e2-869e7614e6d6", "CREATED", "AED", "b80e4be5-40a5-472b-b968-6fd9a147f858", "slice9", ~U[2026-11-04 05:59:48Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "rejected", false, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], "not_available", ~U[2026-11-04 05:57:48Z], ~N[2026-11-04 05:47:48], ~N[2026-11-04 05:47:48]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:47:48.721000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:44252] [TabbySim] checkout payment=6e392c77-323d-4f53-84e2-869e7614e6d6 session=b80e4be5-40a5-472b-b968-6fd9a147f858 decision=rejected reason="not_available" amount=850.00 AED [Wed Nov 4 05:47:48.723000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_payments" db=1.4ms idle=578.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:47:48.725000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] Sent 200 in 27ms [Wed Nov 4 05:47:48.726000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:62016] [Tabby] checkout post /api/v2/checkout -> 200 (396 ms, attempt 1) [Wed Nov 4 05:47:48.726000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:62016] [Tabby] session rejected by pre-scoring (business outcome) reason=not_available [Wed Nov 4 05:47:48.726000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:62016] [Tabby] eligibility: hide reason=not_available (amount=850.00 AED) [Wed Nov 4 05:47:48.726000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62016] Sent 200 in 397ms [Wed Nov 4 05:47:49.560000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62016] POST /tabby/demo/summary [Wed Nov 4 05:47:49.561000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62016] Sent 200 in 907µs [Wed Nov 4 05:47:50.493000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62016] POST /tabby/demo/eligibility [Wed Nov 4 05:47:50.774000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:47:50.774000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:44252] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:47:50.775000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_faults" db=0.5ms idle=631.2ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:47:50.813000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK db=37.0ms queue=0.4ms idle=632.3ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`rejection_reason`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["dbe8059f-3dc9-4294-ab85-e7539dc5a74f", "CREATED", "AED", "cd1727a7-10e5-4725-a1e0-f335fa0b0673", "slice9", ~U[2026-11-04 05:59:50Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "rejected", false, Decimal.new("5000.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], "not_available", ~U[2026-11-04 05:57:50Z], ~N[2026-11-04 05:47:50], ~N[2026-11-04 05:47:50]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:47:50.813000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:44252] [TabbySim] checkout payment=dbe8059f-3dc9-4294-ab85-e7539dc5a74f session=cd1727a7-10e5-4725-a1e0-f335fa0b0673 decision=rejected reason="not_available" amount=5000.00 AED [Wed Nov 4 05:47:50.815000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_payments" db=0.7ms idle=670.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:47:50.816000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] Sent 200 in 42ms [Wed Nov 4 05:47:50.817000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:62016] [Tabby] checkout post /api/v2/checkout -> 200 (324 ms, attempt 1) [Wed Nov 4 05:47:50.817000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:62016] [Tabby] session rejected by pre-scoring (business outcome) reason=not_available [Wed Nov 4 05:47:50.817000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:62016] [Tabby] eligibility: hide reason=not_available (amount=5000.00 AED) [Wed Nov 4 05:47:50.817000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62016] Sent 200 in 324ms [Wed Nov 4 05:47:50.972000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/summary [Wed Nov 4 05:47:50.972000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 494µs [Wed Nov 4 05:47:51.780000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/eligibility [Wed Nov 4 05:47:51.970000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1153.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:47:51Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:47:51.993000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=22.0ms idle=1140.5ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:47:51], true, "61ac3557-3276-4e9d-8291-070d25d78c54", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:47:51.993000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=61ac3557-3276-4e9d-8291-070d25d78c54 CREATED -> EXPIRED [Wed Nov 4 05:47:51.994000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1103.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["61ac3557-3276-4e9d-8291-070d25d78c54"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:47:51.994000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=61ac3557-3276-4e9d-8291-070d25d78c54 [Wed Nov 4 05:47:51.994000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=61ac3557-3276-4e9d-8291-070d25d78c54 expired (expires_at 2026-11-04 05:47:50Z, session_status=created) [Wed Nov 4 05:47:51.996000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.5ms idle=533.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:47:51Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:47:51.996000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:47:51.998000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=431.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:47:51Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:47:51.999000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=347.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:47:52.043000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:47:52.043000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:44252] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:47:52.045000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_faults" db=1.1ms idle=134.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:47:52.054000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399331 scheduled in 16s (35 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:47:52.090000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK db=44.4ms idle=76.1ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`rejection_reason`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["1f7921cb-c360-49aa-84bf-c30c3c7d19a3", "CREATED", "AED", "50c14cf0-26a9-4287-8a12-03f1f8590006", "slice9", ~U[2026-11-04 05:59:52Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "rejected", false, Decimal.new("5095.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], "not_available", ~U[2026-11-04 05:57:52Z], ~N[2026-11-04 05:47:52], ~N[2026-11-04 05:47:52]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:47:52.090000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:44252] [TabbySim] checkout payment=1f7921cb-c360-49aa-84bf-c30c3c7d19a3 session=50c14cf0-26a9-4287-8a12-03f1f8590006 decision=rejected reason="not_available" amount=5095.00 AED [Wed Nov 4 05:47:52.093000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_payments" db=2.2ms idle=97.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:47:52.097000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] Sent 200 in 53ms [Wed Nov 4 05:47:52.100000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] checkout post /api/v2/checkout -> 200 (321 ms, attempt 1) [Wed Nov 4 05:47:52.101000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] session rejected by pre-scoring (business outcome) reason=not_available [Wed Nov 4 05:47:52.101000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] eligibility: hide reason=not_available (amount=5095.00 AED) [Wed Nov 4 05:47:52.103000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 323ms [Wed Nov 4 05:47:53.534000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/eligibility [Wed Nov 4 05:47:53.771000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:47:53.771000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:44252] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:47:53.772000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_faults" db=0.4ms idle=628.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:47:53.806000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK db=33.0ms idle=629.1ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`rejection_reason`,`rejection_reason_code`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["721ae960-0c81-4601-83de-e704bf2b1760", "CREATED", "AED", "d6bb4aa4-5dfa-45ab-8849-85d675c5fd3f", "slice9", ~U[2026-11-04 05:59:53Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "rejected", false, Decimal.new("5095.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], "order_amount_too_high", "not_enough_limit", ~U[2026-11-04 05:57:53Z], ~N[2026-11-04 05:47:53], ~N[2026-11-04 05:47:53]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:47:53.806000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:44252] [TabbySim] checkout payment=721ae960-0c81-4601-83de-e704bf2b1760 session=d6bb4aa4-5dfa-45ab-8849-85d675c5fd3f decision=rejected reason="order_amount_too_high" amount=5095.00 AED [Wed Nov 4 05:47:53.807000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_payments" db=1.3ms idle=662.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:47:53.811000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] Sent 200 in 40ms [Wed Nov 4 05:47:53.813000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] checkout post /api/v2/checkout -> 200 (279 ms, attempt 1) [Wed Nov 4 05:47:53.813000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Wed Nov 4 05:47:53.813000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] eligibility: hide reason=order_amount_too_high (amount=5095.00 AED) [Wed Nov 4 05:47:53.813000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 279ms [Wed Nov 4 05:47:55.299000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/eligibility [Wed Nov 4 05:47:55.571000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:47:55.571000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:44252] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:47:55.572000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_faults" db=0.6ms idle=428.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:47:55.600000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK db=26.9ms queue=0.4ms idle=429.6ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`rejection_reason`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["5514a7d6-52ed-4a1b-84b4-cea23c8c0869", "CREATED", "AED", "75e29d4c-8b06-40fc-ac4c-cc2817b587b5", "slice9", ~U[2026-11-04 05:59:55Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "rejected", false, Decimal.new("5095.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], "not_available", ~U[2026-11-04 05:57:55Z], ~N[2026-11-04 05:47:55], ~N[2026-11-04 05:47:55]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:47:55.601000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:44252] [TabbySim] checkout payment=5514a7d6-52ed-4a1b-84b4-cea23c8c0869 session=75e29d4c-8b06-40fc-ac4c-cc2817b587b5 decision=rejected reason="not_available" amount=5095.00 AED [Wed Nov 4 05:47:55.602000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.1ms idle=457.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:47:55.603000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] Sent 200 in 32ms [Wed Nov 4 05:47:55.604000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] checkout post /api/v2/checkout -> 200 (305 ms, attempt 1) [Wed Nov 4 05:47:55.604000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] session rejected by pre-scoring (business outcome) reason=not_available [Wed Nov 4 05:47:55.605000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] eligibility: hide reason=not_available (amount=5095.00 AED) [Wed Nov 4 05:47:55.605000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 306ms [Wed Nov 4 05:47:56.692000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/summary [Wed Nov 4 05:47:56.693000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 806µs [Wed Nov 4 05:47:57.534000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/eligibility [Wed Nov 4 05:47:57.880000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:47:57.881000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:44252] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:47:57.881000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_faults" db=0.5ms idle=737.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:47:57.928000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK db=45.3ms queue=0.3ms idle=738.8ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`rejection_reason`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["e46b6fd1-4488-4a72-9423-9dd1c90c2622", "CREATED", "AED", "fa6ae4ee-af85-4857-864f-3b630b96ed0f", "slice9", ~U[2026-11-04 05:59:57Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "rejected", false, Decimal.new("5000.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], "not_available", ~U[2026-11-04 05:57:57Z], ~N[2026-11-04 05:47:57], ~N[2026-11-04 05:47:57]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:47:57.928000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:44252] [TabbySim] checkout payment=e46b6fd1-4488-4a72-9423-9dd1c90c2622 session=fa6ae4ee-af85-4857-864f-3b630b96ed0f decision=rejected reason="not_available" amount=5000.00 AED [Wed Nov 4 05:47:57.929000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_payments" db=0.8ms queue=0.3ms idle=785.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:47:57.932000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] Sent 200 in 51ms [Wed Nov 4 05:47:57.933000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] checkout post /api/v2/checkout -> 200 (399 ms, attempt 1) [Wed Nov 4 05:47:57.933000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] session rejected by pre-scoring (business outcome) reason=not_available [Wed Nov 4 05:47:57.933000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] eligibility: hide reason=not_available (amount=5000.00 AED) [Wed Nov 4 05:47:57.933000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 399ms [Wed Nov 4 05:47:59.361000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/eligibility [Wed Nov 4 05:47:59.610000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:47:59.610000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:44252] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:47:59.611000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_faults" db=0.6ms idle=467.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:47:59.646000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK db=34.1ms idle=468.3ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["a2f136d6-670e-4b92-b2b6-1334ac4823aa", "CREATED", "AED", "7283965e-eca8-4ae3-8896-f29f5365c29d", "slice9", ~U[2026-11-04 05:59:59Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("5000.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:57:59Z], ~N[2026-11-04 05:47:59], ~N[2026-11-04 05:47:59]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:47:59.646000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:44252] [TabbySim] checkout payment=a2f136d6-670e-4b92-b2b6-1334ac4823aa session=7283965e-eca8-4ae3-8896-f29f5365c29d decision=created reason=nil amount=5000.00 AED [Wed Nov 4 05:47:59.647000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_payments" db=0.9ms idle=503.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:47:59.650000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] Sent 200 in 40ms [Wed Nov 4 05:47:59.651000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] checkout post /api/v2/checkout -> 200 (290 ms, attempt 1) [Wed Nov 4 05:47:59.651000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] session created payment=a2f136d6-670e-4b92-b2b6-1334ac4823aa [Wed Nov 4 05:47:59.651000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] eligibility: show (amount=5000.00 AED) [Wed Nov 4 05:47:59.651000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 290ms [Wed Nov 4 05:48:01.757000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/eligibility [Wed Nov 4 05:48:02.111000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:48:02.111000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:44252] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:48:02.114000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_faults" db=1.1ms queue=0.7ms idle=966.6ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:48:02.142000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK db=26.4ms queue=0.1ms idle=970.5ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`rejection_reason`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["fb17ef9a-d374-4727-8895-a2aa5b85c0ee", "CREATED", "AED", "80a4e6a9-f375-4f72-9993-260a938e49a5", "slice9", ~U[2026-11-04 06:00:02Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "rejected", false, Decimal.new("5000.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], "not_available", ~U[2026-11-04 05:58:02Z], ~N[2026-11-04 05:48:02], ~N[2026-11-04 05:48:02]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:48:02.143000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:44252] [TabbySim] checkout payment=fb17ef9a-d374-4727-8895-a2aa5b85c0ee session=80a4e6a9-f375-4f72-9993-260a938e49a5 decision=rejected reason="not_available" amount=5000.00 AED [Wed Nov 4 05:48:02.144000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_payments" db=0.9ms queue=0.2ms idle=997.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:48:02.148000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] Sent 200 in 37ms [Wed Nov 4 05:48:02.150000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] checkout post /api/v2/checkout -> 200 (392 ms, attempt 1) [Wed Nov 4 05:48:02.150000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] session rejected by pre-scoring (business outcome) reason=not_available [Wed Nov 4 05:48:02.150000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] eligibility: hide reason=not_available (amount=5000.00 AED) [Wed Nov 4 05:48:02.150000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 393ms [Wed Nov 4 05:48:03.432000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/eligibility [Wed Nov 4 05:48:03.785000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:48:03.785000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:44252] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:48:03.786000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_faults" db=0.5ms queue=0.2ms idle=642.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:48:03.817000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK db=29.9ms idle=643.4ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`rejection_reason`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["fc86b6e4-14de-49cc-87ef-4c033bf261b4", "CREATED", "AED", "c83181dc-6129-4ea8-8607-df76a29ae4ae", "slice9", ~U[2026-11-04 06:00:03Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "rejected", false, Decimal.new("5000.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], "not_available", ~U[2026-11-04 05:58:03Z], ~N[2026-11-04 05:48:03], ~N[2026-11-04 05:48:03]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:48:03.817000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:44252] [TabbySim] checkout payment=fc86b6e4-14de-49cc-87ef-4c033bf261b4 session=c83181dc-6129-4ea8-8607-df76a29ae4ae decision=rejected reason="not_available" amount=5000.00 AED [Wed Nov 4 05:48:03.819000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_payments" db=1.3ms idle=674.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:48:03.821000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] Sent 200 in 36ms [Wed Nov 4 05:48:03.822000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] checkout post /api/v2/checkout -> 200 (390 ms, attempt 1) [Wed Nov 4 05:48:03.822000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] session rejected by pre-scoring (business outcome) reason=not_available [Wed Nov 4 05:48:03.822000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] eligibility: hide reason=not_available (amount=5000.00 AED) [Wed Nov 4 05:48:03.822000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 390ms [Wed Nov 4 05:48:09.030000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1886.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:48:09Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:48:09.079000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=48.1ms idle=1887.2ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:48:09], true, "9e64e852-18c9-4327-81b7-ce1132c2996a", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:48:09.079000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=9e64e852-18c9-4327-81b7-ce1132c2996a CREATED -> EXPIRED [Wed Nov 4 05:48:09.080000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1935.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["9e64e852-18c9-4327-81b7-ce1132c2996a"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:48:09.080000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=9e64e852-18c9-4327-81b7-ce1132c2996a expired (expires_at 2026-11-04 05:48:07Z, session_status=rejected) [Wed Nov 4 05:48:09.187000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=106.3ms idle=1937.0ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:48:09], true, "e21c1e67-cbc1-4dd9-ac24-503638884290", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:48:09.187000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=e21c1e67-cbc1-4dd9-ac24-503638884290 CREATED -> EXPIRED [Wed Nov 4 05:48:09.188000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.2ms idle=236.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["e21c1e67-cbc1-4dd9-ac24-503638884290"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:48:09.189000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=e21c1e67-cbc1-4dd9-ac24-503638884290 expired (expires_at 2026-11-04 05:48:08Z, session_status=rejected) [Wed Nov 4 05:48:09.190000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=160.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:48:09Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:48:09.190000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 2 payment(s) were due [Wed Nov 4 05:48:09.191000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.1ms idle=160.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:48:09Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:48:09.192000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=112.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:48:09.277000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399334 scheduled in 25s (40 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:48:36.232000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.3ms idle=1087.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:48:36Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:48:36.311000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=77.6ms queue=0.2ms idle=1089.7ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:48:36], true, "21589009-8e1f-460c-9d49-ad456ee4e130", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:48:36.311000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=21589009-8e1f-460c-9d49-ad456ee4e130 CREATED -> EXPIRED [Wed Nov 4 05:48:36.312000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.2ms idle=1168.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["21589009-8e1f-460c-9d49-ad456ee4e130"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:48:36.312000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=21589009-8e1f-460c-9d49-ad456ee4e130 [Wed Nov 4 05:48:36.313000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=21589009-8e1f-460c-9d49-ad456ee4e130 expired (expires_at 2026-11-04 05:48:34Z, session_status=created) [Wed Nov 4 05:48:36.366000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=53.0ms queue=0.2ms idle=1169.7ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:48:36], true, "ae5022ac-b295-4f57-b34a-61da49a056b1", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:48:36.366000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=ae5022ac-b295-4f57-b34a-61da49a056b1 CREATED -> EXPIRED [Wed Nov 4 05:48:36.368000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1223.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["ae5022ac-b295-4f57-b34a-61da49a056b1"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:48:36.368000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=ae5022ac-b295-4f57-b34a-61da49a056b1 [Wed Nov 4 05:48:36.368000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=ae5022ac-b295-4f57-b34a-61da49a056b1 expired (expires_at 2026-11-04 05:48:35Z, session_status=created) [Wed Nov 4 05:48:36.369000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1225.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:48:36Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:48:36.369000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 2 payment(s) were due [Wed Nov 4 05:48:36.370000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1226.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:48:36Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:48:36.371000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1102.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:48:36.452000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399335 scheduled in 15s (38 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:48:36.761000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/summary [Wed Nov 4 05:48:36.762000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 983µs [Wed Nov 4 05:48:37.663000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/eligibility [Wed Nov 4 05:48:38.042000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:48:38.042000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:44252] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:48:38.044000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_faults" db=0.7ms queue=1.0ms idle=1590.2ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:48:38.121000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK db=75.4ms queue=0.6ms idle=1525.8ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`rejection_reason`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["4e9febf8-1b61-4a6e-aec3-7cc7e3c74678", "CREATED", "AED", "3a8bed6d-705b-4d12-9870-0edeb89192fd", "slice9", ~U[2026-11-04 06:00:38Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "rejected", false, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], "not_available", ~U[2026-11-04 05:58:38Z], ~N[2026-11-04 05:48:38], ~N[2026-11-04 05:48:38]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:48:38.121000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:44252] [TabbySim] checkout payment=4e9febf8-1b61-4a6e-aec3-7cc7e3c74678 session=3a8bed6d-705b-4d12-9870-0edeb89192fd decision=rejected reason="not_available" amount=850.00 AED [Wed Nov 4 05:48:38.124000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_payments" db=2.1ms idle=1577.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:48:38.125000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] Sent 200 in 83ms [Wed Nov 4 05:48:38.126000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] checkout post /api/v2/checkout -> 200 (463 ms, attempt 1) [Wed Nov 4 05:48:38.126000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] session rejected by pre-scoring (business outcome) reason=not_available [Wed Nov 4 05:48:38.127000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] eligibility: hide reason=not_available (amount=850.00 AED) [Wed Nov 4 05:48:38.127000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 464ms [Wed Nov 4 05:48:44.971000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/summary [Wed Nov 4 05:48:44.971000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 675µs [Wed Nov 4 05:48:46.405000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/eligibility [Wed Nov 4 05:48:46.670000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:48:46.670000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:44252] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:48:46.671000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_faults" db=0.5ms idle=1526.6ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:48:46.703000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK db=30.5ms idle=1488.9ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["a9358021-8348-42f6-8fea-ebaf67a387b9", "CREATED", "AED", "3ccb856d-839e-4218-a983-26f2b5e90987", "slice9", ~U[2026-11-04 06:00:46Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:58:46Z], ~N[2026-11-04 05:48:46], ~N[2026-11-04 05:48:46]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:48:46.703000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:44252] [TabbySim] checkout payment=a9358021-8348-42f6-8fea-ebaf67a387b9 session=3ccb856d-839e-4218-a983-26f2b5e90987 decision=created reason=nil amount=850.00 AED [Wed Nov 4 05:48:46.704000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_payments" db=0.8ms idle=558.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:48:46.705000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] Sent 200 in 35ms [Wed Nov 4 05:48:46.706000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] checkout post /api/v2/checkout -> 200 (300 ms, attempt 1) [Wed Nov 4 05:48:46.706000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] session created payment=a9358021-8348-42f6-8fea-ebaf67a387b9 [Wed Nov 4 05:48:46.706000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 05:48:46.707000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 301ms [Wed Nov 4 05:48:51.943000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/place [Wed Nov 4 05:48:51.978000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK db=33.0ms queue=0.3ms idle=1798.2ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`amount`,`needs_attention`,`order_reference`,`cancel_url`,`captured_amount`,`failure_url`,`refunded_amount`,`success_url`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["45e301f3-cd1f-4644-98cd-272d0e27d41d", "new", "AED", "slice9", Decimal.new("850.00"), false, "DEMO-D3432BE4", "http://78.47.213.209:4030/tabby/demo/result/cancel?lang=en&order=DEMO-D3432BE4", Decimal.new("0"), "http://78.47.213.209:4030/tabby/demo/result/failure?lang=en&order=DEMO-D3432BE4", Decimal.new("0"), "http://78.47.213.209:4030/tabby/demo/result/success?lang=en&order=DEMO-D3432BE4", ~N[2026-11-04 05:48:51], ~N[2026-11-04 05:48:51]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Wed Nov 4 05:48:52.221000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:47110] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:48:52.222000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:47110] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "en", "merchant_code" => "slice9", "merchant_urls" => %{"cancel" => "http://78.47.213.209:4030/tabby/return/45e301f3-cd1f-4644-98cd-272d0e27d41d/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/45e301f3-cd1f-4644-98cd-272d0e27d41d/failure", "success" => "http://78.47.213.209:4030/tabby/return/45e301f3-cd1f-4644-98cd-272d0e27d41d/success"}, "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-D3432BE4"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:48:52.223000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:47110] QUERY OK source="tabby_sim_faults" db=0.3ms queue=0.3ms idle=1019.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:48:52.269000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:47110] QUERY OK db=44.0ms queue=0.3ms idle=479.4ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`buyer_history`,`captures`,`is_test`,`lang`,`merchant_urls`,`refunds`,`session_expires_at`,`shipping_address`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["9b09c804-ba67-424c-8b82-c1759836fb6e", "CREATED", "AED", "a11506b4-e4e3-43cf-8b73-4b2c1c6cf33e", "slice9", ~U[2026-11-04 06:00:52Z], %{"lang" => "en", "merchant_code" => "slice9", "merchant_urls" => %{"cancel" => "http://78.47.213.209:4030/tabby/return/45e301f3-cd1f-4644-98cd-272d0e27d41d/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/45e301f3-cd1f-4644-98cd-272d0e27d41d/failure", "success" => "http://78.47.213.209:4030/tabby/return/45e301f3-cd1f-4644-98cd-272d0e27d41d/success"}, "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-D3432BE4"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "0", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo headphones", "unit_price" => "650"}, %{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo smartwatch", "unit_price" => "200"}], "reference_id" => "DEMO-D3432BE4", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, %{"registered_since" => "2023-02-01T10:00:00Z"}, [], true, "en", %{"cancel" => "http://78.47.213.209:4030/tabby/return/45e301f3-cd1f-4644-98cd-272d0e27d41d/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/45e301f3-cd1f-4644-98cd-272d0e27d41d/failure", "success" => "http://78.47.213.209:4030/tabby/return/45e301f3-cd1f-4644-98cd-272d0e27d41d/success"}, [], ~U[2026-11-04 05:58:52Z], %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}, ~N[2026-11-04 05:48:52], ~N[2026-11-04 05:48:52]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:48:52.269000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:47110] [TabbySim] checkout payment=9b09c804-ba67-424c-8b82-c1759836fb6e session=a11506b4-e4e3-43cf-8b73-4b2c1c6cf33e decision=created reason=nil amount=850.00 AED [Wed Nov 4 05:48:52.270000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:47110] QUERY OK source="tabby_sim_payments" db=0.4ms idle=439.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:48:52.275000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:47110] Sent 200 in 54ms [Wed Nov 4 05:48:52.277000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] checkout post /api/v2/checkout -> 200 (299 ms, attempt 1) [Wed Nov 4 05:48:52.277000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] session created payment=9b09c804-ba67-424c-8b82-c1759836fb6e [Wed Nov 4 05:48:52.279000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK source="tabby_payments" db=0.9ms idle=260.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["45e301f3-cd1f-4644-98cd-272d0e27d41d"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Wed Nov 4 05:48:52.329000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK source="tabby_payments" db=48.8ms queue=0.5ms idle=178.4ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-04 06:08:52Z], "9b09c804-ba67-424c-8b82-c1759836fb6e", "a11506b4-e4e3-43cf-8b73-4b2c1c6cf33e", ~N[2026-11-04 05:48:52], "45e301f3-cd1f-4644-98cd-272d0e27d41d"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Wed Nov 4 05:48:52.329000 2026] [DaProductApp.Tabby.Sessions:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] session created attempt=45e301f3-cd1f-4644-98cd-272d0e27d41d payment=9b09c804-ba67-424c-8b82-c1759836fb6e [Wed Nov 4 05:48:52.332000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 389ms [Wed Nov 4 05:48:52.359000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.5ms idle=212.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:48:52Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:48:52.388000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=28.7ms queue=0.1ms idle=135.9ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:48:52], true, "415f227a-5784-4e1b-8431-f395826db08e", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:48:52.388000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=415f227a-5784-4e1b-8431-f395826db08e CREATED -> EXPIRED [Wed Nov 4 05:48:52.390000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=120.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["415f227a-5784-4e1b-8431-f395826db08e"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:48:52.390000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=415f227a-5784-4e1b-8431-f395826db08e [Wed Nov 4 05:48:52.390000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=415f227a-5784-4e1b-8431-f395826db08e expired (expires_at 2026-11-04 05:48:51Z, session_status=created) [Wed Nov 4 05:48:52.392000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.4ms idle=121.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:48:52Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:48:52.392000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:48:52.400000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=7.5ms idle=122.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:48:52Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:48:52.402000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=125.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:48:52.426000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399336 scheduled in 15s (40 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:48:52.796000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] GET /tabby-sim/hpp/a11506b4-e4e3-43cf-8b73-4b2c1c6cf33e [Wed Nov 4 05:48:52.796000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 115.99.167.137:60633] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "a11506b4-e4e3-43cf-8b73-4b2c1c6cf33e"} Pipelines: [:tabby_sim_hpp] [Wed Nov 4 05:48:52.797000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK source="tabby_sim_payments" db=0.9ms idle=406.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["a11506b4-e4e3-43cf-8b73-4b2c1c6cf33e"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Wed Nov 4 05:48:52.798000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 1ms [Wed Nov 4 05:48:57.673000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby-sim/hpp/a11506b4-e4e3-43cf-8b73-4b2c1c6cf33e [Wed Nov 4 05:48:57.673000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 115.99.167.137:60633] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "approve", "otp" => "8888", "session_id" => "a11506b4-e4e3-43cf-8b73-4b2c1c6cf33e"} Pipelines: [:tabby_sim_hpp] [Wed Nov 4 05:48:57.674000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1528.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["a11506b4-e4e3-43cf-8b73-4b2c1c6cf33e"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Wed Nov 4 05:48:57.713000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK source="tabby_sim_payments" db=38.3ms idle=1529.4ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["AUTHORIZED", ~N[2026-11-04 05:48:57], "9b09c804-ba67-424c-8b82-c1759836fb6e", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:48:57.713000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client 115.99.167.137:60633] [TabbySim] payment=9b09c804-ba67-424c-8b82-c1759836fb6e CREATED -> AUTHORIZED [Wed Nov 4 05:48:57.715000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK source="tabby_sim_payments" db=1.4ms idle=1568.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["9b09c804-ba67-424c-8b82-c1759836fb6e"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:48:57.716000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK source="tabby_sim_webhooks" db=0.4ms idle=1570.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["slice9"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Wed Nov 4 05:48:57.716000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client 115.99.167.137:60633] [TabbySim] no webhook registered for merchant_code=slice9; event=authorize payment=9b09c804-ba67-424c-8b82-c1759836fb6e [Wed Nov 4 05:48:57.717000 2026] [DaProductApp.TabbySim.Hpp:info] [pid 1031735] [client 115.99.167.137:60633] [TabbySim] hpp payment=9b09c804-ba67-424c-8b82-c1759836fb6e action=approve status=AUTHORIZED [Wed Nov 4 05:48:57.717000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 302 in 44ms [Wed Nov 4 05:48:58.161000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] GET /tabby/return/45e301f3-cd1f-4644-98cd-272d0e27d41d/success [Wed Nov 4 05:48:58.162000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK source="tabby_payments" db=0.5ms idle=1015.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["45e301f3-cd1f-4644-98cd-272d0e27d41d"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:48:58.187000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 302 in 26ms [Wed Nov 4 05:48:58.293000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=579.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["slice9", ~U[2026-10-17 05:48:58Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:48:58.293000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=618.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["45e301f3-cd1f-4644-98cd-272d0e27d41d"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:48:58.294000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=578.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["slice9", ~N[2026-11-04 05:46:58], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:48:58.296000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.5ms idle=577.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", ~N[2026-11-04 05:46:58], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:48:58.298000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.9ms queue=0.2ms idle=344.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["slice9", ~U[2026-11-04 05:43:58Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:48:58.299000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.5ms queue=0.1ms idle=261.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:48:58.301000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.1ms queue=0.1ms idle=138.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["b764f4fe-99a1-4bd0-afaf-2271ac21324d"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:48:58.654000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:41286] GET /tabby-sim/api/v2/payments/84d13949-ac96-43b5-bac5-d7b9bb450f73 [Wed Nov 4 05:48:58.654000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:41286] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "84d13949-ac96-43b5-bac5-d7b9bb450f73"} Pipelines: [:tabby_sim_api] [Wed Nov 4 05:48:58.655000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41286] QUERY OK source="tabby_sim_faults" db=0.6ms queue=0.2ms idle=355.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "84d13949-ac96-43b5-bac5-d7b9bb450f73"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 05:48:58.656000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:47110] GET /tabby-sim/api/v2/payments/9b09c804-ba67-424c-8b82-c1759836fb6e [Wed Nov 4 05:48:58.656000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:47110] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "9b09c804-ba67-424c-8b82-c1759836fb6e"} Pipelines: [:tabby_sim_api] [Wed Nov 4 05:48:58.656000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41286] QUERY OK source="tabby_sim_faults" db=0.9ms idle=355.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:48:58.657000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41286] QUERY OK source="tabby_sim_payments" db=0.6ms idle=301.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["84d13949-ac96-43b5-bac5-d7b9bb450f73"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Wed Nov 4 05:48:58.658000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:47110] QUERY OK source="tabby_sim_faults" db=0.8ms queue=0.6ms idle=354.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "9b09c804-ba67-424c-8b82-c1759836fb6e"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 05:48:58.658000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:41286] Sent 200 in 4ms [Wed Nov 4 05:48:58.659000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:47110] QUERY OK source="tabby_sim_faults" db=0.7ms idle=271.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:48:58.659000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client -] [Tabby] retrieve get /api/v2/payments/84d13949-ac96-43b5-bac5-d7b9bb450f73 -> 200 (358 ms, attempt 1) [Wed Nov 4 05:48:58.659000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1031735] [client -] [Tabby] verify: attempt=b764f4fe-99a1-4bd0-afaf-2271ac21324d payment=84d13949-ac96-43b5-bac5-d7b9bb450f73 is still CREATED at Tabby; it will be looked at again [Wed Nov 4 05:48:58.660000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:47110] QUERY OK source="tabby_sim_payments" db=0.4ms idle=242.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["9b09c804-ba67-424c-8b82-c1759836fb6e"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Wed Nov 4 05:48:58.660000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:47110] Sent 200 in 4ms [Wed Nov 4 05:48:58.661000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client -] [Tabby] retrieve get /api/v2/payments/9b09c804-ba67-424c-8b82-c1759836fb6e -> 200 (368 ms, attempt 1) [Wed Nov 4 05:48:58.660000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=0.8ms idle=215.1ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-04 05:46:58Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Wed Nov 4 05:48:58.663000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=1.4ms idle=146.8ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["slice9", ~N[2026-11-04 05:46:58], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Wed Nov 4 05:48:58.663000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=106.6ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:48:58.664000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=8.4ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["slice9", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:48:58.665000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=0.3ms idle=7.9ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Wed Nov 4 05:48:58.665000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=0.3ms idle=7.6ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Wed Nov 4 05:48:58.666000 2026] [DaProductApp.Tabby.Poller:info] [pid 1031735] [client -] [Tabby] poll: handled 1 (created:pending=1); 2 attempt(s) still watched [Wed Nov 4 05:48:58.698000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] GET /tabby/demo/result/success [Wed Nov 4 05:48:58.698000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 442µs [Wed Nov 4 05:48:58.732000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=70.5ms idle=188.3ms UPDATE `tabby_payments` AS t0 SET t0.`winner_key` = ?, t0.`authorized_at` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["60a6bf8e3f4c5ba805b7fb6c4aad62a16ac00ce1ec9a64e5cf8284112b08cfb5", ~U[2026-11-04 05:48:58Z], "authorized", ~N[2026-11-04 05:48:58], "45e301f3-cd1f-4644-98cd-272d0e27d41d", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Wed Nov 4 05:48:58.733000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=71.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["45e301f3-cd1f-4644-98cd-272d0e27d41d"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:48:58.733000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1031735] [client -] [Tabby] verify: attempt=45e301f3-cd1f-4644-98cd-272d0e27d41d payment=9b09c804-ba67-424c-8b82-c1759836fb6e created -> authorized [Wed Nov 4 05:48:58.889000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=222.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["45e301f3-cd1f-4644-98cd-272d0e27d41d"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:48:58.964000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=74.6ms idle=222.1ms UPDATE `tabby_payments` AS t0 SET t0.`claimed_at` = ?, t0.`capture_reference_id` = ?, t0.`claimed_by` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [~U[2026-11-04 05:48:58Z], "capture-DEMO-D3432BE4", "nonode@nohost", "capturing", ~N[2026-11-04 05:48:58], "45e301f3-cd1f-4644-98cd-272d0e27d41d", "authorized"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Wed Nov 4 05:48:58.965000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=232.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["45e301f3-cd1f-4644-98cd-272d0e27d41d"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:48:58.965000 2026] [DaProductApp.Tabby.Capture:info] [pid 1031735] [client -] [Tabby] capture: attempt=45e301f3-cd1f-4644-98cd-272d0e27d41d payment=9b09c804-ba67-424c-8b82-c1759836fb6e claimed (authorized -> capturing) [Wed Nov 4 05:48:59.327000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:41286] POST /tabby-sim/api/v2/payments/9b09c804-ba67-424c-8b82-c1759836fb6e/captures [Wed Nov 4 05:48:59.327000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:41286] Processing with DaProductAppWeb.TabbySim.PaymentsController.capture/2 Parameters: %{"amount" => "850.00", "id" => "9b09c804-ba67-424c-8b82-c1759836fb6e", "reference_id" => "capture-DEMO-D3432BE4"} Pipelines: [:tabby_sim_api] [Wed Nov 4 05:48:59.328000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41286] QUERY OK source="tabby_sim_faults" db=0.5ms idle=534.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["capture", "9b09c804-ba67-424c-8b82-c1759836fb6e"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 05:48:59.331000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41286] QUERY OK source="tabby_sim_faults" db=2.1ms queue=0.1ms idle=535.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["capture"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:48:59.331000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41286] QUERY OK source="tabby_sim_payments" db=0.5ms idle=505.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["9b09c804-ba67-424c-8b82-c1759836fb6e"] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:227 [Wed Nov 4 05:48:59.332000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41286] QUERY OK db=0.1ms idle=443.7ms begin [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Wed Nov 4 05:48:59.333000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41286] QUERY OK source="tabby_sim_payments" db=0.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) FOR UPDATE ["9b09c804-ba67-424c-8b82-c1759836fb6e"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:231 [Wed Nov 4 05:48:59.334000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41286] QUERY OK source="tabby_sim_payments" db=0.5ms UPDATE `tabby_sim_payments` SET `status` = ?, `closed_at` = ?, `captures` = ?, `updated_at` = ? WHERE `id` = ? ["CLOSED", ~U[2026-11-04 05:48:59Z], [%{"amount" => "850", "created_at" => "2026-11-04T05:48:59Z", "discount_amount" => "0", "id" => "3a57f549-842f-4557-b59d-607abc5ae2cd", "items" => nil, "reference_id" => "capture-DEMO-D3432BE4", "shipping_amount" => "0", "tax_amount" => "0"}], ~N[2026-11-04 05:48:59], "9b09c804-ba67-424c-8b82-c1759836fb6e"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:244 [Wed Nov 4 05:48:59.334000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client 127.0.0.1:41286] [TabbySim] capture payment=9b09c804-ba67-424c-8b82-c1759836fb6e status=CLOSED [Wed Nov 4 05:48:59.413000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41286] QUERY OK db=78.4ms commit [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Wed Nov 4 05:48:59.414000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41286] QUERY OK source="tabby_sim_webhooks" db=0.6ms idle=476.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["slice9"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Wed Nov 4 05:48:59.414000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client 127.0.0.1:41286] [TabbySim] no webhook registered for merchant_code=slice9; event=capture payment=9b09c804-ba67-424c-8b82-c1759836fb6e [Wed Nov 4 05:48:59.415000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41286] QUERY OK source="tabby_sim_webhooks" db=0.3ms idle=450.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["slice9"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Wed Nov 4 05:48:59.415000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client 127.0.0.1:41286] [TabbySim] no webhook registered for merchant_code=slice9; event=close payment=9b09c804-ba67-424c-8b82-c1759836fb6e [Wed Nov 4 05:48:59.415000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:41286] Sent 200 in 88ms [Wed Nov 4 05:48:59.416000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client -] [Tabby] capture post /api/v2/payments/9b09c804-ba67-424c-8b82-c1759836fb6e/captures -> 200 (450 ms, attempt 1) [Wed Nov 4 05:48:59.483000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=66.2ms idle=451.3ms UPDATE `tabby_payments` AS t0 SET t0.`captured_amount` = ?, t0.`captured_at` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [Decimal.new("850"), ~U[2026-11-04 05:48:59Z], "captured", ~N[2026-11-04 05:48:59], "45e301f3-cd1f-4644-98cd-272d0e27d41d", "capturing"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Wed Nov 4 05:48:59.483000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=390.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["45e301f3-cd1f-4644-98cd-272d0e27d41d"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:48:59.484000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1031735] [client -] [Tabby] verify: attempt=45e301f3-cd1f-4644-98cd-272d0e27d41d payment=9b09c804-ba67-424c-8b82-c1759836fb6e capturing -> captured [Wed Nov 4 05:48:59.484000 2026] [DaProductApp.Tabby.Capture:info] [pid 1031735] [client -] [Tabby] capture: attempt=45e301f3-cd1f-4644-98cd-272d0e27d41d payment=9b09c804-ba67-424c-8b82-c1759836fb6e is captured [Wed Nov 4 05:48:59.902000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] GET /tabby/demo/status/45e301f3-cd1f-4644-98cd-272d0e27d41d [Wed Nov 4 05:48:59.903000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK source="tabby_payments" db=0.5ms idle=544.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["45e301f3-cd1f-4644-98cd-272d0e27d41d"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:48:59.903000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 1ms [Wed Nov 4 05:49:08.587000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1436.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:49:08Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:49:08.636000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=49.1ms queue=0.1ms idle=1437.6ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:49:08], true, "5d74aab3-a84d-4535-94af-ff39ad7a59ba", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:49:08.636000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=5d74aab3-a84d-4535-94af-ff39ad7a59ba CREATED -> EXPIRED [Wed Nov 4 05:49:08.637000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1487.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["5d74aab3-a84d-4535-94af-ff39ad7a59ba"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:49:08.637000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=5d74aab3-a84d-4535-94af-ff39ad7a59ba [Wed Nov 4 05:49:08.638000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=5d74aab3-a84d-4535-94af-ff39ad7a59ba expired (expires_at 2026-11-04 05:49:07Z, session_status=created) [Wed Nov 4 05:49:08.639000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1488.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:49:08Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:49:08.639000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:49:08.640000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1489.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:49:08Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:49:08.641000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1490.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:49:08.713000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399340 scheduled in 58s (38 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:49:14.500000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] GET /tabby/demo [Wed Nov 4 05:49:14.503000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 2ms [Wed Nov 4 05:49:15.135000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/summary [Wed Nov 4 05:49:15.136000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 531µs [Wed Nov 4 05:49:15.926000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/eligibility [Wed Nov 4 05:49:16.170000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:49:16.170000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:44252] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:49:16.171000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_faults" db=0.5ms idle=646.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:49:16.210000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK db=38.2ms queue=0.2ms idle=435.7ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["09fdcf9c-54b0-4160-90c0-f5cc9923e3ca", "CREATED", "AED", "f3825d15-b02d-4298-a8e0-957506fb9cd3", "slice9", ~U[2026-11-04 06:01:16Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:59:16Z], ~N[2026-11-04 05:49:16], ~N[2026-11-04 05:49:16]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:49:16.210000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:44252] [TabbySim] checkout payment=09fdcf9c-54b0-4160-90c0-f5cc9923e3ca session=f3825d15-b02d-4298-a8e0-957506fb9cd3 decision=created reason=nil amount=850.00 AED [Wed Nov 4 05:49:16.211000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_payments" db=0.6ms idle=391.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:49:16.213000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] Sent 200 in 43ms [Wed Nov 4 05:49:16.214000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] checkout post /api/v2/checkout -> 200 (288 ms, attempt 1) [Wed Nov 4 05:49:16.214000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] session created payment=09fdcf9c-54b0-4160-90c0-f5cc9923e3ca [Wed Nov 4 05:49:16.215000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 05:49:16.215000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 289ms [Wed Nov 4 05:49:17.649000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/summary [Wed Nov 4 05:49:17.650000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 824µs [Wed Nov 4 05:49:20.696000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/eligibility [Wed Nov 4 05:49:20.972000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:49:20.973000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:44252] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:49:20.974000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_faults" db=0.8ms idle=823.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:49:21.033000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK db=58.1ms idle=825.0ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["1f3442fb-84e7-49d4-8275-0ebb109f6318", "CREATED", "AED", "2714ef32-bbda-41c9-a596-89ad429a1e8c", "slice9", ~U[2026-11-04 06:01:20Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1050.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 05:59:20Z], ~N[2026-11-04 05:49:20], ~N[2026-11-04 05:49:20]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:49:21.033000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:44252] [TabbySim] checkout payment=1f3442fb-84e7-49d4-8275-0ebb109f6318 session=2714ef32-bbda-41c9-a596-89ad429a1e8c decision=created reason=nil amount=1050.00 AED [Wed Nov 4 05:49:21.035000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44252] QUERY OK source="tabby_sim_payments" db=1.4ms queue=0.1ms idle=884.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:49:21.037000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44252] Sent 200 in 64ms [Wed Nov 4 05:49:21.037000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] checkout post /api/v2/checkout -> 200 (340 ms, attempt 1) [Wed Nov 4 05:49:21.037000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] session created payment=1f3442fb-84e7-49d4-8275-0ebb109f6318 [Wed Nov 4 05:49:21.038000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] eligibility: show (amount=1050.00 AED) [Wed Nov 4 05:49:21.038000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 341ms [Wed Nov 4 05:49:23.731000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/place [Wed Nov 4 05:49:23.769000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK db=37.1ms idle=1582.4ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`amount`,`needs_attention`,`order_reference`,`cancel_url`,`captured_amount`,`failure_url`,`refunded_amount`,`success_url`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["928590f7-b7ec-41f9-a05c-271c88741d7c", "new", "AED", "slice9", Decimal.new("1050.00"), false, "DEMO-CBF3D147", "http://78.47.213.209:4030/tabby/demo/result/cancel?lang=en&order=DEMO-CBF3D147", Decimal.new("0"), "http://78.47.213.209:4030/tabby/demo/result/failure?lang=en&order=DEMO-CBF3D147", Decimal.new("0"), "http://78.47.213.209:4030/tabby/demo/result/success?lang=en&order=DEMO-CBF3D147", ~N[2026-11-04 05:49:23], ~N[2026-11-04 05:49:23]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Wed Nov 4 05:49:24.002000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:47110] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:49:24.002000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:47110] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "en", "merchant_code" => "slice9", "merchant_urls" => %{"cancel" => "http://78.47.213.209:4030/tabby/return/928590f7-b7ec-41f9-a05c-271c88741d7c/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/928590f7-b7ec-41f9-a05c-271c88741d7c/failure", "success" => "http://78.47.213.209:4030/tabby/return/928590f7-b7ec-41f9-a05c-271c88741d7c/success"}, "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 2, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-CBF3D147"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:49:24.003000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:47110] QUERY OK source="tabby_sim_faults" db=0.4ms idle=1852.6ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:49:24.071000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:47110] QUERY OK db=66.5ms queue=0.3ms idle=1853.6ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`buyer_history`,`captures`,`is_test`,`lang`,`merchant_urls`,`refunds`,`session_expires_at`,`shipping_address`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["5cfcb299-18e8-4e09-9f84-77af6e04dfaa", "CREATED", "AED", "cbf94bd0-f5b4-48ad-8794-aab837f26b64", "slice9", ~U[2026-11-04 06:01:24Z], %{"lang" => "en", "merchant_code" => "slice9", "merchant_urls" => %{"cancel" => "http://78.47.213.209:4030/tabby/return/928590f7-b7ec-41f9-a05c-271c88741d7c/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/928590f7-b7ec-41f9-a05c-271c88741d7c/failure", "success" => "http://78.47.213.209:4030/tabby/return/928590f7-b7ec-41f9-a05c-271c88741d7c/success"}, "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 2, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-CBF3D147"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "0", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo headphones", "unit_price" => "650"}, %{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 2, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo smartwatch", "unit_price" => "200"}], "reference_id" => "DEMO-CBF3D147", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1050.00"), %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, %{"registered_since" => "2023-02-01T10:00:00Z"}, [], true, "en", %{"cancel" => "http://78.47.213.209:4030/tabby/return/928590f7-b7ec-41f9-a05c-271c88741d7c/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/928590f7-b7ec-41f9-a05c-271c88741d7c/failure", "success" => "http://78.47.213.209:4030/tabby/return/928590f7-b7ec-41f9-a05c-271c88741d7c/success"}, [], ~U[2026-11-04 05:59:24Z], %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}, ~N[2026-11-04 05:49:24], ~N[2026-11-04 05:49:24]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:49:24.071000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:47110] [TabbySim] checkout payment=5cfcb299-18e8-4e09-9f84-77af6e04dfaa session=cbf94bd0-f5b4-48ad-8794-aab837f26b64 decision=created reason=nil amount=1050.00 AED [Wed Nov 4 05:49:24.072000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:47110] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1921.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:49:24.074000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:47110] Sent 200 in 72ms [Wed Nov 4 05:49:24.074000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] checkout post /api/v2/checkout -> 200 (305 ms, attempt 1) [Wed Nov 4 05:49:24.074000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] session created payment=5cfcb299-18e8-4e09-9f84-77af6e04dfaa [Wed Nov 4 05:49:24.075000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK source="tabby_payments" db=0.5ms idle=533.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["928590f7-b7ec-41f9-a05c-271c88741d7c"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Wed Nov 4 05:49:24.123000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK source="tabby_payments" db=46.8ms queue=0.3ms idle=525.9ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-04 06:09:24Z], "5cfcb299-18e8-4e09-9f84-77af6e04dfaa", "cbf94bd0-f5b4-48ad-8794-aab837f26b64", ~N[2026-11-04 05:49:24], "928590f7-b7ec-41f9-a05c-271c88741d7c"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Wed Nov 4 05:49:24.123000 2026] [DaProductApp.Tabby.Sessions:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] session created attempt=928590f7-b7ec-41f9-a05c-271c88741d7c payment=5cfcb299-18e8-4e09-9f84-77af6e04dfaa [Wed Nov 4 05:49:24.125000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 394ms [Wed Nov 4 05:49:24.565000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] GET /tabby-sim/hpp/cbf94bd0-f5b4-48ad-8794-aab837f26b64 [Wed Nov 4 05:49:24.565000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 115.99.167.137:60633] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "cbf94bd0-f5b4-48ad-8794-aab837f26b64"} Pipelines: [:tabby_sim_hpp] [Wed Nov 4 05:49:24.566000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK source="tabby_sim_payments" db=0.6ms idle=562.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["cbf94bd0-f5b4-48ad-8794-aab837f26b64"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Wed Nov 4 05:49:24.566000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 1ms [Wed Nov 4 05:49:58.171000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby-sim/hpp/cbf94bd0-f5b4-48ad-8794-aab837f26b64 [Wed Nov 4 05:49:58.171000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 115.99.167.137:60633] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "cancel", "otp" => "", "session_id" => "cbf94bd0-f5b4-48ad-8794-aab837f26b64"} Pipelines: [:tabby_sim_hpp] [Wed Nov 4 05:49:58.172000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1022.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["cbf94bd0-f5b4-48ad-8794-aab837f26b64"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Wed Nov 4 05:49:58.209000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK source="tabby_sim_payments" db=36.0ms idle=1023.6ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:49:58], true, "5cfcb299-18e8-4e09-9f84-77af6e04dfaa", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:49:58.209000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client 115.99.167.137:60633] [TabbySim] payment=5cfcb299-18e8-4e09-9f84-77af6e04dfaa CREATED -> EXPIRED [Wed Nov 4 05:49:58.210000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1060.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["5cfcb299-18e8-4e09-9f84-77af6e04dfaa"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:49:58.210000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client 115.99.167.137:60633] [TabbySim] webhook not sent: event=expire payment=5cfcb299-18e8-4e09-9f84-77af6e04dfaa [Wed Nov 4 05:49:58.210000 2026] [DaProductApp.TabbySim.Hpp:info] [pid 1031735] [client 115.99.167.137:60633] [TabbySim] hpp payment=5cfcb299-18e8-4e09-9f84-77af6e04dfaa action=cancel status=EXPIRED [Wed Nov 4 05:49:58.210000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 302 in 39ms [Wed Nov 4 05:49:58.620000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] GET /tabby/return/928590f7-b7ec-41f9-a05c-271c88741d7c/cancel [Wed Nov 4 05:49:58.620000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK source="tabby_payments" db=0.3ms idle=1470.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["928590f7-b7ec-41f9-a05c-271c88741d7c"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:49:58.684000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 302 in 64ms [Wed Nov 4 05:49:58.766000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=593.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["928590f7-b7ec-41f9-a05c-271c88741d7c"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:49:59.048000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:41286] GET /tabby-sim/api/v2/payments/5cfcb299-18e8-4e09-9f84-77af6e04dfaa [Wed Nov 4 05:49:59.048000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:41286] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "5cfcb299-18e8-4e09-9f84-77af6e04dfaa"} Pipelines: [:tabby_sim_api] [Wed Nov 4 05:49:59.050000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41286] QUERY OK source="tabby_sim_faults" db=0.9ms idle=428.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "5cfcb299-18e8-4e09-9f84-77af6e04dfaa"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 05:49:59.051000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41286] QUERY OK source="tabby_sim_faults" db=0.5ms idle=427.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:49:59.051000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41286] QUERY OK source="tabby_sim_payments" db=0.4ms idle=395.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["5cfcb299-18e8-4e09-9f84-77af6e04dfaa"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Wed Nov 4 05:49:59.052000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:41286] Sent 200 in 3ms [Wed Nov 4 05:49:59.052000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client -] [Tabby] retrieve get /api/v2/payments/5cfcb299-18e8-4e09-9f84-77af6e04dfaa -> 200 (286 ms, attempt 1) [Wed Nov 4 05:49:59.089000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] GET /tabby/demo/result/cancel [Wed Nov 4 05:49:59.089000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 556µs [Wed Nov 4 05:49:59.161000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=108.5ms idle=368.8ms UPDATE `tabby_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["expired", ~N[2026-11-04 05:49:59], "928590f7-b7ec-41f9-a05c-271c88741d7c", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Wed Nov 4 05:49:59.162000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=396.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["928590f7-b7ec-41f9-a05c-271c88741d7c"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:49:59.162000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1031735] [client -] [Tabby] verify: attempt=928590f7-b7ec-41f9-a05c-271c88741d7c payment=5cfcb299-18e8-4e09-9f84-77af6e04dfaa created -> expired [Wed Nov 4 05:50:07.923000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1770.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:50:07Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:50:07.990000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=67.3ms idle=1771.8ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:50:07], true, "1fefe561-8526-4433-bf83-fc58d6a6228b", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:50:07.991000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=1fefe561-8526-4433-bf83-fc58d6a6228b CREATED -> EXPIRED [Wed Nov 4 05:50:07.992000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1839.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["1fefe561-8526-4433-bf83-fc58d6a6228b"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:50:07.992000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=1fefe561-8526-4433-bf83-fc58d6a6228b [Wed Nov 4 05:50:07.992000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=1fefe561-8526-4433-bf83-fc58d6a6228b expired (expires_at 2026-11-04 05:50:06Z, session_status=created) [Wed Nov 4 05:50:07.993000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1840.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:50:07Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:50:07.993000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:50:07.994000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1841.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:50:07Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:50:07.995000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1842.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:50:08.063000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399347 scheduled in 15s (39 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:50:24.007000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=854.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:50:24Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:50:24.171000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=163.7ms idle=856.0ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:50:24], true, "f7fe86e2-7dbc-4eca-91ed-2a7561c3bb49", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:50:24.171000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=f7fe86e2-7dbc-4eca-91ed-2a7561c3bb49 CREATED -> EXPIRED [Wed Nov 4 05:50:24.172000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.1ms idle=1020.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["f7fe86e2-7dbc-4eca-91ed-2a7561c3bb49"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:50:24.172000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=f7fe86e2-7dbc-4eca-91ed-2a7561c3bb49 [Wed Nov 4 05:50:24.173000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=f7fe86e2-7dbc-4eca-91ed-2a7561c3bb49 expired (expires_at 2026-11-04 05:50:22Z, session_status=created) [Wed Nov 4 05:50:24.174000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1021.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:50:24Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:50:24.174000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:50:24.175000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1023.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:50:24Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:50:24.176000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1024.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:50:24.281000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399348 scheduled in 5s (38 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:50:24.365000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] GET /tabby/demo [Wed Nov 4 05:50:24.367000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 2ms [Wed Nov 4 05:50:25.027000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/summary [Wed Nov 4 05:50:25.027000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 596µs [Wed Nov 4 05:50:25.957000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/eligibility [Wed Nov 4 05:50:26.281000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44522] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:50:26.281000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:44522] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:50:26.282000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44522] QUERY OK source="tabby_sim_faults" db=0.6ms idle=582.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:50:26.424000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44522] QUERY OK db=141.2ms queue=0.3ms idle=499.2ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["83556bb8-7673-4490-9428-2324908d2531", "CREATED", "AED", "5f8a1054-92ec-405a-a2d6-fdf5abd581a1", "slice9", ~U[2026-11-04 06:02:26Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1050.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:00:26Z], ~N[2026-11-04 05:50:26], ~N[2026-11-04 05:50:26]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:50:26.424000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:44522] [TabbySim] checkout payment=83556bb8-7673-4490-9428-2324908d2531 session=5f8a1054-92ec-405a-a2d6-fdf5abd581a1 decision=created reason=nil amount=1050.00 AED [Wed Nov 4 05:50:26.426000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44522] QUERY OK source="tabby_sim_payments" db=1.0ms idle=576.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:50:26.427000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44522] Sent 200 in 146ms [Wed Nov 4 05:50:26.429000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] checkout post /api/v2/checkout -> 200 (472 ms, attempt 1) [Wed Nov 4 05:50:26.429000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] session created payment=83556bb8-7673-4490-9428-2324908d2531 [Wed Nov 4 05:50:26.429000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] eligibility: show (amount=1050.00 AED) [Wed Nov 4 05:50:26.430000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 472ms [Wed Nov 4 05:50:30.995000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/place [Wed Nov 4 05:50:31.046000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=893.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:50:31Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:50:31.055000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK db=58.6ms queue=0.5ms idle=844.2ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`amount`,`needs_attention`,`order_reference`,`cancel_url`,`captured_amount`,`failure_url`,`refunded_amount`,`success_url`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["b724e1d9-68f7-4847-9033-564918dacbfb", "new", "AED", "slice9", Decimal.new("1050.00"), false, "DEMO-4C454665", "http://78.47.213.209:4030/tabby/demo/result/cancel?lang=en&order=DEMO-4C454665", Decimal.new("0"), "http://78.47.213.209:4030/tabby/demo/result/failure?lang=en&order=DEMO-4C454665", Decimal.new("0"), "http://78.47.213.209:4030/tabby/demo/result/success?lang=en&order=DEMO-4C454665", ~N[2026-11-04 05:50:30], ~N[2026-11-04 05:50:30]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Wed Nov 4 05:50:31.100000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=53.2ms idle=894.9ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:50:31], true, "1e7a7758-0eb7-46a8-8991-981e6f5604ec", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:50:31.100000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=1e7a7758-0eb7-46a8-8991-981e6f5604ec CREATED -> EXPIRED [Wed Nov 4 05:50:31.102000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=948.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["1e7a7758-0eb7-46a8-8991-981e6f5604ec"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:50:31.102000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=1e7a7758-0eb7-46a8-8991-981e6f5604ec [Wed Nov 4 05:50:31.102000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=1e7a7758-0eb7-46a8-8991-981e6f5604ec expired (expires_at 2026-11-04 05:50:29Z, session_status=created) [Wed Nov 4 05:50:31.103000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=950.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:50:31Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:50:31.104000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:50:31.105000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=328.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:50:31Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:50:31.106000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=246.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:50:31.160000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399349 scheduled in 19s (38 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:50:31.325000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:41286] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:50:31.325000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:41286] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "en", "merchant_code" => "slice9", "merchant_urls" => %{"cancel" => "http://78.47.213.209:4030/tabby/return/b724e1d9-68f7-4847-9033-564918dacbfb/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/b724e1d9-68f7-4847-9033-564918dacbfb/failure", "success" => "http://78.47.213.209:4030/tabby/return/b724e1d9-68f7-4847-9033-564918dacbfb/success"}, "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 2, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-4C454665"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:50:31.326000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41286] QUERY OK source="tabby_sim_faults" db=0.8ms idle=224.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:50:31.367000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41286] QUERY OK db=39.5ms idle=223.6ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`buyer_history`,`captures`,`is_test`,`lang`,`merchant_urls`,`refunds`,`session_expires_at`,`shipping_address`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["5447466b-628f-4ee0-9e69-20b32f11c34c", "CREATED", "AED", "4f66e112-95b9-4cd3-a5a7-c9a541a0e029", "slice9", ~U[2026-11-04 06:02:31Z], %{"lang" => "en", "merchant_code" => "slice9", "merchant_urls" => %{"cancel" => "http://78.47.213.209:4030/tabby/return/b724e1d9-68f7-4847-9033-564918dacbfb/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/b724e1d9-68f7-4847-9033-564918dacbfb/failure", "success" => "http://78.47.213.209:4030/tabby/return/b724e1d9-68f7-4847-9033-564918dacbfb/success"}, "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 2, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-4C454665"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "0", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo headphones", "unit_price" => "650"}, %{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 2, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo smartwatch", "unit_price" => "200"}], "reference_id" => "DEMO-4C454665", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1050.00"), %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, %{"registered_since" => "2023-02-01T10:00:00Z"}, [], true, "en", %{"cancel" => "http://78.47.213.209:4030/tabby/return/b724e1d9-68f7-4847-9033-564918dacbfb/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/b724e1d9-68f7-4847-9033-564918dacbfb/failure", "success" => "http://78.47.213.209:4030/tabby/return/b724e1d9-68f7-4847-9033-564918dacbfb/success"}, [], ~U[2026-11-04 06:00:31Z], %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}, ~N[2026-11-04 05:50:31], ~N[2026-11-04 05:50:31]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:50:31.368000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:41286] [TabbySim] checkout payment=5447466b-628f-4ee0-9e69-20b32f11c34c session=4f66e112-95b9-4cd3-a5a7-c9a541a0e029 decision=created reason=nil amount=1050.00 AED [Wed Nov 4 05:50:31.369000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41286] QUERY OK source="tabby_sim_payments" db=0.7ms idle=262.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:50:31.371000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:41286] Sent 200 in 46ms [Wed Nov 4 05:50:31.371000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] checkout post /api/v2/checkout -> 200 (317 ms, attempt 1) [Wed Nov 4 05:50:31.372000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] session created payment=5447466b-628f-4ee0-9e69-20b32f11c34c [Wed Nov 4 05:50:31.372000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK source="tabby_payments" db=0.5ms idle=263.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["b724e1d9-68f7-4847-9033-564918dacbfb"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Wed Nov 4 05:50:31.408000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK source="tabby_payments" db=34.4ms queue=0.7ms idle=247.1ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-04 06:10:31Z], "5447466b-628f-4ee0-9e69-20b32f11c34c", "4f66e112-95b9-4cd3-a5a7-c9a541a0e029", ~N[2026-11-04 05:50:31], "b724e1d9-68f7-4847-9033-564918dacbfb"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Wed Nov 4 05:50:31.408000 2026] [DaProductApp.Tabby.Sessions:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] session created attempt=b724e1d9-68f7-4847-9033-564918dacbfb payment=5447466b-628f-4ee0-9e69-20b32f11c34c [Wed Nov 4 05:50:31.410000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 415ms [Wed Nov 4 05:50:31.808000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] GET /tabby-sim/hpp/4f66e112-95b9-4cd3-a5a7-c9a541a0e029 [Wed Nov 4 05:50:31.808000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 115.99.167.137:60633] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "4f66e112-95b9-4cd3-a5a7-c9a541a0e029"} Pipelines: [:tabby_sim_hpp] [Wed Nov 4 05:50:31.809000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK source="tabby_sim_payments" db=0.6ms idle=530.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["4f66e112-95b9-4cd3-a5a7-c9a541a0e029"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Wed Nov 4 05:50:31.809000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 1ms [Wed Nov 4 05:50:35.595000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby-sim/hpp/4f66e112-95b9-4cd3-a5a7-c9a541a0e029 [Wed Nov 4 05:50:35.596000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 115.99.167.137:60633] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "cancel", "otp" => "", "session_id" => "4f66e112-95b9-4cd3-a5a7-c9a541a0e029"} Pipelines: [:tabby_sim_hpp] [Wed Nov 4 05:50:35.597000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK source="tabby_sim_payments" db=0.5ms idle=444.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["4f66e112-95b9-4cd3-a5a7-c9a541a0e029"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Wed Nov 4 05:50:35.615000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK source="tabby_sim_payments" db=18.1ms idle=446.0ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:50:35], true, "5447466b-628f-4ee0-9e69-20b32f11c34c", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:50:35.616000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client 115.99.167.137:60633] [TabbySim] payment=5447466b-628f-4ee0-9e69-20b32f11c34c CREATED -> EXPIRED [Wed Nov 4 05:50:35.617000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK source="tabby_sim_payments" db=0.6ms idle=464.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["5447466b-628f-4ee0-9e69-20b32f11c34c"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:50:35.617000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client 115.99.167.137:60633] [TabbySim] webhook not sent: event=expire payment=5447466b-628f-4ee0-9e69-20b32f11c34c [Wed Nov 4 05:50:35.617000 2026] [DaProductApp.TabbySim.Hpp:info] [pid 1031735] [client 115.99.167.137:60633] [TabbySim] hpp payment=5447466b-628f-4ee0-9e69-20b32f11c34c action=cancel status=EXPIRED [Wed Nov 4 05:50:35.617000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 302 in 22ms [Wed Nov 4 05:50:36.033000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] GET /tabby/return/b724e1d9-68f7-4847-9033-564918dacbfb/cancel [Wed Nov 4 05:50:36.034000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK source="tabby_payments" db=0.6ms idle=882.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["b724e1d9-68f7-4847-9033-564918dacbfb"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:50:36.084000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 302 in 51ms [Wed Nov 4 05:50:36.187000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=589.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["b724e1d9-68f7-4847-9033-564918dacbfb"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:50:36.497000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:41286] GET /tabby-sim/api/v2/payments/5447466b-628f-4ee0-9e69-20b32f11c34c [Wed Nov 4 05:50:36.497000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:41286] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "5447466b-628f-4ee0-9e69-20b32f11c34c"} Pipelines: [:tabby_sim_api] [Wed Nov 4 05:50:36.499000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41286] QUERY OK source="tabby_sim_faults" db=1.0ms idle=562.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "5447466b-628f-4ee0-9e69-20b32f11c34c"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 05:50:36.500000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41286] QUERY OK source="tabby_sim_faults" db=0.3ms idle=465.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:50:36.501000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41286] QUERY OK source="tabby_sim_payments" db=0.8ms idle=462.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["5447466b-628f-4ee0-9e69-20b32f11c34c"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Wed Nov 4 05:50:36.501000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:41286] Sent 200 in 4ms [Wed Nov 4 05:50:36.502000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client -] [Tabby] retrieve get /api/v2/payments/5447466b-628f-4ee0-9e69-20b32f11c34c -> 200 (314 ms, attempt 1) [Wed Nov 4 05:50:36.559000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] GET /tabby/demo/result/cancel [Wed Nov 4 05:50:36.559000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 459µs [Wed Nov 4 05:50:36.698000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=195.1ms queue=0.1ms idle=418.3ms UPDATE `tabby_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["expired", ~N[2026-11-04 05:50:36], "b724e1d9-68f7-4847-9033-564918dacbfb", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Wed Nov 4 05:50:36.699000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.5ms queue=0.1ms idle=511.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["b724e1d9-68f7-4847-9033-564918dacbfb"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:50:36.699000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1031735] [client -] [Tabby] verify: attempt=b724e1d9-68f7-4847-9033-564918dacbfb payment=5447466b-628f-4ee0-9e69-20b32f11c34c created -> expired [Wed Nov 4 05:50:51.353000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=1200.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:50:51Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:50:51.468000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=115.1ms idle=1201.8ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:50:51], true, "84d13949-ac96-43b5-bac5-d7b9bb450f73", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:50:51.469000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=84d13949-ac96-43b5-bac5-d7b9bb450f73 CREATED -> EXPIRED [Wed Nov 4 05:50:51.469000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1317.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["84d13949-ac96-43b5-bac5-d7b9bb450f73"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:50:51.470000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=84d13949-ac96-43b5-bac5-d7b9bb450f73 [Wed Nov 4 05:50:51.470000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=84d13949-ac96-43b5-bac5-d7b9bb450f73 expired (expires_at 2026-11-04 05:50:50Z, session_status=created) [Wed Nov 4 05:50:51.471000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1318.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:50:51Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:50:51.471000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:50:51.471000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1319.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:50:51Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:50:51.472000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1320.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:50:51.562000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399351 scheduled in 4s (37 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:50:52.268000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] GET /tabby-sim/hpp/4f66e112-95b9-4cd3-a5a7-c9a541a0e029 [Wed Nov 4 05:50:52.269000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 115.99.167.137:60633] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "4f66e112-95b9-4cd3-a5a7-c9a541a0e029"} Pipelines: [:tabby_sim_hpp] [Wed Nov 4 05:50:52.270000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK source="tabby_sim_payments" db=0.9ms idle=798.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["4f66e112-95b9-4cd3-a5a7-c9a541a0e029"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Wed Nov 4 05:50:52.271000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 410 in 2ms [Wed Nov 4 05:50:54.945000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] GET /tabby/demo [Wed Nov 4 05:50:54.947000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 2ms [Wed Nov 4 05:50:55.547000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/summary [Wed Nov 4 05:50:55.547000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 569µs [Wed Nov 4 05:50:56.336000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/eligibility [Wed Nov 4 05:50:56.734000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44522] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:50:56.734000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:44522] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:50:56.735000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44522] QUERY OK source="tabby_sim_faults" db=0.5ms idle=1582.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:50:56.779000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44522] QUERY OK db=43.4ms idle=1453.9ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["a5b3ec09-3664-4c58-a85c-9dc656e56f26", "CREATED", "AED", "1ee6912c-f495-40bb-bbf2-f24087a3aac4", "slice9", ~U[2026-11-04 06:02:56Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1050.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:00:56Z], ~N[2026-11-04 05:50:56], ~N[2026-11-04 05:50:56]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:50:56.779000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:44522] [TabbySim] checkout payment=a5b3ec09-3664-4c58-a85c-9dc656e56f26 session=1ee6912c-f495-40bb-bbf2-f24087a3aac4 decision=created reason=nil amount=1050.00 AED [Wed Nov 4 05:50:56.780000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44522] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1478.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:50:56.782000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44522] Sent 200 in 48ms [Wed Nov 4 05:50:56.783000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] checkout post /api/v2/checkout -> 200 (447 ms, attempt 1) [Wed Nov 4 05:50:56.783000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] session created payment=a5b3ec09-3664-4c58-a85c-9dc656e56f26 [Wed Nov 4 05:50:56.783000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] eligibility: show (amount=1050.00 AED) [Wed Nov 4 05:50:56.783000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 447ms [Wed Nov 4 05:50:56.874000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=738.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:50:56Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:50:56.930000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=55.2ms idle=655.2ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:50:56], true, "12f7c32c-356f-44e8-965b-6c27ed1c8e85", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:50:56.930000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=12f7c32c-356f-44e8-965b-6c27ed1c8e85 CREATED -> EXPIRED [Wed Nov 4 05:50:56.931000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=546.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["12f7c32c-356f-44e8-965b-6c27ed1c8e85"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:50:56.932000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=12f7c32c-356f-44e8-965b-6c27ed1c8e85 [Wed Nov 4 05:50:56.932000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=12f7c32c-356f-44e8-965b-6c27ed1c8e85 expired (expires_at 2026-11-04 05:50:55Z, session_status=created) [Wed Nov 4 05:50:56.933000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=500.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:50:56Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:50:56.933000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:50:56.934000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=416.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:50:56Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:50:56.935000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.1ms idle=199.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:50:56.985000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399352 scheduled in 4s (37 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:51:00.612000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.7ms idle=458.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["slice9", ~U[2026-10-17 05:51:00Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:51:00.614000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.9ms idle=460.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["slice9", ~N[2026-11-04 05:49:00], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:51:00.616000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.3ms idle=463.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", ~N[2026-11-04 05:49:00], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:51:00.619000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=2.4ms idle=465.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["slice9", ~U[2026-11-04 05:46:00Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:51:00.620000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.0ms idle=467.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:51:00.621000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.5ms queue=0.4ms idle=469.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["b764f4fe-99a1-4bd0-afaf-2271ac21324d"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:51:00.983000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:41286] GET /tabby-sim/api/v2/payments/84d13949-ac96-43b5-bac5-d7b9bb450f73 [Wed Nov 4 05:51:00.984000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:41286] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "84d13949-ac96-43b5-bac5-d7b9bb450f73"} Pipelines: [:tabby_sim_api] [Wed Nov 4 05:51:00.985000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41286] QUERY OK source="tabby_sim_faults" db=1.1ms idle=495.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "84d13949-ac96-43b5-bac5-d7b9bb450f73"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 05:51:00.986000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41286] QUERY OK source="tabby_sim_faults" db=0.2ms idle=375.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:51:00.987000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41286] QUERY OK source="tabby_sim_payments" db=0.9ms idle=374.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["84d13949-ac96-43b5-bac5-d7b9bb450f73"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Wed Nov 4 05:51:00.987000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:41286] Sent 200 in 4ms [Wed Nov 4 05:51:00.988000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client -] [Tabby] retrieve get /api/v2/payments/84d13949-ac96-43b5-bac5-d7b9bb450f73 -> 200 (366 ms, attempt 1) [Wed Nov 4 05:51:01.049000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=60.9ms queue=0.5ms idle=373.8ms UPDATE `tabby_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["expired", ~N[2026-11-04 05:51:00], "b764f4fe-99a1-4bd0-afaf-2271ac21324d", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Wed Nov 4 05:51:01.050000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.4ms queue=0.1ms idle=433.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["b764f4fe-99a1-4bd0-afaf-2271ac21324d"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:51:01.051000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1031735] [client -] [Tabby] verify: attempt=b764f4fe-99a1-4bd0-afaf-2271ac21324d payment=84d13949-ac96-43b5-bac5-d7b9bb450f73 created -> expired [Wed Nov 4 05:51:01.052000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=1.3ms idle=432.0ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-04 05:49:00Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Wed Nov 4 05:51:01.053000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=0.4ms idle=432.3ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["slice9", ~N[2026-11-04 05:49:00], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Wed Nov 4 05:51:01.054000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=431.6ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:51:01.055000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=306.8ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["slice9", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:51:01.055000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=0.5ms idle=224.6ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Wed Nov 4 05:51:01.056000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=0.3ms idle=70.6ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Wed Nov 4 05:51:01.056000 2026] [DaProductApp.Tabby.Poller:info] [pid 1031735] [client -] [Tabby] poll: handled 1 (created:recorded_expired=1); 0 attempt(s) still watched [Wed Nov 4 05:51:01.361000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/summary [Wed Nov 4 05:51:01.361000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 677µs [Wed Nov 4 05:51:02.365000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/eligibility [Wed Nov 4 05:51:02.688000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.7ms idle=585.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:51:02Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:51:02.745000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=56.4ms idle=537.2ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:51:02], true, "bb8377e0-2e20-4816-a6ea-58a1be925a09", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:51:02.747000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=bb8377e0-2e20-4816-a6ea-58a1be925a09 CREATED -> EXPIRED [Wed Nov 4 05:51:02.750000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.9ms idle=596.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["bb8377e0-2e20-4816-a6ea-58a1be925a09"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:51:02.750000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=bb8377e0-2e20-4816-a6ea-58a1be925a09 [Wed Nov 4 05:51:02.750000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=bb8377e0-2e20-4816-a6ea-58a1be925a09 expired (expires_at 2026-11-04 05:51:00Z, session_status=created) [Wed Nov 4 05:51:02.755000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms queue=0.1ms idle=599.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:51:02Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:51:02.755000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:51:02.757000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=604.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:51:02Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:51:02.760000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.5ms idle=607.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:51:02.797000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399353 scheduled in 28s (36 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:51:02.837000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44522] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:51:02.837000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:44522] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1700.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:51:02.838000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44522] QUERY OK source="tabby_sim_faults" db=0.4ms idle=152.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:51:02.863000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44522] QUERY OK db=23.8ms idle=150.9ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["bf804dc1-f6ba-4e13-8534-13b6e4644aea", "CREATED", "AED", "4cf2dba2-24a9-42e8-ab84-8aab1c0b4915", "slice9", ~U[2026-11-04 06:03:02Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1700.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1700.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:01:02Z], ~N[2026-11-04 05:51:02], ~N[2026-11-04 05:51:02]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:51:02.863000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:44522] [TabbySim] checkout payment=bf804dc1-f6ba-4e13-8534-13b6e4644aea session=4cf2dba2-24a9-42e8-ab84-8aab1c0b4915 decision=created reason=nil amount=1700.00 AED [Wed Nov 4 05:51:02.865000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44522] QUERY OK source="tabby_sim_payments" db=1.6ms idle=113.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:51:02.867000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44522] Sent 200 in 29ms [Wed Nov 4 05:51:02.867000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] checkout post /api/v2/checkout -> 200 (498 ms, attempt 1) [Wed Nov 4 05:51:02.868000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] session created payment=bf804dc1-f6ba-4e13-8534-13b6e4644aea [Wed Nov 4 05:51:02.868000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] eligibility: show (amount=1700.00 AED) [Wed Nov 4 05:51:02.868000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 503ms [Wed Nov 4 05:51:16.098000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/place [Wed Nov 4 05:51:16.137000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK db=38.0ms queue=0.4ms idle=1947.5ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`amount`,`needs_attention`,`order_reference`,`cancel_url`,`captured_amount`,`failure_url`,`refunded_amount`,`success_url`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["dd2b1b6f-e169-40c0-b303-6ee2466df965", "new", "AED", "slice9", Decimal.new("1700.00"), false, "DEMO-C3F84107", "http://78.47.213.209:4030/tabby/demo/result/cancel?lang=en&order=DEMO-C3F84107", Decimal.new("0"), "http://78.47.213.209:4030/tabby/demo/result/failure?lang=en&order=DEMO-C3F84107", Decimal.new("0"), "http://78.47.213.209:4030/tabby/demo/result/success?lang=en&order=DEMO-C3F84107", ~N[2026-11-04 05:51:16], ~N[2026-11-04 05:51:16]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Wed Nov 4 05:51:16.429000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:41286] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:51:16.429000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:41286] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "en", "merchant_code" => "slice9", "merchant_urls" => %{"cancel" => "http://78.47.213.209:4030/tabby/return/dd2b1b6f-e169-40c0-b303-6ee2466df965/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/dd2b1b6f-e169-40c0-b303-6ee2466df965/failure", "success" => "http://78.47.213.209:4030/tabby/return/dd2b1b6f-e169-40c0-b303-6ee2466df965/success"}, "payment" => %{"amount" => "1700.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 2, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 2, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-C3F84107"}, "shipping_address" => %{"address" => "Demo Tower 4, Office 302, DIFC", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:51:16.430000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41286] QUERY OK source="tabby_sim_faults" db=0.5ms idle=525.6ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:51:16.494000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41286] QUERY OK db=62.4ms idle=442.4ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`buyer_history`,`captures`,`is_test`,`lang`,`merchant_urls`,`refunds`,`session_expires_at`,`shipping_address`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["8c686db1-f8ec-4ad6-846d-753c8f4f53db", "CREATED", "AED", "22f972bf-d13b-440c-b152-db14eed47d50", "slice9", ~U[2026-11-04 06:03:16Z], %{"lang" => "en", "merchant_code" => "slice9", "merchant_urls" => %{"cancel" => "http://78.47.213.209:4030/tabby/return/dd2b1b6f-e169-40c0-b303-6ee2466df965/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/dd2b1b6f-e169-40c0-b303-6ee2466df965/failure", "success" => "http://78.47.213.209:4030/tabby/return/dd2b1b6f-e169-40c0-b303-6ee2466df965/success"}, "payment" => %{"amount" => "1700.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 2, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 2, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-C3F84107"}, "shipping_address" => %{"address" => "Demo Tower 4, Office 302, DIFC", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "0", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 2, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo headphones", "unit_price" => "650"}, %{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 2, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo smartwatch", "unit_price" => "200"}], "reference_id" => "DEMO-C3F84107", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1700.00"), %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, %{"registered_since" => "2023-02-01T10:00:00Z"}, [], true, "en", %{"cancel" => "http://78.47.213.209:4030/tabby/return/dd2b1b6f-e169-40c0-b303-6ee2466df965/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/dd2b1b6f-e169-40c0-b303-6ee2466df965/failure", "success" => "http://78.47.213.209:4030/tabby/return/dd2b1b6f-e169-40c0-b303-6ee2466df965/success"}, [], ~U[2026-11-04 06:01:16Z], %{"address" => "Demo Tower 4, Office 302, DIFC", "city" => "Dubai", "zip" => "00000"}, ~N[2026-11-04 05:51:16], ~N[2026-11-04 05:51:16]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:51:16.494000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:41286] [TabbySim] checkout payment=8c686db1-f8ec-4ad6-846d-753c8f4f53db session=22f972bf-d13b-440c-b152-db14eed47d50 decision=created reason=nil amount=1700.00 AED [Wed Nov 4 05:51:16.495000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41286] QUERY OK source="tabby_sim_payments" db=0.7ms idle=357.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:51:16.497000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:41286] Sent 200 in 68ms [Wed Nov 4 05:51:16.497000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] checkout post /api/v2/checkout -> 200 (360 ms, attempt 1) [Wed Nov 4 05:51:16.498000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] session created payment=8c686db1-f8ec-4ad6-846d-753c8f4f53db [Wed Nov 4 05:51:16.498000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK source="tabby_payments" db=0.4ms idle=346.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["dd2b1b6f-e169-40c0-b303-6ee2466df965"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Wed Nov 4 05:51:16.564000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK source="tabby_payments" db=65.3ms queue=0.4ms idle=347.4ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-04 06:11:16Z], "8c686db1-f8ec-4ad6-846d-753c8f4f53db", "22f972bf-d13b-440c-b152-db14eed47d50", ~N[2026-11-04 05:51:16], "dd2b1b6f-e169-40c0-b303-6ee2466df965"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Wed Nov 4 05:51:16.565000 2026] [DaProductApp.Tabby.Sessions:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] session created attempt=dd2b1b6f-e169-40c0-b303-6ee2466df965 payment=8c686db1-f8ec-4ad6-846d-753c8f4f53db [Wed Nov 4 05:51:16.593000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 495ms [Wed Nov 4 05:51:17.013000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] GET /tabby-sim/hpp/22f972bf-d13b-440c-b152-db14eed47d50 [Wed Nov 4 05:51:17.013000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 115.99.167.137:60633] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "22f972bf-d13b-440c-b152-db14eed47d50"} Pipelines: [:tabby_sim_hpp] [Wed Nov 4 05:51:17.014000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK source="tabby_sim_payments" db=0.6ms idle=520.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["22f972bf-d13b-440c-b152-db14eed47d50"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Wed Nov 4 05:51:17.014000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 1ms [Wed Nov 4 05:51:24.469000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby-sim/hpp/22f972bf-d13b-440c-b152-db14eed47d50 [Wed Nov 4 05:51:24.469000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 115.99.167.137:60633] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "reject", "otp" => "8888", "session_id" => "22f972bf-d13b-440c-b152-db14eed47d50"} Pipelines: [:tabby_sim_hpp] [Wed Nov 4 05:51:24.471000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK source="tabby_sim_payments" db=1.0ms idle=319.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["22f972bf-d13b-440c-b152-db14eed47d50"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Wed Nov 4 05:51:24.493000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK source="tabby_sim_payments" db=21.4ms queue=0.1ms idle=320.4ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["REJECTED", ~N[2026-11-04 05:51:24], "8c686db1-f8ec-4ad6-846d-753c8f4f53db", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:51:24.494000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client 115.99.167.137:60633] [TabbySim] payment=8c686db1-f8ec-4ad6-846d-753c8f4f53db CREATED -> REJECTED [Wed Nov 4 05:51:24.494000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK source="tabby_sim_payments" db=0.6ms idle=342.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["8c686db1-f8ec-4ad6-846d-753c8f4f53db"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:51:24.495000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK source="tabby_sim_webhooks" db=0.4ms idle=343.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["slice9"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Wed Nov 4 05:51:24.495000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client 115.99.167.137:60633] [TabbySim] no webhook registered for merchant_code=slice9; event=reject payment=8c686db1-f8ec-4ad6-846d-753c8f4f53db [Wed Nov 4 05:51:24.495000 2026] [DaProductApp.TabbySim.Hpp:info] [pid 1031735] [client 115.99.167.137:60633] [TabbySim] hpp payment=8c686db1-f8ec-4ad6-846d-753c8f4f53db action=reject status=REJECTED [Wed Nov 4 05:51:24.496000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 302 in 27ms [Wed Nov 4 05:51:24.910000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] GET /tabby/return/dd2b1b6f-e169-40c0-b303-6ee2466df965/failure [Wed Nov 4 05:51:24.911000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60633] QUERY OK source="tabby_payments" db=0.6ms idle=759.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["dd2b1b6f-e169-40c0-b303-6ee2466df965"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:51:24.955000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 302 in 44ms [Wed Nov 4 05:51:25.026000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=532.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["dd2b1b6f-e169-40c0-b303-6ee2466df965"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:51:25.321000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:41286] GET /tabby-sim/api/v2/payments/8c686db1-f8ec-4ad6-846d-753c8f4f53db [Wed Nov 4 05:51:25.321000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:41286] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "8c686db1-f8ec-4ad6-846d-753c8f4f53db"} Pipelines: [:tabby_sim_api] [Wed Nov 4 05:51:25.322000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41286] QUERY OK source="tabby_sim_faults" db=0.4ms idle=520.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "8c686db1-f8ec-4ad6-846d-753c8f4f53db"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 05:51:25.323000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41286] QUERY OK source="tabby_sim_faults" db=0.5ms idle=410.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:51:25.323000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:41286] QUERY OK source="tabby_sim_payments" db=0.5ms idle=409.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["8c686db1-f8ec-4ad6-846d-753c8f4f53db"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Wed Nov 4 05:51:25.324000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:41286] Sent 200 in 3ms [Wed Nov 4 05:51:25.324000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client -] [Tabby] retrieve get /api/v2/payments/8c686db1-f8ec-4ad6-846d-753c8f4f53db -> 200 (297 ms, attempt 1) [Wed Nov 4 05:51:25.363000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=38.0ms idle=370.3ms UPDATE `tabby_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["rejected", ~N[2026-11-04 05:51:25], "dd2b1b6f-e169-40c0-b303-6ee2466df965", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Wed Nov 4 05:51:25.364000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=337.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["dd2b1b6f-e169-40c0-b303-6ee2466df965"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:51:25.364000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1031735] [client -] [Tabby] verify: attempt=dd2b1b6f-e169-40c0-b303-6ee2466df965 payment=8c686db1-f8ec-4ad6-846d-753c8f4f53db created -> rejected [Wed Nov 4 05:51:25.419000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] GET /tabby/demo/result/failure [Wed Nov 4 05:51:25.419000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 465µs [Wed Nov 4 05:51:31.786000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=634.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:51:31Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:51:31.841000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=54.1ms idle=635.9ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:51:31], true, "d2514d25-1eb9-4806-a2f1-15ba7511624c", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:51:31.841000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=d2514d25-1eb9-4806-a2f1-15ba7511624c CREATED -> EXPIRED [Wed Nov 4 05:51:31.842000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=690.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["d2514d25-1eb9-4806-a2f1-15ba7511624c"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:51:31.842000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=d2514d25-1eb9-4806-a2f1-15ba7511624c [Wed Nov 4 05:51:31.843000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=d2514d25-1eb9-4806-a2f1-15ba7511624c expired (expires_at 2026-11-04 05:51:30Z, session_status=created) [Wed Nov 4 05:51:31.844000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=691.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:51:31Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:51:31.844000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:51:31.844000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=692.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:51:31Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:51:31.846000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=693.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:51:31.896000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399356 scheduled in 12s (36 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:51:42.964000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] GET /tabby/demo [Wed Nov 4 05:51:42.965000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 1ms [Wed Nov 4 05:51:43.764000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/summary [Wed Nov 4 05:51:43.764000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 687µs [Wed Nov 4 05:51:44.822000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/eligibility [Wed Nov 4 05:51:44.842000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1690.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:51:44Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:51:44.897000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=54.5ms queue=0.1ms idle=1691.7ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:51:44], true, "c0dc763c-b963-410f-bb7c-995af26b5d9a", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:51:44.898000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=c0dc763c-b963-410f-bb7c-995af26b5d9a CREATED -> EXPIRED [Wed Nov 4 05:51:44.899000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.2ms idle=1366.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["c0dc763c-b963-410f-bb7c-995af26b5d9a"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:51:44.899000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=c0dc763c-b963-410f-bb7c-995af26b5d9a [Wed Nov 4 05:51:44.899000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=c0dc763c-b963-410f-bb7c-995af26b5d9a expired (expires_at 2026-11-04 05:51:43Z, session_status=created) [Wed Nov 4 05:51:44.900000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1284.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:51:44Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:51:44.901000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:51:44.901000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1185.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:51:44Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:51:44.902000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=321.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:51:44.984000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399357 scheduled in 60s (35 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:51:45.141000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44522] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:51:45.141000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:44522] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1700.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:51:45.142000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44522] QUERY OK source="tabby_sim_faults" db=0.5ms idle=242.2ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:51:45.221000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44522] QUERY OK db=78.3ms idle=242.3ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["eede02e1-0144-4efa-b901-b02cf1657e7f", "CREATED", "AED", "76b24a70-f6e3-4c9a-9bdd-e137de815357", "slice9", ~U[2026-11-04 06:03:45Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1700.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1700.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:01:45Z], ~N[2026-11-04 05:51:45], ~N[2026-11-04 05:51:45]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:51:45.222000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:44522] [TabbySim] checkout payment=eede02e1-0144-4efa-b901-b02cf1657e7f session=76b24a70-f6e3-4c9a-9bdd-e137de815357 decision=created reason=nil amount=1700.00 AED [Wed Nov 4 05:51:45.223000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44522] QUERY OK source="tabby_sim_payments" db=0.8ms idle=320.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:51:45.224000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44522] Sent 200 in 83ms [Wed Nov 4 05:51:45.225000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] checkout post /api/v2/checkout -> 200 (403 ms, attempt 1) [Wed Nov 4 05:51:45.225000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] session created payment=eede02e1-0144-4efa-b901-b02cf1657e7f [Wed Nov 4 05:51:45.225000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] eligibility: show (amount=1700.00 AED) [Wed Nov 4 05:51:45.225000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 403ms [Wed Nov 4 05:51:50.768000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/summary [Wed Nov 4 05:51:50.768000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 593µs [Wed Nov 4 05:51:51.630000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] POST /tabby/demo/eligibility [Wed Nov 4 05:51:51.943000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44522] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:51:51.943000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:44522] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "2020.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:51:51.944000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44522] QUERY OK source="tabby_sim_faults" db=0.3ms idle=1792.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:51:52.013000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44522] QUERY OK db=68.6ms idle=1376.1ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["077e5354-9e99-4e61-8772-b960bcc61a19", "CREATED", "AED", "a3dfe8e5-df0a-4ffc-99a4-e2e55705b9d6", "slice9", ~U[2026-11-04 06:03:51Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "2020.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("2020.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:01:51Z], ~N[2026-11-04 05:51:51], ~N[2026-11-04 05:51:51]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:51:52.013000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:44522] [TabbySim] checkout payment=077e5354-9e99-4e61-8772-b960bcc61a19 session=a3dfe8e5-df0a-4ffc-99a4-e2e55705b9d6 decision=created reason=nil amount=2020.00 AED [Wed Nov 4 05:51:52.014000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44522] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.1ms idle=1362.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:51:52.016000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44522] Sent 200 in 73ms [Wed Nov 4 05:51:52.016000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] checkout post /api/v2/checkout -> 200 (386 ms, attempt 1) [Wed Nov 4 05:51:52.016000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] session created payment=077e5354-9e99-4e61-8772-b960bcc61a19 [Wed Nov 4 05:51:52.016000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:60633] [Tabby] eligibility: show (amount=2020.00 AED) [Wed Nov 4 05:51:52.017000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60633] Sent 200 in 387ms [Wed Nov 4 05:52:46.083000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1088.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:52:46Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:52:46.083000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:52:46.084000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=932.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:52:46Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:52:46.085000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.2ms idle=933.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:52:46.138000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399363 scheduled in 28s (37 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:52:53.317000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="global_table" db=1.1ms idle=1159.6ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 05:53:04.024000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:63941] POST /tabby/demo/place [Wed Nov 4 05:53:04.059000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:63941] QUERY OK db=34.4ms idle=1872.3ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`amount`,`needs_attention`,`order_reference`,`cancel_url`,`captured_amount`,`failure_url`,`refunded_amount`,`success_url`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["b923bd69-59f6-447b-a9db-66ab77d14e84", "new", "AED", "slice9", Decimal.new("2020.00"), false, "DEMO-31575949", "http://78.47.213.209:4030/tabby/demo/result/cancel?lang=en&order=DEMO-31575949", Decimal.new("0"), "http://78.47.213.209:4030/tabby/demo/result/failure?lang=en&order=DEMO-31575949", Decimal.new("0"), "http://78.47.213.209:4030/tabby/demo/result/success?lang=en&order=DEMO-31575949", ~N[2026-11-04 05:53:04], ~N[2026-11-04 05:53:04]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Wed Nov 4 05:53:04.363000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:51678] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:53:04.363000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:51678] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "en", "merchant_code" => "slice9", "merchant_urls" => %{"cancel" => "http://78.47.213.209:4030/tabby/return/b923bd69-59f6-447b-a9db-66ab77d14e84/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/b923bd69-59f6-447b-a9db-66ab77d14e84/failure", "success" => "http://78.47.213.209:4030/tabby/return/b923bd69-59f6-447b-a9db-66ab77d14e84/success"}, "payment" => %{"amount" => "2020.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 2, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 2, "title" => "Demo smartwatch", "unit_price" => "200.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo sneakers", "unit_price" => "320.00"}], "reference_id" => "DEMO-31575949"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:53:04.365000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:51678] QUERY OK source="tabby_sim_faults" db=1.2ms idle=1211.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:53:04.420000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:51678] QUERY OK db=52.6ms queue=0.3ms idle=1213.7ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`buyer_history`,`captures`,`is_test`,`lang`,`merchant_urls`,`refunds`,`session_expires_at`,`shipping_address`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["056502fe-662a-4eaf-a1af-52aaaa20cd43", "CREATED", "AED", "d995e73a-b010-4264-85ba-bfb04f4a9e2f", "slice9", ~U[2026-11-04 06:05:04Z], %{"lang" => "en", "merchant_code" => "slice9", "merchant_urls" => %{"cancel" => "http://78.47.213.209:4030/tabby/return/b923bd69-59f6-447b-a9db-66ab77d14e84/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/b923bd69-59f6-447b-a9db-66ab77d14e84/failure", "success" => "http://78.47.213.209:4030/tabby/return/b923bd69-59f6-447b-a9db-66ab77d14e84/success"}, "payment" => %{"amount" => "2020.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 2, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 2, "title" => "Demo smartwatch", "unit_price" => "200.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo sneakers", "unit_price" => "320.00"}], "reference_id" => "DEMO-31575949"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "0", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 2, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo headphones", "unit_price" => "650"}, %{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 2, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo smartwatch", "unit_price" => "200"}, %{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo sneakers", "unit_price" => "320"}], "reference_id" => "DEMO-31575949", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("2020.00"), %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, %{"registered_since" => "2023-02-01T10:00:00Z"}, [], true, "en", %{"cancel" => "http://78.47.213.209:4030/tabby/return/b923bd69-59f6-447b-a9db-66ab77d14e84/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/b923bd69-59f6-447b-a9db-66ab77d14e84/failure", "success" => "http://78.47.213.209:4030/tabby/return/b923bd69-59f6-447b-a9db-66ab77d14e84/success"}, [], ~U[2026-11-04 06:03:04Z], %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}, ~N[2026-11-04 05:53:04], ~N[2026-11-04 05:53:04]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:53:04.420000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:51678] [TabbySim] checkout payment=056502fe-662a-4eaf-a1af-52aaaa20cd43 session=d995e73a-b010-4264-85ba-bfb04f4a9e2f decision=created reason=nil amount=2020.00 AED [Wed Nov 4 05:53:04.422000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:51678] QUERY OK source="tabby_sim_payments" db=1.5ms idle=1268.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:53:04.425000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:51678] Sent 200 in 62ms [Wed Nov 4 05:53:04.427000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:63941] [Tabby] checkout post /api/v2/checkout -> 200 (367 ms, attempt 1) [Wed Nov 4 05:53:04.427000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:63941] [Tabby] session created payment=056502fe-662a-4eaf-a1af-52aaaa20cd43 [Wed Nov 4 05:53:04.428000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:63941] QUERY OK source="tabby_payments" db=1.2ms idle=630.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["b923bd69-59f6-447b-a9db-66ab77d14e84"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Wed Nov 4 05:53:04.480000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:63941] QUERY OK source="tabby_payments" db=51.1ms queue=0.4ms idle=546.8ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-04 06:13:04Z], "056502fe-662a-4eaf-a1af-52aaaa20cd43", "d995e73a-b010-4264-85ba-bfb04f4a9e2f", ~N[2026-11-04 05:53:04], "b923bd69-59f6-447b-a9db-66ab77d14e84"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Wed Nov 4 05:53:04.481000 2026] [DaProductApp.Tabby.Sessions:info] [pid 1031735] [client 115.99.167.137:63941] [Tabby] session created attempt=b923bd69-59f6-447b-a9db-66ab77d14e84 payment=056502fe-662a-4eaf-a1af-52aaaa20cd43 [Wed Nov 4 05:53:04.483000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:63941] Sent 200 in 459ms [Wed Nov 4 05:53:05.019000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:63941] GET /tabby-sim/hpp/d995e73a-b010-4264-85ba-bfb04f4a9e2f [Wed Nov 4 05:53:05.019000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 115.99.167.137:63941] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "d995e73a-b010-4264-85ba-bfb04f4a9e2f"} Pipelines: [:tabby_sim_hpp] [Wed Nov 4 05:53:05.021000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:63941] QUERY OK source="tabby_sim_payments" db=1.4ms idle=785.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["d995e73a-b010-4264-85ba-bfb04f4a9e2f"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Wed Nov 4 05:53:05.021000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:63941] Sent 200 in 2ms [Wed Nov 4 05:53:08.981000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:63941] POST /tabby-sim/hpp/d995e73a-b010-4264-85ba-bfb04f4a9e2f [Wed Nov 4 05:53:08.982000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 115.99.167.137:63941] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "approve", "otp" => "8888", "session_id" => "d995e73a-b010-4264-85ba-bfb04f4a9e2f"} Pipelines: [:tabby_sim_hpp] [Wed Nov 4 05:53:08.983000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:63941] QUERY OK source="tabby_sim_payments" db=0.6ms idle=830.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["d995e73a-b010-4264-85ba-bfb04f4a9e2f"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Wed Nov 4 05:53:09.026000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:63941] QUERY OK source="tabby_sim_payments" db=42.7ms idle=831.8ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["AUTHORIZED", ~N[2026-11-04 05:53:08], "056502fe-662a-4eaf-a1af-52aaaa20cd43", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:53:09.026000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client 115.99.167.137:63941] [TabbySim] payment=056502fe-662a-4eaf-a1af-52aaaa20cd43 CREATED -> AUTHORIZED [Wed Nov 4 05:53:09.028000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:63941] QUERY OK source="tabby_sim_payments" db=1.1ms idle=875.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["056502fe-662a-4eaf-a1af-52aaaa20cd43"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:53:09.029000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:63941] QUERY OK source="tabby_sim_webhooks" db=0.8ms idle=876.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["slice9"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Wed Nov 4 05:53:09.029000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client 115.99.167.137:63941] [TabbySim] no webhook registered for merchant_code=slice9; event=authorize payment=056502fe-662a-4eaf-a1af-52aaaa20cd43 [Wed Nov 4 05:53:09.029000 2026] [DaProductApp.TabbySim.Hpp:info] [pid 1031735] [client 115.99.167.137:63941] [TabbySim] hpp payment=056502fe-662a-4eaf-a1af-52aaaa20cd43 action=approve status=AUTHORIZED [Wed Nov 4 05:53:09.029000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:63941] Sent 302 in 47ms [Wed Nov 4 05:53:09.166000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:56355] POST /tabby-sim/hpp/d995e73a-b010-4264-85ba-bfb04f4a9e2f [Wed Nov 4 05:53:09.166000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 115.99.167.137:56355] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "approve", "otp" => "8888", "session_id" => "d995e73a-b010-4264-85ba-bfb04f4a9e2f"} Pipelines: [:tabby_sim_hpp] [Wed Nov 4 05:53:09.168000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:56355] QUERY OK source="tabby_sim_payments" db=1.2ms queue=0.1ms idle=402.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["d995e73a-b010-4264-85ba-bfb04f4a9e2f"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Wed Nov 4 05:53:09.168000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:56355] Sent 200 in 2ms [Wed Nov 4 05:53:09.431000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] POST /tabby-sim/hpp/d995e73a-b010-4264-85ba-bfb04f4a9e2f [Wed Nov 4 05:53:09.431000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 115.99.167.137:61204] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "approve", "otp" => "8888", "session_id" => "d995e73a-b010-4264-85ba-bfb04f4a9e2f"} Pipelines: [:tabby_sim_hpp] [Wed Nov 4 05:53:09.432000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:61204] QUERY OK source="tabby_sim_payments" db=0.7ms idle=498.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["d995e73a-b010-4264-85ba-bfb04f4a9e2f"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Wed Nov 4 05:53:09.432000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] Sent 200 in 1ms [Wed Nov 4 05:53:15.278000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.5ms idle=1125.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:53:15Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:53:15.314000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=35.0ms queue=0.4ms idle=1127.2ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:53:15], true, "32f35c23-ba15-4954-80b2-baf3e1ad6813", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:53:15.314000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=32f35c23-ba15-4954-80b2-baf3e1ad6813 CREATED -> EXPIRED [Wed Nov 4 05:53:15.315000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1163.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["32f35c23-ba15-4954-80b2-baf3e1ad6813"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:53:15.316000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=32f35c23-ba15-4954-80b2-baf3e1ad6813 [Wed Nov 4 05:53:15.316000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=32f35c23-ba15-4954-80b2-baf3e1ad6813 expired (expires_at 2026-11-04 05:53:14Z, session_status=created) [Wed Nov 4 05:53:15.317000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1129.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:53:15Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:53:15.317000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:53:15.318000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=166.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:53:15Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:53:15.319000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=167.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:53:15.372000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399364 scheduled in 60s (36 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:53:17.293000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.9ms idle=141.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["slice9", ~U[2026-10-17 05:53:17Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:53:17.294000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.5ms queue=0.1ms idle=142.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["slice9", ~N[2026-11-04 05:51:17], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:53:17.295000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=143.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", ~N[2026-11-04 05:51:17], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:53:17.296000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=144.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["slice9", ~U[2026-11-04 05:48:17Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:53:17.297000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=144.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:53:17.298000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=0.7ms idle=145.6ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-04 05:51:17Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Wed Nov 4 05:53:17.298000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=0.4ms idle=146.7ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["slice9", ~N[2026-11-04 05:51:17], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Wed Nov 4 05:53:17.300000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.0ms idle=147.3ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:53:17.301000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.0ms idle=102.4ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["slice9", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:53:17.302000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=0.5ms idle=10.6ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Wed Nov 4 05:53:17.303000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=0.4ms idle=9.1ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Wed Nov 4 05:53:17.303000 2026] [DaProductApp.Tabby.Poller:debug] [pid 1031735] [client -] [Tabby] poll: nothing to do; 1 attempt(s) still watched [Wed Nov 4 05:53:31.506000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] GET /tabby-sim/hpp/d995e73a-b010-4264-85ba-bfb04f4a9e2f [Wed Nov 4 05:53:31.506000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 115.99.167.137:61204] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "d995e73a-b010-4264-85ba-bfb04f4a9e2f"} Pipelines: [:tabby_sim_hpp] [Wed Nov 4 05:53:31.508000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:61204] QUERY OK source="tabby_sim_payments" db=1.3ms idle=355.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["d995e73a-b010-4264-85ba-bfb04f4a9e2f"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Wed Nov 4 05:53:31.508000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] Sent 200 in 2ms [Wed Nov 4 05:53:35.148000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] GET /tabby/demo [Wed Nov 4 05:53:35.150000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] Sent 200 in 1ms [Wed Nov 4 05:53:35.747000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] POST /tabby/demo/summary [Wed Nov 4 05:53:35.748000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] Sent 200 in 979µs [Wed Nov 4 05:53:36.691000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] POST /tabby/demo/eligibility [Wed Nov 4 05:53:36.970000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:35406] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:53:36.970000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:35406] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "2020.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:53:36.971000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:35406] QUERY OK source="tabby_sim_faults" db=0.6ms idle=1818.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:53:37.033000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:35406] QUERY OK db=61.1ms idle=1819.7ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["da596804-2830-4050-b3f3-f24beaf93f70", "CREATED", "AED", "d5ede11a-a2a7-4e5f-9502-b993cb282f42", "slice9", ~U[2026-11-04 06:05:36Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "2020.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("2020.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:03:36Z], ~N[2026-11-04 05:53:36], ~N[2026-11-04 05:53:36]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:53:37.033000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:35406] [TabbySim] checkout payment=da596804-2830-4050-b3f3-f24beaf93f70 session=d5ede11a-a2a7-4e5f-9502-b993cb282f42 decision=created reason=nil amount=2020.00 AED [Wed Nov 4 05:53:37.035000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:35406] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1786.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:53:37.037000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:35406] Sent 200 in 67ms [Wed Nov 4 05:53:37.037000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:61204] [Tabby] checkout post /api/v2/checkout -> 200 (345 ms, attempt 1) [Wed Nov 4 05:53:37.038000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:61204] [Tabby] session created payment=da596804-2830-4050-b3f3-f24beaf93f70 [Wed Nov 4 05:53:37.038000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:61204] [Tabby] eligibility: show (amount=2020.00 AED) [Wed Nov 4 05:53:37.038000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] Sent 200 in 347ms [Wed Nov 4 05:53:41.906000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] POST /tabby/demo/summary [Wed Nov 4 05:53:41.906000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] Sent 200 in 585µs [Wed Nov 4 05:53:42.751000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] POST /tabby/demo/eligibility [Wed Nov 4 05:53:43.008000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:35406] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:53:43.008000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:35406] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1818.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:53:43.009000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:35406] QUERY OK source="tabby_sim_faults" db=0.7ms idle=857.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:53:43.074000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:35406] QUERY OK db=64.2ms idle=858.2ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["3301d30b-f818-43ec-aa5d-314e941888a2", "CREATED", "AED", "2a96a012-97fe-44d1-b48f-341205cd080c", "slice9", ~U[2026-11-04 06:05:43Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1818.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1818.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:03:43Z], ~N[2026-11-04 05:53:43], ~N[2026-11-04 05:53:43]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:53:43.075000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:35406] [TabbySim] checkout payment=3301d30b-f818-43ec-aa5d-314e941888a2 session=2a96a012-97fe-44d1-b48f-341205cd080c decision=created reason=nil amount=1818.00 AED [Wed Nov 4 05:53:43.076000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:35406] QUERY OK source="tabby_sim_payments" db=1.0ms idle=923.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:53:43.078000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:35406] Sent 200 in 69ms [Wed Nov 4 05:53:43.079000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:61204] [Tabby] checkout post /api/v2/checkout -> 200 (328 ms, attempt 1) [Wed Nov 4 05:53:43.079000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:61204] [Tabby] session created payment=3301d30b-f818-43ec-aa5d-314e941888a2 [Wed Nov 4 05:53:43.079000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:61204] [Tabby] eligibility: show (amount=1818.00 AED) [Wed Nov 4 05:53:43.080000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] Sent 200 in 329ms [Wed Nov 4 05:53:45.279000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] POST /tabby/demo/summary [Wed Nov 4 05:53:45.279000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] Sent 200 in 727µs [Wed Nov 4 05:53:46.134000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] POST /tabby/demo/eligibility [Wed Nov 4 05:53:46.448000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:35406] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:53:46.448000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:35406] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1833.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:53:46.449000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:35406] QUERY OK source="tabby_sim_faults" db=0.5ms idle=297.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:53:46.481000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:35406] QUERY OK db=31.4ms idle=298.5ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["a678e882-728e-4d95-bb0c-5510a4729cfc", "CREATED", "AED", "19ec6572-2a6e-455d-880b-59d90d927c41", "slice9", ~U[2026-11-04 06:05:46Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1833.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1833.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:03:46Z], ~N[2026-11-04 05:53:46], ~N[2026-11-04 05:53:46]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:53:46.481000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:35406] [TabbySim] checkout payment=a678e882-728e-4d95-bb0c-5510a4729cfc session=19ec6572-2a6e-455d-880b-59d90d927c41 decision=created reason=nil amount=1833.00 AED [Wed Nov 4 05:53:46.482000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:35406] QUERY OK source="tabby_sim_payments" db=0.7ms idle=330.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:53:46.484000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:35406] Sent 200 in 36ms [Wed Nov 4 05:53:46.484000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:61204] [Tabby] checkout post /api/v2/checkout -> 200 (350 ms, attempt 1) [Wed Nov 4 05:53:46.485000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:61204] [Tabby] session created payment=a678e882-728e-4d95-bb0c-5510a4729cfc [Wed Nov 4 05:53:46.485000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:61204] [Tabby] eligibility: show (amount=1833.00 AED) [Wed Nov 4 05:53:46.485000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] Sent 200 in 351ms [Wed Nov 4 05:54:03.314000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] POST /tabby/demo/place [Wed Nov 4 05:54:03.381000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:61204] QUERY OK db=64.7ms idle=1164.4ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`amount`,`needs_attention`,`order_reference`,`cancel_url`,`captured_amount`,`failure_url`,`refunded_amount`,`success_url`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["93171d9f-609e-491a-9dcf-e2462d441003", "new", "AED", "slice9", Decimal.new("1833.00"), false, "DEMO-28B53A06", "http://78.47.213.209:4030/tabby/demo/result/cancel?lang=en&order=DEMO-28B53A06", Decimal.new("0"), "http://78.47.213.209:4030/tabby/demo/result/failure?lang=en&order=DEMO-28B53A06", Decimal.new("0"), "http://78.47.213.209:4030/tabby/demo/result/success?lang=en&order=DEMO-28B53A06", ~N[2026-11-04 05:54:03], ~N[2026-11-04 05:54:03]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Wed Nov 4 05:54:03.798000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:51678] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:54:03.799000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:51678] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "en", "merchant_code" => "slice9", "merchant_urls" => %{"cancel" => "http://78.47.213.209:4030/tabby/return/93171d9f-609e-491a-9dcf-e2462d441003/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/93171d9f-609e-491a-9dcf-e2462d441003/failure", "success" => "http://78.47.213.209:4030/tabby/return/93171d9f-609e-491a-9dcf-e2462d441003/success"}, "payment" => %{"amount" => "1833.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"discount_amount" => "202.00", "items" => [%{"category" => "Demo", "quantity" => 2, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 2, "title" => "Demo smartwatch", "unit_price" => "200.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo sneakers", "unit_price" => "320.00"}], "reference_id" => "DEMO-28B53A06", "shipping_amount" => "15.00"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:54:03.800000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:51678] QUERY OK source="tabby_sim_faults" db=0.5ms queue=0.2ms idle=1646.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:54:03.888000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:51678] QUERY OK db=85.9ms queue=0.4ms idle=1647.4ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`buyer_history`,`captures`,`is_test`,`lang`,`merchant_urls`,`refunds`,`session_expires_at`,`shipping_address`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["7bd830c9-277d-41ec-9b9a-a36e0c6ab9b4", "CREATED", "AED", "84c1a61c-8f53-4f45-b88a-97efcec12f55", "slice9", ~U[2026-11-04 06:06:03Z], %{"lang" => "en", "merchant_code" => "slice9", "merchant_urls" => %{"cancel" => "http://78.47.213.209:4030/tabby/return/93171d9f-609e-491a-9dcf-e2462d441003/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/93171d9f-609e-491a-9dcf-e2462d441003/failure", "success" => "http://78.47.213.209:4030/tabby/return/93171d9f-609e-491a-9dcf-e2462d441003/success"}, "payment" => %{"amount" => "1833.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"discount_amount" => "202.00", "items" => [%{"category" => "Demo", "quantity" => 2, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 2, "title" => "Demo smartwatch", "unit_price" => "200.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo sneakers", "unit_price" => "320.00"}], "reference_id" => "DEMO-28B53A06", "shipping_amount" => "15.00"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "202", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 2, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo headphones", "unit_price" => "650"}, %{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 2, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo smartwatch", "unit_price" => "200"}, %{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo sneakers", "unit_price" => "320"}], "reference_id" => "DEMO-28B53A06", "shipping_amount" => "15", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1833.00"), %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, %{"registered_since" => "2023-02-01T10:00:00Z"}, [], true, "en", %{"cancel" => "http://78.47.213.209:4030/tabby/return/93171d9f-609e-491a-9dcf-e2462d441003/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/93171d9f-609e-491a-9dcf-e2462d441003/failure", "success" => "http://78.47.213.209:4030/tabby/return/93171d9f-609e-491a-9dcf-e2462d441003/success"}, [], ~U[2026-11-04 06:04:03Z], %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}, ~N[2026-11-04 05:54:03], ~N[2026-11-04 05:54:03]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:54:03.888000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:51678] [TabbySim] checkout payment=7bd830c9-277d-41ec-9b9a-a36e0c6ab9b4 session=84c1a61c-8f53-4f45-b88a-97efcec12f55 decision=created reason=nil amount=1833.00 AED [Wed Nov 4 05:54:03.889000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:51678] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1734.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:54:03.891000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:51678] Sent 200 in 92ms [Wed Nov 4 05:54:03.891000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:61204] [Tabby] checkout post /api/v2/checkout -> 200 (507 ms, attempt 1) [Wed Nov 4 05:54:03.891000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:61204] [Tabby] session created payment=7bd830c9-277d-41ec-9b9a-a36e0c6ab9b4 [Wed Nov 4 05:54:03.892000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:61204] QUERY OK source="tabby_payments" db=0.4ms idle=804.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["93171d9f-609e-491a-9dcf-e2462d441003"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Wed Nov 4 05:54:03.961000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:61204] QUERY OK source="tabby_payments" db=68.6ms idle=719.6ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-04 06:14:03Z], "7bd830c9-277d-41ec-9b9a-a36e0c6ab9b4", "84c1a61c-8f53-4f45-b88a-97efcec12f55", ~N[2026-11-04 05:54:03], "93171d9f-609e-491a-9dcf-e2462d441003"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Wed Nov 4 05:54:03.961000 2026] [DaProductApp.Tabby.Sessions:info] [pid 1031735] [client 115.99.167.137:61204] [Tabby] session created attempt=93171d9f-609e-491a-9dcf-e2462d441003 payment=7bd830c9-277d-41ec-9b9a-a36e0c6ab9b4 [Wed Nov 4 05:54:03.964000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] Sent 200 in 650ms [Wed Nov 4 05:54:04.536000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] GET /tabby-sim/hpp/84c1a61c-8f53-4f45-b88a-97efcec12f55 [Wed Nov 4 05:54:04.537000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 115.99.167.137:61204] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "84c1a61c-8f53-4f45-b88a-97efcec12f55"} Pipelines: [:tabby_sim_hpp] [Wed Nov 4 05:54:04.538000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:61204] QUERY OK source="tabby_sim_payments" db=0.5ms idle=736.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["84c1a61c-8f53-4f45-b88a-97efcec12f55"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Wed Nov 4 05:54:04.538000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] Sent 200 in 1ms [Wed Nov 4 05:54:08.700000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] POST /tabby-sim/hpp/84c1a61c-8f53-4f45-b88a-97efcec12f55 [Wed Nov 4 05:54:08.700000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 115.99.167.137:61204] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "approve", "otp" => "8888", "session_id" => "84c1a61c-8f53-4f45-b88a-97efcec12f55"} Pipelines: [:tabby_sim_hpp] [Wed Nov 4 05:54:08.703000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:61204] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1550.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["84c1a61c-8f53-4f45-b88a-97efcec12f55"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Wed Nov 4 05:54:08.760000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:61204] QUERY OK source="tabby_sim_payments" db=56.8ms idle=1551.7ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["AUTHORIZED", ~N[2026-11-04 05:54:08], "7bd830c9-277d-41ec-9b9a-a36e0c6ab9b4", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:54:08.760000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client 115.99.167.137:61204] [TabbySim] payment=7bd830c9-277d-41ec-9b9a-a36e0c6ab9b4 CREATED -> AUTHORIZED [Wed Nov 4 05:54:08.762000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:61204] QUERY OK source="tabby_sim_payments" db=1.2ms queue=0.1ms idle=1398.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["7bd830c9-277d-41ec-9b9a-a36e0c6ab9b4"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:54:08.763000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:61204] QUERY OK source="tabby_sim_webhooks" db=0.6ms queue=0.2ms idle=611.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["slice9"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Wed Nov 4 05:54:08.763000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client 115.99.167.137:61204] [TabbySim] no webhook registered for merchant_code=slice9; event=authorize payment=7bd830c9-277d-41ec-9b9a-a36e0c6ab9b4 [Wed Nov 4 05:54:08.763000 2026] [DaProductApp.TabbySim.Hpp:info] [pid 1031735] [client 115.99.167.137:61204] [TabbySim] hpp payment=7bd830c9-277d-41ec-9b9a-a36e0c6ab9b4 action=approve status=AUTHORIZED [Wed Nov 4 05:54:08.763000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] Sent 302 in 63ms [Wed Nov 4 05:54:09.194000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] GET /tabby/return/93171d9f-609e-491a-9dcf-e2462d441003/success [Wed Nov 4 05:54:09.195000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:61204] QUERY OK source="tabby_payments" db=0.6ms queue=0.2ms idle=1042.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["93171d9f-609e-491a-9dcf-e2462d441003"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:54:09.266000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] Sent 302 in 71ms [Wed Nov 4 05:54:09.362000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.4ms idle=658.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["93171d9f-609e-491a-9dcf-e2462d441003"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:54:09.699000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:51678] GET /tabby-sim/api/v2/payments/7bd830c9-277d-41ec-9b9a-a36e0c6ab9b4 [Wed Nov 4 05:54:09.700000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:51678] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "7bd830c9-277d-41ec-9b9a-a36e0c6ab9b4"} Pipelines: [:tabby_sim_api] [Wed Nov 4 05:54:09.701000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:51678] QUERY OK source="tabby_sim_faults" db=0.5ms idle=504.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "7bd830c9-277d-41ec-9b9a-a36e0c6ab9b4"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 05:54:09.702000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:51678] QUERY OK source="tabby_sim_faults" db=0.5ms idle=503.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:54:09.703000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:51678] QUERY OK source="tabby_sim_payments" db=0.8ms idle=436.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["7bd830c9-277d-41ec-9b9a-a36e0c6ab9b4"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Wed Nov 4 05:54:09.703000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:51678] Sent 200 in 3ms [Wed Nov 4 05:54:09.704000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client -] [Tabby] retrieve get /api/v2/payments/7bd830c9-277d-41ec-9b9a-a36e0c6ab9b4 -> 200 (341 ms, attempt 1) [Wed Nov 4 05:54:09.748000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=43.3ms idle=343.3ms UPDATE `tabby_payments` AS t0 SET t0.`winner_key` = ?, t0.`authorized_at` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["83ff543ef573e82d9cd10aeb08a45599b0a29762245020912b0873b6c43040f0", ~U[2026-11-04 05:54:09Z], "authorized", ~N[2026-11-04 05:54:09], "93171d9f-609e-491a-9dcf-e2462d441003", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Wed Nov 4 05:54:09.749000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.6ms queue=0.1ms idle=385.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["93171d9f-609e-491a-9dcf-e2462d441003"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:54:09.749000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1031735] [client -] [Tabby] verify: attempt=93171d9f-609e-491a-9dcf-e2462d441003 payment=7bd830c9-277d-41ec-9b9a-a36e0c6ab9b4 created -> authorized [Wed Nov 4 05:54:09.752000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] GET /tabby/demo/result/success [Wed Nov 4 05:54:09.753000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] Sent 200 in 461µs [Wed Nov 4 05:54:09.910000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.3ms idle=286.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["93171d9f-609e-491a-9dcf-e2462d441003"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:54:09.988000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=77.8ms idle=209.0ms UPDATE `tabby_payments` AS t0 SET t0.`claimed_at` = ?, t0.`capture_reference_id` = ?, t0.`claimed_by` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [~U[2026-11-04 05:54:09Z], "capture-DEMO-28B53A06", "nonode@nohost", "capturing", ~N[2026-11-04 05:54:09], "93171d9f-609e-491a-9dcf-e2462d441003", "authorized"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Wed Nov 4 05:54:09.991000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=2.1ms idle=241.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["93171d9f-609e-491a-9dcf-e2462d441003"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:54:09.992000 2026] [DaProductApp.Tabby.Capture:info] [pid 1031735] [client -] [Tabby] capture: attempt=93171d9f-609e-491a-9dcf-e2462d441003 payment=7bd830c9-277d-41ec-9b9a-a36e0c6ab9b4 claimed (authorized -> capturing) [Wed Nov 4 05:54:10.272000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] GET /tabby/demo/status/93171d9f-609e-491a-9dcf-e2462d441003 [Wed Nov 4 05:54:10.273000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:61204] QUERY OK source="tabby_payments" db=0.6ms idle=421.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["93171d9f-609e-491a-9dcf-e2462d441003"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:54:10.274000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] Sent 200 in 1ms [Wed Nov 4 05:54:10.314000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:51678] POST /tabby-sim/api/v2/payments/7bd830c9-277d-41ec-9b9a-a36e0c6ab9b4/captures [Wed Nov 4 05:54:10.315000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:51678] Processing with DaProductAppWeb.TabbySim.PaymentsController.capture/2 Parameters: %{"amount" => "1833.00", "id" => "7bd830c9-277d-41ec-9b9a-a36e0c6ab9b4", "reference_id" => "capture-DEMO-28B53A06"} Pipelines: [:tabby_sim_api] [Wed Nov 4 05:54:10.317000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:51678] QUERY OK source="tabby_sim_faults" db=0.6ms idle=408.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["capture", "7bd830c9-277d-41ec-9b9a-a36e0c6ab9b4"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 05:54:10.317000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:51678] QUERY OK source="tabby_sim_faults" db=0.3ms idle=407.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["capture"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:54:10.318000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:51678] QUERY OK source="tabby_sim_payments" db=0.7ms idle=361.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["7bd830c9-277d-41ec-9b9a-a36e0c6ab9b4"] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:227 [Wed Nov 4 05:54:10.319000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:51678] QUERY OK db=0.3ms idle=330.9ms begin [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Wed Nov 4 05:54:10.320000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:51678] QUERY OK source="tabby_sim_payments" db=0.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) FOR UPDATE ["7bd830c9-277d-41ec-9b9a-a36e0c6ab9b4"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:231 [Wed Nov 4 05:54:10.321000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:51678] QUERY OK source="tabby_sim_payments" db=0.6ms UPDATE `tabby_sim_payments` SET `status` = ?, `closed_at` = ?, `captures` = ?, `updated_at` = ? WHERE `id` = ? ["CLOSED", ~U[2026-11-04 05:54:10Z], [%{"amount" => "1833", "created_at" => "2026-11-04T05:54:10Z", "discount_amount" => "0", "id" => "8bc828c5-111b-486e-bfa8-66ac72dc9433", "items" => nil, "reference_id" => "capture-DEMO-28B53A06", "shipping_amount" => "0", "tax_amount" => "0"}], ~N[2026-11-04 05:54:10], "7bd830c9-277d-41ec-9b9a-a36e0c6ab9b4"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:244 [Wed Nov 4 05:54:10.321000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client 127.0.0.1:51678] [TabbySim] capture payment=7bd830c9-277d-41ec-9b9a-a36e0c6ab9b4 status=CLOSED [Wed Nov 4 05:54:10.398000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:51678] QUERY OK db=75.4ms commit [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Wed Nov 4 05:54:10.399000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:51678] QUERY OK source="tabby_sim_webhooks" db=0.6ms idle=388.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["slice9"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Wed Nov 4 05:54:10.399000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client 127.0.0.1:51678] [TabbySim] no webhook registered for merchant_code=slice9; event=capture payment=7bd830c9-277d-41ec-9b9a-a36e0c6ab9b4 [Wed Nov 4 05:54:10.400000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:51678] QUERY OK source="tabby_sim_webhooks" db=0.4ms idle=349.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["slice9"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Wed Nov 4 05:54:10.401000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client 127.0.0.1:51678] [TabbySim] no webhook registered for merchant_code=slice9; event=close payment=7bd830c9-277d-41ec-9b9a-a36e0c6ab9b4 [Wed Nov 4 05:54:10.401000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:51678] Sent 200 in 86ms [Wed Nov 4 05:54:10.403000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client -] [Tabby] capture post /api/v2/payments/7bd830c9-277d-41ec-9b9a-a36e0c6ab9b4/captures -> 200 (412 ms, attempt 1) [Wed Nov 4 05:54:10.472000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=67.1ms idle=309.8ms UPDATE `tabby_payments` AS t0 SET t0.`captured_amount` = ?, t0.`captured_at` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [Decimal.new("1833"), ~U[2026-11-04 05:54:10Z], "captured", ~N[2026-11-04 05:54:10], "93171d9f-609e-491a-9dcf-e2462d441003", "capturing"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Wed Nov 4 05:54:10.474000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.7ms queue=0.1ms idle=333.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["93171d9f-609e-491a-9dcf-e2462d441003"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:54:10.474000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1031735] [client -] [Tabby] verify: attempt=93171d9f-609e-491a-9dcf-e2462d441003 payment=7bd830c9-277d-41ec-9b9a-a36e0c6ab9b4 capturing -> captured [Wed Nov 4 05:54:10.474000 2026] [DaProductApp.Tabby.Capture:info] [pid 1031735] [client -] [Tabby] capture: attempt=93171d9f-609e-491a-9dcf-e2462d441003 payment=7bd830c9-277d-41ec-9b9a-a36e0c6ab9b4 is captured [Wed Nov 4 05:54:13.680000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] GET /tabby/demo/status/93171d9f-609e-491a-9dcf-e2462d441003 [Wed Nov 4 05:54:13.683000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:61204] QUERY OK source="tabby_payments" db=1.0ms queue=0.3ms idle=1530.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["93171d9f-609e-491a-9dcf-e2462d441003"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:54:13.683000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] Sent 200 in 3ms [Wed Nov 4 05:54:16.586000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1433.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:54:16Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:54:16.586000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:54:16.587000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1101.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:54:16Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:54:16.589000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=436.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:54:16.628000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399370 scheduled in 15s (39 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:54:32.777000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=625.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:54:32Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:54:32.839000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=60.7ms queue=0.1ms idle=626.5ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:54:32], true, "bbd0ae59-9f04-4a08-954b-0d9499c2f62d", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:54:32.839000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=bbd0ae59-9f04-4a08-954b-0d9499c2f62d CREATED -> EXPIRED [Wed Nov 4 05:54:32.840000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=687.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["bbd0ae59-9f04-4a08-954b-0d9499c2f62d"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:54:32.840000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=bbd0ae59-9f04-4a08-954b-0d9499c2f62d [Wed Nov 4 05:54:32.840000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=bbd0ae59-9f04-4a08-954b-0d9499c2f62d expired (expires_at 2026-11-04 05:54:31Z, session_status=created) [Wed Nov 4 05:54:32.843000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.7ms idle=689.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:54:32Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:54:32.843000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:54:32.845000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=692.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:54:32Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:54:32.848000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=2.6ms idle=694.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:54:32.882000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399371 scheduled in 60s (38 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:54:36.103000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] GET /tabby/demo [Wed Nov 4 05:54:36.105000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] Sent 200 in 1ms [Wed Nov 4 05:54:36.836000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] POST /tabby/demo/summary [Wed Nov 4 05:54:36.837000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] Sent 200 in 820µs [Wed Nov 4 05:54:37.977000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] POST /tabby/demo/eligibility [Wed Nov 4 05:54:38.485000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:35406] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:54:38.485000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:35406] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:54:38.486000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:35406] QUERY OK source="tabby_sim_faults" db=0.4ms idle=784.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:54:38.544000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:35406] QUERY OK db=57.4ms idle=770.3ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["34e58889-e335-44b0-ba2d-22d673fed394", "CREATED", "AED", "b21e76b9-f30c-4edf-b8fa-f9e821e6230f", "slice9", ~U[2026-11-04 06:06:38Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:04:38Z], ~N[2026-11-04 05:54:38], ~N[2026-11-04 05:54:38]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:54:38.544000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:35406] [TabbySim] checkout payment=34e58889-e335-44b0-ba2d-22d673fed394 session=b21e76b9-f30c-4edf-b8fa-f9e821e6230f decision=created reason=nil amount=850.00 AED [Wed Nov 4 05:54:38.545000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:35406] QUERY OK source="tabby_sim_payments" db=0.6ms idle=744.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:54:38.547000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:35406] Sent 200 in 61ms [Wed Nov 4 05:54:38.547000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:61204] [Tabby] checkout post /api/v2/checkout -> 200 (570 ms, attempt 1) [Wed Nov 4 05:54:38.547000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:61204] [Tabby] session created payment=34e58889-e335-44b0-ba2d-22d673fed394 [Wed Nov 4 05:54:38.547000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:61204] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 05:54:38.547000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] Sent 200 in 570ms [Wed Nov 4 05:54:40.965000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] POST /tabby/demo/summary [Wed Nov 4 05:54:40.965000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] Sent 200 in 610µs [Wed Nov 4 05:54:41.813000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] POST /tabby/demo/eligibility [Wed Nov 4 05:54:42.114000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:35406] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:54:42.114000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:35406] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:54:42.116000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:35406] QUERY OK source="tabby_sim_faults" db=0.7ms idle=1963.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:54:42.184000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:35406] QUERY OK db=66.9ms idle=1964.9ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["89c47495-2de6-4b41-90ad-3867636e9fda", "CREATED", "AED", "d229a7ee-f1d0-4294-aa31-e98484b4b6f0", "slice9", ~U[2026-11-04 06:06:42Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1050.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:04:42Z], ~N[2026-11-04 05:54:42], ~N[2026-11-04 05:54:42]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:54:42.184000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:35406] [TabbySim] checkout payment=89c47495-2de6-4b41-90ad-3867636e9fda session=d229a7ee-f1d0-4294-aa31-e98484b4b6f0 decision=created reason=nil amount=1050.00 AED [Wed Nov 4 05:54:42.185000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:35406] QUERY OK source="tabby_sim_payments" db=0.9ms idle=581.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:54:42.187000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:35406] Sent 200 in 72ms [Wed Nov 4 05:54:42.187000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:61204] [Tabby] checkout post /api/v2/checkout -> 200 (375 ms, attempt 1) [Wed Nov 4 05:54:42.188000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:61204] [Tabby] session created payment=89c47495-2de6-4b41-90ad-3867636e9fda [Wed Nov 4 05:54:42.188000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:61204] [Tabby] eligibility: show (amount=1050.00 AED) [Wed Nov 4 05:54:42.188000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] Sent 200 in 375ms [Wed Nov 4 05:54:43.035000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] POST /tabby/demo/summary [Wed Nov 4 05:54:43.035000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] Sent 200 in 537µs [Wed Nov 4 05:54:43.869000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] POST /tabby/demo/eligibility [Wed Nov 4 05:54:44.185000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:35406] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:54:44.185000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:35406] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:54:44.186000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:35406] QUERY OK source="tabby_sim_faults" db=0.6ms queue=0.1ms idle=1034.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:54:44.259000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:35406] QUERY OK db=72.2ms idle=520.7ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["acdb1c74-e828-4a77-bf3b-662eb553a2c4", "CREATED", "AED", "013ab723-ff2d-47d7-b345-4645b731d3cb", "slice9", ~U[2026-11-04 06:06:44Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:04:44Z], ~N[2026-11-04 05:54:44], ~N[2026-11-04 05:54:44]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:54:44.259000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:35406] [TabbySim] checkout payment=acdb1c74-e828-4a77-bf3b-662eb553a2c4 session=013ab723-ff2d-47d7-b345-4645b731d3cb decision=created reason=nil amount=850.00 AED [Wed Nov 4 05:54:44.261000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:35406] QUERY OK source="tabby_sim_payments" db=0.8ms idle=508.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:54:44.262000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:35406] Sent 200 in 77ms [Wed Nov 4 05:54:44.263000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:61204] [Tabby] checkout post /api/v2/checkout -> 200 (393 ms, attempt 1) [Wed Nov 4 05:54:44.263000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:61204] [Tabby] session created payment=acdb1c74-e828-4a77-bf3b-662eb553a2c4 [Wed Nov 4 05:54:44.263000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:61204] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 05:54:44.263000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] Sent 200 in 393ms [Wed Nov 4 05:54:47.051000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] POST /tabby/demo/summary [Wed Nov 4 05:54:47.051000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] Sent 200 in 674µs [Wed Nov 4 05:54:47.892000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] POST /tabby/demo/eligibility [Wed Nov 4 05:54:48.223000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:35406] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:54:48.224000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:35406] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "865.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:54:48.224000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:35406] QUERY OK source="tabby_sim_faults" db=0.4ms idle=551.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:54:48.270000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:35406] QUERY OK db=44.7ms idle=467.6ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["2bb3a0ca-636b-4b91-9649-2b9dc1978c50", "CREATED", "AED", "13f321af-7177-45b7-b732-32c2d5034ffc", "slice9", ~U[2026-11-04 06:06:48Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "865.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("865.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:04:48Z], ~N[2026-11-04 05:54:48], ~N[2026-11-04 05:54:48]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:54:48.270000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:35406] [TabbySim] checkout payment=2bb3a0ca-636b-4b91-9649-2b9dc1978c50 session=13f321af-7177-45b7-b732-32c2d5034ffc decision=created reason=nil amount=865.00 AED [Wed Nov 4 05:54:48.271000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:35406] QUERY OK source="tabby_sim_payments" db=0.7ms idle=415.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:54:48.273000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:35406] Sent 200 in 49ms [Wed Nov 4 05:54:48.274000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:61204] [Tabby] checkout post /api/v2/checkout -> 200 (382 ms, attempt 1) [Wed Nov 4 05:54:48.274000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:61204] [Tabby] session created payment=2bb3a0ca-636b-4b91-9649-2b9dc1978c50 [Wed Nov 4 05:54:48.274000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:61204] [Tabby] eligibility: show (amount=865.00 AED) [Wed Nov 4 05:54:48.274000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] Sent 200 in 382ms [Wed Nov 4 05:55:01.375000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] POST /tabby/demo/place [Wed Nov 4 05:55:01.476000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:61204] QUERY OK db=98.4ms queue=0.5ms idle=1225.4ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`amount`,`needs_attention`,`order_reference`,`cancel_url`,`captured_amount`,`failure_url`,`refunded_amount`,`success_url`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422", "new", "AED", "slice9", Decimal.new("865.00"), false, "DEMO-90D27FF6", "http://78.47.213.209:4030/tabby/demo/result/cancel?lang=en&order=DEMO-90D27FF6", Decimal.new("0"), "http://78.47.213.209:4030/tabby/demo/result/failure?lang=en&order=DEMO-90D27FF6", Decimal.new("0"), "http://78.47.213.209:4030/tabby/demo/result/success?lang=en&order=DEMO-90D27FF6", ~N[2026-11-04 05:55:01], ~N[2026-11-04 05:55:01]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Wed Nov 4 05:55:02.149000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:51678] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:55:02.150000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:51678] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "en", "merchant_code" => "slice9", "merchant_urls" => %{"cancel" => "http://78.47.213.209:4030/tabby/return/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422/failure", "success" => "http://78.47.213.209:4030/tabby/return/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422/success"}, "payment" => %{"amount" => "865.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-90D27FF6", "shipping_amount" => "15.00"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:55:02.169000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:51678] QUERY OK source="tabby_sim_faults" db=4.1ms queue=0.1ms idle=940.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:55:02.251000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:51678] QUERY OK db=80.2ms queue=0.1ms idle=697.5ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`buyer_history`,`captures`,`is_test`,`lang`,`merchant_urls`,`refunds`,`session_expires_at`,`shipping_address`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["ce2d7d0a-b029-49ce-a02c-ea60b6853bbd", "CREATED", "AED", "1ac1a532-2d09-45b2-800e-cbfd04e183fe", "slice9", ~U[2026-11-04 06:07:02Z], %{"lang" => "en", "merchant_code" => "slice9", "merchant_urls" => %{"cancel" => "http://78.47.213.209:4030/tabby/return/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422/failure", "success" => "http://78.47.213.209:4030/tabby/return/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422/success"}, "payment" => %{"amount" => "865.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-90D27FF6", "shipping_amount" => "15.00"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "0", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo headphones", "unit_price" => "650"}, %{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo smartwatch", "unit_price" => "200"}], "reference_id" => "DEMO-90D27FF6", "shipping_amount" => "15", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("865.00"), %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, %{"registered_since" => "2023-02-01T10:00:00Z"}, [], true, "en", %{"cancel" => "http://78.47.213.209:4030/tabby/return/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422/failure", "success" => "http://78.47.213.209:4030/tabby/return/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422/success"}, [], ~U[2026-11-04 06:05:02Z], %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}, ~N[2026-11-04 05:55:02], ~N[2026-11-04 05:55:02]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:55:02.251000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:51678] [TabbySim] checkout payment=ce2d7d0a-b029-49ce-a02c-ea60b6853bbd session=1ac1a532-2d09-45b2-800e-cbfd04e183fe decision=created reason=nil amount=865.00 AED [Wed Nov 4 05:55:02.257000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:51678] QUERY OK source="tabby_sim_payments" db=5.9ms idle=524.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:55:02.273000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:51678] Sent 200 in 124ms [Wed Nov 4 05:55:02.279000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:61204] [Tabby] checkout post /api/v2/checkout -> 200 (801 ms, attempt 1) [Wed Nov 4 05:55:02.279000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:61204] [Tabby] session created payment=ce2d7d0a-b029-49ce-a02c-ea60b6853bbd [Wed Nov 4 05:55:02.296000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:61204] QUERY OK source="tabby_payments" db=3.6ms queue=3.8ms idle=376.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Wed Nov 4 05:55:02.395000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:61204] QUERY OK source="tabby_payments" db=96.0ms queue=1.7ms idle=135.9ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-04 06:15:02Z], "ce2d7d0a-b029-49ce-a02c-ea60b6853bbd", "1ac1a532-2d09-45b2-800e-cbfd04e183fe", ~N[2026-11-04 05:55:02], "9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Wed Nov 4 05:55:02.398000 2026] [DaProductApp.Tabby.Sessions:info] [pid 1031735] [client 115.99.167.137:61204] [Tabby] session created attempt=9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 payment=ce2d7d0a-b029-49ce-a02c-ea60b6853bbd [Wed Nov 4 05:55:02.408000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] Sent 200 in 1032ms [Wed Nov 4 05:55:03.566000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] GET /tabby-sim/hpp/1ac1a532-2d09-45b2-800e-cbfd04e183fe [Wed Nov 4 05:55:03.567000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 115.99.167.137:61204] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "1ac1a532-2d09-45b2-800e-cbfd04e183fe"} Pipelines: [:tabby_sim_hpp] [Wed Nov 4 05:55:03.571000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:61204] QUERY OK source="tabby_sim_payments" db=4.2ms idle=1397.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["1ac1a532-2d09-45b2-800e-cbfd04e183fe"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Wed Nov 4 05:55:03.572000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] Sent 200 in 5ms [Wed Nov 4 05:55:05.775000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] GET /tabby/demo [Wed Nov 4 05:55:05.778000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] Sent 200 in 2ms [Wed Nov 4 05:55:06.300000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] POST /tabby/demo/summary [Wed Nov 4 05:55:06.301000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] Sent 200 in 1ms [Wed Nov 4 05:55:07.330000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] POST /tabby/demo/eligibility [Wed Nov 4 05:55:07.813000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:35406] POST /tabby-sim/api/v2/checkout [Wed Nov 4 05:55:07.813000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:35406] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "865.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 05:55:07.816000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:35406] QUERY OK source="tabby_sim_faults" db=1.2ms idle=844.2ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:55:07.915000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:35406] QUERY OK db=94.6ms queue=1.6ms idle=749.8ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["28485844-329b-49f1-83dc-17eb60f0d22a", "CREATED", "AED", "4846285e-f32d-4d1f-9119-576c91a8048c", "slice9", ~U[2026-11-04 06:07:07Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "865.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("865.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:05:07Z], ~N[2026-11-04 05:55:07], ~N[2026-11-04 05:55:07]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 05:55:07.915000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:35406] [TabbySim] checkout payment=28485844-329b-49f1-83dc-17eb60f0d22a session=4846285e-f32d-4d1f-9119-576c91a8048c decision=created reason=nil amount=865.00 AED [Wed Nov 4 05:55:07.918000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:35406] QUERY OK source="tabby_sim_payments" db=2.8ms queue=0.2ms idle=762.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:55:07.922000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:35406] Sent 200 in 109ms [Wed Nov 4 05:55:07.924000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:61204] [Tabby] checkout post /api/v2/checkout -> 200 (593 ms, attempt 1) [Wed Nov 4 05:55:07.924000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:61204] [Tabby] session created payment=28485844-329b-49f1-83dc-17eb60f0d22a [Wed Nov 4 05:55:07.924000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:61204] [Tabby] eligibility: show (amount=865.00 AED) [Wed Nov 4 05:55:07.925000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61204] Sent 200 in 594ms [Wed Nov 4 05:55:18.173000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=1010.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["slice9", ~U[2026-10-17 05:55:18Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:55:18.174000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=1011.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["slice9", ~N[2026-11-04 05:53:18], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:55:18.175000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=1012.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", ~N[2026-11-04 05:53:18], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:55:18.176000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.0ms idle=1013.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["slice9", ~U[2026-11-04 05:50:18Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:55:18.178000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.9ms idle=1014.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:55:18.179000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.6ms queue=0.1ms idle=1016.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["b923bd69-59f6-447b-a9db-66ab77d14e84"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:55:18.511000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:51678] GET /tabby-sim/api/v2/payments/056502fe-662a-4eaf-a1af-52aaaa20cd43 [Wed Nov 4 05:55:18.511000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:51678] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "056502fe-662a-4eaf-a1af-52aaaa20cd43"} Pipelines: [:tabby_sim_api] [Wed Nov 4 05:55:18.513000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:51678] QUERY OK source="tabby_sim_faults" db=0.7ms idle=508.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "056502fe-662a-4eaf-a1af-52aaaa20cd43"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 05:55:18.514000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:51678] QUERY OK source="tabby_sim_faults" db=0.7ms idle=341.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:55:18.515000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:51678] QUERY OK source="tabby_sim_payments" db=1.2ms idle=341.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["056502fe-662a-4eaf-a1af-52aaaa20cd43"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Wed Nov 4 05:55:18.515000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:51678] Sent 200 in 4ms [Wed Nov 4 05:55:18.516000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client -] [Tabby] retrieve get /api/v2/payments/056502fe-662a-4eaf-a1af-52aaaa20cd43 -> 200 (337 ms, attempt 1) [Wed Nov 4 05:55:18.613000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=96.9ms idle=342.6ms UPDATE `tabby_payments` AS t0 SET t0.`winner_key` = ?, t0.`authorized_at` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["322c423acb726eba72dda673de4d1832a974bc9753009ce94438a30f11baba0c", ~U[2026-11-04 05:55:18Z], "authorized", ~N[2026-11-04 05:55:18], "b923bd69-59f6-447b-a9db-66ab77d14e84", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Wed Nov 4 05:55:18.615000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.1ms idle=438.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["b923bd69-59f6-447b-a9db-66ab77d14e84"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:55:18.615000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1031735] [client -] [Tabby] verify: attempt=b923bd69-59f6-447b-a9db-66ab77d14e84 payment=056502fe-662a-4eaf-a1af-52aaaa20cd43 created -> authorized [Wed Nov 4 05:55:18.616000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=439.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["b923bd69-59f6-447b-a9db-66ab77d14e84"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:55:18.726000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=109.5ms idle=438.7ms UPDATE `tabby_payments` AS t0 SET t0.`claimed_at` = ?, t0.`capture_reference_id` = ?, t0.`claimed_by` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [~U[2026-11-04 05:55:18Z], "capture-DEMO-31575949", "nonode@nohost", "capturing", ~N[2026-11-04 05:55:18], "b923bd69-59f6-447b-a9db-66ab77d14e84", "authorized"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Wed Nov 4 05:55:18.727000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=547.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["b923bd69-59f6-447b-a9db-66ab77d14e84"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:55:18.727000 2026] [DaProductApp.Tabby.Capture:info] [pid 1031735] [client -] [Tabby] capture: attempt=b923bd69-59f6-447b-a9db-66ab77d14e84 payment=056502fe-662a-4eaf-a1af-52aaaa20cd43 claimed (authorized -> capturing) [Wed Nov 4 05:55:19.036000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:51678] POST /tabby-sim/api/v2/payments/056502fe-662a-4eaf-a1af-52aaaa20cd43/captures [Wed Nov 4 05:55:19.036000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:51678] Processing with DaProductAppWeb.TabbySim.PaymentsController.capture/2 Parameters: %{"amount" => "2020.00", "id" => "056502fe-662a-4eaf-a1af-52aaaa20cd43", "reference_id" => "capture-DEMO-31575949"} Pipelines: [:tabby_sim_api] [Wed Nov 4 05:55:19.037000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:51678] QUERY OK source="tabby_sim_faults" db=0.6ms idle=522.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["capture", "056502fe-662a-4eaf-a1af-52aaaa20cd43"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 05:55:19.039000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:51678] QUERY OK source="tabby_sim_faults" db=1.2ms idle=522.2ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["capture"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:55:19.040000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:51678] QUERY OK source="tabby_sim_payments" db=0.9ms idle=425.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["056502fe-662a-4eaf-a1af-52aaaa20cd43"] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:227 [Wed Nov 4 05:55:19.041000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:51678] QUERY OK db=0.7ms idle=425.6ms begin [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Wed Nov 4 05:55:19.043000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:51678] QUERY OK source="tabby_sim_payments" db=1.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) FOR UPDATE ["056502fe-662a-4eaf-a1af-52aaaa20cd43"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:231 [Wed Nov 4 05:55:19.045000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:51678] QUERY OK source="tabby_sim_payments" db=0.4ms UPDATE `tabby_sim_payments` SET `status` = ?, `closed_at` = ?, `captures` = ?, `updated_at` = ? WHERE `id` = ? ["CLOSED", ~U[2026-11-04 05:55:19Z], [%{"amount" => "2020", "created_at" => "2026-11-04T05:55:19Z", "discount_amount" => "0", "id" => "d35481f9-f9da-4fe5-aa7c-ae60c5793332", "items" => nil, "reference_id" => "capture-DEMO-31575949", "shipping_amount" => "0", "tax_amount" => "0"}], ~N[2026-11-04 05:55:19], "056502fe-662a-4eaf-a1af-52aaaa20cd43"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:244 [Wed Nov 4 05:55:19.045000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client 127.0.0.1:51678] [TabbySim] capture payment=056502fe-662a-4eaf-a1af-52aaaa20cd43 status=CLOSED [Wed Nov 4 05:55:19.111000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:51678] QUERY OK db=65.6ms commit [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Wed Nov 4 05:55:19.112000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:51678] QUERY OK source="tabby_sim_webhooks" db=0.7ms idle=495.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["slice9"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Wed Nov 4 05:55:19.112000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client 127.0.0.1:51678] [TabbySim] no webhook registered for merchant_code=slice9; event=capture payment=056502fe-662a-4eaf-a1af-52aaaa20cd43 [Wed Nov 4 05:55:19.113000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:51678] QUERY OK source="tabby_sim_webhooks" db=0.3ms idle=386.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["slice9"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Wed Nov 4 05:55:19.113000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client 127.0.0.1:51678] [TabbySim] no webhook registered for merchant_code=slice9; event=close payment=056502fe-662a-4eaf-a1af-52aaaa20cd43 [Wed Nov 4 05:55:19.113000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:51678] Sent 200 in 77ms [Wed Nov 4 05:55:19.114000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client -] [Tabby] capture post /api/v2/payments/056502fe-662a-4eaf-a1af-52aaaa20cd43/captures -> 200 (386 ms, attempt 1) [Wed Nov 4 05:55:19.163000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=48.6ms idle=387.3ms UPDATE `tabby_payments` AS t0 SET t0.`captured_amount` = ?, t0.`captured_at` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [Decimal.new("2020"), ~U[2026-11-04 05:55:19Z], "captured", ~N[2026-11-04 05:55:19], "b923bd69-59f6-447b-a9db-66ab77d14e84", "capturing"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Wed Nov 4 05:55:19.165000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.9ms queue=0.1ms idle=339.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["b923bd69-59f6-447b-a9db-66ab77d14e84"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:55:19.165000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1031735] [client -] [Tabby] verify: attempt=b923bd69-59f6-447b-a9db-66ab77d14e84 payment=056502fe-662a-4eaf-a1af-52aaaa20cd43 capturing -> captured [Wed Nov 4 05:55:19.165000 2026] [DaProductApp.Tabby.Capture:info] [pid 1031735] [client -] [Tabby] capture: attempt=b923bd69-59f6-447b-a9db-66ab77d14e84 payment=056502fe-662a-4eaf-a1af-52aaaa20cd43 is captured [Wed Nov 4 05:55:19.167000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=1.5ms idle=258.5ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-04 05:53:18Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Wed Nov 4 05:55:19.168000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=0.5ms idle=161.9ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["slice9", ~N[2026-11-04 05:53:18], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Wed Nov 4 05:55:19.170000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.9ms queue=0.1ms idle=131.4ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:55:19.170000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=131.0ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["slice9", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:55:19.172000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=1.3ms idle=130.3ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Wed Nov 4 05:55:19.172000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=0.3ms idle=61.4ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Wed Nov 4 05:55:19.173000 2026] [DaProductApp.Tabby.Poller:info] [pid 1031735] [client -] [Tabby] poll: handled 1 (created:verified_then_recorded_captured=1); 1 attempt(s) still watched [Wed Nov 4 05:55:34.874000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1712.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:55:34Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:55:34.875000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:55:34.876000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1713.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:55:34Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:55:34.877000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1715.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:55:34.945000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399375 scheduled in 60s (44 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:56:37.043000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=879.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:56:37Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:56:37.043000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:56:37.044000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=881.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:56:37Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:56:37.045000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=882.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:56:37.082000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399379 scheduled in 3s (44 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:56:42.132000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1969.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:56:42Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:56:42.166000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=33.6ms idle=1970.6ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:56:42], true, "fd75778d-e980-4f92-b43f-b55c3b399d72", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:56:42.167000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=fd75778d-e980-4f92-b43f-b55c3b399d72 CREATED -> EXPIRED [Wed Nov 4 05:56:42.168000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1005.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["fd75778d-e980-4f92-b43f-b55c3b399d72"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:56:42.168000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=fd75778d-e980-4f92-b43f-b55c3b399d72 [Wed Nov 4 05:56:42.168000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=fd75778d-e980-4f92-b43f-b55c3b399d72 expired (expires_at 2026-11-04 05:56:40Z, session_status=created) [Wed Nov 4 05:56:42.169000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=138.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:56:42Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:56:42.169000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:56:42.170000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=38.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:56:42Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:56:42.172000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.3ms idle=38.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:56:42.218000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399380 scheduled in 3s (43 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:56:47.211000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1047.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:56:47Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:56:47.270000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=58.2ms idle=1048.5ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:56:47], true, "b0bcbda9-4b98-46a0-8aa7-e0a660ad946e", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:56:47.270000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=b0bcbda9-4b98-46a0-8aa7-e0a660ad946e CREATED -> EXPIRED [Wed Nov 4 05:56:47.271000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1107.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["b0bcbda9-4b98-46a0-8aa7-e0a660ad946e"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:56:47.271000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=b0bcbda9-4b98-46a0-8aa7-e0a660ad946e [Wed Nov 4 05:56:47.272000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=b0bcbda9-4b98-46a0-8aa7-e0a660ad946e expired (expires_at 2026-11-04 05:56:45Z, session_status=created) [Wed Nov 4 05:56:47.273000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1109.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:56:47Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:56:47.273000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:56:47.274000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1110.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:56:47Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:56:47.275000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.3ms idle=1111.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:56:47.331000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399381 scheduled in 17s (42 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:57:06.341000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1178.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:57:06Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:57:06.439000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=96.5ms queue=0.1ms idle=1179.5ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:57:06], true, "28a0a0e9-59d8-4ed0-999d-8590daac55b9", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:57:06.439000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=28a0a0e9-59d8-4ed0-999d-8590daac55b9 CREATED -> EXPIRED [Wed Nov 4 05:57:06.441000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1277.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["28a0a0e9-59d8-4ed0-999d-8590daac55b9"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:57:06.441000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=28a0a0e9-59d8-4ed0-999d-8590daac55b9 [Wed Nov 4 05:57:06.442000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=28a0a0e9-59d8-4ed0-999d-8590daac55b9 expired (expires_at 2026-11-04 05:57:04Z, session_status=created) [Wed Nov 4 05:57:06.443000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1280.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:57:06Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:57:06.444000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:57:06.445000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms queue=0.1ms idle=1281.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:57:06Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:57:06.446000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1282.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:57:06.491000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399384 scheduled in 6s (41 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:57:14.413000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=250.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:57:14Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:57:14.441000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=27.2ms idle=251.3ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:57:14], true, "4dfc34e9-3420-40b3-a92c-bdc393b1df77", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:57:14.441000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=4dfc34e9-3420-40b3-a92c-bdc393b1df77 CREATED -> EXPIRED [Wed Nov 4 05:57:14.442000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=279.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["4dfc34e9-3420-40b3-a92c-bdc393b1df77"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:57:14.442000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=4dfc34e9-3420-40b3-a92c-bdc393b1df77 [Wed Nov 4 05:57:14.442000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=4dfc34e9-3420-40b3-a92c-bdc393b1df77 expired (expires_at 2026-11-04 05:57:12Z, session_status=created) [Wed Nov 4 05:57:14.443000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=280.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:57:14Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:57:14.443000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:57:14.444000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=281.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:57:14Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:57:14.446000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=282.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:57:14.470000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399385 scheduled in 2s (40 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:57:18.543000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=379.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:57:18Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:57:18.587000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=43.7ms idle=381.1ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:57:18], true, "2872f197-2c67-46a0-8a8d-71b9415c38f9", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:57:18.588000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=2872f197-2c67-46a0-8a8d-71b9415c38f9 CREATED -> EXPIRED [Wed Nov 4 05:57:18.589000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=425.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["2872f197-2c67-46a0-8a8d-71b9415c38f9"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:57:18.589000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=2872f197-2c67-46a0-8a8d-71b9415c38f9 [Wed Nov 4 05:57:18.589000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=2872f197-2c67-46a0-8a8d-71b9415c38f9 expired (expires_at 2026-11-04 05:57:16Z, session_status=created) [Wed Nov 4 05:57:18.591000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=426.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:57:18Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:57:18.591000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:57:18.592000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=428.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:57:18Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:57:18.592000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=429.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:57:18.664000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399386 scheduled in 3s (39 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:57:20.603000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.9ms idle=440.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["slice9", ~U[2026-10-17 05:57:20Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:57:20.604000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=441.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["slice9", ~N[2026-11-04 05:55:20], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:57:20.605000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=442.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", ~N[2026-11-04 05:55:20], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:57:20.606000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.3ms idle=443.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["slice9", ~U[2026-11-04 05:52:20Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:57:20.607000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=444.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:57:20.608000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=445.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:57:20.876000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:42898] GET /tabby-sim/api/v2/payments/ce2d7d0a-b029-49ce-a02c-ea60b6853bbd [Wed Nov 4 05:57:20.876000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:42898] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "ce2d7d0a-b029-49ce-a02c-ea60b6853bbd"} Pipelines: [:tabby_sim_api] [Wed Nov 4 05:57:20.877000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42898] QUERY OK source="tabby_sim_faults" db=0.3ms idle=371.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "ce2d7d0a-b029-49ce-a02c-ea60b6853bbd"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 05:57:20.877000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42898] QUERY OK source="tabby_sim_faults" db=0.3ms idle=275.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:57:20.878000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:42898] QUERY OK source="tabby_sim_payments" db=0.7ms idle=274.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["ce2d7d0a-b029-49ce-a02c-ea60b6853bbd"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Wed Nov 4 05:57:20.879000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:42898] Sent 200 in 2ms [Wed Nov 4 05:57:20.880000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client -] [Tabby] retrieve get /api/v2/payments/ce2d7d0a-b029-49ce-a02c-ea60b6853bbd -> 200 (272 ms, attempt 1) [Wed Nov 4 05:57:20.880000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1031735] [client -] [Tabby] verify: attempt=9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 payment=ce2d7d0a-b029-49ce-a02c-ea60b6853bbd is still CREATED at Tabby; it will be looked at again [Wed Nov 4 05:57:20.881000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=0.9ms idle=275.4ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-04 05:55:20Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Wed Nov 4 05:57:20.882000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=0.5ms idle=275.7ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["slice9", ~N[2026-11-04 05:55:20], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Wed Nov 4 05:57:20.883000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.6ms queue=0.3ms idle=275.8ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:57:20.884000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.3ms idle=276.1ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["slice9", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:57:20.884000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=0.3ms idle=276.0ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Wed Nov 4 05:57:20.885000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=0.8ms idle=222.4ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Wed Nov 4 05:57:20.885000 2026] [DaProductApp.Tabby.Poller:info] [pid 1031735] [client -] [Tabby] poll: handled 1 (created:pending=1); 1 attempt(s) still watched [Wed Nov 4 05:57:23.643000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1479.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:57:23Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:57:23.690000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=47.2ms idle=1480.8ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:57:23], true, "afdec1d2-eea5-40cf-b385-053331089f14", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:57:23.691000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=afdec1d2-eea5-40cf-b385-053331089f14 CREATED -> EXPIRED [Wed Nov 4 05:57:23.691000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1528.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["afdec1d2-eea5-40cf-b385-053331089f14"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:57:23.692000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=afdec1d2-eea5-40cf-b385-053331089f14 [Wed Nov 4 05:57:23.692000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=afdec1d2-eea5-40cf-b385-053331089f14 expired (expires_at 2026-11-04 05:57:21Z, session_status=created) [Wed Nov 4 05:57:23.693000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms queue=0.2ms idle=1529.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:57:23Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:57:23.693000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:57:23.694000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1531.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:57:23Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:57:23.696000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.4ms idle=1532.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:57:23.755000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399389 scheduled in 60s (38 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:58:24.946000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.5ms idle=1781.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:58:24Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:58:24.946000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 05:58:24.948000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.1ms idle=1784.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:58:24Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:58:24.949000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1785.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:58:24.992000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399392 scheduled in 21s (38 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:58:47.058000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=893.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:58:47Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:58:47.138000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=79.9ms queue=0.1ms idle=894.8ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:58:47], true, "793aad3a-8969-462c-ba49-8e38ee48edb3", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:58:47.138000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=793aad3a-8969-462c-ba49-8e38ee48edb3 CREATED -> EXPIRED [Wed Nov 4 05:58:47.139000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=975.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["793aad3a-8969-462c-ba49-8e38ee48edb3"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:58:47.140000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=793aad3a-8969-462c-ba49-8e38ee48edb3 [Wed Nov 4 05:58:47.140000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=793aad3a-8969-462c-ba49-8e38ee48edb3 expired (expires_at 2026-11-04 05:58:45Z, session_status=created) [Wed Nov 4 05:58:47.141000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=976.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:58:47Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:58:47.142000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:58:47.143000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=978.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:58:47Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:58:47.145000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=979.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:58:47.201000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399393 scheduled in 13s (37 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:59:02.169000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=3.6ms idle=1001.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:02Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:59:02.209000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=36.2ms queue=0.6ms idle=1007.4ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:59:02], true, "42703683-6a6f-436d-b5b6-c45b0f760721", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:59:02.210000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=42703683-6a6f-436d-b5b6-c45b0f760721 CREATED -> EXPIRED [Wed Nov 4 05:59:02.212000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms queue=1.1ms idle=133.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["42703683-6a6f-436d-b5b6-c45b0f760721"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:59:02.212000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=42703683-6a6f-436d-b5b6-c45b0f760721 [Wed Nov 4 05:59:02.212000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=42703683-6a6f-436d-b5b6-c45b0f760721 expired (expires_at 2026-11-04 05:59:00Z, session_status=created) [Wed Nov 4 05:59:02.215000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=2.4ms idle=48.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:02Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:59:02.216000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:59:02.219000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=2.3ms idle=51.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:02Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:59:02.222000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=2.8ms idle=54.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:59:02.267000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399394 scheduled in 3s (36 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:59:07.296000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1128.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:07Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:59:07.370000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=60.2ms idle=1141.9ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:59:07], true, "2259ab70-8f5b-45ec-9255-2dc0e2706a4d", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:59:07.370000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=2259ab70-8f5b-45ec-9255-2dc0e2706a4d CREATED -> EXPIRED [Wed Nov 4 05:59:07.373000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.9ms idle=1203.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["2259ab70-8f5b-45ec-9255-2dc0e2706a4d"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:59:07.373000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=2259ab70-8f5b-45ec-9255-2dc0e2706a4d expired (expires_at 2026-11-04 05:59:05Z, session_status=rejected) [Wed Nov 4 05:59:07.374000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms queue=0.3ms idle=1206.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:07Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:59:07.374000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:59:07.378000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=3.4ms idle=1208.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:07Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:59:07.381000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=2.2ms idle=1209.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:59:07.433000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399395 scheduled in 7s (35 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:59:16.401000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.5ms idle=1234.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:16Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:59:16.445000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=44.2ms idle=1236.1ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:59:16], true, "617495c2-7b88-4127-8ded-f9458c748934", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:59:16.446000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=617495c2-7b88-4127-8ded-f9458c748934 CREATED -> EXPIRED [Wed Nov 4 05:59:16.447000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1280.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["617495c2-7b88-4127-8ded-f9458c748934"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:59:16.447000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=617495c2-7b88-4127-8ded-f9458c748934 expired (expires_at 2026-11-04 05:59:14Z, session_status=rejected) [Wed Nov 4 05:59:16.448000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=1282.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:16Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:59:16.449000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:59:16.449000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1282.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:16Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:59:16.450000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1283.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:59:16.500000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399396 scheduled in 3s (34 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:59:21.608000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1442.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:21Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:59:21.658000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=50.2ms idle=1443.7ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:59:21], true, "017c259a-4ec4-44d0-a80c-90ca12f3678d", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:59:21.658000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=017c259a-4ec4-44d0-a80c-90ca12f3678d CREATED -> EXPIRED [Wed Nov 4 05:59:21.660000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1494.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["017c259a-4ec4-44d0-a80c-90ca12f3678d"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:59:21.660000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=017c259a-4ec4-44d0-a80c-90ca12f3678d expired (expires_at 2026-11-04 05:59:19Z, session_status=rejected) [Wed Nov 4 05:59:21.661000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1495.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:21Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:59:21.661000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:59:21.662000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1497.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:21Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:59:21.663000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1498.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:59:21.711000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399397 scheduled in 1s (33 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:59:22.636000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=976.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["slice9", ~U[2026-10-17 05:59:22Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:59:22.638000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=975.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["slice9", ~N[2026-11-04 05:57:22], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:59:22.639000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=975.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", ~N[2026-11-04 05:57:22], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:59:22.640000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.9ms queue=0.1ms idle=976.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["slice9", ~U[2026-11-04 05:54:22Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:59:22.641000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=976.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 05:59:22.643000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=930.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 05:59:22.901000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:38154] GET /tabby-sim/api/v2/payments/ce2d7d0a-b029-49ce-a02c-ea60b6853bbd [Wed Nov 4 05:59:22.901000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:38154] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "ce2d7d0a-b029-49ce-a02c-ea60b6853bbd"} Pipelines: [:tabby_sim_api] [Wed Nov 4 05:59:22.902000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38154] QUERY OK source="tabby_sim_faults" db=0.4ms idle=410.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "ce2d7d0a-b029-49ce-a02c-ea60b6853bbd"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 05:59:22.903000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38154] QUERY OK source="tabby_sim_faults" db=0.4ms idle=267.2ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 05:59:22.904000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38154] QUERY OK source="tabby_sim_payments" db=0.5ms idle=266.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["ce2d7d0a-b029-49ce-a02c-ea60b6853bbd"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Wed Nov 4 05:59:22.904000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:38154] Sent 200 in 3ms [Wed Nov 4 05:59:22.905000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client -] [Tabby] retrieve get /api/v2/payments/ce2d7d0a-b029-49ce-a02c-ea60b6853bbd -> 200 (262 ms, attempt 1) [Wed Nov 4 05:59:22.905000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1031735] [client -] [Tabby] verify: attempt=9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 payment=ce2d7d0a-b029-49ce-a02c-ea60b6853bbd is still CREATED at Tabby; it will be looked at again [Wed Nov 4 05:59:22.907000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=0.3ms queue=0.1ms idle=268.8ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-04 05:57:22Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Wed Nov 4 05:59:22.908000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=0.4ms idle=268.5ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["slice9", ~N[2026-11-04 05:57:22], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Wed Nov 4 05:59:22.909000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=267.9ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:59:22.910000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.0ms idle=267.6ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["slice9", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 05:59:22.912000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=0.8ms idle=268.5ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Wed Nov 4 05:59:22.913000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=0.7ms idle=206.9ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Wed Nov 4 05:59:22.913000 2026] [DaProductApp.Tabby.Poller:info] [pid 1031735] [client -] [Tabby] poll: handled 1 (created:pending=1); 1 attempt(s) still watched [Wed Nov 4 05:59:24.689000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=524.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:24Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:59:24.748000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=58.5ms idle=525.4ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:59:24], true, "0cefa218-a52d-4a93-93d1-ea837075f5f0", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:59:24.749000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=0cefa218-a52d-4a93-93d1-ea837075f5f0 CREATED -> EXPIRED [Wed Nov 4 05:59:24.750000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=584.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["0cefa218-a52d-4a93-93d1-ea837075f5f0"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:59:24.750000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=0cefa218-a52d-4a93-93d1-ea837075f5f0 expired (expires_at 2026-11-04 05:59:22Z, session_status=rejected) [Wed Nov 4 05:59:24.752000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=586.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:24Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:59:24.752000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:59:24.753000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=588.2ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:24Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:59:24.755000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms queue=0.1ms idle=589.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:59:24.819000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399399 scheduled in 2s (32 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:59:28.803000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=2.8ms idle=636.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:28Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:59:28.858000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=54.1ms idle=639.4ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:59:28], true, "43c1af16-7229-40f4-91f0-62390d6b7197", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:59:28.858000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=43c1af16-7229-40f4-91f0-62390d6b7197 CREATED -> EXPIRED [Wed Nov 4 05:59:28.860000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms queue=0.1ms idle=694.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["43c1af16-7229-40f4-91f0-62390d6b7197"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:59:28.860000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=43c1af16-7229-40f4-91f0-62390d6b7197 expired (expires_at 2026-11-04 05:59:26Z, session_status=rejected) [Wed Nov 4 05:59:28.861000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=696.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:28Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:59:28.861000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:59:28.863000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=698.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:28Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:59:28.865000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.9ms idle=699.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:59:28.934000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399400 scheduled in 8s (31 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:59:38.909000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=744.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:38Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:59:38.968000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=57.8ms idle=745.3ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:59:38], true, "9463fce6-63c7-49be-830a-3bad444d37b3", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:59:38.968000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=9463fce6-63c7-49be-830a-3bad444d37b3 CREATED -> EXPIRED [Wed Nov 4 05:59:38.969000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=803.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["9463fce6-63c7-49be-830a-3bad444d37b3"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:59:38.969000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=9463fce6-63c7-49be-830a-3bad444d37b3 expired (expires_at 2026-11-04 05:59:36Z, session_status=rejected) [Wed Nov 4 05:59:39.022000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=52.1ms idle=804.9ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:59:38], true, "7d45a575-548a-4f20-8560-8de3e20d70c2", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:59:39.022000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=7d45a575-548a-4f20-8560-8de3e20d70c2 CREATED -> EXPIRED [Wed Nov 4 05:59:39.023000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=857.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["7d45a575-548a-4f20-8560-8de3e20d70c2"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:59:39.023000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=7d45a575-548a-4f20-8560-8de3e20d70c2 expired (expires_at 2026-11-04 05:59:38Z, session_status=rejected) [Wed Nov 4 05:59:39.024000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=859.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:39Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:59:39.024000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 2 payment(s) were due [Wed Nov 4 05:59:39.025000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=860.2ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:39Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:59:39.026000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=861.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:59:39.082000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399401 scheduled in 1s (29 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:59:42.016000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.7ms idle=1849.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:42Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:59:42.063000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=46.8ms idle=1851.8ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:59:42], true, "24b59dd9-3f96-4428-ab2d-699ddd8ca027", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:59:42.064000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=24b59dd9-3f96-4428-ab2d-699ddd8ca027 CREATED -> EXPIRED [Wed Nov 4 05:59:42.065000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1899.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["24b59dd9-3f96-4428-ab2d-699ddd8ca027"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:59:42.065000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=24b59dd9-3f96-4428-ab2d-699ddd8ca027 [Wed Nov 4 05:59:42.065000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=24b59dd9-3f96-4428-ab2d-699ddd8ca027 expired (expires_at 2026-11-04 05:59:40Z, session_status=created) [Wed Nov 4 05:59:42.066000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1901.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:42Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:59:42.066000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:59:42.067000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1902.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:42Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:59:42.068000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1903.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:59:42.117000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399402 scheduled in 2s (28 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:59:46.104000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=939.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:46Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:59:46.174000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=69.0ms idle=940.7ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:59:46], true, "9a09ddba-0a5c-44f2-91ff-6a406f4c5142", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:59:46.174000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=9a09ddba-0a5c-44f2-91ff-6a406f4c5142 CREATED -> EXPIRED [Wed Nov 4 05:59:46.175000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms queue=0.1ms idle=1010.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["9a09ddba-0a5c-44f2-91ff-6a406f4c5142"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:59:46.176000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=9a09ddba-0a5c-44f2-91ff-6a406f4c5142 expired (expires_at 2026-11-04 05:59:44Z, session_status=rejected) [Wed Nov 4 05:59:46.177000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.3ms idle=1011.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:46Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:59:46.177000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 05:59:46.179000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1013.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:46Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:59:46.180000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1014.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:59:46.206000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399403 scheduled in 2s (27 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:59:50.208000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1042.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:50Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:59:50.267000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=58.1ms idle=79.2ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:59:50], true, "6e392c77-323d-4f53-84e2-869e7614e6d6", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:59:50.267000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=6e392c77-323d-4f53-84e2-869e7614e6d6 CREATED -> EXPIRED [Wed Nov 4 05:59:50.268000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=103.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["6e392c77-323d-4f53-84e2-869e7614e6d6"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:59:50.268000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=6e392c77-323d-4f53-84e2-869e7614e6d6 expired (expires_at 2026-11-04 05:59:48Z, session_status=rejected) [Wed Nov 4 05:59:50.310000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=40.8ms idle=105.1ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:59:50], true, "dbe8059f-3dc9-4294-ab85-e7539dc5a74f", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:59:50.310000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=dbe8059f-3dc9-4294-ab85-e7539dc5a74f CREATED -> EXPIRED [Wed Nov 4 05:59:50.311000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=146.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["dbe8059f-3dc9-4294-ab85-e7539dc5a74f"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:59:50.312000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=dbe8059f-3dc9-4294-ab85-e7539dc5a74f expired (expires_at 2026-11-04 05:59:50Z, session_status=rejected) [Wed Nov 4 05:59:50.313000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms queue=0.1ms idle=147.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:50Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:59:50.313000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 2 payment(s) were due [Wed Nov 4 05:59:50.315000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=150.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:50Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:59:50.316000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=151.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:59:50.368000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399404 scheduled in 2s (25 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:59:54.296000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=131.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:54Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:59:54.342000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=46.0ms idle=132.2ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:59:54], true, "1f7921cb-c360-49aa-84bf-c30c3c7d19a3", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:59:54.343000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=1f7921cb-c360-49aa-84bf-c30c3c7d19a3 CREATED -> EXPIRED [Wed Nov 4 05:59:54.344000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.1ms idle=179.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["1f7921cb-c360-49aa-84bf-c30c3c7d19a3"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:59:54.344000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=1f7921cb-c360-49aa-84bf-c30c3c7d19a3 expired (expires_at 2026-11-04 05:59:52Z, session_status=rejected) [Wed Nov 4 05:59:54.383000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=38.7ms idle=180.4ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:59:54], true, "721ae960-0c81-4601-83de-e704bf2b1760", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:59:54.384000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=721ae960-0c81-4601-83de-e704bf2b1760 CREATED -> EXPIRED [Wed Nov 4 05:59:54.385000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.2ms idle=219.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["721ae960-0c81-4601-83de-e704bf2b1760"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:59:54.385000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=721ae960-0c81-4601-83de-e704bf2b1760 expired (expires_at 2026-11-04 05:59:53Z, session_status=rejected) [Wed Nov 4 05:59:54.386000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=221.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:54Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:59:54.387000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 2 payment(s) were due [Wed Nov 4 05:59:54.388000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=222.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:54Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:59:54.389000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=223.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:59:54.447000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399405 scheduled in 1s (23 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 05:59:57.406000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=1240.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:57Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:59:57.473000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=66.8ms idle=1242.0ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:59:57], true, "5514a7d6-52ed-4a1b-84b4-cea23c8c0869", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:59:57.473000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=5514a7d6-52ed-4a1b-84b4-cea23c8c0869 CREATED -> EXPIRED [Wed Nov 4 05:59:57.474000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1309.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["5514a7d6-52ed-4a1b-84b4-cea23c8c0869"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:59:57.475000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=5514a7d6-52ed-4a1b-84b4-cea23c8c0869 expired (expires_at 2026-11-04 05:59:55Z, session_status=rejected) [Wed Nov 4 05:59:57.570000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=95.4ms queue=0.1ms idle=1310.6ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 05:59:57], true, "e46b6fd1-4488-4a72-9423-9dd1c90c2622", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 05:59:57.571000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=e46b6fd1-4488-4a72-9423-9dd1c90c2622 CREATED -> EXPIRED [Wed Nov 4 05:59:57.572000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1406.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["e46b6fd1-4488-4a72-9423-9dd1c90c2622"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 05:59:57.572000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=e46b6fd1-4488-4a72-9423-9dd1c90c2622 expired (expires_at 2026-11-04 05:59:57Z, session_status=rejected) [Wed Nov 4 05:59:57.573000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1407.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:57Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 05:59:57.573000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 2 payment(s) were due [Wed Nov 4 05:59:57.575000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1281.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 05:59:57Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 05:59:57.575000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=721.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 05:59:57.614000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399406 scheduled in 2s (21 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:00:00.624000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="report_requests" db=0.7ms idle=1459.2ms SELECT r0.`id`, r0.`report_id`, r0.`report_type`, r0.`requester_ref`, r0.`filters`, r0.`status`, r0.`progress_percentage`, r0.`row_count`, r0.`file_path`, r0.`file_size`, r0.`download_token`, r0.`download_count`, r0.`last_downloaded_at`, r0.`error_message`, r0.`expires_at`, r0.`completed_at`, r0.`inserted_at`, r0.`updated_at` FROM `report_requests` AS r0 WHERE (NOT (r0.`expires_at` IS NULL) AND (r0.`expires_at` < ?)) [~U[2026-11-04 06:00:00Z]] ↳ DaProductApp.Workers.ReportRetentionWorker.perform/1, at: lib/da_product_app/workers/report_retention_worker.ex:18 [Wed Nov 4 06:00:00.846000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="report_requests" db=0.8ms idle=1680.2ms SELECT r0.`id`, r0.`report_id`, r0.`report_type`, r0.`requester_ref`, r0.`filters`, r0.`status`, r0.`progress_percentage`, r0.`row_count`, r0.`file_path`, r0.`file_size`, r0.`download_token`, r0.`download_count`, r0.`last_downloaded_at`, r0.`error_message`, r0.`expires_at`, r0.`completed_at`, r0.`inserted_at`, r0.`updated_at` FROM `report_requests` AS r0 WHERE (NOT (r0.`expires_at` IS NULL) AND (r0.`expires_at` < ?)) [~U[2026-11-04 06:00:00Z]] ↳ DaProductApp.Workers.ReportRetentionWorker.perform/1, at: lib/da_product_app/workers/report_retention_worker.ex:18 [Wed Nov 4 06:00:01.278000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="report_requests" db=2.6ms idle=783.0ms SELECT r0.`id`, r0.`report_id`, r0.`report_type`, r0.`requester_ref`, r0.`filters`, r0.`status`, r0.`progress_percentage`, r0.`row_count`, r0.`file_path`, r0.`file_size`, r0.`download_token`, r0.`download_count`, r0.`last_downloaded_at`, r0.`error_message`, r0.`expires_at`, r0.`completed_at`, r0.`inserted_at`, r0.`updated_at` FROM `report_requests` AS r0 WHERE (NOT (r0.`expires_at` IS NULL) AND (r0.`expires_at` < ?)) [~U[2026-11-04 06:00:01Z]] ↳ DaProductApp.Workers.ReportRetentionWorker.perform/1, at: lib/da_product_app/workers/report_retention_worker.ex:18 [Wed Nov 4 06:00:01.279000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="report_requests" db=3.2ms idle=719.1ms SELECT r0.`id`, r0.`report_id`, r0.`report_type`, r0.`requester_ref`, r0.`filters`, r0.`status`, r0.`progress_percentage`, r0.`row_count`, r0.`file_path`, r0.`file_size`, r0.`download_token`, r0.`download_count`, r0.`last_downloaded_at`, r0.`error_message`, r0.`expires_at`, r0.`completed_at`, r0.`inserted_at`, r0.`updated_at` FROM `report_requests` AS r0 WHERE (NOT (r0.`expires_at` IS NULL) AND (r0.`expires_at` < ?)) [~U[2026-11-04 06:00:01Z]] ↳ DaProductApp.Workers.ReportRetentionWorker.perform/1, at: lib/da_product_app/workers/report_retention_worker.ex:18 [Wed Nov 4 06:00:01.837000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.5ms idle=560.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:00:01Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:00:02.084000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=247.0ms idle=559.7ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:00:01], true, "a2f136d6-670e-4b92-b2b6-1334ac4823aa", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:00:02.085000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=a2f136d6-670e-4b92-b2b6-1334ac4823aa CREATED -> EXPIRED [Wed Nov 4 06:00:02.086000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=806.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["a2f136d6-670e-4b92-b2b6-1334ac4823aa"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:00:02.086000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=a2f136d6-670e-4b92-b2b6-1334ac4823aa [Wed Nov 4 06:00:02.086000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=a2f136d6-670e-4b92-b2b6-1334ac4823aa expired (expires_at 2026-11-04 05:59:59Z, session_status=created) [Wed Nov 4 06:00:02.089000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.9ms idle=681.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:00:02Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:00:02.214000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=124.8ms idle=682.4ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:00:02], true, "fb17ef9a-d374-4727-8895-a2aa5b85c0ee", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:00:02.215000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=fb17ef9a-d374-4727-8895-a2aa5b85c0ee CREATED -> EXPIRED [Wed Nov 4 06:00:02.216000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.6ms idle=760.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["fb17ef9a-d374-4727-8895-a2aa5b85c0ee"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:00:02.217000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=fb17ef9a-d374-4727-8895-a2aa5b85c0ee expired (expires_at 2026-11-04 06:00:02Z, session_status=rejected) [Wed Nov 4 06:00:02.218000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=636.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:00:02Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:00:02.218000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 2 payment(s) were due [Wed Nov 4 06:00:02.221000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=2.6ms idle=631.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:00:02Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:00:02.223000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.7ms idle=583.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:00:02.324000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399423 scheduled in 1s (19 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:00:04.713000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.3ms idle=547.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:00:04Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:00:04.817000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=103.3ms idle=549.4ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:00:04], true, "fc86b6e4-14de-49cc-87ef-4c033bf261b4", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:00:04.817000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=fc86b6e4-14de-49cc-87ef-4c033bf261b4 CREATED -> EXPIRED [Wed Nov 4 06:00:04.820000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=2.7ms idle=653.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["fc86b6e4-14de-49cc-87ef-4c033bf261b4"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:00:04.820000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=fc86b6e4-14de-49cc-87ef-4c033bf261b4 expired (expires_at 2026-11-04 06:00:03Z, session_status=rejected) [Wed Nov 4 06:00:04.824000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=3.4ms idle=656.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:00:04Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:00:04.824000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:00:04.826000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.4ms idle=660.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:00:04Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:00:04.827000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms queue=0.1ms idle=661.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:00:04.985000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399430 scheduled in 34s (18 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:00:40.109000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1944.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:00:40Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:00:40.150000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=40.0ms idle=1945.6ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:00:40], true, "4e9febf8-1b61-4a6e-aec3-7cc7e3c74678", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:00:40.150000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=4e9febf8-1b61-4a6e-aec3-7cc7e3c74678 CREATED -> EXPIRED [Wed Nov 4 06:00:40.151000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1986.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["4e9febf8-1b61-4a6e-aec3-7cc7e3c74678"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:00:40.152000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=4e9febf8-1b61-4a6e-aec3-7cc7e3c74678 expired (expires_at 2026-11-04 06:00:38Z, session_status=rejected) [Wed Nov 4 06:00:40.153000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1987.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:00:40Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:00:40.153000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:00:40.154000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1989.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:00:40Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:00:40.154000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1989.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:00:40.195000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399433 scheduled in 6s (17 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:00:47.169000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1003.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:00:47Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:00:47.217000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=48.0ms idle=1004.7ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:00:47], true, "a9358021-8348-42f6-8fea-ebaf67a387b9", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:00:47.217000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=a9358021-8348-42f6-8fea-ebaf67a387b9 CREATED -> EXPIRED [Wed Nov 4 06:00:47.218000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=119.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["a9358021-8348-42f6-8fea-ebaf67a387b9"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:00:47.219000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=a9358021-8348-42f6-8fea-ebaf67a387b9 [Wed Nov 4 06:00:47.219000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=a9358021-8348-42f6-8fea-ebaf67a387b9 expired (expires_at 2026-11-04 06:00:46Z, session_status=created) [Wed Nov 4 06:00:47.220000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=55.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:00:47Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:00:47.220000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:00:47.221000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=56.2ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:00:47Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:00:47.221000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=56.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:00:47.280000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399434 scheduled in 29s (16 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:00:57.530000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:58675] POST /tabby/demo/summary [Wed Nov 4 06:00:57.531000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:58675] Sent 200 in 544µs [Wed Nov 4 06:00:58.368000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:58675] POST /tabby/demo/eligibility [Wed Nov 4 06:00:58.659000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:56522] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:00:58.659000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:56522] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1515.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:00:58.660000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:56522] QUERY OK source="tabby_sim_faults" db=0.5ms idle=1494.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:00:58.699000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:56522] QUERY OK db=38.4ms idle=1495.2ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["6dcdec98-8b0b-4b7c-b05a-19232231468c", "CREATED", "AED", "4fcf658f-95b9-4d89-b0d3-b6d8df6c973a", "slice9", ~U[2026-11-04 06:12:58Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1515.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1515.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:10:58Z], ~N[2026-11-04 06:00:58], ~N[2026-11-04 06:00:58]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:00:58.699000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:56522] [TabbySim] checkout payment=6dcdec98-8b0b-4b7c-b05a-19232231468c session=4fcf658f-95b9-4d89-b0d3-b6d8df6c973a decision=created reason=nil amount=1515.00 AED [Wed Nov 4 06:00:58.700000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:56522] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1534.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:00:58.701000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:56522] Sent 200 in 42ms [Wed Nov 4 06:00:58.702000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:58675] [Tabby] checkout post /api/v2/checkout -> 200 (334 ms, attempt 1) [Wed Nov 4 06:00:58.702000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:58675] [Tabby] session created payment=6dcdec98-8b0b-4b7c-b05a-19232231468c [Wed Nov 4 06:00:58.703000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:58675] [Tabby] eligibility: show (amount=1515.00 AED) [Wed Nov 4 06:00:58.703000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:58675] Sent 200 in 335ms [Wed Nov 4 06:01:03.354000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:58675] POST /tabby/demo/summary [Wed Nov 4 06:01:03.355000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:58675] Sent 200 in 930µs [Wed Nov 4 06:01:04.351000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:58675] POST /tabby/demo/eligibility [Wed Nov 4 06:01:04.691000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:56522] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:01:04.692000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:56522] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1500.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:01:04.693000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:56522] QUERY OK source="tabby_sim_faults" db=0.7ms idle=528.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:01:04.721000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:56522] QUERY OK db=26.9ms idle=530.1ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["1b383ed4-b175-4e70-ac3d-87ceae0fa48e", "CREATED", "AED", "6483dc89-fa6a-4551-ba4a-53fa4aee4e01", "slice9", ~U[2026-11-04 06:13:04Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1500.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1500.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:11:04Z], ~N[2026-11-04 06:01:04], ~N[2026-11-04 06:01:04]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:01:04.722000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:56522] [TabbySim] checkout payment=1b383ed4-b175-4e70-ac3d-87ceae0fa48e session=6483dc89-fa6a-4551-ba4a-53fa4aee4e01 decision=created reason=nil amount=1500.00 AED [Wed Nov 4 06:01:04.723000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:56522] QUERY OK source="tabby_sim_payments" db=0.6ms idle=557.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:01:04.724000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:56522] Sent 200 in 33ms [Wed Nov 4 06:01:04.725000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:58675] [Tabby] checkout post /api/v2/checkout -> 200 (373 ms, attempt 1) [Wed Nov 4 06:01:04.725000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:58675] [Tabby] session created payment=1b383ed4-b175-4e70-ac3d-87ceae0fa48e [Wed Nov 4 06:01:04.725000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:58675] [Tabby] eligibility: show (amount=1500.00 AED) [Wed Nov 4 06:01:04.725000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:58675] Sent 200 in 374ms [Wed Nov 4 06:01:16.081000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:58675] POST /tabby/demo/summary [Wed Nov 4 06:01:16.081000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:58675] Sent 200 in 563µs [Wed Nov 4 06:01:16.902000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:58675] POST /tabby/demo/eligibility [Wed Nov 4 06:01:17.192000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:56522] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:01:17.192000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:56522] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:01:17.193000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:56522] QUERY OK source="tabby_sim_faults" db=0.3ms idle=1028.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:01:17.241000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:56522] QUERY OK db=46.1ms queue=0.3ms idle=1029.8ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["f63b3f69-ce4d-4b99-819a-24e49adfc628", "CREATED", "AED", "ff84e704-d681-4bf0-ab64-cee18095e1a0", "slice9", ~U[2026-11-04 06:13:17Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:11:17Z], ~N[2026-11-04 06:01:17], ~N[2026-11-04 06:01:17]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:01:17.241000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:56522] [TabbySim] checkout payment=f63b3f69-ce4d-4b99-819a-24e49adfc628 session=ff84e704-d681-4bf0-ab64-cee18095e1a0 decision=created reason=nil amount=850.00 AED [Wed Nov 4 06:01:17.242000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:56522] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1077.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:01:17.244000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:56522] Sent 200 in 52ms [Wed Nov 4 06:01:17.245000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:58675] [Tabby] checkout post /api/v2/checkout -> 200 (343 ms, attempt 1) [Wed Nov 4 06:01:17.245000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:58675] [Tabby] session created payment=f63b3f69-ce4d-4b99-819a-24e49adfc628 [Wed Nov 4 06:01:17.245000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:58675] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 06:01:17.245000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:58675] Sent 200 in 343ms [Wed Nov 4 06:01:18.347000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1103.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:01:18Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:01:18.392000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=43.9ms idle=1103.6ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:01:18], true, "09fdcf9c-54b0-4160-90c0-f5cc9923e3ca", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:01:18.392000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=09fdcf9c-54b0-4160-90c0-f5cc9923e3ca CREATED -> EXPIRED [Wed Nov 4 06:01:18.393000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1120.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["09fdcf9c-54b0-4160-90c0-f5cc9923e3ca"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:01:18.393000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=09fdcf9c-54b0-4160-90c0-f5cc9923e3ca [Wed Nov 4 06:01:18.394000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=09fdcf9c-54b0-4160-90c0-f5cc9923e3ca expired (expires_at 2026-11-04 06:01:16Z, session_status=created) [Wed Nov 4 06:01:18.395000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1102.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:01:18Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:01:18.395000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:01:18.396000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=231.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:01:18Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:01:18.396000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=231.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:01:18.450000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399435 scheduled in 2s (18 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:01:19.739000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:58675] POST /tabby/demo/summary [Wed Nov 4 06:01:19.739000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:58675] Sent 200 in 577µs [Wed Nov 4 06:01:21.390000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:58675] POST /tabby/demo/summary [Wed Nov 4 06:01:21.390000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:58675] Sent 200 in 573µs [Wed Nov 4 06:01:22.248000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:58675] POST /tabby/demo/eligibility [Wed Nov 4 06:01:22.449000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=404.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:01:22Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:01:22.486000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=35.8ms idle=322.0ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:01:22], true, "1f3442fb-84e7-49d4-8275-0ebb109f6318", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:01:22.486000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=1f3442fb-84e7-49d4-8275-0ebb109f6318 CREATED -> EXPIRED [Wed Nov 4 06:01:22.487000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=321.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["1f3442fb-84e7-49d4-8275-0ebb109f6318"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:01:22.487000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=1f3442fb-84e7-49d4-8275-0ebb109f6318 [Wed Nov 4 06:01:22.487000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=1f3442fb-84e7-49d4-8275-0ebb109f6318 expired (expires_at 2026-11-04 06:01:20Z, session_status=created) [Wed Nov 4 06:01:22.488000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.2ms idle=323.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:01:22Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:01:22.489000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:01:22.489000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=324.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:01:22Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:01:22.490000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=325.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:01:22.496000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:56522] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:01:22.496000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:56522] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:01:22.497000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:56522] QUERY OK source="tabby_sim_faults" db=0.6ms idle=122.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:01:22.530000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399436 scheduled in 60s (17 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:01:22.552000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:56522] QUERY OK db=53.8ms idle=49.5ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["26125741-ba28-4501-9042-dc93146fb30d", "CREATED", "AED", "849e3555-54b8-4e3e-a4c1-5c2df489e20c", "slice9", ~U[2026-11-04 06:13:22Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1050.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:11:22Z], ~N[2026-11-04 06:01:22], ~N[2026-11-04 06:01:22]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:01:22.552000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:56522] [TabbySim] checkout payment=26125741-ba28-4501-9042-dc93146fb30d session=849e3555-54b8-4e3e-a4c1-5c2df489e20c decision=created reason=nil amount=1050.00 AED [Wed Nov 4 06:01:22.553000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:56522] QUERY OK source="tabby_sim_payments" db=0.8ms idle=66.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:01:22.555000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:56522] Sent 200 in 59ms [Wed Nov 4 06:01:22.556000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:58675] [Tabby] checkout post /api/v2/checkout -> 200 (308 ms, attempt 1) [Wed Nov 4 06:01:22.556000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:58675] [Tabby] session created payment=26125741-ba28-4501-9042-dc93146fb30d [Wed Nov 4 06:01:22.556000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:58675] [Tabby] eligibility: show (amount=1050.00 AED) [Wed Nov 4 06:01:22.556000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:58675] Sent 200 in 308ms [Wed Nov 4 06:01:24.527000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.9ms idle=362.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["slice9", ~U[2026-10-17 06:01:24Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 06:01:24.528000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=363.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["slice9", ~N[2026-11-04 05:59:24], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 06:01:24.530000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=364.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", ~N[2026-11-04 05:59:24], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 06:01:24.530000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=365.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["slice9", ~U[2026-11-04 05:56:24Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 06:01:24.531000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=366.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 06:01:24.532000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=367.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:01:24.890000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:46880] GET /tabby-sim/api/v2/payments/ce2d7d0a-b029-49ce-a02c-ea60b6853bbd [Wed Nov 4 06:01:24.890000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:46880] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "ce2d7d0a-b029-49ce-a02c-ea60b6853bbd"} Pipelines: [:tabby_sim_api] [Wed Nov 4 06:01:24.891000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:46880] QUERY OK source="tabby_sim_faults" db=0.3ms idle=456.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "ce2d7d0a-b029-49ce-a02c-ea60b6853bbd"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 06:01:24.891000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:46880] QUERY OK source="tabby_sim_faults" db=0.3ms idle=365.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:01:24.892000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:46880] QUERY OK source="tabby_sim_payments" db=0.4ms idle=364.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["ce2d7d0a-b029-49ce-a02c-ea60b6853bbd"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Wed Nov 4 06:01:24.892000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:46880] Sent 200 in 2ms [Wed Nov 4 06:01:24.893000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client -] [Tabby] retrieve get /api/v2/payments/ce2d7d0a-b029-49ce-a02c-ea60b6853bbd -> 200 (361 ms, attempt 1) [Wed Nov 4 06:01:24.893000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1031735] [client -] [Tabby] verify: attempt=9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 payment=ce2d7d0a-b029-49ce-a02c-ea60b6853bbd is still CREATED at Tabby; it will be looked at again [Wed Nov 4 06:01:24.894000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=0.4ms idle=364.8ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-04 05:59:24Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Wed Nov 4 06:01:24.895000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=0.4ms idle=364.5ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["slice9", ~N[2026-11-04 05:59:24], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Wed Nov 4 06:01:24.896000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=364.4ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 06:01:24.896000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=364.5ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["slice9", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 06:01:24.897000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=0.2ms idle=364.3ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Wed Nov 4 06:01:24.898000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=0.5ms idle=287.2ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Wed Nov 4 06:01:24.898000 2026] [DaProductApp.Tabby.Poller:info] [pid 1031735] [client -] [Tabby] poll: handled 1 (created:pending=1); 1 attempt(s) still watched [Wed Nov 4 06:01:29.956000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:58675] POST /tabby/demo/place [Wed Nov 4 06:01:29.987000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:58675] QUERY OK db=29.1ms queue=0.4ms idle=1793.0ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`amount`,`needs_attention`,`order_reference`,`cancel_url`,`captured_amount`,`failure_url`,`refunded_amount`,`success_url`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["25107ffc-dee7-4416-87a4-b5368b1b66e4", "new", "AED", "slice9", Decimal.new("1050.00"), false, "DEMO-654BBAFD", "http://78.47.213.209:4030/tabby/demo/result/cancel?lang=en&order=DEMO-654BBAFD", Decimal.new("0"), "http://78.47.213.209:4030/tabby/demo/result/failure?lang=en&order=DEMO-654BBAFD", Decimal.new("0"), "http://78.47.213.209:4030/tabby/demo/result/success?lang=en&order=DEMO-654BBAFD", ~N[2026-11-04 06:01:29], ~N[2026-11-04 06:01:29]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Wed Nov 4 06:01:30.262000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:46880] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:01:30.263000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:46880] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "en", "merchant_code" => "slice9", "merchant_urls" => %{"cancel" => "http://78.47.213.209:4030/tabby/return/25107ffc-dee7-4416-87a4-b5368b1b66e4/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/25107ffc-dee7-4416-87a4-b5368b1b66e4/failure", "success" => "http://78.47.213.209:4030/tabby/return/25107ffc-dee7-4416-87a4-b5368b1b66e4/success"}, "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 2, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-654BBAFD"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:01:30.264000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:46880] QUERY OK source="tabby_sim_faults" db=0.4ms idle=880.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:01:30.288000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:46880] QUERY OK db=23.6ms idle=816.9ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`buyer_history`,`captures`,`is_test`,`lang`,`merchant_urls`,`refunds`,`session_expires_at`,`shipping_address`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["6d61ebf8-317a-4aa0-afe9-d33c790efc2d", "CREATED", "AED", "5d8ac11b-79e0-42a8-919d-a2915aa3da01", "slice9", ~U[2026-11-04 06:13:30Z], %{"lang" => "en", "merchant_code" => "slice9", "merchant_urls" => %{"cancel" => "http://78.47.213.209:4030/tabby/return/25107ffc-dee7-4416-87a4-b5368b1b66e4/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/25107ffc-dee7-4416-87a4-b5368b1b66e4/failure", "success" => "http://78.47.213.209:4030/tabby/return/25107ffc-dee7-4416-87a4-b5368b1b66e4/success"}, "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 2, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-654BBAFD"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "0", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo headphones", "unit_price" => "650"}, %{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 2, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo smartwatch", "unit_price" => "200"}], "reference_id" => "DEMO-654BBAFD", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1050.00"), %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, %{"registered_since" => "2023-02-01T10:00:00Z"}, [], true, "en", %{"cancel" => "http://78.47.213.209:4030/tabby/return/25107ffc-dee7-4416-87a4-b5368b1b66e4/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/25107ffc-dee7-4416-87a4-b5368b1b66e4/failure", "success" => "http://78.47.213.209:4030/tabby/return/25107ffc-dee7-4416-87a4-b5368b1b66e4/success"}, [], ~U[2026-11-04 06:11:30Z], %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}, ~N[2026-11-04 06:01:30], ~N[2026-11-04 06:01:30]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:01:30.289000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:46880] [TabbySim] checkout payment=6d61ebf8-317a-4aa0-afe9-d33c790efc2d session=5d8ac11b-79e0-42a8-919d-a2915aa3da01 decision=created reason=nil amount=1050.00 AED [Wed Nov 4 06:01:30.290000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:46880] QUERY OK source="tabby_sim_payments" db=0.7ms idle=528.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:01:30.292000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:46880] Sent 200 in 29ms [Wed Nov 4 06:01:30.293000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:58675] [Tabby] checkout post /api/v2/checkout -> 200 (306 ms, attempt 1) [Wed Nov 4 06:01:30.293000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:58675] [Tabby] session created payment=6d61ebf8-317a-4aa0-afe9-d33c790efc2d [Wed Nov 4 06:01:30.294000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:58675] QUERY OK source="tabby_payments" db=0.4ms idle=306.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["25107ffc-dee7-4416-87a4-b5368b1b66e4"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Wed Nov 4 06:01:30.338000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:58675] QUERY OK source="tabby_payments" db=43.5ms idle=224.9ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-04 06:21:30Z], "6d61ebf8-317a-4aa0-afe9-d33c790efc2d", "5d8ac11b-79e0-42a8-919d-a2915aa3da01", ~N[2026-11-04 06:01:30], "25107ffc-dee7-4416-87a4-b5368b1b66e4"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Wed Nov 4 06:01:30.338000 2026] [DaProductApp.Tabby.Sessions:info] [pid 1031735] [client 115.99.167.137:58675] [Tabby] session created attempt=25107ffc-dee7-4416-87a4-b5368b1b66e4 payment=6d61ebf8-317a-4aa0-afe9-d33c790efc2d [Wed Nov 4 06:01:30.339000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:58675] Sent 200 in 383ms [Wed Nov 4 06:01:30.821000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:58675] GET /tabby-sim/hpp/5d8ac11b-79e0-42a8-919d-a2915aa3da01 [Wed Nov 4 06:01:30.822000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 115.99.167.137:58675] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "5d8ac11b-79e0-42a8-919d-a2915aa3da01"} Pipelines: [:tabby_sim_hpp] [Wed Nov 4 06:01:30.823000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:58675] QUERY OK source="tabby_sim_payments" db=0.7ms idle=558.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["5d8ac11b-79e0-42a8-919d-a2915aa3da01"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Wed Nov 4 06:01:30.823000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:58675] Sent 200 in 1ms [Wed Nov 4 06:01:37.494000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:58675] POST /tabby-sim/hpp/5d8ac11b-79e0-42a8-919d-a2915aa3da01 [Wed Nov 4 06:01:37.495000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 115.99.167.137:58675] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "cancel", "otp" => "", "session_id" => "5d8ac11b-79e0-42a8-919d-a2915aa3da01"} Pipelines: [:tabby_sim_hpp] [Wed Nov 4 06:01:37.496000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:58675] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1331.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["5d8ac11b-79e0-42a8-919d-a2915aa3da01"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Wed Nov 4 06:01:37.543000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:58675] QUERY OK source="tabby_sim_payments" db=46.4ms queue=0.1ms idle=1332.1ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:01:37], true, "6d61ebf8-317a-4aa0-afe9-d33c790efc2d", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:01:37.543000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client 115.99.167.137:58675] [TabbySim] payment=6d61ebf8-317a-4aa0-afe9-d33c790efc2d CREATED -> EXPIRED [Wed Nov 4 06:01:37.544000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:58675] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1379.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["6d61ebf8-317a-4aa0-afe9-d33c790efc2d"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:01:37.544000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client 115.99.167.137:58675] [TabbySim] webhook not sent: event=expire payment=6d61ebf8-317a-4aa0-afe9-d33c790efc2d [Wed Nov 4 06:01:37.545000 2026] [DaProductApp.TabbySim.Hpp:info] [pid 1031735] [client 115.99.167.137:58675] [TabbySim] hpp payment=6d61ebf8-317a-4aa0-afe9-d33c790efc2d action=cancel status=EXPIRED [Wed Nov 4 06:01:37.545000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:58675] Sent 302 in 50ms [Wed Nov 4 06:01:37.981000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:58675] GET /tabby/return/25107ffc-dee7-4416-87a4-b5368b1b66e4/cancel [Wed Nov 4 06:01:37.982000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:58675] QUERY OK source="tabby_payments" db=0.6ms queue=0.1ms idle=1817.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["25107ffc-dee7-4416-87a4-b5368b1b66e4"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:01:38.009000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:58675] Sent 302 in 27ms [Wed Nov 4 06:01:38.099000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=629.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["25107ffc-dee7-4416-87a4-b5368b1b66e4"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:01:38.378000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:46880] GET /tabby-sim/api/v2/payments/6d61ebf8-317a-4aa0-afe9-d33c790efc2d [Wed Nov 4 06:01:38.378000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:46880] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "6d61ebf8-317a-4aa0-afe9-d33c790efc2d"} Pipelines: [:tabby_sim_api] [Wed Nov 4 06:01:38.379000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:46880] QUERY OK source="tabby_sim_faults" db=0.4ms idle=524.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "6d61ebf8-317a-4aa0-afe9-d33c790efc2d"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 06:01:38.380000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:46880] QUERY OK source="tabby_sim_faults" db=0.4ms queue=0.5ms idle=396.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:01:38.381000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:46880] QUERY OK source="tabby_sim_payments" db=0.9ms idle=395.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["6d61ebf8-317a-4aa0-afe9-d33c790efc2d"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Wed Nov 4 06:01:38.381000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:46880] Sent 200 in 3ms [Wed Nov 4 06:01:38.382000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client -] [Tabby] retrieve get /api/v2/payments/6d61ebf8-317a-4aa0-afe9-d33c790efc2d -> 200 (283 ms, attempt 1) [Wed Nov 4 06:01:38.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=38.3ms idle=374.0ms UPDATE `tabby_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["expired", ~N[2026-11-04 06:01:38], "25107ffc-dee7-4416-87a4-b5368b1b66e4", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Wed Nov 4 06:01:38.423000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=323.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["25107ffc-dee7-4416-87a4-b5368b1b66e4"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:01:38.423000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1031735] [client -] [Tabby] verify: attempt=25107ffc-dee7-4416-87a4-b5368b1b66e4 payment=6d61ebf8-317a-4aa0-afe9-d33c790efc2d created -> expired [Wed Nov 4 06:01:38.551000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:58675] GET /tabby/demo/result/cancel [Wed Nov 4 06:01:38.551000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:58675] Sent 200 in 447µs [Wed Nov 4 06:02:23.826000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1660.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:02:23Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:02:23.826000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:02:23.827000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1661.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:02:23Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:02:23.828000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1662.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:02:23.875000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399443 scheduled in 3s (18 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:02:29.005000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1840.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:02:29Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:02:29.044000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=38.9ms idle=1841.3ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:02:29], true, "83556bb8-7673-4490-9428-2324908d2531", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:02:29.045000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=83556bb8-7673-4490-9428-2324908d2531 CREATED -> EXPIRED [Wed Nov 4 06:02:29.046000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.1ms idle=1880.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["83556bb8-7673-4490-9428-2324908d2531"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:02:29.046000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=83556bb8-7673-4490-9428-2324908d2531 [Wed Nov 4 06:02:29.046000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=83556bb8-7673-4490-9428-2324908d2531 expired (expires_at 2026-11-04 06:02:26Z, session_status=created) [Wed Nov 4 06:02:29.047000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1882.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:02:29Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:02:29.047000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:02:29.048000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1883.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:02:29Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:02:29.049000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.1ms idle=1884.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:02:29.079000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399445 scheduled in 27s (17 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:02:53.316000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="global_table" db=0.6ms idle=1132.4ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 06:02:57.587000 2026] [Bandit.Logger:error] [pid 1031735] [client -] ** (Bandit.TransportError) Unrecoverable error: timeout [Wed Nov 4 06:02:58.192000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1003.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:02:58Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:02:58.276000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=82.8ms idle=115.6ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:02:58], true, "a5b3ec09-3664-4c58-a85c-9dc656e56f26", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:02:58.277000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=a5b3ec09-3664-4c58-a85c-9dc656e56f26 CREATED -> EXPIRED [Wed Nov 4 06:02:58.277000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.1ms idle=110.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["a5b3ec09-3664-4c58-a85c-9dc656e56f26"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:02:58.278000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=a5b3ec09-3664-4c58-a85c-9dc656e56f26 [Wed Nov 4 06:02:58.278000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=a5b3ec09-3664-4c58-a85c-9dc656e56f26 expired (expires_at 2026-11-04 06:02:56Z, session_status=created) [Wed Nov 4 06:02:58.279000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=112.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:02:58Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:02:58.279000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:02:58.280000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=112.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:02:58Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:02:58.280000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=113.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:02:58.356000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399446 scheduled in 4s (16 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:03:04.330000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.4ms idle=161.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:03:04Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:03:04.367000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=36.8ms idle=163.1ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:03:04], true, "bf804dc1-f6ba-4e13-8534-13b6e4644aea", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:03:04.367000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=bf804dc1-f6ba-4e13-8534-13b6e4644aea CREATED -> EXPIRED [Wed Nov 4 06:03:04.368000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=200.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["bf804dc1-f6ba-4e13-8534-13b6e4644aea"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:03:04.368000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=bf804dc1-f6ba-4e13-8534-13b6e4644aea [Wed Nov 4 06:03:04.369000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=bf804dc1-f6ba-4e13-8534-13b6e4644aea expired (expires_at 2026-11-04 06:03:02Z, session_status=created) [Wed Nov 4 06:03:04.369000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=201.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:03:04Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:03:04.370000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:03:04.370000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=202.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:03:04Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:03:04.372000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.3ms idle=203.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:03:04.412000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399447 scheduled in 41s (15 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:03:19.067000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61546] GET /tabby/demo [Wed Nov 4 06:03:19.069000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61546] Sent 200 in 2ms [Wed Nov 4 06:03:19.688000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61546] POST /tabby/demo/summary [Wed Nov 4 06:03:19.688000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61546] Sent 200 in 616µs [Wed Nov 4 06:03:20.507000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61546] POST /tabby/demo/eligibility [Wed Nov 4 06:03:20.749000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44444] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:03:20.749000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:44444] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:03:20.750000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44444] QUERY OK source="tabby_sim_faults" db=0.6ms idle=581.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:03:20.775000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44444] QUERY OK db=24.5ms queue=0.2ms idle=582.6ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["29bd0c7c-2af0-44cf-9f3f-b58189109234", "CREATED", "AED", "36946572-ce2e-484e-ba02-1cb9fd1087cd", "slice9", ~U[2026-11-04 06:15:20Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1050.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:13:20Z], ~N[2026-11-04 06:03:20], ~N[2026-11-04 06:03:20]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:03:20.776000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:44444] [TabbySim] checkout payment=29bd0c7c-2af0-44cf-9f3f-b58189109234 session=36946572-ce2e-484e-ba02-1cb9fd1087cd decision=created reason=nil amount=1050.00 AED [Wed Nov 4 06:03:20.776000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44444] QUERY OK source="tabby_sim_payments" db=0.5ms idle=608.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:03:20.778000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44444] Sent 200 in 29ms [Wed Nov 4 06:03:20.779000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:61546] [Tabby] checkout post /api/v2/checkout -> 200 (272 ms, attempt 1) [Wed Nov 4 06:03:20.779000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:61546] [Tabby] session created payment=29bd0c7c-2af0-44cf-9f3f-b58189109234 [Wed Nov 4 06:03:20.779000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:61546] [Tabby] eligibility: show (amount=1050.00 AED) [Wed Nov 4 06:03:20.779000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61546] Sent 200 in 272ms [Wed Nov 4 06:03:26.453000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=285.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["slice9", ~U[2026-10-17 06:03:26Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 06:03:26.454000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=286.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["slice9", ~N[2026-11-04 06:01:26], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 06:03:26.455000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=287.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", ~N[2026-11-04 06:01:26], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 06:03:26.456000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=288.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["slice9", ~U[2026-11-04 05:58:26Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 06:03:26.457000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=288.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 06:03:26.457000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=289.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:03:26.736000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44460] GET /tabby-sim/api/v2/payments/ce2d7d0a-b029-49ce-a02c-ea60b6853bbd [Wed Nov 4 06:03:26.736000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:44460] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "ce2d7d0a-b029-49ce-a02c-ea60b6853bbd"} Pipelines: [:tabby_sim_api] [Wed Nov 4 06:03:26.737000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44460] QUERY OK source="tabby_sim_faults" db=0.4ms idle=353.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "ce2d7d0a-b029-49ce-a02c-ea60b6853bbd"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 06:03:26.738000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44460] QUERY OK source="tabby_sim_faults" db=0.3ms queue=0.1ms idle=284.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:03:26.738000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44460] QUERY OK source="tabby_sim_payments" db=0.5ms idle=284.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["ce2d7d0a-b029-49ce-a02c-ea60b6853bbd"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Wed Nov 4 06:03:26.739000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44460] Sent 200 in 3ms [Wed Nov 4 06:03:26.740000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client -] [Tabby] retrieve get /api/v2/payments/ce2d7d0a-b029-49ce-a02c-ea60b6853bbd -> 200 (282 ms, attempt 1) [Wed Nov 4 06:03:26.740000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1031735] [client -] [Tabby] verify: attempt=9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 payment=ce2d7d0a-b029-49ce-a02c-ea60b6853bbd is still CREATED at Tabby; it will be looked at again [Wed Nov 4 06:03:26.741000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=0.6ms idle=285.9ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-04 06:01:26Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Wed Nov 4 06:03:26.742000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=0.9ms idle=286.2ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["slice9", ~N[2026-11-04 06:01:26], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Wed Nov 4 06:03:26.743000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.3ms idle=286.6ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 06:03:26.743000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=286.4ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["slice9", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 06:03:26.744000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=0.4ms idle=286.4ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Wed Nov 4 06:03:26.745000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=0.4ms idle=236.7ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Wed Nov 4 06:03:26.745000 2026] [DaProductApp.Tabby.Poller:info] [pid 1031735] [client -] [Tabby] poll: handled 1 (created:pending=1); 1 attempt(s) still watched [Wed Nov 4 06:03:29.584000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61546] GET /tabby/demo [Wed Nov 4 06:03:29.585000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61546] Sent 200 in 1ms [Wed Nov 4 06:03:29.995000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61546] POST /tabby/demo/summary [Wed Nov 4 06:03:29.995000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61546] Sent 200 in 584µs [Wed Nov 4 06:03:30.840000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61546] POST /tabby/demo/eligibility [Wed Nov 4 06:03:31.100000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44444] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:03:31.100000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:44444] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:03:31.101000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44444] QUERY OK source="tabby_sim_faults" db=0.3ms idle=1219.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:03:31.143000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44444] QUERY OK db=41.9ms idle=934.1ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["e45b2600-5bc8-4513-b5e2-28617f267bae", "CREATED", "AED", "2f7aa068-bcc0-4935-8e20-871815de41ac", "slice9", ~U[2026-11-04 06:15:31Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1050.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:13:31Z], ~N[2026-11-04 06:03:31], ~N[2026-11-04 06:03:31]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:03:31.144000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:44444] [TabbySim] checkout payment=e45b2600-5bc8-4513-b5e2-28617f267bae session=2f7aa068-bcc0-4935-8e20-871815de41ac decision=created reason=nil amount=1050.00 AED [Wed Nov 4 06:03:31.144000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:44444] QUERY OK source="tabby_sim_payments" db=0.5ms idle=976.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:03:31.146000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:44444] Sent 200 in 46ms [Wed Nov 4 06:03:31.147000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:61546] [Tabby] checkout post /api/v2/checkout -> 200 (307 ms, attempt 1) [Wed Nov 4 06:03:31.147000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:61546] [Tabby] session created payment=e45b2600-5bc8-4513-b5e2-28617f267bae [Wed Nov 4 06:03:31.147000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:61546] [Tabby] eligibility: show (amount=1050.00 AED) [Wed Nov 4 06:03:31.147000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61546] Sent 200 in 307ms [Wed Nov 4 06:03:46.632000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=464.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:03:46Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:03:46.678000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=44.5ms queue=0.1ms idle=465.5ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:03:46], true, "eede02e1-0144-4efa-b901-b02cf1657e7f", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:03:46.678000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=eede02e1-0144-4efa-b901-b02cf1657e7f CREATED -> EXPIRED [Wed Nov 4 06:03:46.679000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=510.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["eede02e1-0144-4efa-b901-b02cf1657e7f"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:03:46.679000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=eede02e1-0144-4efa-b901-b02cf1657e7f [Wed Nov 4 06:03:46.679000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=eede02e1-0144-4efa-b901-b02cf1657e7f expired (expires_at 2026-11-04 06:03:45Z, session_status=created) [Wed Nov 4 06:03:46.680000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=511.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:03:46Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:03:46.680000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:03:46.681000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=512.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:03:46Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:03:46.681000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=513.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:03:46.797000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399449 scheduled in 5s (16 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:03:53.681000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1512.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:03:53Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:03:53.769000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=88.2ms idle=1513.8ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:03:53], true, "077e5354-9e99-4e61-8772-b960bcc61a19", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:03:53.770000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=077e5354-9e99-4e61-8772-b960bcc61a19 CREATED -> EXPIRED [Wed Nov 4 06:03:53.770000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1602.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["077e5354-9e99-4e61-8772-b960bcc61a19"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:03:53.771000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=077e5354-9e99-4e61-8772-b960bcc61a19 [Wed Nov 4 06:03:53.771000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=077e5354-9e99-4e61-8772-b960bcc61a19 expired (expires_at 2026-11-04 06:03:51Z, session_status=created) [Wed Nov 4 06:03:53.773000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1604.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:03:53Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:03:53.773000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:03:53.774000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1606.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:03:53Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:03:53.775000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1607.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:03:53.826000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399450 scheduled in 60s (15 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:04:37.560000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] GET /tabby/demo/result/success [Wed Nov 4 06:04:37.560000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] Sent 200 in 486µs [Wed Nov 4 06:04:37.970000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:04:37.971000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60444] QUERY OK source="tabby_payments" db=0.4ms idle=802.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:04:37.971000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] Sent 200 in 1ms [Wed Nov 4 06:04:40.425000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:04:40.426000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60444] QUERY OK source="tabby_payments" db=0.5ms idle=1257.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:04:40.426000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] Sent 200 in 1ms [Wed Nov 4 06:04:44.140000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:04:44.142000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60444] QUERY OK source="tabby_payments" db=0.6ms queue=0.4ms idle=1373.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:04:44.142000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] Sent 200 in 1ms [Wed Nov 4 06:04:46.992000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:04:46.993000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60444] QUERY OK source="tabby_payments" db=0.4ms idle=1824.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:04:46.993000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] Sent 200 in 1ms [Wed Nov 4 06:04:49.989000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:04:49.990000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60444] QUERY OK source="tabby_payments" db=0.5ms queue=0.1ms idle=1194.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:04:49.990000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] Sent 200 in 1ms [Wed Nov 4 06:04:52.404000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:04:52.405000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60444] QUERY OK source="tabby_payments" db=0.5ms idle=1236.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:04:52.405000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] Sent 200 in 1ms [Wed Nov 4 06:04:54.845000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:04:54.846000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60444] QUERY OK source="tabby_payments" db=0.4ms idle=1678.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:04:54.846000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] Sent 200 in 1ms [Wed Nov 4 06:04:54.954000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1083.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:04:54Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:04:54.954000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:04:54.955000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=787.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:04:54Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:04:54.956000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=788.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:04:55.023000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399453 scheduled in 42s (15 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:04:57.927000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:04:57.928000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60444] QUERY OK source="tabby_payments" db=0.3ms idle=1760.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:04:57.929000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] Sent 200 in 1ms [Wed Nov 4 06:05:00.998000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:05:00.999000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60444] QUERY OK source="tabby_payments" db=0.6ms queue=0.1ms idle=1109.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:05:00.999000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] Sent 200 in 1ms [Wed Nov 4 06:05:04.111000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:05:04.112000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60444] QUERY OK source="tabby_payments" db=0.5ms idle=1942.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:05:04.112000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] Sent 200 in 1ms [Wed Nov 4 06:05:07.045000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:05:07.046000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60444] QUERY OK source="tabby_payments" db=0.8ms queue=0.1ms idle=1129.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:05:07.047000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] Sent 200 in 1ms [Wed Nov 4 06:05:09.944000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:05:09.945000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60444] QUERY OK source="tabby_payments" db=0.3ms queue=0.1ms idle=1777.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:05:09.946000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] Sent 200 in 1ms [Wed Nov 4 06:05:12.948000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:05:12.949000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60444] QUERY OK source="tabby_payments" db=0.5ms idle=1010.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:05:12.949000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] Sent 200 in 1ms [Wed Nov 4 06:05:15.391000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:05:15.392000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60444] QUERY OK source="tabby_payments" db=0.5ms idle=1224.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:05:15.392000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] Sent 200 in 1ms [Wed Nov 4 06:05:17.990000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:05:17.991000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60444] QUERY OK source="tabby_payments" db=0.5ms queue=0.1ms idle=1823.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:05:17.991000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] Sent 200 in 1ms [Wed Nov 4 06:05:20.910000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:05:20.911000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60444] QUERY OK source="tabby_payments" db=0.4ms queue=0.1ms idle=1743.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:05:20.911000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] Sent 200 in 1ms [Wed Nov 4 06:05:24.025000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:05:24.026000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60444] QUERY OK source="tabby_payments" db=0.4ms queue=0.1ms idle=1858.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:05:24.026000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] Sent 200 in 1ms [Wed Nov 4 06:05:26.987000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:05:26.988000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60444] QUERY OK source="tabby_payments" db=0.5ms idle=1820.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:05:26.988000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] Sent 200 in 1ms [Wed Nov 4 06:05:28.261000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=1093.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["slice9", ~U[2026-10-17 06:05:28Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 06:05:28.263000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.8ms queue=0.1ms idle=1094.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["slice9", ~N[2026-11-04 06:03:28], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 06:05:28.264000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.8ms queue=0.1ms idle=1096.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", ~N[2026-11-04 06:03:28], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 06:05:28.265000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=1097.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["slice9", ~U[2026-11-04 06:00:28Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 06:05:28.266000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=846.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 06:05:28.268000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=1.2ms idle=126.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:05:28.609000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:57630] GET /tabby-sim/api/v2/payments/ce2d7d0a-b029-49ce-a02c-ea60b6853bbd [Wed Nov 4 06:05:28.609000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:57630] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "ce2d7d0a-b029-49ce-a02c-ea60b6853bbd"} Pipelines: [:tabby_sim_api] [Wed Nov 4 06:05:28.611000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:57630] QUERY OK source="tabby_sim_faults" db=1.3ms idle=442.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "ce2d7d0a-b029-49ce-a02c-ea60b6853bbd"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 06:05:28.612000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:57630] QUERY OK source="tabby_sim_faults" db=0.3ms idle=350.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:05:28.613000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:57630] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.2ms idle=350.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["ce2d7d0a-b029-49ce-a02c-ea60b6853bbd"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Wed Nov 4 06:05:28.613000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:57630] Sent 200 in 4ms [Wed Nov 4 06:05:28.614000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client -] [Tabby] retrieve get /api/v2/payments/ce2d7d0a-b029-49ce-a02c-ea60b6853bbd -> 200 (346 ms, attempt 1) [Wed Nov 4 06:05:28.614000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1031735] [client -] [Tabby] verify: attempt=9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 payment=ce2d7d0a-b029-49ce-a02c-ea60b6853bbd is still CREATED at Tabby; it will be looked at again [Wed Nov 4 06:05:28.616000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=1.6ms queue=0.1ms idle=351.6ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-04 06:03:28Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Wed Nov 4 06:05:28.617000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=0.6ms idle=352.4ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["slice9", ~N[2026-11-04 06:03:28], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Wed Nov 4 06:05:28.618000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=352.5ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 06:05:28.619000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=352.3ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["slice9", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 06:05:28.620000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=0.7ms queue=0.1ms idle=351.5ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Wed Nov 4 06:05:28.621000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=0.5ms idle=260.8ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Wed Nov 4 06:05:28.621000 2026] [DaProductApp.Tabby.Poller:info] [pid 1031735] [client -] [Tabby] poll: handled 1 (created:pending=1); 1 attempt(s) still watched [Wed Nov 4 06:05:29.966000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:05:29.967000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60444] QUERY OK source="tabby_payments" db=0.3ms idle=1347.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:05:29.967000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] Sent 200 in 1ms [Wed Nov 4 06:05:32.951000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:05:32.952000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60444] QUERY OK source="tabby_payments" db=0.6ms idle=1783.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:05:32.952000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] Sent 200 in 1ms [Wed Nov 4 06:05:35.951000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:05:35.952000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60444] QUERY OK source="tabby_payments" db=0.4ms idle=1784.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:05:35.952000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] Sent 200 in 1ms [Wed Nov 4 06:05:38.337000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1169.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:05:38Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:05:38.373000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=36.0ms idle=1170.4ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:05:38], true, "da596804-2830-4050-b3f3-f24beaf93f70", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:05:38.374000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=da596804-2830-4050-b3f3-f24beaf93f70 CREATED -> EXPIRED [Wed Nov 4 06:05:38.375000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1122.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["da596804-2830-4050-b3f3-f24beaf93f70"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:05:38.375000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=da596804-2830-4050-b3f3-f24beaf93f70 [Wed Nov 4 06:05:38.375000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=da596804-2830-4050-b3f3-f24beaf93f70 expired (expires_at 2026-11-04 06:05:36Z, session_status=created) [Wed Nov 4 06:05:38.376000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=208.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:05:38Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:05:38.377000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:05:38.378000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=209.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:05:38Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:05:38.378000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=210.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:05:38.419000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399457 scheduled in 5s (14 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:05:38.945000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:05:38.946000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60444] QUERY OK source="tabby_payments" db=0.5ms idle=570.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:05:38.946000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] Sent 200 in 1ms [Wed Nov 4 06:05:41.973000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:05:41.974000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60444] QUERY OK source="tabby_payments" db=0.5ms idle=1806.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:05:41.975000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] Sent 200 in 1ms [Wed Nov 4 06:05:44.930000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:05:44.931000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60444] QUERY OK source="tabby_payments" db=0.4ms idle=1663.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:05:44.931000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] Sent 200 in 1ms [Wed Nov 4 06:05:45.544000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=1375.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:05:45Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:05:45.589000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=43.1ms queue=0.1ms idle=1378.3ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:05:45], true, "3301d30b-f818-43ec-aa5d-314e941888a2", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:05:45.589000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=3301d30b-f818-43ec-aa5d-314e941888a2 CREATED -> EXPIRED [Wed Nov 4 06:05:45.590000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1422.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["3301d30b-f818-43ec-aa5d-314e941888a2"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:05:45.590000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=3301d30b-f818-43ec-aa5d-314e941888a2 [Wed Nov 4 06:05:45.590000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=3301d30b-f818-43ec-aa5d-314e941888a2 expired (expires_at 2026-11-04 06:05:43Z, session_status=created) [Wed Nov 4 06:05:45.591000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1423.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:05:45Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:05:45.591000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:05:45.592000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1223.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:05:45Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:05:45.593000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.1ms idle=866.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:05:45.660000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399458 scheduled in 1s (13 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:05:48.022000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:05:48.023000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60444] QUERY OK source="tabby_payments" db=0.6ms idle=854.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:05:48.023000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] Sent 200 in 1ms [Wed Nov 4 06:05:48.616000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1447.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:05:48Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:05:48.671000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=55.1ms idle=1448.9ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:05:48], true, "a678e882-728e-4d95-bb0c-5510a4729cfc", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:05:48.672000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=a678e882-728e-4d95-bb0c-5510a4729cfc CREATED -> EXPIRED [Wed Nov 4 06:05:48.672000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1504.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["a678e882-728e-4d95-bb0c-5510a4729cfc"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:05:48.673000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=a678e882-728e-4d95-bb0c-5510a4729cfc [Wed Nov 4 06:05:48.673000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=a678e882-728e-4d95-bb0c-5510a4729cfc expired (expires_at 2026-11-04 06:05:46Z, session_status=created) [Wed Nov 4 06:05:48.674000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1505.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:05:48Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:05:48.674000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:05:48.675000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1130.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:05:48Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:05:48.676000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=874.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:05:48.710000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399459 scheduled in 50s (12 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:05:50.935000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:05:50.936000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60444] QUERY OK source="tabby_payments" db=0.8ms idle=767.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:05:50.936000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] Sent 200 in 1ms [Wed Nov 4 06:05:53.927000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:05:53.928000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60444] QUERY OK source="tabby_payments" db=0.7ms idle=1760.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:05:53.929000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] Sent 200 in 1ms [Wed Nov 4 06:05:56.968000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:05:56.969000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60444] QUERY OK source="tabby_payments" db=0.9ms idle=1401.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:05:56.970000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] Sent 200 in 2ms [Wed Nov 4 06:05:59.984000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:05:59.985000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60444] QUERY OK source="tabby_payments" db=0.6ms idle=1817.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:05:59.985000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] Sent 200 in 1ms [Wed Nov 4 06:06:03.036000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:06:03.038000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60444] QUERY OK source="tabby_payments" db=0.9ms idle=1869.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:06:03.038000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60444] Sent 200 in 2ms [Wed Nov 4 06:06:40.021000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1852.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:06:40Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:06:40.044000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=22.8ms queue=0.1ms idle=1853.1ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:06:40], true, "34e58889-e335-44b0-ba2d-22d673fed394", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:06:40.044000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=34e58889-e335-44b0-ba2d-22d673fed394 CREATED -> EXPIRED [Wed Nov 4 06:06:40.046000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1876.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["34e58889-e335-44b0-ba2d-22d673fed394"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:06:40.046000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=34e58889-e335-44b0-ba2d-22d673fed394 [Wed Nov 4 06:06:40.046000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=34e58889-e335-44b0-ba2d-22d673fed394 expired (expires_at 2026-11-04 06:06:38Z, session_status=created) [Wed Nov 4 06:06:40.047000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1878.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:06:40Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:06:40.047000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:06:40.048000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1879.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:06:40Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:06:40.049000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1184.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:06:40.100000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399462 scheduled in 2s (11 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:06:42.652000 2026] [DaProductApp.MQTT.Handler:info] [pid 1031735] [client -] Received ACK for merchant pFppbioOCKlo5c8E, device 28260702280001 with payload: {"request_id" : "MREF20261104060557204","money": "150.0", "status": "SUCCESS" } [Wed Nov 4 06:06:42.652000 2026] [DaProductApp.MQTT.Handler:info] [pid 1031735] [client -] Received OTA update for device 28260702280001 with request_id MREF20261104060557204: %{"money" => "150.0", "request_id" => "MREF20261104060557204", "status" => "SUCCESS"} [Wed Nov 4 06:06:42.652000 2026] [DaProductApp.MQTT.Handler:info] [pid 1031735] [client -] Status for request_id MREF20261104060557204 is success [Wed Nov 4 06:06:42.662000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="cloud_transaction" db=0.5ms queue=0.4ms idle=1493.9ms SELECT c0.`id`, c0.`uhid`, c0.`email`, c0.`mobile_no`, c0.`processing_id`, c0.`uname`, c0.`user_id`, c0.`pay_mode`, c0.`location_id`, c0.`transaction_location`, c0.`credentials_user`, c0.`credentials_key`, c0.`version`, c0.`return_url`, c0.`response_url`, c0.`status`, c0.`transaction_id`, c0.`transaction_amount`, c0.`transaction_ref_number`, c0.`m_ref_num`, c0.`name`, c0.`provider_id`, c0.`device_id`, c0.`merchant_id`, c0.`payment_reference_id`, c0.`additional_data`, c0.`payload`, c0.`settlement_date_time`, c0.`refund_reference_id`, c0.`provider_name`, c0.`acknoledgment`, c0.`inserted_at`, c0.`updated_at` FROM `cloud_transaction` AS c0 WHERE ((c0.`transaction_ref_number` = ?) AND (c0.`device_id` = ?)) ["MREF20261104060557204", "28260702280001"] ↳ DaProductApp.MQTT.Handler.handle_message/3, at: lib/da_product_app/mqtt/handler.ex:52 [Wed Nov 4 06:06:42.663000 2026] [DaProductApp.MQTT.Handler:warn] [pid 1031735] [client -] No transaction found with transaction_ref_number=MREF20261104060557204 [Wed Nov 4 06:06:44.159000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=990.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:06:44Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:06:44.203000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=42.9ms queue=0.1ms idle=992.2ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:06:44], true, "89c47495-2de6-4b41-90ad-3867636e9fda", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:06:44.203000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=89c47495-2de6-4b41-90ad-3867636e9fda CREATED -> EXPIRED [Wed Nov 4 06:06:44.204000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1035.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["89c47495-2de6-4b41-90ad-3867636e9fda"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:06:44.204000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=89c47495-2de6-4b41-90ad-3867636e9fda [Wed Nov 4 06:06:44.204000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=89c47495-2de6-4b41-90ad-3867636e9fda expired (expires_at 2026-11-04 06:06:42Z, session_status=created) [Wed Nov 4 06:06:44.242000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=38.0ms idle=1036.9ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:06:44], true, "acdb1c74-e828-4a77-bf3b-662eb553a2c4", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:06:44.242000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=acdb1c74-e828-4a77-bf3b-662eb553a2c4 CREATED -> EXPIRED [Wed Nov 4 06:06:44.243000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1075.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["acdb1c74-e828-4a77-bf3b-662eb553a2c4"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:06:44.243000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=acdb1c74-e828-4a77-bf3b-662eb553a2c4 [Wed Nov 4 06:06:44.244000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=acdb1c74-e828-4a77-bf3b-662eb553a2c4 expired (expires_at 2026-11-04 06:06:44Z, session_status=created) [Wed Nov 4 06:06:44.244000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1076.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:06:44Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:06:44.245000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 2 payment(s) were due [Wed Nov 4 06:06:44.245000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1077.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:06:44Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:06:44.246000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=903.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:06:44.287000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399463 scheduled in 4s (9 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:06:50.236000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=76.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:06:50Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:06:50.260000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=23.1ms idle=69.4ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:06:50], true, "2bb3a0ca-636b-4b91-9649-2b9dc1978c50", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:06:50.260000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=2bb3a0ca-636b-4b91-9649-2b9dc1978c50 CREATED -> EXPIRED [Wed Nov 4 06:06:50.261000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=93.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["2bb3a0ca-636b-4b91-9649-2b9dc1978c50"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:06:50.261000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=2bb3a0ca-636b-4b91-9649-2b9dc1978c50 [Wed Nov 4 06:06:50.261000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=2bb3a0ca-636b-4b91-9649-2b9dc1978c50 expired (expires_at 2026-11-04 06:06:48Z, session_status=created) [Wed Nov 4 06:06:50.262000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=94.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:06:50Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:06:50.262000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:06:50.263000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.1ms idle=95.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:06:50Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:06:50.264000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=96.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:06:50.323000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399464 scheduled in 12s (8 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:07:04.356000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=187.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:07:04Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:07:04.418000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=61.2ms idle=188.3ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:07:04], true, "ce2d7d0a-b029-49ce-a02c-ea60b6853bbd", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:07:04.418000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=ce2d7d0a-b029-49ce-a02c-ea60b6853bbd CREATED -> EXPIRED [Wed Nov 4 06:07:04.420000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms queue=0.1ms idle=250.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["ce2d7d0a-b029-49ce-a02c-ea60b6853bbd"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:07:04.420000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=ce2d7d0a-b029-49ce-a02c-ea60b6853bbd [Wed Nov 4 06:07:04.420000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=ce2d7d0a-b029-49ce-a02c-ea60b6853bbd expired (expires_at 2026-11-04 06:07:02Z, session_status=created) [Wed Nov 4 06:07:04.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=252.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:07:04Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:07:04.421000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:07:04.423000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=253.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:07:04Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:07:04.423000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=254.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:07:04.472000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399467 scheduled in 3s (7 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:07:09.451000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1282.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:07:09Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:07:09.542000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=90.1ms idle=1283.4ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:07:09], true, "28485844-329b-49f1-83dc-17eb60f0d22a", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:07:09.542000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=28485844-329b-49f1-83dc-17eb60f0d22a CREATED -> EXPIRED [Wed Nov 4 06:07:09.543000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1374.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["28485844-329b-49f1-83dc-17eb60f0d22a"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:07:09.543000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=28485844-329b-49f1-83dc-17eb60f0d22a [Wed Nov 4 06:07:09.543000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=28485844-329b-49f1-83dc-17eb60f0d22a expired (expires_at 2026-11-04 06:07:07Z, session_status=created) [Wed Nov 4 06:07:09.544000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1375.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:07:09Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:07:09.544000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:07:09.545000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1376.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:07:09Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:07:09.546000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1377.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:07:09.583000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399468 scheduled in 60s (6 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:07:30.626000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=1456.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["slice9", ~U[2026-10-17 06:07:30Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 06:07:30.627000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=1457.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["slice9", ~N[2026-11-04 06:05:30], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 06:07:30.627000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=1458.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", ~N[2026-11-04 06:05:30], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 06:07:30.628000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.5ms queue=0.1ms idle=1459.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["slice9", ~U[2026-11-04 06:02:30Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 06:07:30.629000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=1460.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 06:07:30.630000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=1461.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:07:30.883000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:54032] GET /tabby-sim/api/v2/payments/ce2d7d0a-b029-49ce-a02c-ea60b6853bbd [Wed Nov 4 06:07:30.883000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:54032] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "ce2d7d0a-b029-49ce-a02c-ea60b6853bbd"} Pipelines: [:tabby_sim_api] [Wed Nov 4 06:07:30.884000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:54032] QUERY OK source="tabby_sim_faults" db=0.4ms idle=328.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "ce2d7d0a-b029-49ce-a02c-ea60b6853bbd"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 06:07:30.884000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:54032] QUERY OK source="tabby_sim_faults" db=0.3ms idle=259.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:07:30.885000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:54032] QUERY OK source="tabby_sim_payments" db=0.5ms idle=259.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["ce2d7d0a-b029-49ce-a02c-ea60b6853bbd"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Wed Nov 4 06:07:30.886000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:54032] Sent 200 in 3ms [Wed Nov 4 06:07:30.886000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client -] [Tabby] retrieve get /api/v2/payments/ce2d7d0a-b029-49ce-a02c-ea60b6853bbd -> 200 (256 ms, attempt 1) [Wed Nov 4 06:07:30.940000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=53.5ms idle=259.9ms UPDATE `tabby_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["expired", ~N[2026-11-04 06:07:30], "9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Wed Nov 4 06:07:30.941000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=313.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:07:30.941000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1031735] [client -] [Tabby] verify: attempt=9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 payment=ce2d7d0a-b029-49ce-a02c-ea60b6853bbd created -> expired [Wed Nov 4 06:07:30.942000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=0.3ms idle=313.1ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-04 06:05:30Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Wed Nov 4 06:07:30.943000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=0.8ms idle=313.0ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["slice9", ~N[2026-11-04 06:05:30], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Wed Nov 4 06:07:30.944000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.3ms idle=313.3ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 06:07:30.944000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_payments" db=0.3ms idle=259.7ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["slice9", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 06:07:30.945000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_webhook_events" db=0.3ms idle=176.4ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Wed Nov 4 06:07:30.946000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_refunds" db=0.3ms idle=61.5ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Wed Nov 4 06:07:30.946000 2026] [DaProductApp.Tabby.Poller:info] [pid 1031735] [client -] [Tabby] poll: handled 1 (created:recorded_expired=1); 0 attempt(s) still watched [Wed Nov 4 06:08:10.826000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1073.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:08:10Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:08:10.826000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:08:10.827000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=658.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:08:10Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:08:10.828000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=659.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:08:10.876000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399472 scheduled in 60s (6 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:09:00.671000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60530] GET /tabby/demo [Wed Nov 4 06:09:00.673000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60530] Sent 200 in 2ms [Wed Nov 4 06:09:01.157000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60530] POST /tabby/demo/summary [Wed Nov 4 06:09:01.157000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60530] Sent 200 in 653µs [Wed Nov 4 06:09:02.039000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60530] POST /tabby/demo/eligibility [Wed Nov 4 06:09:02.393000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:53744] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:09:02.393000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:53744] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:09:02.410000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:53744] QUERY OK source="tabby_sim_faults" db=16.1ms idle=521.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:09:02.455000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:53744] QUERY OK db=40.7ms idle=308.3ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["eab5005e-ffc1-4193-ae64-d28b9ff057aa", "CREATED", "AED", "10f36546-8029-4fa7-86a9-f37d99a676a9", "slice9", ~U[2026-11-04 06:21:02Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1050.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:19:02Z], ~N[2026-11-04 06:09:02], ~N[2026-11-04 06:09:02]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:09:02.455000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:53744] [TabbySim] checkout payment=eab5005e-ffc1-4193-ae64-d28b9ff057aa session=10f36546-8029-4fa7-86a9-f37d99a676a9 decision=created reason=nil amount=1050.00 AED [Wed Nov 4 06:09:02.460000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:53744] QUERY OK source="tabby_sim_payments" db=4.2ms queue=0.4ms idle=287.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:09:02.465000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:53744] Sent 200 in 72ms [Wed Nov 4 06:09:02.467000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60530] [Tabby] checkout post /api/v2/checkout -> 200 (427 ms, attempt 1) [Wed Nov 4 06:09:02.467000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60530] [Tabby] session created payment=eab5005e-ffc1-4193-ae64-d28b9ff057aa [Wed Nov 4 06:09:02.467000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:60530] [Tabby] eligibility: show (amount=1050.00 AED) [Wed Nov 4 06:09:02.467000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60530] Sent 200 in 428ms [Wed Nov 4 06:09:11.206000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1037.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:09:11Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:09:11.207000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:09:11.208000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1039.2ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:09:11Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:09:11.209000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1040.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:09:11.254000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399473 scheduled in 60s (7 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:09:21.091000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60530] GET /tabby/demo [Wed Nov 4 06:09:21.093000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60530] Sent 200 in 2ms [Wed Nov 4 06:09:21.580000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60530] POST /tabby/demo/summary [Wed Nov 4 06:09:21.580000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60530] Sent 200 in 668µs [Wed Nov 4 06:09:22.419000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60530] POST /tabby/demo/eligibility [Wed Nov 4 06:09:22.684000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:53744] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:09:22.684000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:53744] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:09:22.685000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:53744] QUERY OK source="tabby_sim_faults" db=0.4ms idle=1516.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:09:22.719000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:53744] QUERY OK db=33.7ms idle=1306.6ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["3f792f4d-a370-4cc8-a13b-75c77403f9af", "CREATED", "AED", "d6a4bd96-b9d7-4b96-a4f8-dc8975fc9e5d", "slice9", ~U[2026-11-04 06:21:22Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1050.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:19:22Z], ~N[2026-11-04 06:09:22], ~N[2026-11-04 06:09:22]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:09:22.719000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:53744] [TabbySim] checkout payment=3f792f4d-a370-4cc8-a13b-75c77403f9af session=d6a4bd96-b9d7-4b96-a4f8-dc8975fc9e5d decision=created reason=nil amount=1050.00 AED [Wed Nov 4 06:09:22.720000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:53744] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1255.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:09:22.722000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:53744] Sent 200 in 38ms [Wed Nov 4 06:09:22.723000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60530] [Tabby] checkout post /api/v2/checkout -> 200 (304 ms, attempt 1) [Wed Nov 4 06:09:22.723000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60530] [Tabby] session created payment=3f792f4d-a370-4cc8-a13b-75c77403f9af [Wed Nov 4 06:09:22.723000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:60530] [Tabby] eligibility: show (amount=1050.00 AED) [Wed Nov 4 06:09:22.723000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60530] Sent 200 in 304ms [Wed Nov 4 06:09:35.351000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60530] POST /tabby/demo/summary [Wed Nov 4 06:09:35.352000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60530] Sent 200 in 984µs [Wed Nov 4 06:09:36.159000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60530] POST /tabby/demo/eligibility [Wed Nov 4 06:09:36.402000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:53744] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:09:36.402000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:53744] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1370.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:09:36.404000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:53744] QUERY OK source="tabby_sim_faults" db=1.1ms idle=356.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:09:36.429000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:53744] QUERY OK db=24.1ms idle=236.4ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["8f818624-ef6f-46e6-aece-099f83a2961b", "CREATED", "AED", "2f8a325f-962a-4394-a92b-7979b0ad67d6", "slice9", ~U[2026-11-04 06:21:36Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1370.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1370.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:19:36Z], ~N[2026-11-04 06:09:36], ~N[2026-11-04 06:09:36]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:09:36.429000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:53744] [TabbySim] checkout payment=8f818624-ef6f-46e6-aece-099f83a2961b session=2f8a325f-962a-4394-a92b-7979b0ad67d6 decision=created reason=nil amount=1370.00 AED [Wed Nov 4 06:09:36.430000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:53744] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.1ms idle=261.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:09:36.432000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:53744] Sent 200 in 30ms [Wed Nov 4 06:09:36.433000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60530] [Tabby] checkout post /api/v2/checkout -> 200 (274 ms, attempt 1) [Wed Nov 4 06:09:36.433000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60530] [Tabby] session created payment=8f818624-ef6f-46e6-aece-099f83a2961b [Wed Nov 4 06:09:36.434000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:60530] [Tabby] eligibility: show (amount=1370.00 AED) [Wed Nov 4 06:09:36.434000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60530] Sent 200 in 275ms [Wed Nov 4 06:09:39.304000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60530] GET /tabby/demo [Wed Nov 4 06:09:39.307000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60530] Sent 200 in 3ms [Wed Nov 4 06:09:39.769000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60530] POST /tabby/demo/summary [Wed Nov 4 06:09:39.769000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60530] Sent 200 in 608µs [Wed Nov 4 06:09:40.589000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60530] POST /tabby/demo/eligibility [Wed Nov 4 06:09:40.850000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:53744] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:09:40.850000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:53744] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1370.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:09:40.851000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:53744] QUERY OK source="tabby_sim_faults" db=0.3ms idle=682.2ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:09:40.892000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:53744] QUERY OK db=40.7ms idle=683.4ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["20ff81c5-2408-4ce0-8ad3-f00511cc1c17", "CREATED", "AED", "6b0b1739-0513-49ed-9ecc-14ec56387ca0", "slice9", ~U[2026-11-04 06:21:40Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1370.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1370.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:19:40Z], ~N[2026-11-04 06:09:40], ~N[2026-11-04 06:09:40]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:09:40.893000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:53744] [TabbySim] checkout payment=20ff81c5-2408-4ce0-8ad3-f00511cc1c17 session=6b0b1739-0513-49ed-9ecc-14ec56387ca0 decision=created reason=nil amount=1370.00 AED [Wed Nov 4 06:09:40.893000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:53744] QUERY OK source="tabby_sim_payments" db=0.5ms idle=724.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:09:40.895000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:53744] Sent 200 in 45ms [Wed Nov 4 06:09:40.896000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60530] [Tabby] checkout post /api/v2/checkout -> 200 (307 ms, attempt 1) [Wed Nov 4 06:09:40.896000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60530] [Tabby] session created payment=20ff81c5-2408-4ce0-8ad3-f00511cc1c17 [Wed Nov 4 06:09:40.896000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:60530] [Tabby] eligibility: show (amount=1370.00 AED) [Wed Nov 4 06:09:40.896000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60530] Sent 200 in 307ms [Wed Nov 4 06:09:55.519000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60530] GET /tabby/demo [Wed Nov 4 06:09:55.524000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60530] Sent 200 in 4ms [Wed Nov 4 06:09:56.053000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60530] POST /tabby/demo/summary [Wed Nov 4 06:09:56.053000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60530] Sent 200 in 492µs [Wed Nov 4 06:09:56.977000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60530] POST /tabby/demo/eligibility [Wed Nov 4 06:09:57.272000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:53744] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:09:57.272000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:53744] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1370.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:09:57.273000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:53744] QUERY OK source="tabby_sim_faults" db=0.6ms idle=1103.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:09:57.307000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:53744] QUERY OK db=32.8ms idle=1104.8ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["c1834f12-a5aa-4ed7-aedc-e4be1f19eaf2", "CREATED", "AED", "d7df86e4-e762-4d34-a51f-7488842e38e0", "slice9", ~U[2026-11-04 06:21:57Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1370.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1370.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:19:57Z], ~N[2026-11-04 06:09:57], ~N[2026-11-04 06:09:57]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:09:57.307000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:53744] [TabbySim] checkout payment=c1834f12-a5aa-4ed7-aedc-e4be1f19eaf2 session=d7df86e4-e762-4d34-a51f-7488842e38e0 decision=created reason=nil amount=1370.00 AED [Wed Nov 4 06:09:57.309000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:53744] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.1ms idle=1138.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:09:57.312000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:53744] Sent 200 in 39ms [Wed Nov 4 06:09:57.313000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60530] [Tabby] checkout post /api/v2/checkout -> 200 (335 ms, attempt 1) [Wed Nov 4 06:09:57.313000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:60530] [Tabby] session created payment=c1834f12-a5aa-4ed7-aedc-e4be1f19eaf2 [Wed Nov 4 06:09:57.313000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:60530] [Tabby] eligibility: show (amount=1370.00 AED) [Wed Nov 4 06:09:57.314000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60530] Sent 200 in 337ms [Wed Nov 4 06:10:12.501000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1331.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:10:12Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:10:12.502000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:10:12.502000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1123.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:10:12Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:10:12.503000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=333.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:10:12.591000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399480 scheduled in 60s (11 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:11:04.756000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1031735] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:11:04.756000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1031735] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:11:04.756000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1031735] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:11:04.757000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1031735] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:11:04.757000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1031735] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:11:04.768000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1031735] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:11:04.769000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1031735] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:11:04.769000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1031735] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:11:04.769000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1031735] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:11:04.775000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1031735] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:11:04.775000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1031735] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:11:04.775000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1031735] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:11:04.776000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1031735] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:11:04.776000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1031735] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:11:04.776000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1031735] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:11:07.886000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:52742] GET /tabby/demo/result/success [Wed Nov 4 06:11:07.887000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:52742] Sent 200 in 1ms [Wed Nov 4 06:11:08.130000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:55120] GET /tabby/demo [Wed Nov 4 06:11:08.137000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:55120] Sent 200 in 6ms [Wed Nov 4 06:11:08.494000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:52742] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:11:08.498000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:52742] QUERY OK source="tabby_payments" db=3.4ms queue=0.2ms idle=571.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:11:08.499000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:52742] Sent 200 in 5ms [Wed Nov 4 06:11:08.641000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:55120] GET /tabby/demo [Wed Nov 4 06:11:08.653000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:55120] Sent 200 in 11ms [Wed Nov 4 06:11:08.886000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62954] POST /tabby/demo/summary [Wed Nov 4 06:11:08.889000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62954] Sent 200 in 3ms [Wed Nov 4 06:11:09.156000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:55120] GET /tabby/demo [Wed Nov 4 06:11:09.161000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:55120] Sent 200 in 5ms [Wed Nov 4 06:11:09.243000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:52742] POST /tabby/demo/summary [Wed Nov 4 06:11:09.245000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:52742] Sent 200 in 2ms [Wed Nov 4 06:11:09.646000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:55120] GET /tabby/demo [Wed Nov 4 06:11:09.653000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:55120] Sent 200 in 6ms [Wed Nov 4 06:11:09.693000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62954] POST /tabby/demo/summary [Wed Nov 4 06:11:09.694000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:62954] Sent 200 in 1ms [Wed Nov 4 06:11:10.012000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61498] POST /tabby/demo/eligibility [Wed Nov 4 06:11:10.164000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:55120] POST /tabby/demo/summary [Wed Nov 4 06:11:10.166000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:55120] Sent 200 in 1ms [Wed Nov 4 06:11:10.321000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:57410] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:11:10.321000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:57410] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1370.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:11:10.324000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:57410] QUERY OK source="tabby_sim_faults" db=2.5ms idle=835.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:11:10.367000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:57410] QUERY OK db=41.7ms queue=0.2ms idle=808.1ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["6346c594-a466-4114-8d64-be2eb5303a6e", "CREATED", "AED", "f39476ef-f069-42cf-88c0-88f7d788bb11", "slice9", ~U[2026-11-04 06:23:10Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1370.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1370.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:21:10Z], ~N[2026-11-04 06:11:10], ~N[2026-11-04 06:11:10]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:11:10.367000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:57410] [TabbySim] checkout payment=6346c594-a466-4114-8d64-be2eb5303a6e session=f39476ef-f069-42cf-88c0-88f7d788bb11 decision=created reason=nil amount=1370.00 AED [Wed Nov 4 06:11:10.371000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:57410] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.1ms idle=798.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:11:10.377000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:57410] Sent 200 in 55ms [Wed Nov 4 06:11:10.377000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:61498] [Tabby] checkout post /api/v2/checkout -> 200 (364 ms, attempt 1) [Wed Nov 4 06:11:10.379000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:61498] [Tabby] session created payment=6346c594-a466-4114-8d64-be2eb5303a6e [Wed Nov 4 06:11:10.380000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:61498] [Tabby] eligibility: show (amount=1370.00 AED) [Wed Nov 4 06:11:10.381000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61498] Sent 200 in 368ms [Wed Nov 4 06:11:10.956000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:55120] POST /tabby/demo/eligibility [Wed Nov 4 06:11:11.041000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61498] POST /tabby/demo/eligibility [Wed Nov 4 06:11:11.246000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:57410] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:11:11.247000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:57410] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1370.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:11:11.248000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:57410] QUERY OK source="tabby_sim_faults" db=0.8ms decode=0.4ms idle=870.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:11:11.285000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:57410] QUERY OK db=34.3ms queue=0.2ms idle=491.4ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["005a73f0-0770-484a-8095-73900238ae28", "CREATED", "AED", "095cc9a4-5eb8-407c-8db8-113dd39abfb8", "slice9", ~U[2026-11-04 06:23:11Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1370.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1370.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:21:11Z], ~N[2026-11-04 06:11:11], ~N[2026-11-04 06:11:11]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:11:11.285000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:57410] [TabbySim] checkout payment=005a73f0-0770-484a-8095-73900238ae28 session=095cc9a4-5eb8-407c-8db8-113dd39abfb8 decision=created reason=nil amount=1370.00 AED [Wed Nov 4 06:11:11.286000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:57410] QUERY OK source="tabby_sim_payments" db=0.8ms queue=0.1ms idle=451.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:11:11.289000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:57410] Sent 200 in 43ms [Wed Nov 4 06:11:11.290000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:55120] [Tabby] checkout post /api/v2/checkout -> 200 (333 ms, attempt 1) [Wed Nov 4 06:11:11.290000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:55120] [Tabby] session created payment=005a73f0-0770-484a-8095-73900238ae28 [Wed Nov 4 06:11:11.290000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:55120] [Tabby] eligibility: show (amount=1370.00 AED) [Wed Nov 4 06:11:11.291000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:55120] Sent 200 in 334ms [Wed Nov 4 06:11:11.382000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:57426] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:11:11.383000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:57426] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1370.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:11:11.384000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:57426] QUERY OK source="tabby_sim_faults" db=0.4ms queue=0.1ms idle=463.6ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:11:11.410000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:57426] QUERY OK db=25.1ms idle=444.7ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["8a1f25b1-0b20-4e7c-8932-efbe1a5a3615", "CREATED", "AED", "31822b44-380a-441b-875d-0f85a33d3c91", "slice9", ~U[2026-11-04 06:23:11Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1370.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1370.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:21:11Z], ~N[2026-11-04 06:11:11], ~N[2026-11-04 06:11:11]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:11:11.410000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:57426] [TabbySim] checkout payment=8a1f25b1-0b20-4e7c-8932-efbe1a5a3615 session=31822b44-380a-441b-875d-0f85a33d3c91 decision=created reason=nil amount=1370.00 AED [Wed Nov 4 06:11:11.412000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:57426] QUERY OK source="tabby_sim_payments" db=1.0ms queue=0.5ms idle=385.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:11:11.416000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:57426] Sent 200 in 33ms [Wed Nov 4 06:11:11.418000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:61498] [Tabby] checkout post /api/v2/checkout -> 200 (375 ms, attempt 1) [Wed Nov 4 06:11:11.418000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:61498] [Tabby] session created payment=8a1f25b1-0b20-4e7c-8932-efbe1a5a3615 [Wed Nov 4 06:11:11.418000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:61498] [Tabby] eligibility: show (amount=1370.00 AED) [Wed Nov 4 06:11:11.419000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61498] Sent 200 in 377ms [Wed Nov 4 06:11:11.967000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61498] POST /tabby/demo/eligibility [Wed Nov 4 06:11:12.284000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:57410] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:11:12.284000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:57410] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1370.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:11:12.285000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:57410] QUERY OK source="tabby_sim_faults" db=0.7ms queue=0.1ms idle=995.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:11:12.343000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:57410] QUERY OK db=56.9ms idle=902.6ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["767e5917-4d5f-4cac-9676-0833d831ac89", "CREATED", "AED", "4abe97b1-8209-4709-a260-20715794485a", "slice9", ~U[2026-11-04 06:23:12Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1370.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1370.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:21:12Z], ~N[2026-11-04 06:11:12], ~N[2026-11-04 06:11:12]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:11:12.344000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:57410] [TabbySim] checkout payment=767e5917-4d5f-4cac-9676-0833d831ac89 session=4abe97b1-8209-4709-a260-20715794485a decision=created reason=nil amount=1370.00 AED [Wed Nov 4 06:11:12.346000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:57410] QUERY OK source="tabby_sim_payments" db=1.9ms queue=0.1ms idle=934.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:11:12.348000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:57410] Sent 200 in 64ms [Wed Nov 4 06:11:12.349000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:61498] [Tabby] checkout post /api/v2/checkout -> 200 (382 ms, attempt 1) [Wed Nov 4 06:11:12.349000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:61498] [Tabby] session created payment=767e5917-4d5f-4cac-9676-0833d831ac89 [Wed Nov 4 06:11:12.350000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:61498] [Tabby] eligibility: show (amount=1370.00 AED) [Wed Nov 4 06:11:12.350000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:61498] Sent 200 in 383ms [Wed Nov 4 06:11:13.025000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1205.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:11:13Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:11:13.025000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:11:13.026000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1080.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:11:13Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:11:13.027000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=962.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:11:13.088000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399481 scheduled in 60s (15 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:12:14.345000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1111.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:12:14Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:12:14.345000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:12:14.346000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=167.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:12:14Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:12:14.347000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=168.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:12:14.393000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399486 scheduled in 44s (15 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:12:53.317000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="global_table" db=0.7ms idle=1111.7ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 06:12:59.757000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.3ms idle=1575.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:12:59Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:12:59.829000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=72.4ms idle=1576.9ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:12:59], true, "6dcdec98-8b0b-4b7c-b05a-19232231468c", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:12:59.830000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=6dcdec98-8b0b-4b7c-b05a-19232231468c CREATED -> EXPIRED [Wed Nov 4 06:12:59.831000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1650.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["6dcdec98-8b0b-4b7c-b05a-19232231468c"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:12:59.832000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=6dcdec98-8b0b-4b7c-b05a-19232231468c [Wed Nov 4 06:12:59.833000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=6dcdec98-8b0b-4b7c-b05a-19232231468c expired (expires_at 2026-11-04 06:12:58Z, session_status=created) [Wed Nov 4 06:12:59.837000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=3.3ms idle=1653.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:12:59Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:12:59.837000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:12:59.841000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=3.2ms idle=1379.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:12:59Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:12:59.842000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1332.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:12:59.920000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399488 scheduled in 5s (14 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:13:05.650000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=469.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:13:05Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:13:05.850000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=198.7ms idle=470.9ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:13:05], true, "1b383ed4-b175-4e70-ac3d-87ceae0fa48e", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:13:05.850000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=1b383ed4-b175-4e70-ac3d-87ceae0fa48e CREATED -> EXPIRED [Wed Nov 4 06:13:05.852000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=671.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["1b383ed4-b175-4e70-ac3d-87ceae0fa48e"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:13:05.852000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=1b383ed4-b175-4e70-ac3d-87ceae0fa48e [Wed Nov 4 06:13:05.853000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=1b383ed4-b175-4e70-ac3d-87ceae0fa48e expired (expires_at 2026-11-04 06:13:04Z, session_status=created) [Wed Nov 4 06:13:05.855000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=673.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:13:05Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:13:05.855000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:13:05.856000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=675.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:13:05Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:13:05.858000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms queue=0.1ms idle=676.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:13:05.892000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399489 scheduled in 12s (13 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:13:08.585000 2026] [Bandit.Logger:error] [pid 1031735] [client -] ** (Bandit.TransportError) Unrecoverable error: timeout [Wed Nov 4 06:13:18.704000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1523.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:13:18Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:13:18.751000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=45.7ms queue=0.1ms idle=1524.7ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:13:18], true, "f63b3f69-ce4d-4b99-819a-24e49adfc628", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:13:18.751000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=f63b3f69-ce4d-4b99-819a-24e49adfc628 CREATED -> EXPIRED [Wed Nov 4 06:13:18.752000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1571.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["f63b3f69-ce4d-4b99-819a-24e49adfc628"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:13:18.752000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=f63b3f69-ce4d-4b99-819a-24e49adfc628 [Wed Nov 4 06:13:18.753000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=f63b3f69-ce4d-4b99-819a-24e49adfc628 expired (expires_at 2026-11-04 06:13:17Z, session_status=created) [Wed Nov 4 06:13:18.753000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1572.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:13:18Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:13:18.754000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:13:18.755000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.1ms idle=1573.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:13:18Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:13:18.756000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1574.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:13:18.824000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399490 scheduled in 4s (12 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:13:23.707000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1525.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:13:23Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:13:23.775000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=67.3ms queue=0.1ms idle=1527.0ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:13:23], true, "26125741-ba28-4501-9042-dc93146fb30d", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:13:23.775000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=26125741-ba28-4501-9042-dc93146fb30d CREATED -> EXPIRED [Wed Nov 4 06:13:23.776000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1595.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["26125741-ba28-4501-9042-dc93146fb30d"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:13:23.776000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=26125741-ba28-4501-9042-dc93146fb30d [Wed Nov 4 06:13:23.776000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=26125741-ba28-4501-9042-dc93146fb30d expired (expires_at 2026-11-04 06:13:22Z, session_status=created) [Wed Nov 4 06:13:23.777000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1596.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:13:23Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:13:23.777000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:13:23.778000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1597.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:13:23Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:13:23.779000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1597.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:13:23.806000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399491 scheduled in 60s (11 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:14:12.363000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1031735] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:14:12.363000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1031735] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:14:12.364000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1031735] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:14:12.364000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1031735] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:14:12.364000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1031735] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:14:12.364000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1031735] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:14:12.364000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1031735] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:14:12.364000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1031735] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:14:12.364000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1031735] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:14:12.365000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1031735] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:14:12.364000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1031735] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:14:12.367000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1031735] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:14:12.367000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1031735] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:14:12.369000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1031735] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:14:12.369000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1031735] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:14:14.756000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:49672] GET /tabby/demo [Wed Nov 4 06:14:14.770000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:49672] Sent 200 in 14ms [Wed Nov 4 06:14:14.822000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60645] GET /tabby/demo/result/success [Wed Nov 4 06:14:14.823000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60645] Sent 200 in 1ms [Wed Nov 4 06:14:15.415000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:49672] GET /tabby/demo [Wed Nov 4 06:14:15.424000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:49672] Sent 200 in 8ms [Wed Nov 4 06:14:15.555000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60645] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:14:15.557000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60645] QUERY OK source="tabby_payments" db=1.2ms idle=1374.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:14:15.558000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60645] Sent 200 in 5ms [Wed Nov 4 06:14:16.014000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54314] POST /tabby/demo/summary [Wed Nov 4 06:14:16.015000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:54314] Sent 200 in 1ms [Wed Nov 4 06:14:16.056000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60522] POST /tabby/demo/summary [Wed Nov 4 06:14:16.057000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60522] Sent 200 in 906µs [Wed Nov 4 06:14:16.104000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:49672] GET /tabby/demo [Wed Nov 4 06:14:16.110000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:49672] Sent 200 in 6ms [Wed Nov 4 06:14:16.671000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:49672] GET /tabby/demo [Wed Nov 4 06:14:16.676000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:49672] Sent 200 in 4ms [Wed Nov 4 06:14:16.740000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60522] POST /tabby/demo/summary [Wed Nov 4 06:14:16.742000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60522] Sent 200 in 1ms [Wed Nov 4 06:14:17.067000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:58043] POST /tabby/demo/eligibility [Wed Nov 4 06:14:17.160000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:51304] POST /tabby/demo/eligibility [Wed Nov 4 06:14:17.284000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:49672] POST /tabby/demo/summary [Wed Nov 4 06:14:17.285000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:49672] Sent 200 in 610µs [Wed Nov 4 06:14:17.457000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:38922] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:14:17.457000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:38922] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1370.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:14:17.458000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38922] QUERY OK source="tabby_sim_faults" db=0.5ms idle=640.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:14:17.493000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38922] QUERY OK db=34.4ms idle=565.2ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["7abe2064-c41a-4496-861d-a3464630f00f", "CREATED", "AED", "d9e25f37-993b-4cca-9751-da65b3aa964a", "slice9", ~U[2026-11-04 06:26:17Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1370.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1370.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:24:17Z], ~N[2026-11-04 06:14:17], ~N[2026-11-04 06:14:17]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:14:17.494000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:38922] [TabbySim] checkout payment=7abe2064-c41a-4496-861d-a3464630f00f session=d9e25f37-993b-4cca-9751-da65b3aa964a decision=created reason=nil amount=1370.00 AED [Wed Nov 4 06:14:17.497000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38922] QUERY OK source="tabby_sim_payments" db=1.6ms idle=591.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:14:17.501000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:38922] Sent 200 in 43ms [Wed Nov 4 06:14:17.502000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:58043] [Tabby] checkout post /api/v2/checkout -> 200 (434 ms, attempt 1) [Wed Nov 4 06:14:17.505000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:58043] [Tabby] session created payment=7abe2064-c41a-4496-861d-a3464630f00f [Wed Nov 4 06:14:17.505000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:58043] [Tabby] eligibility: show (amount=1370.00 AED) [Wed Nov 4 06:14:17.505000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:58043] Sent 200 in 438ms [Wed Nov 4 06:14:17.533000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:38926] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:14:17.533000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:38926] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1370.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:14:17.536000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38926] QUERY OK source="tabby_sim_faults" db=0.7ms idle=498.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:14:17.592000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38926] QUERY OK db=55.3ms idle=415.7ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["ff060f1b-9023-4a65-8d90-9b5199599cb1", "CREATED", "AED", "180127bd-ba9d-4a84-bf69-c0382412fc52", "slice9", ~U[2026-11-04 06:26:17Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1370.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1370.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:24:17Z], ~N[2026-11-04 06:14:17], ~N[2026-11-04 06:14:17]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:14:17.592000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:38926] [TabbySim] checkout payment=ff060f1b-9023-4a65-8d90-9b5199599cb1 session=180127bd-ba9d-4a84-bf69-c0382412fc52 decision=created reason=nil amount=1370.00 AED [Wed Nov 4 06:14:17.594000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38926] QUERY OK source="tabby_sim_payments" db=0.5ms idle=402.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:14:17.597000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:38926] Sent 200 in 64ms [Wed Nov 4 06:14:17.598000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:51304] [Tabby] checkout post /api/v2/checkout -> 200 (435 ms, attempt 1) [Wed Nov 4 06:14:17.598000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:51304] [Tabby] session created payment=ff060f1b-9023-4a65-8d90-9b5199599cb1 [Wed Nov 4 06:14:17.599000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:51304] [Tabby] eligibility: show (amount=1370.00 AED) [Wed Nov 4 06:14:17.599000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:51304] Sent 200 in 438ms [Wed Nov 4 06:14:18.017000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:58043] POST /tabby/demo/eligibility [Wed Nov 4 06:14:18.346000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:38922] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:14:18.346000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:38922] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1370.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:14:18.348000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38922] QUERY OK source="tabby_sim_faults" db=1.1ms idle=846.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:14:18.437000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38922] QUERY OK db=85.2ms idle=815.7ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["1b2d2826-3ce9-45bd-8f37-be32d019536a", "CREATED", "AED", "473f4470-c3d1-4f9b-a465-916487fef053", "slice9", ~U[2026-11-04 06:26:18Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1370.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1370.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:24:18Z], ~N[2026-11-04 06:14:18], ~N[2026-11-04 06:14:18]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:14:18.437000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:38922] [TabbySim] checkout payment=1b2d2826-3ce9-45bd-8f37-be32d019536a session=473f4470-c3d1-4f9b-a465-916487fef053 decision=created reason=nil amount=1370.00 AED [Wed Nov 4 06:14:18.439000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38922] QUERY OK source="tabby_sim_payments" db=1.2ms queue=0.1ms idle=842.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:14:18.442000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:38922] Sent 200 in 95ms [Wed Nov 4 06:14:18.444000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:58043] [Tabby] checkout post /api/v2/checkout -> 200 (426 ms, attempt 1) [Wed Nov 4 06:14:18.444000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:58043] [Tabby] session created payment=1b2d2826-3ce9-45bd-8f37-be32d019536a [Wed Nov 4 06:14:18.444000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:58043] [Tabby] eligibility: show (amount=1370.00 AED) [Wed Nov 4 06:14:18.447000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:58043] Sent 200 in 429ms [Wed Nov 4 06:14:19.019000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:58043] POST /tabby/demo/eligibility [Wed Nov 4 06:14:19.361000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:38926] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:14:19.361000 2026] [Phoenix.Logger:debug] [pid 1031735] [client 127.0.0.1:38926] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1370.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:14:19.363000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38926] QUERY OK source="tabby_sim_faults" db=1.5ms queue=0.1ms idle=1013.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:14:19.463000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38926] QUERY OK db=98.1ms idle=927.9ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["e156361f-0011-4818-adf0-152856ed344a", "CREATED", "AED", "a8e8faf1-b5c7-486b-af0e-0fccc9ca7e21", "slice9", ~U[2026-11-04 06:26:19Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1370.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("1370.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:24:19Z], ~N[2026-11-04 06:14:19], ~N[2026-11-04 06:14:19]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:14:19.463000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1031735] [client 127.0.0.1:38926] [TabbySim] checkout payment=e156361f-0011-4818-adf0-152856ed344a session=a8e8faf1-b5c7-486b-af0e-0fccc9ca7e21 decision=created reason=nil amount=1370.00 AED [Wed Nov 4 06:14:19.464000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 127.0.0.1:38926] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1024.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:14:19.467000 2026] [Phoenix.Logger:info] [pid 1031735] [client 127.0.0.1:38926] Sent 200 in 106ms [Wed Nov 4 06:14:19.468000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:58043] [Tabby] checkout post /api/v2/checkout -> 200 (449 ms, attempt 1) [Wed Nov 4 06:14:19.468000 2026] [DaProductApp.Tabby.Client:info] [pid 1031735] [client 115.99.167.137:58043] [Tabby] session created payment=e156361f-0011-4818-adf0-152856ed344a [Wed Nov 4 06:14:19.468000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1031735] [client 115.99.167.137:58043] [Tabby] eligibility: show (amount=1370.00 AED) [Wed Nov 4 06:14:19.469000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:58043] Sent 200 in 449ms [Wed Nov 4 06:14:25.041000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms decode=0.1ms idle=1856.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:14:25Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:14:25.041000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:14:25.046000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=3.2ms queue=0.3ms idle=1858.2ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:14:25Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:14:25.049000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.3ms queue=0.1ms idle=1864.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:14:25.086000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399494 scheduled in 55s (15 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:15:21.344000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1160.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:15:21Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:15:21.392000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=47.4ms queue=0.1ms idle=1161.4ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:15:21], true, "29bd0c7c-2af0-44cf-9f3f-b58189109234", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:15:21.392000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=29bd0c7c-2af0-44cf-9f3f-b58189109234 CREATED -> EXPIRED [Wed Nov 4 06:15:21.393000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1209.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["29bd0c7c-2af0-44cf-9f3f-b58189109234"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:15:21.393000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=29bd0c7c-2af0-44cf-9f3f-b58189109234 [Wed Nov 4 06:15:21.394000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=29bd0c7c-2af0-44cf-9f3f-b58189109234 expired (expires_at 2026-11-04 06:15:20Z, session_status=created) [Wed Nov 4 06:15:21.394000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1210.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:15:21Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:15:21.395000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:15:21.396000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1211.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:15:21Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:15:21.396000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1212.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:15:21.444000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399499 scheduled in 10s (14 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:15:32.460000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1276.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:15:32Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:15:32.533000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=72.4ms idle=1277.5ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:15:32], true, "e45b2600-5bc8-4513-b5e2-28617f267bae", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:15:32.533000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=e45b2600-5bc8-4513-b5e2-28617f267bae CREATED -> EXPIRED [Wed Nov 4 06:15:32.535000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1350.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["e45b2600-5bc8-4513-b5e2-28617f267bae"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:15:32.535000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1031735] [client -] [TabbySim] webhook not sent: event=expire payment=e45b2600-5bc8-4513-b5e2-28617f267bae [Wed Nov 4 06:15:32.535000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1031735] [client -] [TabbySim] payment=e45b2600-5bc8-4513-b5e2-28617f267bae expired (expires_at 2026-11-04 06:15:31Z, session_status=created) [Wed Nov 4 06:15:32.536000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1352.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:15:32Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:15:32.537000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:15:32.538000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=1353.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:15:32Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:15:32.539000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1355.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:15:32.591000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399500 scheduled in 60s (13 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:15:57.132000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60323] GET /tabby/demo/result/success [Wed Nov 4 06:15:57.133000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60323] Sent 200 in 733µs [Wed Nov 4 06:15:57.740000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60323] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:15:57.742000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client 115.99.167.137:60323] QUERY OK source="tabby_payments" db=1.0ms idle=1557.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:15:57.743000 2026] [Phoenix.Logger:info] [pid 1031735] [client 115.99.167.137:60323] Sent 200 in 2ms [Wed Nov 4 06:16:33.837000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1649.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:16:33Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:16:33.838000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1031735] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:16:33.839000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1650.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:16:33Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:16:33.840000 2026] [Ecto.Adapters.SQL:debug] [pid 1031735] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1652.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:16:33.882000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1031735] [client -] [TabbySim] expiry job 399504 scheduled in 60s (13 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:16:50.402000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.5ms queue=2.7ms idle=60.3ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 06:16:50.558000 2026] [Bandit:info] [pid 1089340] [client -] Running DaProductAppWeb.Endpoint with Bandit 1.6.7 at 0.0.0.0:4030 (http) [Wed Nov 4 06:16:50.563000 2026] [DaProductApp.MQTT.Handler:info] [pid 1089340] [client -] Device phoenix_client_node_devteam connected [Wed Nov 4 06:16:50.568000 2026] [Phoenix.Endpoint.Supervisor:info] [pid 1089340] [client -] Access DaProductAppWeb.Endpoint at http://localhost:4030 [Wed Nov 4 06:16:52.921000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1089340] [client -] Live reload: priv/static/assets/app.js [Wed Nov 4 06:16:52.922000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1089340] [client -] Live reload: priv/static/assets/app.js [Wed Nov 4 06:16:52.922000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1089340] [client -] Live reload: priv/static/assets/app.js [Wed Nov 4 06:16:52.945000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1089340] [client -] Live reload: priv/static/assets/app.js [Wed Nov 4 06:16:52.946000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1089340] [client -] Live reload: priv/static/assets/app.js [Wed Nov 4 06:16:52.946000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1089340] [client -] Live reload: priv/static/assets/app.js [Wed Nov 4 06:16:52.946000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1089340] [client -] Live reload: priv/static/assets/app.js [Wed Nov 4 06:16:52.946000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1089340] [client -] Live reload: priv/static/assets/app.js [Wed Nov 4 06:16:52.947000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1089340] [client -] Live reload: priv/static/assets/app.js [Wed Nov 4 06:16:55.094000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] GET /tabby/demo [Wed Nov 4 06:16:55.121000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:60646] GET /tabby/demo/result/success [Wed Nov 4 06:16:55.228000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:60646] Sent 200 in 107ms [Wed Nov 4 06:16:55.234000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] Sent 200 in 139ms [Wed Nov 4 06:16:55.792000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] GET /tabby/demo [Wed Nov 4 06:16:55.796000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] Sent 200 in 4ms [Wed Nov 4 06:16:55.915000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:60646] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:16:55.966000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 115.99.167.137:60646] QUERY OK source="tabby_payments" db=10.1ms queue=0.9ms idle=1217.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:16:55.972000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:60646] Sent 200 in 56ms [Wed Nov 4 06:16:56.054000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:63415] POST /tabby/demo/summary [Wed Nov 4 06:16:56.076000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:63415] Sent 200 in 21ms [Wed Nov 4 06:16:56.502000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] POST /tabby/demo/summary [Wed Nov 4 06:16:56.503000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] Sent 200 in 730µs [Wed Nov 4 06:16:57.019000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] POST /tabby/demo/eligibility [Wed Nov 4 06:16:57.466000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:58848] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:16:57.472000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 127.0.0.1:58848] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1370.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:16:57.493000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:58848] QUERY OK source="tabby_sim_faults" db=0.5ms queue=0.5ms idle=1030.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:16:57.594000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:58848] QUERY OK db=42.6ms queue=0.4ms idle=746.7ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["ef030a7d-db1f-4b4c-ae18-14c39e0ccb19", "CREATED", "AED", "d9ae3760-b7cb-4a3f-8245-8b841fe3f028", "slice9", ~U[2026-11-04 06:28:57Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1370.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("1370.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:26:57Z], "created", false, ~N[2026-11-04 06:16:57], ~N[2026-11-04 06:16:57]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:16:57.598000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1089340] [client 127.0.0.1:58848] [TabbySim] checkout payment=ef030a7d-db1f-4b4c-ae18-14c39e0ccb19 session=d9ae3760-b7cb-4a3f-8245-8b841fe3f028 decision=created reason=nil amount=1370.00 AED [Wed Nov 4 06:16:57.613000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:58848] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.6ms idle=731.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:16:57.625000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:58848] Sent 200 in 159ms [Wed Nov 4 06:16:57.637000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:52527] [Tabby] checkout post /api/v2/checkout -> 200 (598 ms, attempt 1) [Wed Nov 4 06:16:57.640000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:52527] [Tabby] session created payment=ef030a7d-db1f-4b4c-ae18-14c39e0ccb19 [Wed Nov 4 06:16:57.640000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1089340] [client 115.99.167.137:52527] [Tabby] eligibility: show (amount=1370.00 AED) [Wed Nov 4 06:16:57.640000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] Sent 200 in 621ms [Wed Nov 4 06:16:58.024000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:59604] POST /tabby/demo/eligibility [Wed Nov 4 06:16:58.372000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:58848] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:16:58.373000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 127.0.0.1:58848] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1370.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:16:58.375000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:58848] QUERY OK source="tabby_sim_faults" db=1.3ms idle=1085.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:16:58.417000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:58848] QUERY OK db=41.1ms queue=0.4ms idle=903.6ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["efb5bc81-099a-4471-819d-628c37c45907", "CREATED", "AED", "840fd72c-bbd5-46b0-a00c-224c55b32749", "slice9", ~U[2026-11-04 06:28:58Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1370.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("1370.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:26:58Z], "created", false, ~N[2026-11-04 06:16:58], ~N[2026-11-04 06:16:58]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:16:58.417000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1089340] [client 127.0.0.1:58848] [TabbySim] checkout payment=efb5bc81-099a-4471-819d-628c37c45907 session=840fd72c-bbd5-46b0-a00c-224c55b32749 decision=created reason=nil amount=1370.00 AED [Wed Nov 4 06:16:58.419000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:58848] QUERY OK source="tabby_sim_payments" db=1.9ms idle=924.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:16:58.422000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:58848] Sent 200 in 50ms [Wed Nov 4 06:16:58.423000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:59604] [Tabby] checkout post /api/v2/checkout -> 200 (400 ms, attempt 1) [Wed Nov 4 06:16:58.424000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:59604] [Tabby] session created payment=efb5bc81-099a-4471-819d-628c37c45907 [Wed Nov 4 06:16:58.424000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1089340] [client 115.99.167.137:59604] [Tabby] eligibility: show (amount=1370.00 AED) [Wed Nov 4 06:16:58.424000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:59604] Sent 200 in 400ms [Wed Nov 4 06:17:05.010000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:59604] GET /tabby/demo/result/success [Wed Nov 4 06:17:05.010000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:59604] Sent 200 in 503µs [Wed Nov 4 06:17:05.532000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:59604] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:17:05.535000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 115.99.167.137:59604] QUERY OK source="tabby_payments" db=1.9ms queue=0.1ms idle=1249.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:17:05.535000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:59604] Sent 200 in 3ms [Wed Nov 4 06:17:34.251000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.4ms idle=1962.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:17:34Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:17:34.251000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:17:34.252000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms queue=0.4ms idle=1132.2ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:17:34Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:17:34.253000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms queue=0.1ms idle=965.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:17:34.307000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399507 scheduled in 60s (15 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:17:59.151000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:59604] GET /tabby/demo [Wed Nov 4 06:17:59.156000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:59604] Sent 200 in 4ms [Wed Nov 4 06:17:59.369000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] GET /tabby/demo [Wed Nov 4 06:17:59.370000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] Sent 200 in 1ms [Wed Nov 4 06:17:59.887000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] POST /tabby/demo/summary [Wed Nov 4 06:17:59.888000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] Sent 200 in 1ms [Wed Nov 4 06:18:00.806000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] POST /tabby/demo/eligibility [Wed Nov 4 06:18:01.154000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:56202] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:18:01.154000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 127.0.0.1:56202] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "1370.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:18:01.155000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:56202] QUERY OK source="tabby_sim_faults" db=0.4ms queue=0.1ms idle=867.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:18:01.257000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:56202] QUERY OK db=100.0ms queue=0.7ms idle=868.4ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["dddeb79b-01c4-443b-8801-a293cd983ee2", "CREATED", "AED", "b5b571c8-ee59-44c7-9229-fab7677ed44c", "slice9", ~U[2026-11-04 06:30:01Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "1370.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("1370.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:28:01Z], "created", false, ~N[2026-11-04 06:18:01], ~N[2026-11-04 06:18:01]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:18:01.257000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1089340] [client 127.0.0.1:56202] [TabbySim] checkout payment=dddeb79b-01c4-443b-8801-a293cd983ee2 session=b5b571c8-ee59-44c7-9229-fab7677ed44c decision=created reason=nil amount=1370.00 AED [Wed Nov 4 06:18:01.259000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:56202] QUERY OK source="tabby_sim_payments" db=0.9ms queue=0.1ms idle=970.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:18:01.260000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:56202] Sent 200 in 106ms [Wed Nov 4 06:18:01.261000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:52527] [Tabby] checkout post /api/v2/checkout -> 200 (454 ms, attempt 1) [Wed Nov 4 06:18:01.261000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:52527] [Tabby] session created payment=dddeb79b-01c4-443b-8801-a293cd983ee2 [Wed Nov 4 06:18:01.261000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1089340] [client 115.99.167.137:52527] [Tabby] eligibility: show (amount=1370.00 AED) [Wed Nov 4 06:18:01.261000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] Sent 200 in 455ms [Wed Nov 4 06:18:06.130000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] POST /tabby/demo/summary [Wed Nov 4 06:18:06.131000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] Sent 200 in 746µs [Wed Nov 4 06:18:07.379000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] POST /tabby/demo/eligibility [Wed Nov 4 06:18:07.676000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:56202] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:18:07.677000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 127.0.0.1:56202] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:18:07.678000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:56202] QUERY OK source="tabby_sim_faults" db=0.5ms queue=0.2ms idle=1390.2ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:18:07.731000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:56202] QUERY OK db=51.5ms queue=0.6ms idle=1391.6ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["ea8292fd-efb1-493e-9248-4ad2317a9c1d", "CREATED", "AED", "cd5ddf5f-3dfc-4401-8783-e47b74f2780e", "slice9", ~U[2026-11-04 06:30:07Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("5000.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:28:07Z], "created", false, ~N[2026-11-04 06:18:07], ~N[2026-11-04 06:18:07]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:18:07.731000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1089340] [client 127.0.0.1:56202] [TabbySim] checkout payment=ea8292fd-efb1-493e-9248-4ad2317a9c1d session=cd5ddf5f-3dfc-4401-8783-e47b74f2780e decision=created reason=nil amount=5000.00 AED [Wed Nov 4 06:18:07.733000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:56202] QUERY OK source="tabby_sim_payments" db=1.5ms idle=1444.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:18:07.735000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:56202] Sent 200 in 58ms [Wed Nov 4 06:18:07.735000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:52527] [Tabby] checkout post /api/v2/checkout -> 200 (356 ms, attempt 1) [Wed Nov 4 06:18:07.736000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:52527] [Tabby] session created payment=ea8292fd-efb1-493e-9248-4ad2317a9c1d [Wed Nov 4 06:18:07.736000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1089340] [client 115.99.167.137:52527] [Tabby] eligibility: show (amount=5000.00 AED) [Wed Nov 4 06:18:07.737000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] Sent 200 in 358ms [Wed Nov 4 06:18:08.223000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] POST /tabby/demo/summary [Wed Nov 4 06:18:08.223000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] Sent 200 in 591µs [Wed Nov 4 06:18:35.556000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1269.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:18:35Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:18:35.557000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:18:35.558000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1152.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:18:35Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:18:35.560000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1113.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:18:35.623000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399511 scheduled in 60s (17 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:18:54.984000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] POST /tabby/demo/summary [Wed Nov 4 06:18:54.985000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] Sent 200 in 761µs [Wed Nov 4 06:18:55.960000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] POST /tabby/demo/eligibility [Wed Nov 4 06:18:56.268000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:56202] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:18:56.269000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 127.0.0.1:56202] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:18:56.270000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:56202] QUERY OK source="tabby_sim_faults" db=0.7ms idle=982.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:18:56.326000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:56202] QUERY OK db=54.7ms queue=0.3ms idle=983.7ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`rejection_reason`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`rejection_reason_code`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["de1a953e-5e6d-4c50-aedd-d9bce3784557", "CREATED", "AED", "c42ff5ac-009d-4b96-8ad3-bb1bc700ee11", "slice9", ~U[2026-11-04 06:30:56Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("5095.00"), "order_amount_too_high", %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], "not_enough_limit", ~U[2026-11-04 06:28:56Z], "rejected", false, ~N[2026-11-04 06:18:56], ~N[2026-11-04 06:18:56]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:18:56.326000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1089340] [client 127.0.0.1:56202] [TabbySim] checkout payment=de1a953e-5e6d-4c50-aedd-d9bce3784557 session=c42ff5ac-009d-4b96-8ad3-bb1bc700ee11 decision=rejected reason="order_amount_too_high" amount=5095.00 AED [Wed Nov 4 06:18:56.327000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:56202] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1039.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:18:56.328000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:56202] Sent 200 in 60ms [Wed Nov 4 06:18:56.329000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:52527] [Tabby] checkout post /api/v2/checkout -> 200 (368 ms, attempt 1) [Wed Nov 4 06:18:56.329000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:52527] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Wed Nov 4 06:18:56.329000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1089340] [client 115.99.167.137:52527] [Tabby] eligibility: hide reason=order_amount_too_high (amount=5095.00 AED) [Wed Nov 4 06:18:56.330000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] Sent 200 in 369ms [Wed Nov 4 06:19:32.348000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] POST /tabby/demo/summary [Wed Nov 4 06:19:32.348000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] Sent 200 in 586µs [Wed Nov 4 06:19:33.200000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] POST /tabby/demo/eligibility [Wed Nov 4 06:19:33.489000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:56202] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:19:33.490000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 127.0.0.1:56202] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:19:33.491000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:56202] QUERY OK source="tabby_sim_faults" db=0.6ms queue=0.3ms idle=872.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:19:33.530000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:56202] QUERY OK db=37.1ms queue=0.9ms idle=500.2ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["d9d6d145-0ebb-4ba8-a255-e082d9ec4663", "CREATED", "AED", "d4c2de90-e6f8-471f-9201-d6d6685e10c1", "slice9", ~U[2026-11-04 06:31:33Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:29:33Z], "created", false, ~N[2026-11-04 06:19:33], ~N[2026-11-04 06:19:33]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:19:33.530000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1089340] [client 127.0.0.1:56202] [TabbySim] checkout payment=d9d6d145-0ebb-4ba8-a255-e082d9ec4663 session=d4c2de90-e6f8-471f-9201-d6d6685e10c1 decision=created reason=nil amount=850.00 AED [Wed Nov 4 06:19:33.531000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:56202] QUERY OK source="tabby_sim_payments" db=0.8ms idle=455.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:19:33.533000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:56202] Sent 200 in 44ms [Wed Nov 4 06:19:33.534000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:52527] [Tabby] checkout post /api/v2/checkout -> 200 (334 ms, attempt 1) [Wed Nov 4 06:19:33.534000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:52527] [Tabby] session created payment=d9d6d145-0ebb-4ba8-a255-e082d9ec4663 [Wed Nov 4 06:19:33.535000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1089340] [client 115.99.167.137:52527] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 06:19:33.535000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] Sent 200 in 334ms [Wed Nov 4 06:19:35.658000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] POST /tabby/demo/summary [Wed Nov 4 06:19:35.658000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] Sent 200 in 528µs [Wed Nov 4 06:19:36.845000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1556.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:19:36Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:19:36.845000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:19:36.846000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1558.2ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:19:36Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:19:36.847000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1559.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:19:36.902000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399512 scheduled in 60s (19 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:20:01.328000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] POST /tabby/demo/summary [Wed Nov 4 06:20:01.329000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] Sent 200 in 849µs [Wed Nov 4 06:20:02.454000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] POST /tabby/demo/eligibility [Wed Nov 4 06:20:02.896000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:56202] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:20:02.897000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 127.0.0.1:56202] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:20:02.900000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:56202] QUERY OK source="tabby_sim_faults" db=3.4ms idle=609.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:20:03.047000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:56202] QUERY OK db=144.7ms queue=1.5ms idle=613.0ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`rejection_reason`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`rejection_reason_code`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["8186cb33-5797-4753-b254-cb9562f441c1", "CREATED", "AED", "13d9d48c-c289-4165-ab96-8c1dda845788", "slice9", ~U[2026-11-04 06:32:02Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("5095.00"), "order_amount_too_high", %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], "not_enough_limit", ~U[2026-11-04 06:30:02Z], "rejected", false, ~N[2026-11-04 06:20:02], ~N[2026-11-04 06:20:02]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:20:03.047000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1089340] [client 127.0.0.1:56202] [TabbySim] checkout payment=8186cb33-5797-4753-b254-cb9562f441c1 session=13d9d48c-c289-4165-ab96-8c1dda845788 decision=rejected reason="order_amount_too_high" amount=5095.00 AED [Wed Nov 4 06:20:03.051000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:56202] QUERY OK source="tabby_sim_payments" db=2.9ms idle=760.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:20:03.055000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:56202] Sent 200 in 159ms [Wed Nov 4 06:20:03.056000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:52527] [Tabby] checkout post /api/v2/checkout -> 200 (601 ms, attempt 1) [Wed Nov 4 06:20:03.056000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:52527] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Wed Nov 4 06:20:03.058000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1089340] [client 115.99.167.137:52527] [Tabby] eligibility: hide reason=order_amount_too_high (amount=5095.00 AED) [Wed Nov 4 06:20:03.059000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] Sent 200 in 605ms [Wed Nov 4 06:20:05.264000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] POST /tabby/demo/summary [Wed Nov 4 06:20:05.265000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:52527] Sent 200 in 554µs [Wed Nov 4 06:20:38.225000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.4ms idle=1935.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:20:38Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:20:38.225000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:20:38.228000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=2.9ms queue=0.1ms idle=1937.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:20:38Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:20:38.232000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=2.2ms queue=0.1ms idle=1941.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:20:38.315000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399518 scheduled in 24s (20 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:21:03.297000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=2.2ms idle=1006.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:21:03Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:21:03.375000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=73.5ms queue=3.1ms idle=1009.1ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:21:03], true, "eab5005e-ffc1-4193-ae64-d28b9ff057aa", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:21:03.379000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=eab5005e-ffc1-4193-ae64-d28b9ff057aa CREATED -> EXPIRED [Wed Nov 4 06:21:03.381000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=1.3ms idle=1091.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["eab5005e-ffc1-4193-ae64-d28b9ff057aa"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:21:03.396000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=eab5005e-ffc1-4193-ae64-d28b9ff057aa [Wed Nov 4 06:21:03.408000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=eab5005e-ffc1-4193-ae64-d28b9ff057aa expired (expires_at 2026-11-04 06:21:02Z, session_status=created) [Wed Nov 4 06:21:03.413000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.6ms queue=2.3ms idle=1120.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:21:03Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:21:03.413000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:21:03.414000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1120.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:21:03Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:21:03.415000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=209.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:21:03.469000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399519 scheduled in 19s (19 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:21:23.368000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1079.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:21:23Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:21:23.402000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=32.8ms idle=930.6ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:21:23], true, "3f792f4d-a370-4cc8-a13b-75c77403f9af", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:21:23.402000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=3f792f4d-a370-4cc8-a13b-75c77403f9af CREATED -> EXPIRED [Wed Nov 4 06:21:23.403000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=133.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["3f792f4d-a370-4cc8-a13b-75c77403f9af"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:21:23.403000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=3f792f4d-a370-4cc8-a13b-75c77403f9af [Wed Nov 4 06:21:23.403000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=3f792f4d-a370-4cc8-a13b-75c77403f9af expired (expires_at 2026-11-04 06:21:22Z, session_status=created) [Wed Nov 4 06:21:23.405000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=115.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:21:23Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:21:23.405000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:21:23.407000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=117.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:21:23Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:21:23.411000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=3.5ms queue=0.1ms idle=119.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:21:23.486000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399520 scheduled in 13s (18 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:21:26.317000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:55612] POST /tabby/demo/summary [Wed Nov 4 06:21:26.318000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:55612] Sent 200 in 1ms [Wed Nov 4 06:21:27.249000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:55612] POST /tabby/demo/eligibility [Wed Nov 4 06:21:27.543000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:45896] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:21:27.543000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 127.0.0.1:45896] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:21:27.544000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:45896] QUERY OK source="tabby_sim_faults" db=0.4ms idle=264.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:21:27.606000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:45896] QUERY OK db=60.9ms queue=0.3ms idle=256.3ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["5834cf08-21b2-4922-82b5-aaceb43b0dc4", "CREATED", "AED", "0b6b3f69-cd1b-4685-8845-ba6e0f630326", "slice9", ~U[2026-11-04 06:33:27Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("5000.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:31:27Z], "created", false, ~N[2026-11-04 06:21:27], ~N[2026-11-04 06:21:27]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:21:27.606000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1089340] [client 127.0.0.1:45896] [TabbySim] checkout payment=5834cf08-21b2-4922-82b5-aaceb43b0dc4 session=0b6b3f69-cd1b-4685-8845-ba6e0f630326 decision=created reason=nil amount=5000.00 AED [Wed Nov 4 06:21:27.607000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:45896] QUERY OK source="tabby_sim_payments" db=0.6ms idle=318.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:21:27.608000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:45896] Sent 200 in 65ms [Wed Nov 4 06:21:27.609000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:55612] [Tabby] checkout post /api/v2/checkout -> 200 (358 ms, attempt 1) [Wed Nov 4 06:21:27.609000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:55612] [Tabby] session created payment=5834cf08-21b2-4922-82b5-aaceb43b0dc4 [Wed Nov 4 06:21:27.609000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1089340] [client 115.99.167.137:55612] [Tabby] eligibility: show (amount=5000.00 AED) [Wed Nov 4 06:21:27.610000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:55612] Sent 200 in 360ms [Wed Nov 4 06:21:37.410000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=121.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:21:37Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:21:37.476000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=65.5ms idle=122.4ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:21:37], true, "8f818624-ef6f-46e6-aece-099f83a2961b", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:21:37.476000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=8f818624-ef6f-46e6-aece-099f83a2961b CREATED -> EXPIRED [Wed Nov 4 06:21:37.478000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.4ms idle=188.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["8f818624-ef6f-46e6-aece-099f83a2961b"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:21:37.478000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=8f818624-ef6f-46e6-aece-099f83a2961b [Wed Nov 4 06:21:37.478000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=8f818624-ef6f-46e6-aece-099f83a2961b expired (expires_at 2026-11-04 06:21:36Z, session_status=created) [Wed Nov 4 06:21:37.480000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=190.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:21:37Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:21:37.480000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:21:37.481000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=191.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:21:37Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:21:37.482000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=192.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:21:37.541000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399521 scheduled in 3s (18 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:21:41.411000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.5ms idle=120.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:21:41Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:21:41.468000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=56.4ms idle=122.8ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:21:41], true, "20ff81c5-2408-4ce0-8ad3-f00511cc1c17", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:21:41.468000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=20ff81c5-2408-4ce0-8ad3-f00511cc1c17 CREATED -> EXPIRED [Wed Nov 4 06:21:41.469000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms queue=0.1ms idle=179.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["20ff81c5-2408-4ce0-8ad3-f00511cc1c17"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:21:41.470000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=20ff81c5-2408-4ce0-8ad3-f00511cc1c17 [Wed Nov 4 06:21:41.470000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=20ff81c5-2408-4ce0-8ad3-f00511cc1c17 expired (expires_at 2026-11-04 06:21:40Z, session_status=created) [Wed Nov 4 06:21:41.471000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=181.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:21:41Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:21:41.471000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:21:41.472000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=182.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:21:41Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:21:41.473000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=183.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:21:41.525000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399522 scheduled in 16s (17 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:21:58.539000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1245.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:21:58Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:21:58.659000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=119.5ms idle=1246.9ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:21:58], true, "c1834f12-a5aa-4ed7-aedc-e4be1f19eaf2", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:21:58.659000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=c1834f12-a5aa-4ed7-aedc-e4be1f19eaf2 CREATED -> EXPIRED [Wed Nov 4 06:21:58.660000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1367.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["c1834f12-a5aa-4ed7-aedc-e4be1f19eaf2"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:21:58.661000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=c1834f12-a5aa-4ed7-aedc-e4be1f19eaf2 [Wed Nov 4 06:21:58.661000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=c1834f12-a5aa-4ed7-aedc-e4be1f19eaf2 expired (expires_at 2026-11-04 06:21:57Z, session_status=created) [Wed Nov 4 06:21:58.662000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1368.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:21:58Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:21:58.662000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:21:58.663000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1369.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:21:58Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:21:58.663000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms queue=0.1ms idle=1289.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:21:58.754000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399523 scheduled in 60s (16 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:22:43.361000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:63900] POST /tabby/demo/eligibility [Wed Nov 4 06:22:43.625000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:47156] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:22:43.625000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 127.0.0.1:47156] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:22:43.626000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:47156] QUERY OK source="tabby_sim_faults" db=0.5ms queue=0.1ms idle=1332.2ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:22:43.647000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:47156] QUERY OK db=19.5ms queue=0.3ms idle=1333.2ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`rejection_reason`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["143dfa13-a33e-467e-a3eb-473bbf1a51aa", "CREATED", "AED", "dc002bbf-cd9c-45f3-8663-d1ad71ca59b3", "slice9", ~U[2026-11-04 06:34:43Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("5000.00"), "not_available", %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:32:43Z], "rejected", false, ~N[2026-11-04 06:22:43], ~N[2026-11-04 06:22:43]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:22:43.647000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1089340] [client 127.0.0.1:47156] [TabbySim] checkout payment=143dfa13-a33e-467e-a3eb-473bbf1a51aa session=dc002bbf-cd9c-45f3-8663-d1ad71ca59b3 decision=rejected reason="not_available" amount=5000.00 AED [Wed Nov 4 06:22:43.648000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:47156] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.1ms idle=1354.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:22:43.650000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:47156] Sent 200 in 25ms [Wed Nov 4 06:22:43.651000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:63900] [Tabby] checkout post /api/v2/checkout -> 200 (290 ms, attempt 1) [Wed Nov 4 06:22:43.651000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:63900] [Tabby] session rejected by pre-scoring (business outcome) reason=not_available [Wed Nov 4 06:22:43.651000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1089340] [client 115.99.167.137:63900] [Tabby] eligibility: hide reason=not_available (amount=5000.00 AED) [Wed Nov 4 06:22:43.651000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:63900] Sent 200 in 290ms [Wed Nov 4 06:22:55.358000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:63900] POST /tabby/demo/eligibility [Wed Nov 4 06:22:55.680000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:47156] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:22:55.680000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 127.0.0.1:47156] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:22:55.681000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:47156] QUERY OK source="tabby_sim_faults" db=0.4ms idle=1387.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:22:55.722000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:47156] QUERY OK db=40.2ms queue=0.3ms idle=1388.6ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["34ed0a25-0300-4333-bc7c-8053b0879295", "CREATED", "AED", "ea8e887a-e32d-48f7-a790-93e43558f9c5", "slice9", ~U[2026-11-04 06:34:55Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("5000.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:32:55Z], "created", false, ~N[2026-11-04 06:22:55], ~N[2026-11-04 06:22:55]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:22:55.723000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1089340] [client 127.0.0.1:47156] [TabbySim] checkout payment=34ed0a25-0300-4333-bc7c-8053b0879295 session=ea8e887a-e32d-48f7-a790-93e43558f9c5 decision=created reason=nil amount=5000.00 AED [Wed Nov 4 06:22:55.724000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:47156] QUERY OK source="tabby_sim_payments" db=0.8ms queue=0.1ms idle=1430.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:22:55.725000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:47156] Sent 200 in 45ms [Wed Nov 4 06:22:55.726000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:63900] [Tabby] checkout post /api/v2/checkout -> 200 (365 ms, attempt 1) [Wed Nov 4 06:22:55.726000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:63900] [Tabby] session created payment=34ed0a25-0300-4333-bc7c-8053b0879295 [Wed Nov 4 06:22:55.726000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1089340] [client 115.99.167.137:63900] [Tabby] eligibility: show (amount=5000.00 AED) [Wed Nov 4 06:22:55.726000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:63900] Sent 200 in 367ms [Wed Nov 4 06:22:59.966000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=672.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:22:59Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:22:59.967000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:22:59.968000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms queue=0.1ms idle=673.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:22:59Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:22:59.969000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.2ms idle=675.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:23:00.025000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399528 scheduled in 11s (18 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:23:12.036000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=742.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:23:12Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:23:12.087000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=50.4ms idle=743.7ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:23:12], true, "6346c594-a466-4114-8d64-be2eb5303a6e", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:23:12.087000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=6346c594-a466-4114-8d64-be2eb5303a6e CREATED -> EXPIRED [Wed Nov 4 06:23:12.088000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=794.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["6346c594-a466-4114-8d64-be2eb5303a6e"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:23:12.089000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=6346c594-a466-4114-8d64-be2eb5303a6e [Wed Nov 4 06:23:12.089000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=6346c594-a466-4114-8d64-be2eb5303a6e expired (expires_at 2026-11-04 06:23:10Z, session_status=created) [Wed Nov 4 06:23:12.156000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=66.4ms idle=796.3ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:23:12], true, "005a73f0-0770-484a-8095-73900238ae28", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:23:12.156000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=005a73f0-0770-484a-8095-73900238ae28 CREATED -> EXPIRED [Wed Nov 4 06:23:12.157000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=863.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["005a73f0-0770-484a-8095-73900238ae28"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:23:12.157000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=005a73f0-0770-484a-8095-73900238ae28 [Wed Nov 4 06:23:12.158000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=005a73f0-0770-484a-8095-73900238ae28 expired (expires_at 2026-11-04 06:23:11Z, session_status=created) [Wed Nov 4 06:23:12.182000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=23.5ms idle=865.0ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:23:12], true, "8a1f25b1-0b20-4e7c-8932-efbe1a5a3615", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:23:12.182000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=8a1f25b1-0b20-4e7c-8932-efbe1a5a3615 CREATED -> EXPIRED [Wed Nov 4 06:23:12.183000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.1ms idle=889.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["8a1f25b1-0b20-4e7c-8932-efbe1a5a3615"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:23:12.183000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=8a1f25b1-0b20-4e7c-8932-efbe1a5a3615 [Wed Nov 4 06:23:12.184000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=8a1f25b1-0b20-4e7c-8932-efbe1a5a3615 expired (expires_at 2026-11-04 06:23:11Z, session_status=created) [Wed Nov 4 06:23:12.229000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=44.9ms idle=891.1ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:23:12], true, "767e5917-4d5f-4cac-9676-0833d831ac89", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:23:12.229000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=767e5917-4d5f-4cac-9676-0833d831ac89 CREATED -> EXPIRED [Wed Nov 4 06:23:12.231000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.1ms idle=308.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["767e5917-4d5f-4cac-9676-0833d831ac89"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:23:12.231000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=767e5917-4d5f-4cac-9676-0833d831ac89 [Wed Nov 4 06:23:12.231000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=767e5917-4d5f-4cac-9676-0833d831ac89 expired (expires_at 2026-11-04 06:23:12Z, session_status=created) [Wed Nov 4 06:23:12.232000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=197.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:23:12Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:23:12.233000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 4 payment(s) were due [Wed Nov 4 06:23:12.234000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=196.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:23:12Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:23:12.235000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms queue=0.1ms idle=147.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:23:12.274000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399529 scheduled in 60s (14 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:23:45.028000 2026] [DaProductApp.MQTT.Handler:info] [pid 1089340] [client -] Received ACK for merchant pFppbioOCKlo5c8E, device 28260702280001 with payload: {"request_id" : "testingSr680card1","money": "1200.0", "status": "SUCCESS" } [Wed Nov 4 06:23:45.029000 2026] [DaProductApp.MQTT.Handler:info] [pid 1089340] [client -] Received OTA update for device 28260702280001 with request_id testingSr680card1: %{"money" => "1200.0", "request_id" => "testingSr680card1", "status" => "SUCCESS"} [Wed Nov 4 06:23:45.029000 2026] [DaProductApp.MQTT.Handler:info] [pid 1089340] [client -] Status for request_id testingSr680card1 is success [Wed Nov 4 06:23:45.035000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="cloud_transaction" db=1.1ms queue=0.4ms idle=1740.9ms SELECT c0.`id`, c0.`uhid`, c0.`email`, c0.`mobile_no`, c0.`processing_id`, c0.`uname`, c0.`user_id`, c0.`pay_mode`, c0.`location_id`, c0.`transaction_location`, c0.`credentials_user`, c0.`credentials_key`, c0.`version`, c0.`return_url`, c0.`response_url`, c0.`status`, c0.`transaction_id`, c0.`transaction_amount`, c0.`transaction_ref_number`, c0.`m_ref_num`, c0.`name`, c0.`provider_id`, c0.`device_id`, c0.`merchant_id`, c0.`payment_reference_id`, c0.`additional_data`, c0.`payload`, c0.`settlement_date_time`, c0.`refund_reference_id`, c0.`provider_name`, c0.`acknoledgment`, c0.`inserted_at`, c0.`updated_at` FROM `cloud_transaction` AS c0 WHERE ((c0.`transaction_ref_number` = ?) AND (c0.`device_id` = ?)) ["testingSr680card1", "28260702280001"] ↳ DaProductApp.MQTT.Handler.handle_message/3, at: lib/da_product_app/mqtt/handler.ex:52 [Wed Nov 4 06:23:45.035000 2026] [DaProductApp.MQTT.Handler:warn] [pid 1089340] [client -] No transaction found with transaction_ref_number=testingSr680card1 [Wed Nov 4 06:24:13.185000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1889.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:24:13Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:24:13.185000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:24:13.186000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1089.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:24:13Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:24:13.187000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.1ms idle=892.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:24:13.227000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399533 scheduled in 60s (14 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:25:13.588000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1291.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:25:13Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:25:13.588000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:25:13.589000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1292.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:25:13Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:25:13.590000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1292.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:25:13.629000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399536 scheduled in 60s (14 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:25:25.091000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:65347] GET /tabby/demo/result/failure [Wed Nov 4 06:25:25.091000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:65347] Sent 200 in 487µs [Wed Nov 4 06:25:28.773000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:65347] GET /tabby/demo/result/success [Wed Nov 4 06:25:28.773000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:65347] Sent 200 in 671µs [Wed Nov 4 06:25:31.895000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:65347] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:25:31.896000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 115.99.167.137:65347] QUERY OK source="tabby_payments" db=1.0ms idle=1599.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:25:31.896000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:65347] Sent 200 in 1ms [Wed Nov 4 06:26:14.863000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1566.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:26:14Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:26:14.863000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:26:14.865000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.7ms idle=1567.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:26:14Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:26:14.866000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1569.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:26:14.929000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399539 scheduled in 3s (14 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:26:18.861000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=564.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:26:18Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:26:18.907000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=45.1ms idle=565.7ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:26:18], true, "7abe2064-c41a-4496-861d-a3464630f00f", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:26:18.907000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=7abe2064-c41a-4496-861d-a3464630f00f CREATED -> EXPIRED [Wed Nov 4 06:26:18.909000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.4ms idle=611.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["7abe2064-c41a-4496-861d-a3464630f00f"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:26:18.909000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=7abe2064-c41a-4496-861d-a3464630f00f [Wed Nov 4 06:26:18.910000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=7abe2064-c41a-4496-861d-a3464630f00f expired (expires_at 2026-11-04 06:26:17Z, session_status=created) [Wed Nov 4 06:26:18.946000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=36.1ms queue=0.1ms idle=613.9ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:26:18], true, "ff060f1b-9023-4a65-8d90-9b5199599cb1", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:26:18.947000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=ff060f1b-9023-4a65-8d90-9b5199599cb1 CREATED -> EXPIRED [Wed Nov 4 06:26:18.948000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=650.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["ff060f1b-9023-4a65-8d90-9b5199599cb1"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:26:18.948000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=ff060f1b-9023-4a65-8d90-9b5199599cb1 [Wed Nov 4 06:26:18.948000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=ff060f1b-9023-4a65-8d90-9b5199599cb1 expired (expires_at 2026-11-04 06:26:17Z, session_status=created) [Wed Nov 4 06:26:19.015000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=66.0ms idle=652.4ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:26:18], true, "1b2d2826-3ce9-45bd-8f37-be32d019536a", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:26:19.015000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=1b2d2826-3ce9-45bd-8f37-be32d019536a CREATED -> EXPIRED [Wed Nov 4 06:26:19.017000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=719.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["1b2d2826-3ce9-45bd-8f37-be32d019536a"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:26:19.017000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=1b2d2826-3ce9-45bd-8f37-be32d019536a [Wed Nov 4 06:26:19.017000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=1b2d2826-3ce9-45bd-8f37-be32d019536a expired (expires_at 2026-11-04 06:26:18Z, session_status=created) [Wed Nov 4 06:26:19.018000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=720.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:26:19Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:26:19.056000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=37.3ms idle=240.2ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:26:19], true, "e156361f-0011-4818-adf0-152856ed344a", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:26:19.056000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=e156361f-0011-4818-adf0-152856ed344a CREATED -> EXPIRED [Wed Nov 4 06:26:19.057000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=196.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["e156361f-0011-4818-adf0-152856ed344a"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:26:19.057000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=e156361f-0011-4818-adf0-152856ed344a [Wed Nov 4 06:26:19.057000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=e156361f-0011-4818-adf0-152856ed344a expired (expires_at 2026-11-04 06:26:19Z, session_status=created) [Wed Nov 4 06:26:19.059000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=196.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:26:19Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:26:19.059000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 4 payment(s) were due [Wed Nov 4 06:26:19.059000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.1ms idle=152.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:26:19Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:26:19.060000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=150.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:26:19.101000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399540 scheduled in 60s (10 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:26:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.7ms idle=1129.8ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 06:27:20.066000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1768.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:27:20Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:27:20.066000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:27:20.067000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1769.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:27:20Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:27:20.068000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1770.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:27:20.128000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399543 scheduled in 60s (10 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:28:21.441000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1099.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:28:21Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:28:21.441000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:28:21.442000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.1ms idle=144.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:28:21Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:28:21.443000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=145.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:28:21.511000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399546 scheduled in 36s (10 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:28:58.303000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1005.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:28:58Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:28:58.336000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=32.9ms idle=1006.3ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:28:58], true, "ef030a7d-db1f-4b4c-ae18-14c39e0ccb19", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:28:58.336000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=ef030a7d-db1f-4b4c-ae18-14c39e0ccb19 CREATED -> EXPIRED [Wed Nov 4 06:28:58.338000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=1039.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["ef030a7d-db1f-4b4c-ae18-14c39e0ccb19"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:28:58.338000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=ef030a7d-db1f-4b4c-ae18-14c39e0ccb19 [Wed Nov 4 06:28:58.338000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=ef030a7d-db1f-4b4c-ae18-14c39e0ccb19 expired (expires_at 2026-11-04 06:28:57Z, session_status=created) [Wed Nov 4 06:28:58.390000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=50.9ms idle=1042.0ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:28:58], true, "efb5bc81-099a-4471-819d-628c37c45907", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:28:58.390000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=efb5bc81-099a-4471-819d-628c37c45907 CREATED -> EXPIRED [Wed Nov 4 06:28:58.392000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.6ms queue=0.1ms idle=1093.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["efb5bc81-099a-4471-819d-628c37c45907"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:28:58.392000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=efb5bc81-099a-4471-819d-628c37c45907 [Wed Nov 4 06:28:58.392000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=efb5bc81-099a-4471-819d-628c37c45907 expired (expires_at 2026-11-04 06:28:58Z, session_status=created) [Wed Nov 4 06:28:58.394000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms queue=0.3ms idle=1095.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:28:58Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:28:58.394000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 2 payment(s) were due [Wed Nov 4 06:28:58.395000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=180.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:28:58Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:28:58.396000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=98.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:28:58.437000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399547 scheduled in 60s (8 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:29:22.757000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1089340] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:29:22.758000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1089340] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:29:22.758000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1089340] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:29:22.759000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1089340] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:29:22.759000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1089340] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:29:22.760000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1089340] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:29:22.760000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1089340] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:29:22.761000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1089340] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:29:22.761000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1089340] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:29:22.762000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1089340] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:29:22.762000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1089340] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:29:22.762000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1089340] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:29:22.763000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1089340] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:29:22.762000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1089340] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:29:22.763000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1089340] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:29:22.763000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1089340] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:29:22.764000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1089340] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:29:22.764000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1089340] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:29:22.764000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1089340] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:29:22.764000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1089340] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:29:22.763000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1089340] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:29:22.764000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1089340] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:29:22.766000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1089340] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:29:22.766000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 1089340] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Wed Nov 4 06:29:25.495000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:54801] GET /tabby/demo/result/success [Wed Nov 4 06:29:25.498000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:54801] Sent 200 in 2ms [Wed Nov 4 06:29:25.639000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:49925] GET /tabby/demo [Wed Nov 4 06:29:25.647000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:49925] Sent 200 in 7ms [Wed Nov 4 06:29:26.066000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:54801] GET /tabby/demo/result/success [Wed Nov 4 06:29:26.068000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:54801] Sent 200 in 1ms [Wed Nov 4 06:29:26.239000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:57341] GET /tabby/demo [Wed Nov 4 06:29:26.249000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:57341] Sent 200 in 9ms [Wed Nov 4 06:29:26.282000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:57206] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:29:26.284000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 115.99.167.137:57206] QUERY OK source="tabby_payments" db=1.2ms idle=906.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:29:26.285000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:57206] Sent 200 in 2ms [Wed Nov 4 06:29:26.412000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:54347] POST /tabby/demo/summary [Wed Nov 4 06:29:26.412000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:54347] Sent 200 in 624µs [Wed Nov 4 06:29:26.626000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:54801] GET /tabby/demo/result/success [Wed Nov 4 06:29:26.626000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:54801] Sent 200 in 477µs [Wed Nov 4 06:29:26.705000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:57341] GET /tabby/demo [Wed Nov 4 06:29:26.716000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:57341] Sent 200 in 11ms [Wed Nov 4 06:29:26.795000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:57206] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:29:26.797000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 115.99.167.137:57206] QUERY OK source="tabby_payments" db=0.9ms queue=0.2ms idle=444.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:29:26.797000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:57206] Sent 200 in 1ms [Wed Nov 4 06:29:26.854000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61147] POST /tabby/demo/summary [Wed Nov 4 06:29:26.854000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61147] Sent 200 in 510µs [Wed Nov 4 06:29:27.240000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:57341] GET /tabby/demo [Wed Nov 4 06:29:27.247000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:57341] Sent 200 in 6ms [Wed Nov 4 06:29:27.282000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:49925] POST /tabby/demo/summary [Wed Nov 4 06:29:27.284000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:49925] Sent 200 in 1ms [Wed Nov 4 06:29:27.342000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:54347] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 06:29:27.344000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 115.99.167.137:54347] QUERY OK source="tabby_payments" db=0.8ms queue=0.2ms idle=760.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:29:27.345000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:54347] Sent 200 in 2ms [Wed Nov 4 06:29:27.717000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:57341] GET /tabby/demo [Wed Nov 4 06:29:27.723000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:57341] Sent 200 in 7ms [Wed Nov 4 06:29:27.764000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:57206] POST /tabby/demo/summary [Wed Nov 4 06:29:27.767000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:57206] Sent 200 in 2ms [Wed Nov 4 06:29:28.016000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:54347] POST /tabby/demo/eligibility [Wed Nov 4 06:29:28.073000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61147] POST /tabby/demo/eligibility [Wed Nov 4 06:29:28.243000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:57206] POST /tabby/demo/summary [Wed Nov 4 06:29:28.244000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:57206] Sent 200 in 620µs [Wed Nov 4 06:29:28.354000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:40592] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:29:28.355000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 127.0.0.1:40592] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:29:28.356000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:40592] QUERY OK source="tabby_sim_faults" db=0.9ms idle=559.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:29:28.404000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:40592] QUERY OK db=46.6ms queue=0.3ms idle=476.4ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["d942f698-89ca-4477-b2cc-24c08126241a", "CREATED", "AED", "1bd371b7-ae4b-4cc9-becd-16304ab928de", "slice9", ~U[2026-11-04 06:41:28Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("5000.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:39:28Z], "created", false, ~N[2026-11-04 06:29:28], ~N[2026-11-04 06:29:28]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:29:28.404000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1089340] [client 127.0.0.1:40592] [TabbySim] checkout payment=d942f698-89ca-4477-b2cc-24c08126241a session=1bd371b7-ae4b-4cc9-becd-16304ab928de decision=created reason=nil amount=5000.00 AED [Wed Nov 4 06:29:28.406000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:40592] QUERY OK source="tabby_sim_payments" db=0.8ms queue=0.1ms idle=482.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:29:28.408000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:40592] Sent 200 in 53ms [Wed Nov 4 06:29:28.409000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:54347] [Tabby] checkout post /api/v2/checkout -> 200 (393 ms, attempt 1) [Wed Nov 4 06:29:28.409000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:54347] [Tabby] session created payment=d942f698-89ca-4477-b2cc-24c08126241a [Wed Nov 4 06:29:28.410000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1089340] [client 115.99.167.137:54347] [Tabby] eligibility: show (amount=5000.00 AED) [Wed Nov 4 06:29:28.410000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:54347] Sent 200 in 394ms [Wed Nov 4 06:29:28.511000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:40596] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:29:28.511000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 127.0.0.1:40596] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:29:28.513000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:40596] QUERY OK source="tabby_sim_faults" db=0.7ms queue=0.1ms idle=431.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:29:28.537000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:40596] QUERY OK db=23.5ms idle=415.9ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["17232bb3-10e0-4b77-95cc-4276444bb592", "CREATED", "AED", "b826edca-b116-40ac-b575-6caf79b6f307", "slice9", ~U[2026-11-04 06:41:28Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("5000.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:39:28Z], "created", false, ~N[2026-11-04 06:29:28], ~N[2026-11-04 06:29:28]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:29:28.537000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1089340] [client 127.0.0.1:40596] [TabbySim] checkout payment=17232bb3-10e0-4b77-95cc-4276444bb592 session=b826edca-b116-40ac-b575-6caf79b6f307 decision=created reason=nil amount=5000.00 AED [Wed Nov 4 06:29:28.538000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:40596] QUERY OK source="tabby_sim_payments" db=0.6ms idle=371.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:29:28.541000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:40596] Sent 200 in 30ms [Wed Nov 4 06:29:28.543000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:61147] [Tabby] checkout post /api/v2/checkout -> 200 (468 ms, attempt 1) [Wed Nov 4 06:29:28.543000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:61147] [Tabby] session created payment=17232bb3-10e0-4b77-95cc-4276444bb592 [Wed Nov 4 06:29:28.543000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1089340] [client 115.99.167.137:61147] [Tabby] eligibility: show (amount=5000.00 AED) [Wed Nov 4 06:29:28.544000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61147] Sent 200 in 470ms [Wed Nov 4 06:29:29.034000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:54347] POST /tabby/demo/eligibility [Wed Nov 4 06:29:29.117000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:57206] POST /tabby/demo/eligibility [Wed Nov 4 06:29:29.366000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:40592] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:29:29.367000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 127.0.0.1:40592] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:29:29.369000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:40592] QUERY OK source="tabby_sim_faults" db=1.5ms queue=0.1ms idle=826.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:29:29.411000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:40592] QUERY OK db=39.3ms decode=0.1ms queue=0.6ms idle=587.4ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["ac378835-2d4d-4718-a13a-e034f3c790ce", "CREATED", "AED", "851bc4e2-6e80-4106-a124-0040705f7cdc", "slice9", ~U[2026-11-04 06:41:29Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("5000.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:39:29Z], "created", false, ~N[2026-11-04 06:29:29], ~N[2026-11-04 06:29:29]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:29:29.412000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1089340] [client 127.0.0.1:40592] [TabbySim] checkout payment=ac378835-2d4d-4718-a13a-e034f3c790ce session=851bc4e2-6e80-4106-a124-0040705f7cdc decision=created reason=nil amount=5000.00 AED [Wed Nov 4 06:29:29.414000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:40592] QUERY OK source="tabby_sim_payments" db=2.1ms idle=536.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:29:29.417000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:40592] Sent 200 in 50ms [Wed Nov 4 06:29:29.418000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:54347] [Tabby] checkout post /api/v2/checkout -> 200 (382 ms, attempt 1) [Wed Nov 4 06:29:29.418000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:54347] [Tabby] session created payment=ac378835-2d4d-4718-a13a-e034f3c790ce [Wed Nov 4 06:29:29.419000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1089340] [client 115.99.167.137:54347] [Tabby] eligibility: show (amount=5000.00 AED) [Wed Nov 4 06:29:29.419000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:54347] Sent 200 in 384ms [Wed Nov 4 06:29:29.522000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:40596] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:29:29.523000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 127.0.0.1:40596] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:29:29.524000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:40596] QUERY OK source="tabby_sim_faults" db=0.7ms idle=560.2ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:29:29.549000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:40596] QUERY OK db=24.0ms queue=0.1ms idle=391.6ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["6c7bf25d-c137-44ac-8f6b-f9abb74e5a51", "CREATED", "AED", "ba0b3bb6-e82e-40e8-a5e3-13bda351155d", "slice9", ~U[2026-11-04 06:41:29Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("5000.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:39:29Z], "created", false, ~N[2026-11-04 06:29:29], ~N[2026-11-04 06:29:29]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:29:29.549000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1089340] [client 127.0.0.1:40596] [TabbySim] checkout payment=6c7bf25d-c137-44ac-8f6b-f9abb74e5a51 session=ba0b3bb6-e82e-40e8-a5e3-13bda351155d decision=created reason=nil amount=5000.00 AED [Wed Nov 4 06:29:29.551000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:40596] QUERY OK source="tabby_sim_payments" db=1.0ms idle=328.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:29:29.552000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:40596] Sent 200 in 29ms [Wed Nov 4 06:29:29.553000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:57206] [Tabby] checkout post /api/v2/checkout -> 200 (435 ms, attempt 1) [Wed Nov 4 06:29:29.553000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:57206] [Tabby] session created payment=6c7bf25d-c137-44ac-8f6b-f9abb74e5a51 [Wed Nov 4 06:29:29.553000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1089340] [client 115.99.167.137:57206] [Tabby] eligibility: show (amount=5000.00 AED) [Wed Nov 4 06:29:29.553000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:57206] Sent 200 in 436ms [Wed Nov 4 06:29:30.017000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:54347] POST /tabby/demo/eligibility [Wed Nov 4 06:29:30.318000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:40592] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:29:30.318000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 127.0.0.1:40592] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:29:30.320000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:40592] QUERY OK source="tabby_sim_faults" db=0.9ms idle=904.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:29:30.358000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:40592] QUERY OK db=37.3ms queue=0.3ms idle=903.5ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["f4351256-600f-4c89-af61-02ae607ad9ac", "CREATED", "AED", "18d9f56b-fc7d-48f6-bded-ab825eaef0f4", "slice9", ~U[2026-11-04 06:41:30Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("5000.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:39:30Z], "created", false, ~N[2026-11-04 06:29:30], ~N[2026-11-04 06:29:30]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:29:30.359000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1089340] [client 127.0.0.1:40592] [TabbySim] checkout payment=f4351256-600f-4c89-af61-02ae607ad9ac session=18d9f56b-fc7d-48f6-bded-ab825eaef0f4 decision=created reason=nil amount=5000.00 AED [Wed Nov 4 06:29:30.362000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:40592] QUERY OK source="tabby_sim_payments" db=2.2ms queue=0.3ms idle=835.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:29:30.364000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:40592] Sent 200 in 46ms [Wed Nov 4 06:29:30.365000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:54347] [Tabby] checkout post /api/v2/checkout -> 200 (348 ms, attempt 1) [Wed Nov 4 06:29:30.366000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:54347] [Tabby] session created payment=f4351256-600f-4c89-af61-02ae607ad9ac [Wed Nov 4 06:29:30.366000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1089340] [client 115.99.167.137:54347] [Tabby] eligibility: show (amount=5000.00 AED) [Wed Nov 4 06:29:30.366000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:54347] Sent 200 in 348ms [Wed Nov 4 06:29:59.654000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1068.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:29:59Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:29:59.654000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:29:59.655000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=352.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:29:59Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:29:59.656000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=353.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:29:59.689000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399549 scheduled in 2s (13 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:30:02.708000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1404.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:30:02Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:30:02.745000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=36.1ms idle=1406.0ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:30:02], true, "dddeb79b-01c4-443b-8801-a293cd983ee2", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:30:02.745000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=dddeb79b-01c4-443b-8801-a293cd983ee2 CREATED -> EXPIRED [Wed Nov 4 06:30:02.752000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=6.2ms idle=1441.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["dddeb79b-01c4-443b-8801-a293cd983ee2"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:30:02.752000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=dddeb79b-01c4-443b-8801-a293cd983ee2 [Wed Nov 4 06:30:02.752000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=dddeb79b-01c4-443b-8801-a293cd983ee2 expired (expires_at 2026-11-04 06:30:01Z, session_status=created) [Wed Nov 4 06:30:02.753000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1448.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:30:02Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:30:02.753000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:30:02.756000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=2.0ms idle=1448.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:30:02Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:30:02.757000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1178.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:30:02.840000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399563 scheduled in 5s (12 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:30:08.711000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=405.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:30:08Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:30:08.756000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=44.8ms idle=406.9ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:30:08], true, "ea8292fd-efb1-493e-9248-4ad2317a9c1d", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:30:08.757000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=ea8292fd-efb1-493e-9248-4ad2317a9c1d CREATED -> EXPIRED [Wed Nov 4 06:30:08.758000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.3ms idle=452.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["ea8292fd-efb1-493e-9248-4ad2317a9c1d"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:30:08.759000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=ea8292fd-efb1-493e-9248-4ad2317a9c1d [Wed Nov 4 06:30:08.759000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=ea8292fd-efb1-493e-9248-4ad2317a9c1d expired (expires_at 2026-11-04 06:30:07Z, session_status=created) [Wed Nov 4 06:30:08.761000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.7ms idle=454.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:30:08Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:30:08.761000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:30:08.763000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.3ms idle=456.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:30:08Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:30:08.764000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=458.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:30:08.853000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399564 scheduled in 48s (11 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:30:57.885000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1580.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:30:57Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:30:57.945000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=59.5ms idle=1581.3ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:30:57], true, "de1a953e-5e6d-4c50-aedd-d9bce3784557", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:30:57.945000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=de1a953e-5e6d-4c50-aedd-d9bce3784557 CREATED -> EXPIRED [Wed Nov 4 06:30:57.946000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1641.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["de1a953e-5e6d-4c50-aedd-d9bce3784557"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:30:57.947000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=de1a953e-5e6d-4c50-aedd-d9bce3784557 expired (expires_at 2026-11-04 06:30:56Z, session_status=rejected) [Wed Nov 4 06:30:57.948000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1643.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:30:57Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:30:57.948000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:30:57.949000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1187.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:30:57Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:30:57.950000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=645.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:30:58.002000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399565 scheduled in 36s (10 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:31:34.969000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1663.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:31:34Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:31:35.034000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=64.0ms idle=1664.7ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:31:34], true, "d9d6d145-0ebb-4ba8-a255-e082d9ec4663", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:31:35.034000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=d9d6d145-0ebb-4ba8-a255-e082d9ec4663 CREATED -> EXPIRED [Wed Nov 4 06:31:35.035000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1729.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["d9d6d145-0ebb-4ba8-a255-e082d9ec4663"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:31:35.035000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=d9d6d145-0ebb-4ba8-a255-e082d9ec4663 [Wed Nov 4 06:31:35.035000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=d9d6d145-0ebb-4ba8-a255-e082d9ec4663 expired (expires_at 2026-11-04 06:31:33Z, session_status=created) [Wed Nov 4 06:31:35.036000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.1ms idle=1730.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:31:35Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:31:35.037000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:31:35.037000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1731.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:31:35Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:31:35.038000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1732.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:31:35.080000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399566 scheduled in 27s (9 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:32:03.056000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=749.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:32:03Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:32:03.110000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=53.7ms queue=0.1ms idle=751.5ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:32:03], true, "8186cb33-5797-4753-b254-cb9562f441c1", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:32:03.111000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=8186cb33-5797-4753-b254-cb9562f441c1 CREATED -> EXPIRED [Wed Nov 4 06:32:03.115000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=3.9ms idle=805.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["8186cb33-5797-4753-b254-cb9562f441c1"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:32:03.115000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=8186cb33-5797-4753-b254-cb9562f441c1 expired (expires_at 2026-11-04 06:32:02Z, session_status=rejected) [Wed Nov 4 06:32:03.117000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.3ms idle=810.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:32:03Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:32:03.117000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:32:03.119000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=813.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:32:03Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:32:03.121000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.6ms idle=814.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:32:03.182000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399571 scheduled in 60s (8 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:33:04.425000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1115.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:33:04Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:33:04.426000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:33:04.427000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1090.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:33:04Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:33:04.428000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1080.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:33:04.484000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399572 scheduled in 23s (8 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:33:28.493000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1089.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:33:28Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:33:28.524000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=30.5ms idle=397.0ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:33:28], true, "5834cf08-21b2-4922-82b5-aaceb43b0dc4", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:33:28.525000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=5834cf08-21b2-4922-82b5-aaceb43b0dc4 CREATED -> EXPIRED [Wed Nov 4 06:33:28.526000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=218.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["5834cf08-21b2-4922-82b5-aaceb43b0dc4"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:33:28.526000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=5834cf08-21b2-4922-82b5-aaceb43b0dc4 [Wed Nov 4 06:33:28.526000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=5834cf08-21b2-4922-82b5-aaceb43b0dc4 expired (expires_at 2026-11-04 06:33:27Z, session_status=created) [Wed Nov 4 06:33:28.527000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=219.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:33:28Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:33:28.527000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:33:28.528000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=220.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:33:28Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:33:28.529000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=221.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:33:28.560000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399573 scheduled in 60s (7 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:34:29.993000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1685.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:34:29Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:34:29.993000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:34:29.994000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.1ms idle=1686.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:34:29Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:34:29.995000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1186.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:34:30.049000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399577 scheduled in 14s (7 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:34:43.382000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61175] GET /tabby/demo [Wed Nov 4 06:34:43.386000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61175] Sent 200 in 3ms [Wed Nov 4 06:34:43.908000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61175] POST /tabby/demo/summary [Wed Nov 4 06:34:43.909000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61175] Sent 200 in 596µs [Wed Nov 4 06:34:44.780000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61175] POST /tabby/demo/eligibility [Wed Nov 4 06:34:45.032000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:57600] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:34:45.033000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 127.0.0.1:57600] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:34:45.034000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:57600] QUERY OK source="tabby_sim_faults" db=1.1ms idle=1726.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:34:45.060000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:57600] QUERY OK db=25.0ms idle=1728.0ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["fe296a3d-c1b1-4d3a-915b-a81cd349eee9", "CREATED", "AED", "050ebd19-33f6-4db4-8040-56240ca981ea", "slice9", ~U[2026-11-04 06:46:45Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("5000.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:44:45Z], "created", false, ~N[2026-11-04 06:34:45], ~N[2026-11-04 06:34:45]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:34:45.060000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1089340] [client 127.0.0.1:57600] [TabbySim] checkout payment=fe296a3d-c1b1-4d3a-915b-a81cd349eee9 session=050ebd19-33f6-4db4-8040-56240ca981ea decision=created reason=nil amount=5000.00 AED [Wed Nov 4 06:34:45.061000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:57600] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.1ms idle=1362.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:34:45.063000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:57600] Sent 200 in 31ms [Wed Nov 4 06:34:45.064000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:61175] [Tabby] checkout post /api/v2/checkout -> 200 (283 ms, attempt 1) [Wed Nov 4 06:34:45.064000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:61175] [Tabby] session created payment=fe296a3d-c1b1-4d3a-915b-a81cd349eee9 [Wed Nov 4 06:34:45.064000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1089340] [client 115.99.167.137:61175] [Tabby] eligibility: show (amount=5000.00 AED) [Wed Nov 4 06:34:45.064000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61175] Sent 200 in 284ms [Wed Nov 4 06:34:45.183000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=998.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:34:45Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:34:45.226000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=42.3ms idle=597.1ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:34:45], true, "143dfa13-a33e-467e-a3eb-473bbf1a51aa", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:34:45.226000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=143dfa13-a33e-467e-a3eb-473bbf1a51aa CREATED -> EXPIRED [Wed Nov 4 06:34:45.228000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=386.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["143dfa13-a33e-467e-a3eb-473bbf1a51aa"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:34:45.228000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=143dfa13-a33e-467e-a3eb-473bbf1a51aa expired (expires_at 2026-11-04 06:34:43Z, session_status=rejected) [Wed Nov 4 06:34:45.229000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.1ms idle=303.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:34:45Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:34:45.229000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:34:45.230000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.1ms idle=195.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:34:45Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:34:45.231000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms queue=0.2ms idle=170.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:34:45.289000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399578 scheduled in 10s (7 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:34:56.310000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1002.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:34:56Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:34:56.344000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=33.4ms idle=85.4ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:34:56], true, "34ed0a25-0300-4333-bc7c-8053b0879295", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:34:56.344000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=34ed0a25-0300-4333-bc7c-8053b0879295 CREATED -> EXPIRED [Wed Nov 4 06:34:56.345000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=37.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["34ed0a25-0300-4333-bc7c-8053b0879295"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:34:56.345000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=34ed0a25-0300-4333-bc7c-8053b0879295 [Wed Nov 4 06:34:56.345000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=34ed0a25-0300-4333-bc7c-8053b0879295 expired (expires_at 2026-11-04 06:34:55Z, session_status=created) [Wed Nov 4 06:34:56.346000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=38.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:34:56Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:34:56.346000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:34:56.347000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=39.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:34:56Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:34:56.348000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=40.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:34:56.401000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399579 scheduled in 60s (6 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:35:01.842000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61175] POST /tabby/demo/place [Wed Nov 4 06:35:01.944000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 115.99.167.137:61175] QUERY OK db=80.8ms queue=1.8ms idle=1554.6ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`order_reference`,`cancel_url`,`failure_url`,`success_url`,`amount`,`needs_attention`,`captured_amount`,`refunded_amount`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["32ab96a7-0c93-4760-aa69-0211a24d70e4", "new", "AED", "slice9", "DEMO-A82AA4AF", "http://78.47.213.209:4030/tabby/demo/result/cancel?lang=ar&order=DEMO-A82AA4AF", "http://78.47.213.209:4030/tabby/demo/result/failure?lang=ar&order=DEMO-A82AA4AF", "http://78.47.213.209:4030/tabby/demo/result/success?lang=ar&order=DEMO-A82AA4AF", Decimal.new("5000.00"), false, Decimal.new("0"), Decimal.new("0"), ~N[2026-11-04 06:35:01], ~N[2026-11-04 06:35:01]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Wed Nov 4 06:35:02.414000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:41766] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:35:02.435000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 127.0.0.1:41766] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "ar", "merchant_code" => "slice9", "merchant_urls" => %{"cancel" => "http://78.47.213.209:4030/tabby/return/32ab96a7-0c93-4760-aa69-0211a24d70e4/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/32ab96a7-0c93-4760-aa69-0211a24d70e4/failure", "success" => "http://78.47.213.209:4030/tabby/return/32ab96a7-0c93-4760-aa69-0211a24d70e4/success"}, "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 4, "title" => "كاميرا تجريبية", "unit_price" => "1250.00"}], "reference_id" => "DEMO-A82AA4AF"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:35:02.441000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:41766] QUERY OK source="tabby_sim_faults" db=0.8ms queue=3.3ms idle=819.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:35:02.560000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:41766] QUERY OK db=115.8ms queue=1.4ms idle=740.2ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`lang`,`amount`,`buyer`,`buyer_history`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`shipping_address`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["087dbe6c-2fff-448e-8a38-ca23d245f77b", "CREATED", "AED", "62fac3f4-3ca1-4b74-a91b-82d914fef284", "slice9", ~U[2026-11-04 06:47:02Z], %{"lang" => "ar", "merchant_code" => "slice9", "merchant_urls" => %{"cancel" => "http://78.47.213.209:4030/tabby/return/32ab96a7-0c93-4760-aa69-0211a24d70e4/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/32ab96a7-0c93-4760-aa69-0211a24d70e4/failure", "success" => "http://78.47.213.209:4030/tabby/return/32ab96a7-0c93-4760-aa69-0211a24d70e4/success"}, "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 4, "title" => "كاميرا تجريبية", "unit_price" => "1250.00"}], "reference_id" => "DEMO-A82AA4AF"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "0", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 4, "reference_id" => "", "size" => "", "size_type" => "", "title" => "كاميرا تجريبية", "unit_price" => "1250"}], "reference_id" => "DEMO-A82AA4AF", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "ar", Decimal.new("5000.00"), %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, %{"registered_since" => "2023-02-01T10:00:00Z"}, [], true, %{"cancel" => "http://78.47.213.209:4030/tabby/return/32ab96a7-0c93-4760-aa69-0211a24d70e4/cancel", "failure" => "http://78.47.213.209:4030/tabby/return/32ab96a7-0c93-4760-aa69-0211a24d70e4/failure", "success" => "http://78.47.213.209:4030/tabby/return/32ab96a7-0c93-4760-aa69-0211a24d70e4/success"}, [], ~U[2026-11-04 06:45:02Z], "created", %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}, false, ~N[2026-11-04 06:35:02], ~N[2026-11-04 06:35:02]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:35:02.560000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1089340] [client 127.0.0.1:41766] [TabbySim] checkout payment=087dbe6c-2fff-448e-8a38-ca23d245f77b session=62fac3f4-3ca1-4b74-a91b-82d914fef284 decision=created reason=nil amount=5000.00 AED [Wed Nov 4 06:35:02.568000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:41766] QUERY OK source="tabby_sim_payments" db=4.1ms idle=620.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:35:02.574000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:41766] Sent 200 in 159ms [Wed Nov 4 06:35:02.576000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:61175] [Tabby] checkout post /api/v2/checkout -> 200 (631 ms, attempt 1) [Wed Nov 4 06:35:02.576000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:61175] [Tabby] session created payment=087dbe6c-2fff-448e-8a38-ca23d245f77b [Wed Nov 4 06:35:02.585000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 115.99.167.137:61175] QUERY OK source="tabby_payments" db=4.6ms queue=1.8ms idle=339.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["32ab96a7-0c93-4760-aa69-0211a24d70e4"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Wed Nov 4 06:35:02.670000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 115.99.167.137:61175] QUERY OK source="tabby_payments" db=81.3ms queue=3.5ms idle=340.5ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-04 06:55:02Z], "087dbe6c-2fff-448e-8a38-ca23d245f77b", "62fac3f4-3ca1-4b74-a91b-82d914fef284", ~N[2026-11-04 06:35:02], "32ab96a7-0c93-4760-aa69-0211a24d70e4"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Wed Nov 4 06:35:02.671000 2026] [DaProductApp.Tabby.Sessions:info] [pid 1089340] [client 115.99.167.137:61175] [Tabby] session created attempt=32ab96a7-0c93-4760-aa69-0211a24d70e4 payment=087dbe6c-2fff-448e-8a38-ca23d245f77b [Wed Nov 4 06:35:02.738000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61175] Sent 200 in 895ms [Wed Nov 4 06:35:03.376000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61175] GET /tabby-sim/hpp/62fac3f4-3ca1-4b74-a91b-82d914fef284 [Wed Nov 4 06:35:03.376000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 115.99.167.137:61175] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "62fac3f4-3ca1-4b74-a91b-82d914fef284"} Pipelines: [:tabby_sim_hpp] [Wed Nov 4 06:35:03.390000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 115.99.167.137:61175] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.6ms idle=828.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["62fac3f4-3ca1-4b74-a91b-82d914fef284"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Wed Nov 4 06:35:03.408000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61175] Sent 200 in 32ms [Wed Nov 4 06:35:08.075000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61175] POST /tabby-sim/hpp/62fac3f4-3ca1-4b74-a91b-82d914fef284 [Wed Nov 4 06:35:08.075000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 115.99.167.137:61175] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "approve", "otp" => "8888", "session_id" => "62fac3f4-3ca1-4b74-a91b-82d914fef284"} Pipelines: [:tabby_sim_hpp] [Wed Nov 4 06:35:08.078000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 115.99.167.137:61175] QUERY OK source="tabby_sim_payments" db=2.2ms idle=1768.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["62fac3f4-3ca1-4b74-a91b-82d914fef284"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Wed Nov 4 06:35:08.305000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 115.99.167.137:61175] QUERY OK source="tabby_sim_payments" db=226.2ms queue=0.4ms idle=1771.2ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["AUTHORIZED", ~N[2026-11-04 06:35:08], "087dbe6c-2fff-448e-8a38-ca23d245f77b", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:35:08.305000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client 115.99.167.137:61175] [TabbySim] payment=087dbe6c-2fff-448e-8a38-ca23d245f77b CREATED -> AUTHORIZED [Wed Nov 4 06:35:08.306000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 115.99.167.137:61175] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1998.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["087dbe6c-2fff-448e-8a38-ca23d245f77b"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:35:08.310000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 115.99.167.137:61175] QUERY OK source="tabby_sim_webhooks" db=0.4ms queue=0.5ms idle=1002.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["slice9"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Wed Nov 4 06:35:08.310000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client 115.99.167.137:61175] [TabbySim] no webhook registered for merchant_code=slice9; event=authorize payment=087dbe6c-2fff-448e-8a38-ca23d245f77b [Wed Nov 4 06:35:08.311000 2026] [DaProductApp.TabbySim.Hpp:info] [pid 1089340] [client 115.99.167.137:61175] [TabbySim] hpp payment=087dbe6c-2fff-448e-8a38-ca23d245f77b action=approve status=AUTHORIZED [Wed Nov 4 06:35:08.311000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61175] Sent 302 in 236ms [Wed Nov 4 06:35:08.786000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61175] GET /tabby/return/32ab96a7-0c93-4760-aa69-0211a24d70e4/success [Wed Nov 4 06:35:08.791000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 115.99.167.137:61175] QUERY OK source="tabby_payments" db=0.8ms idle=749.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["32ab96a7-0c93-4760-aa69-0211a24d70e4"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:35:08.960000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61175] Sent 302 in 174ms [Wed Nov 4 06:35:09.137000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=829.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["32ab96a7-0c93-4760-aa69-0211a24d70e4"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:35:09.447000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61175] GET /tabby/demo/result/success [Wed Nov 4 06:35:09.447000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61175] Sent 200 in 582µs [Wed Nov 4 06:35:09.493000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:41766] GET /tabby-sim/api/v2/payments/087dbe6c-2fff-448e-8a38-ca23d245f77b [Wed Nov 4 06:35:09.493000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 127.0.0.1:41766] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "087dbe6c-2fff-448e-8a38-ca23d245f77b"} Pipelines: [:tabby_sim_api] [Wed Nov 4 06:35:09.499000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:41766] QUERY OK source="tabby_sim_faults" db=0.4ms queue=0.7ms idle=707.2ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "087dbe6c-2fff-448e-8a38-ca23d245f77b"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 06:35:09.500000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:41766] QUERY OK source="tabby_sim_faults" db=0.8ms idle=684.2ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:35:09.501000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:41766] QUERY OK source="tabby_sim_payments" db=0.4ms idle=540.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["087dbe6c-2fff-448e-8a38-ca23d245f77b"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Wed Nov 4 06:35:09.501000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:41766] Sent 200 in 8ms [Wed Nov 4 06:35:09.502000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client -] [Tabby] retrieve get /api/v2/payments/087dbe6c-2fff-448e-8a38-ca23d245f77b -> 200 (365 ms, attempt 1) [Wed Nov 4 06:35:09.603000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_payments" db=77.2ms queue=0.5ms idle=394.7ms UPDATE `tabby_payments` AS t0 SET t0.`authorized_at` = ?, t0.`winner_key` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [~U[2026-11-04 06:35:09Z], "781ff904c15cdef992dab2022744464794ae0fc29c5d08452f57902fac5c3567", "authorized", ~N[2026-11-04 06:35:09], "32ab96a7-0c93-4760-aa69-0211a24d70e4", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Wed Nov 4 06:35:09.604000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=466.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["32ab96a7-0c93-4760-aa69-0211a24d70e4"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:35:09.604000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1089340] [client -] [Tabby] verify: attempt=32ab96a7-0c93-4760-aa69-0211a24d70e4 payment=087dbe6c-2fff-448e-8a38-ca23d245f77b created -> authorized [Wed Nov 4 06:35:09.837000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_payments" db=2.4ms queue=1.0ms idle=332.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["32ab96a7-0c93-4760-aa69-0211a24d70e4"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:35:09.902000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_payments" db=56.6ms queue=0.4ms idle=242.2ms UPDATE `tabby_payments` AS t0 SET t0.`claimed_at` = ?, t0.`capture_reference_id` = ?, t0.`claimed_by` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [~U[2026-11-04 06:35:09Z], "capture-DEMO-A82AA4AF", "nonode@nohost", "capturing", ~N[2026-11-04 06:35:09], "32ab96a7-0c93-4760-aa69-0211a24d70e4", "authorized"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Wed Nov 4 06:35:09.903000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=299.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["32ab96a7-0c93-4760-aa69-0211a24d70e4"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:35:09.904000 2026] [DaProductApp.Tabby.Capture:info] [pid 1089340] [client -] [Tabby] capture: attempt=32ab96a7-0c93-4760-aa69-0211a24d70e4 payment=087dbe6c-2fff-448e-8a38-ca23d245f77b claimed (authorized -> capturing) [Wed Nov 4 06:35:09.994000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61175] GET /tabby/demo/status/32ab96a7-0c93-4760-aa69-0211a24d70e4 [Wed Nov 4 06:35:09.996000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 115.99.167.137:61175] QUERY OK source="tabby_payments" db=1.3ms queue=0.2ms idle=331.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["32ab96a7-0c93-4760-aa69-0211a24d70e4"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:35:09.998000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61175] Sent 200 in 4ms [Wed Nov 4 06:35:10.416000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:41766] POST /tabby-sim/api/v2/payments/087dbe6c-2fff-448e-8a38-ca23d245f77b/captures [Wed Nov 4 06:35:10.416000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 127.0.0.1:41766] Processing with DaProductAppWeb.TabbySim.PaymentsController.capture/2 Parameters: %{"amount" => "5000.00", "id" => "087dbe6c-2fff-448e-8a38-ca23d245f77b", "reference_id" => "capture-DEMO-A82AA4AF"} Pipelines: [:tabby_sim_api] [Wed Nov 4 06:35:10.417000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:41766] QUERY OK source="tabby_sim_faults" db=0.3ms idle=600.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["capture", "087dbe6c-2fff-448e-8a38-ca23d245f77b"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Wed Nov 4 06:35:10.418000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:41766] QUERY OK source="tabby_sim_faults" db=0.5ms idle=595.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["capture"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:35:10.419000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:41766] QUERY OK source="tabby_sim_payments" db=0.5ms idle=580.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["087dbe6c-2fff-448e-8a38-ca23d245f77b"] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:227 [Wed Nov 4 06:35:10.419000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:41766] QUERY OK db=0.3ms idle=540.9ms begin [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Wed Nov 4 06:35:10.420000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:41766] QUERY OK source="tabby_sim_payments" db=0.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) FOR UPDATE ["087dbe6c-2fff-448e-8a38-ca23d245f77b"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:231 [Wed Nov 4 06:35:10.422000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:41766] QUERY OK source="tabby_sim_payments" db=0.7ms UPDATE `tabby_sim_payments` SET `status` = ?, `closed_at` = ?, `captures` = ?, `updated_at` = ? WHERE `id` = ? ["CLOSED", ~U[2026-11-04 06:35:10Z], [%{"amount" => "5000", "created_at" => "2026-11-04T06:35:10Z", "discount_amount" => "0", "id" => "7d67b1b3-bf24-4a79-9016-e5fdaf0a8791", "items" => nil, "reference_id" => "capture-DEMO-A82AA4AF", "shipping_amount" => "0", "tax_amount" => "0"}], ~N[2026-11-04 06:35:10], "087dbe6c-2fff-448e-8a38-ca23d245f77b"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:244 [Wed Nov 4 06:35:10.422000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client 127.0.0.1:41766] [TabbySim] capture payment=087dbe6c-2fff-448e-8a38-ca23d245f77b status=CLOSED [Wed Nov 4 06:35:10.488000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:41766] QUERY OK db=65.6ms commit [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Wed Nov 4 06:35:10.489000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:41766] QUERY OK source="tabby_sim_webhooks" db=0.9ms idle=586.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["slice9"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Wed Nov 4 06:35:10.489000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client 127.0.0.1:41766] [TabbySim] no webhook registered for merchant_code=slice9; event=capture payment=087dbe6c-2fff-448e-8a38-ca23d245f77b [Wed Nov 4 06:35:10.491000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:41766] QUERY OK source="tabby_sim_webhooks" db=1.0ms idle=586.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["slice9"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Wed Nov 4 06:35:10.491000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client 127.0.0.1:41766] [TabbySim] no webhook registered for merchant_code=slice9; event=close payment=087dbe6c-2fff-448e-8a38-ca23d245f77b [Wed Nov 4 06:35:10.491000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:41766] Sent 200 in 75ms [Wed Nov 4 06:35:10.492000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client -] [Tabby] capture post /api/v2/payments/087dbe6c-2fff-448e-8a38-ca23d245f77b/captures -> 200 (588 ms, attempt 1) [Wed Nov 4 06:35:10.558000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_payments" db=64.1ms queue=0.5ms idle=496.9ms UPDATE `tabby_payments` AS t0 SET t0.`captured_amount` = ?, t0.`captured_at` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [Decimal.new("5000"), ~U[2026-11-04 06:35:10Z], "captured", ~N[2026-11-04 06:35:10], "32ab96a7-0c93-4760-aa69-0211a24d70e4", "capturing"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Wed Nov 4 06:35:10.558000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=507.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["32ab96a7-0c93-4760-aa69-0211a24d70e4"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:35:10.559000 2026] [DaProductApp.Tabby.Verifier:info] [pid 1089340] [client -] [Tabby] verify: attempt=32ab96a7-0c93-4760-aa69-0211a24d70e4 payment=087dbe6c-2fff-448e-8a38-ca23d245f77b capturing -> captured [Wed Nov 4 06:35:10.559000 2026] [DaProductApp.Tabby.Capture:info] [pid 1089340] [client -] [Tabby] capture: attempt=32ab96a7-0c93-4760-aa69-0211a24d70e4 payment=087dbe6c-2fff-448e-8a38-ca23d245f77b is captured [Wed Nov 4 06:35:12.412000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61175] GET /tabby/demo/status/32ab96a7-0c93-4760-aa69-0211a24d70e4 [Wed Nov 4 06:35:12.414000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 115.99.167.137:61175] QUERY OK source="tabby_payments" db=1.0ms idle=215.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["32ab96a7-0c93-4760-aa69-0211a24d70e4"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:35:12.414000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61175] Sent 200 in 2ms [Wed Nov 4 06:35:17.522000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61175] GET /tabby/demo/result/success [Wed Nov 4 06:35:17.522000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61175] Sent 200 in 494µs [Wed Nov 4 06:35:18.072000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61175] GET /tabby/demo/status/32ab96a7-0c93-4760-aa69-0211a24d70e4 [Wed Nov 4 06:35:18.073000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 115.99.167.137:61175] QUERY OK source="tabby_payments" db=0.7ms idle=1765.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["32ab96a7-0c93-4760-aa69-0211a24d70e4"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 06:35:18.073000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61175] Sent 200 in 1ms [Wed Nov 4 06:35:57.784000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1475.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:35:57Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:35:57.785000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:35:57.785000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.1ms idle=1476.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:35:57Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:35:57.786000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1477.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:35:57.829000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399585 scheduled in 60s (6 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:36:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.7ms idle=1117.5ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 06:36:59.025000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1715.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:36:59Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:36:59.025000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:36:59.027000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1716.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:36:59Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:36:59.028000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1718.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:36:59.127000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399588 scheduled in 60s (6 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:37:04.178000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_payments" db=0.5ms queue=0.6ms idle=1864.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["slice9", ~U[2026-10-17 06:37:04Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 06:37:04.180000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_payments" db=0.5ms queue=0.6ms idle=1866.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["slice9", ~N[2026-11-04 06:35:04], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 06:37:04.182000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_payments" db=0.4ms queue=1.4ms idle=1867.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 06:37:04.184000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_payments" db=0.7ms queue=0.6ms idle=1869.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["slice9", ~N[2026-11-04 06:35:04], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 06:37:04.185000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_payments" db=0.5ms queue=0.3ms idle=1870.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["slice9", ~U[2026-11-04 06:32:04Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Wed Nov 4 06:37:04.200000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_webhook_events" db=0.6ms queue=0.6ms idle=1157.8ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-04 06:35:04Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Wed Nov 4 06:37:04.224000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_refunds" db=0.8ms queue=0.5ms idle=1162.2ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["slice9", ~N[2026-11-04 06:35:04], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Wed Nov 4 06:37:04.225000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_payments" db=0.3ms queue=0.4ms idle=667.5ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 06:37:04.227000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_payments" db=0.8ms queue=0.4ms idle=182.3ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["slice9", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Wed Nov 4 06:37:04.228000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_webhook_events" db=0.3ms queue=0.3ms idle=62.9ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Wed Nov 4 06:37:04.229000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_refunds" db=0.5ms decode=0.1ms queue=0.3ms idle=50.1ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["slice9"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Wed Nov 4 06:37:04.230000 2026] [DaProductApp.Tabby.Poller:debug] [pid 1089340] [client -] [Tabby] poll: nothing to do; 0 attempt(s) still watched [Wed Nov 4 06:37:42.848000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:51560] GET /tabby/demo [Wed Nov 4 06:37:42.850000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:51560] Sent 200 in 1ms [Wed Nov 4 06:38:00.415000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1100.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:38:00Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:38:00.416000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:38:00.417000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.4ms idle=1102.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:38:00Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:38:00.419000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms queue=0.1ms idle=1104.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:38:00.514000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399591 scheduled in 60s (6 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:39:01.865000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.6ms idle=1535.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:39:01Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:39:01.865000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:39:01.869000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=3.3ms queue=0.1ms idle=1537.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:39:01Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:39:01.873000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=2.2ms queue=0.3ms idle=1542.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:39:01.954000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399594 scheduled in 60s (6 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:39:03.617000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:63672] GET /tabby/demo [Wed Nov 4 06:39:03.622000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:63672] Sent 200 in 4ms [Wed Nov 4 06:39:07.141000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:63672] GET /tabby/demo [Wed Nov 4 06:39:07.145000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:63672] Sent 200 in 4ms [Wed Nov 4 06:40:03.272000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.4ms idle=938.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:40:03Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:40:03.272000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:40:03.275000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=2.8ms queue=0.1ms idle=939.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:40:03Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:40:03.276000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.1ms idle=942.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:40:03.341000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399601 scheduled in 60s (6 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:40:53.052000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61350] GET /tabby/demo [Wed Nov 4 06:40:53.053000 2026] [DaProductAppWeb.Plugs.TabbyDemoGate:warn] [pid 1089340] [client 115.99.167.137:61350] [Tabby] demo 401 GET /tabby/demo [Wed Nov 4 06:40:53.053000 2026] [DaProductAppWeb.Router:debug] [pid 1089340] [client 115.99.167.137:61350] Phoenix.Router halted in :tabby_demo/2 [Wed Nov 4 06:40:53.054000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61350] Sent 401 in 1ms [Wed Nov 4 06:41:02.861000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61350] GET /tabby/demo [Wed Nov 4 06:41:02.871000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61350] Sent 200 in 10ms [Wed Nov 4 06:41:03.696000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61350] POST /tabby/demo/summary [Wed Nov 4 06:41:03.697000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61350] Sent 200 in 630µs [Wed Nov 4 06:41:04.565000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61350] POST /tabby/demo/eligibility [Wed Nov 4 06:41:04.848000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=514.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:41:04Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:41:04.850000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:41:04.851000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.1ms idle=517.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:41:04Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:41:04.852000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:53192] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:41:04.852000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 127.0.0.1:53192] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:41:04.853000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=517.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:41:04.853000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:53192] QUERY OK source="tabby_sim_faults" db=0.8ms idle=517.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:41:04.893000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:53192] QUERY OK db=39.0ms idle=401.6ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["962ebd4f-c2e6-45be-b1a1-dc288fdd4ebb", "CREATED", "AED", "4a4dcc16-a30d-4f7a-b9cf-01f308919007", "slice9", ~U[2026-11-04 06:53:04Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:51:04Z], "created", false, ~N[2026-11-04 06:41:04], ~N[2026-11-04 06:41:04]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:41:04.893000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1089340] [client 127.0.0.1:53192] [TabbySim] checkout payment=962ebd4f-c2e6-45be-b1a1-dc288fdd4ebb session=4a4dcc16-a30d-4f7a-b9cf-01f308919007 decision=created reason=nil amount=850.00 AED [Wed Nov 4 06:41:04.894000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:53192] QUERY OK source="tabby_sim_payments" db=0.5ms idle=167.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:41:04.915000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399602 scheduled in 24s (6 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:41:04.956000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client 127.0.0.1:53192] [TabbySim] expiry job 399603 scheduled in 24s (7 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:41:04.956000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:53192] Sent 200 in 104ms [Wed Nov 4 06:41:04.957000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:61350] [Tabby] checkout post /api/v2/checkout -> 200 (392 ms, attempt 1) [Wed Nov 4 06:41:04.958000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:61350] [Tabby] session created payment=962ebd4f-c2e6-45be-b1a1-dc288fdd4ebb [Wed Nov 4 06:41:04.958000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1089340] [client 115.99.167.137:61350] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 06:41:04.958000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61350] Sent 200 in 393ms [Wed Nov 4 06:41:30.957000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=621.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:41:30Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:41:30.957000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=620.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:41:30Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:41:31.010000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=52.5ms idle=622.7ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:41:30], true, "17232bb3-10e0-4b77-95cc-4276444bb592", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:41:31.010000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=52.8ms idle=622.3ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:41:30], true, "17232bb3-10e0-4b77-95cc-4276444bb592", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:41:31.010000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=17232bb3-10e0-4b77-95cc-4276444bb592 CREATED -> EXPIRED [Wed Nov 4 06:41:31.011000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=675.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["17232bb3-10e0-4b77-95cc-4276444bb592"] ↳ Enum."-map/2-lists^map/1-1-"/2, at: lib/enum.ex:1703 [Wed Nov 4 06:41:31.011000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=675.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["17232bb3-10e0-4b77-95cc-4276444bb592"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:41:31.012000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=17232bb3-10e0-4b77-95cc-4276444bb592 [Wed Nov 4 06:41:31.012000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=17232bb3-10e0-4b77-95cc-4276444bb592 expired (expires_at 2026-11-04 06:41:28Z, session_status=created) [Wed Nov 4 06:41:31.054000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=41.5ms idle=677.0ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:41:31], true, "d942f698-89ca-4477-b2cc-24c08126241a", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:41:31.054000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=42.0ms idle=676.5ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:41:31], true, "d942f698-89ca-4477-b2cc-24c08126241a", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:41:31.054000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=d942f698-89ca-4477-b2cc-24c08126241a CREATED -> EXPIRED [Wed Nov 4 06:41:31.055000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.1ms idle=173.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["d942f698-89ca-4477-b2cc-24c08126241a"] ↳ Enum."-map/2-lists^map/1-1-"/2, at: lib/enum.ex:1703 [Wed Nov 4 06:41:31.055000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=98.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["d942f698-89ca-4477-b2cc-24c08126241a"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:41:31.056000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=d942f698-89ca-4477-b2cc-24c08126241a [Wed Nov 4 06:41:31.056000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=d942f698-89ca-4477-b2cc-24c08126241a expired (expires_at 2026-11-04 06:41:28Z, session_status=created) [Wed Nov 4 06:41:31.119000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=63.9ms queue=0.1ms idle=98.5ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:41:31], true, "6c7bf25d-c137-44ac-8f6b-f9abb74e5a51", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:41:31.119000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=62.9ms idle=99.8ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:41:31], true, "6c7bf25d-c137-44ac-8f6b-f9abb74e5a51", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:41:31.120000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=6c7bf25d-c137-44ac-8f6b-f9abb74e5a51 CREATED -> EXPIRED [Wed Nov 4 06:41:31.121000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=109.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["6c7bf25d-c137-44ac-8f6b-f9abb74e5a51"] ↳ Enum."-map/2-lists^map/1-1-"/2, at: lib/enum.ex:1703 [Wed Nov 4 06:41:31.121000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=110.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["6c7bf25d-c137-44ac-8f6b-f9abb74e5a51"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:41:31.122000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=6c7bf25d-c137-44ac-8f6b-f9abb74e5a51 [Wed Nov 4 06:41:31.122000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=6c7bf25d-c137-44ac-8f6b-f9abb74e5a51 expired (expires_at 2026-11-04 06:41:29Z, session_status=created) [Wed Nov 4 06:41:31.154000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=33.0ms idle=109.7ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:41:31], true, "ac378835-2d4d-4718-a13a-e034f3c790ce", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:41:31.154000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=31.8ms queue=0.2ms idle=110.5ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:41:31], true, "ac378835-2d4d-4718-a13a-e034f3c790ce", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:41:31.154000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=ac378835-2d4d-4718-a13a-e034f3c790ce CREATED -> EXPIRED [Wed Nov 4 06:41:31.156000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.1ms idle=101.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["ac378835-2d4d-4718-a13a-e034f3c790ce"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:41:31.156000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=ac378835-2d4d-4718-a13a-e034f3c790ce [Wed Nov 4 06:41:31.156000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=ac378835-2d4d-4718-a13a-e034f3c790ce expired (expires_at 2026-11-04 06:41:29Z, session_status=created) [Wed Nov 4 06:41:31.156000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.5ms idle=101.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["ac378835-2d4d-4718-a13a-e034f3c790ce"] ↳ Enum."-map/2-lists^map/1-1-"/2, at: lib/enum.ex:1703 [Wed Nov 4 06:41:31.209000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=52.7ms idle=101.4ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:41:31], true, "f4351256-600f-4c89-af61-02ae607ad9ac", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:41:31.209000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=52.2ms queue=0.1ms idle=101.8ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:41:31], true, "f4351256-600f-4c89-af61-02ae607ad9ac", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:41:31.209000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=f4351256-600f-4c89-af61-02ae607ad9ac CREATED -> EXPIRED [Wed Nov 4 06:41:31.210000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=90.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["f4351256-600f-4c89-af61-02ae607ad9ac"] ↳ Enum."-map/2-lists^map/1-1-"/2, at: lib/enum.ex:1703 [Wed Nov 4 06:41:31.210000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=90.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["f4351256-600f-4c89-af61-02ae607ad9ac"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:41:31.211000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=f4351256-600f-4c89-af61-02ae607ad9ac [Wed Nov 4 06:41:31.211000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=f4351256-600f-4c89-af61-02ae607ad9ac expired (expires_at 2026-11-04 06:41:30Z, session_status=created) [Wed Nov 4 06:41:31.211000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=89.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:41:31Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:41:31.211000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 5 payment(s) were due [Wed Nov 4 06:41:31.212000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=89.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:41:31Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:41:31.212000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 5 payment(s) were due [Wed Nov 4 06:41:31.212000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=57.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:41:31Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:41:31.212000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=58.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:41:31Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:41:31.213000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=56.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:41:31.213000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.1ms idle=56.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:41:31.281000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399605 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:41:31.286000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399604 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:42:32.262000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1926.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:42:32Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:42:32.262000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1926.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:42:32Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:42:32.262000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:42:32.262000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:42:32.263000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1927.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:42:32Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:42:32.263000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1927.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:42:32Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:42:32.264000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1087.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:42:32.264000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1928.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:42:32.315000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399610 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:42:32.329000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399611 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:43:33.585000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1248.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:43:33Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:43:33.585000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1248.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:43:33Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:43:33.585000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:43:33.585000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:43:33.586000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1250.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:43:33Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:43:33.586000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms queue=0.1ms idle=1250.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:43:33Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:43:33.587000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.1ms idle=1251.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:43:33.588000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1251.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:43:33.631000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399612 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:43:33.649000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399613 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:44:34.823000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1486.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:44:34Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:44:34.823000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:44:34.823000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=1486.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:44:34Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:44:34.824000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:44:34.825000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms queue=0.1ms idle=1487.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:44:34Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:44:34.825000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1488.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:44:34Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:44:34.825000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1489.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:44:34.826000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1489.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:44:34.884000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399617 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:44:34.890000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399618 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:45:15.349000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:55546] GET /tabby/demo [Wed Nov 4 06:45:15.354000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:55546] Sent 200 in 4ms [Wed Nov 4 06:45:15.897000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:55546] POST /tabby/demo/summary [Wed Nov 4 06:45:15.898000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:55546] Sent 200 in 691µs [Wed Nov 4 06:45:16.890000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:55546] POST /tabby/demo/eligibility [Wed Nov 4 06:45:17.294000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:47250] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:45:17.294000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 127.0.0.1:47250] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:45:17.296000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:47250] QUERY OK source="tabby_sim_faults" db=1.0ms idle=954.6ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:45:17.494000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:47250] QUERY OK db=197.6ms idle=956.2ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["955dc256-d3c8-4ab1-b766-85c6b700131a", "CREATED", "AED", "4ad0c42a-f62d-4b36-a195-28506de4982c", "slice9", ~U[2026-11-04 06:57:17Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:55:17Z], "created", false, ~N[2026-11-04 06:45:17], ~N[2026-11-04 06:45:17]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:45:17.494000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1089340] [client 127.0.0.1:47250] [TabbySim] checkout payment=955dc256-d3c8-4ab1-b766-85c6b700131a session=4ad0c42a-f62d-4b36-a195-28506de4982c decision=created reason=nil amount=850.00 AED [Wed Nov 4 06:45:17.495000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:47250] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1154.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:45:17.498000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:47250] Sent 200 in 204ms [Wed Nov 4 06:45:17.499000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:55546] [Tabby] checkout post /api/v2/checkout -> 200 (608 ms, attempt 1) [Wed Nov 4 06:45:17.499000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:55546] [Tabby] session created payment=955dc256-d3c8-4ab1-b766-85c6b700131a [Wed Nov 4 06:45:17.499000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1089340] [client 115.99.167.137:55546] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 06:45:17.499000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:55546] Sent 200 in 609ms [Wed Nov 4 06:45:36.178000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1837.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:45:36Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:45:36.178000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1837.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:45:36Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:45:36.178000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:45:36.178000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:45:36.179000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1838.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:45:36Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:45:36.179000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms queue=0.1ms idle=1838.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:45:36Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:45:36.180000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms decode=0.4ms idle=1097.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:45:36.181000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=840.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:45:36.213000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399623 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:45:36.218000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399624 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:46:36.556000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1215.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:46:36Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:46:36.556000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1215.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:46:36Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:46:36.556000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:46:36.556000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:46:36.557000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1216.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:46:36Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:46:36.557000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1096.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:46:36Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:46:36.558000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=217.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:46:36.558000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=218.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:46:36.643000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399627 scheduled in 9s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:46:36.654000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399628 scheduled in 9s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:46:47.625000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1284.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:46:47Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:46:47.626000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1285.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:46:47Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:46:47.696000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=69.2ms queue=0.7ms idle=1285.8ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:46:47], true, "fe296a3d-c1b1-4d3a-915b-a81cd349eee9", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:46:47.696000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=68.8ms idle=1286.9ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:46:47], true, "fe296a3d-c1b1-4d3a-915b-a81cd349eee9", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:46:47.696000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=fe296a3d-c1b1-4d3a-915b-a81cd349eee9 CREATED -> EXPIRED [Wed Nov 4 06:46:47.697000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1356.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["fe296a3d-c1b1-4d3a-915b-a81cd349eee9"] ↳ Enum."-map/2-lists^map/1-1-"/2, at: lib/enum.ex:1703 [Wed Nov 4 06:46:47.697000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1356.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["fe296a3d-c1b1-4d3a-915b-a81cd349eee9"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:46:47.697000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=fe296a3d-c1b1-4d3a-915b-a81cd349eee9 [Wed Nov 4 06:46:47.697000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=fe296a3d-c1b1-4d3a-915b-a81cd349eee9 expired (expires_at 2026-11-04 06:46:45Z, session_status=created) [Wed Nov 4 06:46:47.698000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1146.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:46:47Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:46:47.698000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:46:47.699000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=144.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:46:47Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:46:47.699000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:46:47.699000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=73.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:46:47Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:46:47.700000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=73.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:46:47Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:46:47.700000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=73.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:46:47.700000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=4.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:46:47.756000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399629 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:46:47.761000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399630 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:46:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.9ms idle=93.6ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 06:47:48.878000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1535.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:47:48Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:47:48.878000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1535.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:47:48Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:47:48.878000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:47:48.878000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:47:48.880000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms queue=0.1ms idle=1536.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:47:48Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:47:48.880000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.1ms idle=1537.2ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:47:48Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:47:48.882000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.7ms idle=1537.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:47:48.883000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=2.9ms idle=1538.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:47:48.930000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399633 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:47:48.953000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399634 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:48:50.358000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1015.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:48:50Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:48:50.358000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1015.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:48:50Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:48:50.358000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:48:50.358000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:48:50.359000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1015.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:48:50Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:48:50.360000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1016.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:48:50Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:48:50.361000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.1ms idle=18.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:48:50.361000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=100.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:48:50.410000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399637 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:48:50.431000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399638 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:49:51.764000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1419.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:49:51Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:49:51.764000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:49:51.764000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1419.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:49:51Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:49:51.765000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:49:51.765000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms queue=0.2ms idle=1420.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:49:51Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:49:51.766000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.1ms idle=1420.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:49:51Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:49:51.766000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1421.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:49:51.766000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1421.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:49:51.797000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399640 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:49:51.821000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399641 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:49:54.027000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:51309] GET /tabby/demo [Wed Nov 4 06:49:54.030000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:51309] Sent 200 in 3ms [Wed Nov 4 06:49:54.202000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:50719] GET /tabby/demo [Wed Nov 4 06:49:54.203000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:50719] Sent 200 in 1ms [Wed Nov 4 06:49:54.677000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:50719] POST /tabby/demo/summary [Wed Nov 4 06:49:54.677000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:50719] Sent 200 in 783µs [Wed Nov 4 06:49:56.072000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:50719] POST /tabby/demo/eligibility [Wed Nov 4 06:49:56.344000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:40220] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:49:56.345000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 127.0.0.1:40220] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:49:56.346000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:40220] QUERY OK source="tabby_sim_faults" db=0.5ms idle=1001.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:49:56.382000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:40220] QUERY OK db=35.3ms idle=1002.4ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["50e3ed6d-698d-4c75-ac8f-c33c94a9c4df", "CREATED", "AED", "9bcf6903-5244-4818-8bb2-fc8bf2320b37", "slice9", ~U[2026-11-04 07:01:56Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 06:59:56Z], "created", false, ~N[2026-11-04 06:49:56], ~N[2026-11-04 06:49:56]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:49:56.382000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1089340] [client 127.0.0.1:40220] [TabbySim] checkout payment=50e3ed6d-698d-4c75-ac8f-c33c94a9c4df session=9bcf6903-5244-4818-8bb2-fc8bf2320b37 decision=created reason=nil amount=850.00 AED [Wed Nov 4 06:49:56.383000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:40220] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1038.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:49:56.385000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:40220] Sent 200 in 40ms [Wed Nov 4 06:49:56.386000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:50719] [Tabby] checkout post /api/v2/checkout -> 200 (313 ms, attempt 1) [Wed Nov 4 06:49:56.386000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:50719] [Tabby] session created payment=50e3ed6d-698d-4c75-ac8f-c33c94a9c4df [Wed Nov 4 06:49:56.386000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1089340] [client 115.99.167.137:50719] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 06:49:56.386000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:50719] Sent 200 in 313ms [Wed Nov 4 06:50:53.352000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1005.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:50:53Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:50:53.353000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:50:53.353000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1005.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:50:53Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:50:53.353000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:50:53.353000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=89.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:50:53Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:50:53.354000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=6.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:50:53.354000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.2ms idle=6.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:50:53Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:50:53.355000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.2ms idle=7.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:50:53.400000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399647 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:50:53.405000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399648 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:51:54.587000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1239.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:51:54Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:51:54.587000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1239.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:51:54Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:51:54.587000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:51:54.587000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:51:54.588000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1240.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:51:54Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:51:54.588000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1240.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:51:54Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:51:54.589000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1241.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:51:54.589000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1241.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:51:54.630000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399649 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:51:54.633000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399650 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:52:55.944000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1596.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:52:55Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:52:55.944000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1596.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:52:55Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:52:55.944000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:52:55.944000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:52:55.945000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1597.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:52:55Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:52:55.946000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms queue=0.1ms idle=1597.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:52:55Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:52:55.946000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1598.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:52:55.946000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1598.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:52:55.997000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399655 scheduled in 9s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:52:56.000000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399656 scheduled in 9s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:53:01.230000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61619] GET /tabby/demo [Wed Nov 4 06:53:01.234000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61619] Sent 200 in 4ms [Wed Nov 4 06:53:01.845000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61619] POST /tabby/demo/summary [Wed Nov 4 06:53:01.845000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61619] Sent 200 in 566µs [Wed Nov 4 06:53:02.796000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61619] POST /tabby/demo/eligibility [Wed Nov 4 06:53:03.128000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:33302] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:53:03.129000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 127.0.0.1:33302] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:53:03.131000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:33302] QUERY OK source="tabby_sim_faults" db=1.9ms idle=1505.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:53:03.182000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:33302] QUERY OK db=49.3ms queue=0.3ms idle=1423.5ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["1c627e8a-9277-4d72-899e-756663d8e282", "CREATED", "AED", "fe3f5385-4a5c-49ba-8739-e3da6691dec4", "slice9", ~U[2026-11-04 07:05:03Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 07:03:03Z], "created", false, ~N[2026-11-04 06:53:03], ~N[2026-11-04 06:53:03]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:53:03.184000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1089340] [client 127.0.0.1:33302] [TabbySim] checkout payment=1c627e8a-9277-4d72-899e-756663d8e282 session=fe3f5385-4a5c-49ba-8739-e3da6691dec4 decision=created reason=nil amount=850.00 AED [Wed Nov 4 06:53:03.185000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:33302] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1331.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:53:03.189000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:33302] Sent 200 in 61ms [Wed Nov 4 06:53:03.191000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:61619] [Tabby] checkout post /api/v2/checkout -> 200 (395 ms, attempt 1) [Wed Nov 4 06:53:03.191000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:61619] [Tabby] session created payment=1c627e8a-9277-4d72-899e-756663d8e282 [Wed Nov 4 06:53:03.191000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1089340] [client 115.99.167.137:61619] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 06:53:03.192000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61619] Sent 200 in 395ms [Wed Nov 4 06:53:07.037000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=687.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:53:07Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:53:07.039000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.6ms queue=0.8ms idle=687.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:53:07Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:53:07.074000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=36.2ms idle=688.7ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:53:07], true, "962ebd4f-c2e6-45be-b1a1-dc288fdd4ebb", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:53:07.074000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=962ebd4f-c2e6-45be-b1a1-dc288fdd4ebb CREATED -> EXPIRED [Wed Nov 4 06:53:07.074000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=34.9ms queue=0.2ms idle=689.8ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:53:07], true, "962ebd4f-c2e6-45be-b1a1-dc288fdd4ebb", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:53:07.079000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=727.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["962ebd4f-c2e6-45be-b1a1-dc288fdd4ebb"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:53:07.079000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.5ms idle=728.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["962ebd4f-c2e6-45be-b1a1-dc288fdd4ebb"] ↳ Enum."-map/2-lists^map/1-1-"/2, at: lib/enum.ex:1703 [Wed Nov 4 06:53:07.079000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=962ebd4f-c2e6-45be-b1a1-dc288fdd4ebb [Wed Nov 4 06:53:07.082000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=731.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:53:07Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:53:07.083000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:53:07.082000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=962ebd4f-c2e6-45be-b1a1-dc288fdd4ebb expired (expires_at 2026-11-04 06:53:04Z, session_status=created) [Wed Nov 4 06:53:07.090000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=6.4ms idle=733.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:53:07Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:53:07.088000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.8ms queue=1.0ms idle=130.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:53:07Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:53:07.091000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:53:07.091000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=54.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:53:07.093000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.9ms idle=53.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:53:07Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:53:07.098000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms queue=2.0ms idle=20.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:53:07.123000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399657 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:53:07.143000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399658 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:54:02.942000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61619] GET /tabby/demo [Wed Nov 4 06:54:02.948000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61619] Sent 200 in 5ms [Wed Nov 4 06:54:03.600000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61619] POST /tabby/demo/summary [Wed Nov 4 06:54:03.600000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:61619] Sent 200 in 503µs [Wed Nov 4 06:54:04.516000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:58195] POST /tabby/demo/eligibility [Wed Nov 4 06:54:04.804000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:43216] POST /tabby-sim/api/v2/checkout [Wed Nov 4 06:54:04.805000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 127.0.0.1:43216] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 06:54:04.806000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:43216] QUERY OK source="tabby_sim_faults" db=0.7ms idle=1363.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 06:54:04.843000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:43216] QUERY OK db=36.4ms idle=657.8ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["eb046734-757b-4c4f-a880-50fe4d260db1", "CREATED", "AED", "165db3d4-8b4b-4a32-8c30-e1fa751b9816", "slice9", ~U[2026-11-04 07:06:04Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 07:04:04Z], "created", false, ~N[2026-11-04 06:54:04], ~N[2026-11-04 06:54:04]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 06:54:04.844000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1089340] [client 127.0.0.1:43216] [TabbySim] checkout payment=eb046734-757b-4c4f-a880-50fe4d260db1 session=165db3d4-8b4b-4a32-8c30-e1fa751b9816 decision=created reason=nil amount=850.00 AED [Wed Nov 4 06:54:04.847000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:43216] QUERY OK source="tabby_sim_payments" db=3.3ms idle=525.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:54:04.850000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:43216] Sent 200 in 45ms [Wed Nov 4 06:54:04.852000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:58195] [Tabby] checkout post /api/v2/checkout -> 200 (335 ms, attempt 1) [Wed Nov 4 06:54:04.852000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:58195] [Tabby] session created payment=eb046734-757b-4c4f-a880-50fe4d260db1 [Wed Nov 4 06:54:04.853000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1089340] [client 115.99.167.137:58195] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 06:54:04.853000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:58195] Sent 200 in 337ms [Wed Nov 4 06:54:08.285000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.1ms idle=1933.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:54:08Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:54:08.285000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.1ms idle=1933.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:54:08Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:54:08.286000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:54:08.286000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:54:08.286000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1934.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:54:08Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:54:08.287000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1934.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:54:08Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:54:08.288000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1935.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:54:08.288000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms queue=0.1ms idle=1935.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:54:08.331000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399661 scheduled in 60s (4 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:54:08.336000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399662 scheduled in 60s (4 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:55:09.632000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1280.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:55:09Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:55:09.632000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:55:09.632000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1280.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:55:09Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:55:09.632000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:55:09.633000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.1ms idle=1281.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:55:09Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:55:09.634000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms queue=0.1ms idle=1281.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:55:09Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:55:09.634000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.1ms idle=1094.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:55:09.634000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=282.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:55:09.704000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399666 scheduled in 60s (4 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:55:09.720000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399667 scheduled in 60s (4 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:56:15.855000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1501.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:56:15Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:56:15.855000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1501.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:56:15Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:56:15.856000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:56:15.856000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:56:15.857000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms queue=0.1ms idle=503.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:56:15Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:56:15.857000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1078.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:56:15Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:56:15.858000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=505.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:56:15.859000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=505.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:56:15.904000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399670 scheduled in 60s (4 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:56:15.961000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399671 scheduled in 60s (4 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:56:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.5ms idle=1068.6ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 06:57:17.193000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1839.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:57:17Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:57:17.194000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=1839.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:57:17Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:57:17.253000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=59.7ms idle=1088.1ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:57:17], true, "955dc256-d3c8-4ab1-b766-85c6b700131a", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:57:17.253000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=58.8ms queue=0.1ms idle=840.9ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 06:57:17], true, "955dc256-d3c8-4ab1-b766-85c6b700131a", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 06:57:17.254000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=955dc256-d3c8-4ab1-b766-85c6b700131a CREATED -> EXPIRED [Wed Nov 4 06:57:17.254000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=900.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["955dc256-d3c8-4ab1-b766-85c6b700131a"] ↳ Enum."-map/2-lists^map/1-1-"/2, at: lib/enum.ex:1703 [Wed Nov 4 06:57:17.254000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=900.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["955dc256-d3c8-4ab1-b766-85c6b700131a"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 06:57:17.255000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=955dc256-d3c8-4ab1-b766-85c6b700131a [Wed Nov 4 06:57:17.255000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=955dc256-d3c8-4ab1-b766-85c6b700131a expired (expires_at 2026-11-04 06:57:17Z, session_status=created) [Wed Nov 4 06:57:17.256000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=901.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:57:17Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:57:17.256000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=881.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:57:17Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:57:17.256000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:57:17.256000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 06:57:17.257000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=148.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:57:17Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:57:17.257000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=64.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:57:17Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:57:17.258000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=64.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:57:17.258000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=63.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:57:17.300000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399674 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:57:17.319000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399675 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:58:19.713000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.1ms idle=1359.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:58:19Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:58:19.713000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.1ms idle=1359.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:58:19Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:58:19.714000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:58:19.714000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:58:19.716000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1361.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:58:19Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:58:19.716000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.3ms idle=1361.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:58:19Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:58:19.717000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1362.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:58:19.717000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=363.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:58:19.774000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399679 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:58:19.786000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399680 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:59:21.660000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.1ms idle=303.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:59:21Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:59:21.660000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:59:21.661000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms queue=1.1ms idle=304.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:59:21Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 06:59:21.661000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 06:59:21.662000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=305.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:59:21Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:59:21.663000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=306.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:59:21.663000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.7ms idle=306.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 06:59:21Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 06:59:21.665000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=307.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 06:59:21.706000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399681 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 06:59:21.719000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399682 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 07:00:23.929000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1563.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:00:23Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 07:00:23.928000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1564.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:00:23Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 07:00:23.929000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 07:00:23.929000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 07:00:23.930000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1565.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:00:23Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 07:00:23.931000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.4ms queue=0.1ms idle=566.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 07:00:23.931000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.6ms idle=1104.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:00:23Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 07:00:23.934000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.8ms idle=568.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 07:00:23.974000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399708 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 07:00:23.987000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399709 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 07:01:24.890000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1525.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:01:24Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 07:01:24.890000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 07:01:24.891000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1526.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:01:24Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 07:01:24.892000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1527.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 07:01:24.995000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1266.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:01:24Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 07:01:24.996000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 07:01:24.996000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=632.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:01:24Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 07:01:24.997000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=197.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 07:01:25.073000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399710 scheduled in 32s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 07:01:57.978000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1612.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:01:57Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 07:01:58.075000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=94.8ms queue=0.1ms idle=1616.2ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 07:01:57], true, "50e3ed6d-698d-4c75-ac8f-c33c94a9c4df", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 07:01:58.076000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=50e3ed6d-698d-4c75-ac8f-c33c94a9c4df CREATED -> EXPIRED [Wed Nov 4 07:01:58.077000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1711.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["50e3ed6d-698d-4c75-ac8f-c33c94a9c4df"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 07:01:58.077000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=50e3ed6d-698d-4c75-ac8f-c33c94a9c4df [Wed Nov 4 07:01:58.077000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=50e3ed6d-698d-4c75-ac8f-c33c94a9c4df expired (expires_at 2026-11-04 07:01:56Z, session_status=created) [Wed Nov 4 07:01:58.078000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1713.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:01:58Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 07:01:58.079000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 07:01:58.080000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1714.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:01:58Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 07:01:58.080000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1715.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 07:01:58.145000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399711 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 07:03:00.001000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1636.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:03:00Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 07:03:00.001000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 07:03:00.001000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1299.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:03:00Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 07:03:00.002000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1120.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 07:03:00.045000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399716 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 07:04:00.912000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1547.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:04:00Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 07:04:00.912000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 07:04:00.914000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.5ms idle=1548.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:04:00Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 07:04:00.915000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1550.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 07:04:00.953000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399719 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 07:05:02.204000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=2.1ms idle=1836.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:05:02Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 07:05:02.204000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 07:05:02.207000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms queue=0.1ms idle=1840.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:05:02Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 07:05:02.212000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=3.5ms idle=1842.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 07:05:02.307000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399722 scheduled in 1s (2 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 07:05:04.283000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1909.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:05:04Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 07:05:04.375000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=90.8ms idle=1857.5ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 07:05:04], true, "1c627e8a-9277-4d72-899e-756663d8e282", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 07:05:04.375000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=1c627e8a-9277-4d72-899e-756663d8e282 CREATED -> EXPIRED [Wed Nov 4 07:05:04.379000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=3.0ms queue=0.1ms idle=1009.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["1c627e8a-9277-4d72-899e-756663d8e282"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 07:05:04.379000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=1c627e8a-9277-4d72-899e-756663d8e282 [Wed Nov 4 07:05:04.379000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=1c627e8a-9277-4d72-899e-756663d8e282 expired (expires_at 2026-11-04 07:05:03Z, session_status=created) [Wed Nov 4 07:05:04.380000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1012.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:05:04Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 07:05:04.381000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 07:05:04.381000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1013.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:05:04Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 07:05:04.383000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1014.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 07:05:04.487000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399723 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 07:06:05.346000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1116.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:06:05Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 07:06:05.377000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=29.7ms idle=1118.0ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 07:06:05], true, "eb046734-757b-4c4f-a880-50fe4d260db1", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 07:06:05.377000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=eb046734-757b-4c4f-a880-50fe4d260db1 CREATED -> EXPIRED [Wed Nov 4 07:06:05.381000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=2.6ms queue=0.2ms idle=1148.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["eb046734-757b-4c4f-a880-50fe4d260db1"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 07:06:05.381000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=eb046734-757b-4c4f-a880-50fe4d260db1 [Wed Nov 4 07:06:05.381000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=eb046734-757b-4c4f-a880-50fe4d260db1 expired (expires_at 2026-11-04 07:06:04Z, session_status=created) [Wed Nov 4 07:06:05.382000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=151.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:06:05Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 07:06:05.382000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 07:06:05.385000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.7ms idle=153.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:06:05Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 07:06:05.386000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.3ms idle=155.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 07:06:05.386000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job: no CREATED payment left, not rescheduling [Wed Nov 4 07:06:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.9ms idle=1817.0ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 07:08:15.933000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:58506] GET /tabby/demo [Wed Nov 4 07:08:15.936000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:58506] Sent 200 in 2ms [Wed Nov 4 07:08:16.462000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:58506] POST /tabby/demo/summary [Wed Nov 4 07:08:16.462000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:58506] Sent 200 in 607µs [Wed Nov 4 07:08:17.287000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:58506] POST /tabby/demo/eligibility [Wed Nov 4 07:08:17.559000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:43308] POST /tabby-sim/api/v2/checkout [Wed Nov 4 07:08:17.559000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 127.0.0.1:43308] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 07:08:17.560000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:43308] QUERY OK source="tabby_sim_faults" db=0.5ms idle=1821.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 07:08:17.628000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:43308] QUERY OK db=66.7ms idle=1738.2ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["145cd314-1cc6-41d1-9fdf-76e05865817b", "CREATED", "AED", "9a8b633b-45fb-48c0-b65e-b10ed0905f77", "slice9", ~U[2026-11-04 07:20:17Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 07:18:17Z], "created", false, ~N[2026-11-04 07:08:17], ~N[2026-11-04 07:08:17]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 07:08:17.628000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1089340] [client 127.0.0.1:43308] [TabbySim] checkout payment=145cd314-1cc6-41d1-9fdf-76e05865817b session=9a8b633b-45fb-48c0-b65e-b10ed0905f77 decision=created reason=nil amount=850.00 AED [Wed Nov 4 07:08:17.629000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:43308] QUERY OK source="tabby_sim_payments" db=1.2ms idle=536.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 07:08:17.656000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client 127.0.0.1:43308] [TabbySim] expiry job 399731 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 07:08:17.656000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:43308] Sent 200 in 97ms [Wed Nov 4 07:08:17.657000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:58506] [Tabby] checkout post /api/v2/checkout -> 200 (369 ms, attempt 1) [Wed Nov 4 07:08:17.657000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:58506] [Tabby] session created payment=145cd314-1cc6-41d1-9fdf-76e05865817b [Wed Nov 4 07:08:17.657000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1089340] [client 115.99.167.137:58506] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 07:08:17.657000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:58506] Sent 200 in 370ms [Wed Nov 4 07:09:20.887000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1271.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:09:20Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 07:09:20.887000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 07:09:20.888000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1272.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:09:20Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 07:09:20.889000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1273.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 07:09:20.933000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399732 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 07:10:21.443000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=826.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:10:21Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 07:10:21.443000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 07:10:21.444000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=827.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:10:21Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 07:10:21.444000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=828.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 07:10:21.470000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399738 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 07:11:22.024000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1400.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:11:22Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 07:11:22.025000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 07:11:22.025000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1402.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:11:22Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 07:11:22.027000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1402.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 07:11:22.085000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399740 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 07:12:17.065000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:64880] GET /tabby/demo [Wed Nov 4 07:12:17.067000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:64880] Sent 200 in 1ms [Wed Nov 4 07:12:21.951000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:64880] POST /tabby/demo/summary [Wed Nov 4 07:12:21.951000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:64880] Sent 200 in 631µs [Wed Nov 4 07:12:22.852000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:64880] POST /tabby/demo/eligibility [Wed Nov 4 07:12:23.152000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:46208] POST /tabby-sim/api/v2/checkout [Wed Nov 4 07:12:23.152000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 127.0.0.1:46208] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 07:12:23.154000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:46208] QUERY OK source="tabby_sim_faults" db=1.4ms idle=1456.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 07:12:23.187000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:46208] QUERY OK db=32.1ms idle=1434.0ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["baeed948-1ccd-4120-a191-c8fec4c4ed42", "CREATED", "AED", "12767134-6345-4258-a239-4d39104bb6e9", "slice9", ~U[2026-11-04 07:24:23Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 07:22:23Z], "created", false, ~N[2026-11-04 07:12:23], ~N[2026-11-04 07:12:23]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 07:12:23.187000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1089340] [client 127.0.0.1:46208] [TabbySim] checkout payment=baeed948-1ccd-4120-a191-c8fec4c4ed42 session=12767134-6345-4258-a239-4d39104bb6e9 decision=created reason=nil amount=850.00 AED [Wed Nov 4 07:12:23.189000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:46208] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1383.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 07:12:23.191000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:46208] Sent 200 in 39ms [Wed Nov 4 07:12:23.192000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:64880] [Tabby] checkout post /api/v2/checkout -> 200 (341 ms, attempt 1) [Wed Nov 4 07:12:23.193000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:64880] [Tabby] session created payment=baeed948-1ccd-4120-a191-c8fec4c4ed42 [Wed Nov 4 07:12:23.194000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1089340] [client 115.99.167.137:64880] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 07:12:23.194000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:64880] Sent 200 in 342ms [Wed Nov 4 07:12:23.271000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=640.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:12:23Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 07:12:23.272000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 07:12:23.272000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=558.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:12:23Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 07:12:23.274000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms queue=0.2ms idle=480.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 07:12:23.332000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399745 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 07:12:28.957000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:64880] GET /tabby/demo [Wed Nov 4 07:12:28.959000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:64880] Sent 200 in 2ms [Wed Nov 4 07:12:36.821000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 07:12:38.664000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:64880] POST /tabby/demo/summary [Wed Nov 4 07:12:38.665000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:64880] Sent 200 in 775µs [Wed Nov 4 07:12:41.829000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 07:12:47.823000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:64880] POST /tabby/demo/eligibility [Wed Nov 4 07:12:48.659000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:46208] POST /tabby-sim/api/v2/checkout [Wed Nov 4 07:12:48.659000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 127.0.0.1:46208] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 07:12:48.660000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:46208] QUERY OK source="tabby_sim_faults" db=0.6ms idle=1034.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 07:12:48.783000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:46208] QUERY OK db=121.8ms idle=1035.6ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["3c7e75d7-ca31-4d75-8416-e1f5db21f9e1", "CREATED", "AED", "801295cf-f346-4910-a75b-5b208a2a5b23", "slice9", ~U[2026-11-04 07:24:48Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 07:22:48Z], "created", false, ~N[2026-11-04 07:12:48], ~N[2026-11-04 07:12:48]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 07:12:48.783000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1089340] [client 127.0.0.1:46208] [TabbySim] checkout payment=3c7e75d7-ca31-4d75-8416-e1f5db21f9e1 session=801295cf-f346-4910-a75b-5b208a2a5b23 decision=created reason=nil amount=850.00 AED [Wed Nov 4 07:12:48.784000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:46208] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1158.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 07:12:48.786000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:46208] Sent 200 in 127ms [Wed Nov 4 07:12:48.787000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:64880] [Tabby] checkout post /api/v2/checkout -> 200 (963 ms, attempt 1) [Wed Nov 4 07:12:48.787000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:64880] [Tabby] session created payment=3c7e75d7-ca31-4d75-8416-e1f5db21f9e1 [Wed Nov 4 07:12:48.787000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1089340] [client 115.99.167.137:64880] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 07:12:48.787000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:64880] Sent 200 in 964ms [Wed Nov 4 07:12:52.547000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:64880] GET /tabby/demo [Wed Nov 4 07:12:52.550000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:64880] Sent 200 in 3ms [Wed Nov 4 07:12:53.210000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:64880] POST /tabby/demo/summary [Wed Nov 4 07:12:53.210000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:64880] Sent 200 in 548µs [Wed Nov 4 07:12:54.033000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:64880] POST /tabby/demo/eligibility [Wed Nov 4 07:12:54.296000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:46208] POST /tabby-sim/api/v2/checkout [Wed Nov 4 07:12:54.297000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 127.0.0.1:46208] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 07:12:54.298000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:46208] QUERY OK source="tabby_sim_faults" db=0.7ms idle=672.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 07:12:54.323000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:46208] QUERY OK db=23.2ms queue=0.4ms idle=674.1ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["1cd22f97-2d1c-4f67-8ef8-d4683aa32a1f", "CREATED", "AED", "fa5e2ea5-2e76-4c62-9170-6c887b65f3ac", "slice9", ~U[2026-11-04 07:24:54Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 07:22:54Z], "created", false, ~N[2026-11-04 07:12:54], ~N[2026-11-04 07:12:54]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 07:12:54.324000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1089340] [client 127.0.0.1:46208] [TabbySim] checkout payment=1cd22f97-2d1c-4f67-8ef8-d4683aa32a1f session=fa5e2ea5-2e76-4c62-9170-6c887b65f3ac decision=created reason=nil amount=850.00 AED [Wed Nov 4 07:12:54.326000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:46208] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.1ms idle=700.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 07:12:54.329000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:46208] Sent 200 in 32ms [Wed Nov 4 07:12:54.330000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:64880] [Tabby] checkout post /api/v2/checkout -> 200 (297 ms, attempt 1) [Wed Nov 4 07:12:54.330000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:64880] [Tabby] session created payment=1cd22f97-2d1c-4f67-8ef8-d4683aa32a1f [Wed Nov 4 07:12:54.330000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1089340] [client 115.99.167.137:64880] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 07:12:54.330000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:64880] Sent 200 in 297ms [Wed Nov 4 07:13:24.055000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=428.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:13:24Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 07:13:24.056000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 07:13:24.056000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=429.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:13:24Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 07:13:24.057000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=430.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 07:13:24.085000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399746 scheduled in 60s (4 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 07:14:32.354000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=724.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:14:32Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 07:14:32.355000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 07:14:32.356000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms queue=0.1ms idle=727.2ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:14:32Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 07:14:32.357000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=727.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 07:14:32.955000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399749 scheduled in 60s (4 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 07:15:33.122000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1493.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:15:33Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 07:15:33.123000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 07:15:33.123000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1495.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:15:33Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 07:15:33.124000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1495.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 07:15:33.197000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399755 scheduled in 60s (4 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 07:16:33.852000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1212.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:16:33Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 07:16:33.852000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 07:16:33.854000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.1ms idle=1213.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:16:33Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 07:16:33.854000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms queue=0.2ms idle=1214.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 07:16:33.978000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399758 scheduled in 60s (4 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 07:16:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.5ms idle=1780.6ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 07:17:07.934000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 07:17:08.058000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 07:17:12.935000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed d[Wed Nov 4 07:17:50.016000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 07:17:55.017000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 07:17:59.877000 2026] [DBConnection.Connection:error] [pid 1089340] [client -] MyXQL.Connection (#PID<0.580.0>) disconnected: ** (DBConnection.ConnectionError) client #PID<0.667.0> timed out because it queued and checked out the connection for longer than 15000ms #PID<0.667.0> was at location: :prim_inet.recv0/3 (myxql 0.7.1) lib/myxql/client.ex:208: MyXQL.Client.recv_packets/5 (myxql 0.7.1) lib/myxql/connection.ex:104: MyXQL.Connection.handle_execute/4 (db_connection 2.7.0) lib/db_connection/holder.ex:354: DBConnection.Holder.holder_apply/4 (db_connection 2.7.0) lib/db_connection.ex:1558: DBConnection.run_execute/5 (db_connection 2.7.0) lib/db_connection.ex:829: DBConnection.execute/4 (ecto_sql 3.12.1) lib/ecto/adapters/myxql/connection.ex:41: Ecto.Adapters.MyXQL.Connection.execute/4 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:1038: Ecto.Adapters.SQL.execute!/5 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:994: Ecto.Adapters.SQL.execute/6 (oban 2.19.1) lib/oban/peers/database.ex:191: Oban.Peers.Database.delete_expired_peers/1 (oban 2.19.1) lib/oban/peers/database.ex:104: anonymous fn/1 in Oban.Peers.Database.handle_info/2 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:1400: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1756: DBConnection.run_transaction/4 (oban 2.19.1) lib/oban/repo.ex:156: Oban.Repo.transaction/4 (oban 2.19.1) lib/oban/peers/database.ex:108: anonymous fn/2 in Oban.Peers.Database.handle_info/2 (telemetry 1.3.0) /home/prem/canarabank/saaskit/da_product_app_changed/deps/telemetry/src/telemetry.erl:324: :telemetry.span/3 (oban 2.19.1) lib/oban/peers/database.ex:101: Oban.Peers.Database.handle_info/2 (stdlib 5.2.3.2) gen_server.erl:1095: :gen_server.try_handle_info/3 (stdlib 5.2.3.2) gen_server.erl:1183: :gen_server.handle_msg/6 (stdlib 5.2.3.2) proc_lib.erl:241: :proc_lib.init_p_do_apply/3 [Wed Nov 4 07:18:34.908000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 07:18:39.909000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 07:18:43.062000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 07:18:44.705000 2026] [DBConnection.Connection:error] [pid 1089340] [client -] MyXQL.Connection (#PID<0.584.0>) disconnected: ** (DBConnection.ConnectionError) client #PID<0.667.0> timed out because it queued and checked out the connection for longer than 15000ms #PID<0.667.0> was at location: :prim_inet.recv0/3 (myxql 0.7.1) lib/myxql/client.ex:208: MyXQL.Client.recv_packets/5 (myxql 0.7.1) lib/myxql/connection.ex:104: MyXQL.Connection.handle_execute/4 (db_connection 2.7.0) lib/db_connection/holder.ex:354: DBConnection.Holder.holder_apply/4 (db_connection 2.7.0) lib/db_connection.ex:1558: DBConnection.run_execute/5 (db_connection 2.7.0) lib/db_connection.ex:829: DBConnection.execute/4 (ecto_sql 3.12.1) lib/ecto/adapters/myxql/connection.ex:41: Ecto.Adapters.MyXQL.Connection.execute/4 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:1038: Ecto.Adapters.SQL.execute!/5 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:994: Ecto.Ad[Wed Nov 4 07:23:37.527000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 07:23:42.528000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 07:23:47.094000 2026] [DBConnection.Connection:error] [pid 1089340] [client -] MyXQL.Connection (#PID<0.579.0>) disconnected: ** (DBConnection.ConnectionError) client #PID<0.667.0> timed out because it queued and checked out the connection for longer than 15000ms #PID<0.667.0> was at location: :prim_inet.recv0/3 (myxql 0.7.1) lib/myxql/client.ex:208: MyXQL.Client.recv_packets/5 (myxql 0.7.1) lib/myxql/connection.ex:104: MyXQL.Connection.handle_execute/4 (db_connection 2.7.0) lib/db_connection/holder.ex:354: DBConnection.Holder.holder_apply/4 (db_connection 2.7.0) lib/db_connection.ex:1558: DBConnection.run_execute/5 (db_connection 2.7.0) lib/db_connection.ex:829: DBConnection.execute/4 (ecto_sql 3.12.1) lib/ecto/adapters/myxql/connection.ex:41: Ecto.Adapters.MyXQL.Connection.execute/4 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:1038: Ecto.Adapters.SQL.execute!/5 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:994: Ecto.Adapters.SQL.execute/6 (oban 2.19.1) lib/oban/peers/database.ex:191: Oban.Peers.Database.delete_expired_peers/1 (oban 2.19.1) lib/oban/peers/database.ex:104: anonymous fn/1 in Oban.Peers.Database.handle_info/2 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:1400: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1756: DBConnection.run_transaction/4 (oban 2.19.1) lib/oban/repo.ex:156: Oban.Repo.transaction/4 (oban 2.19.1) lib/oban/peers/database.ex:108: anonymous fn/2 in Oban.Peers.Database.handle_info/2 (telemetry 1.3.0) /home/prem/canarabank/saaskit/da_product_app_changed/deps/telemetry/src/telemetry.erl:324: :telemetry.span/3 (oban 2.19.1) lib/oban/peers/database.ex:101: Oban.Peers.Database.handle_info/2 (stdlib 5.2.3.2) gen_server.erl:1095: :gen_server.try_handle_info/3 (stdlib 5.2.3.2) gen_server.erl:1183: :gen_server.handle_msg/6 (stdlib 5.2.3.2) proc_lib.erl:241: :proc_lib.init_p_do_apply/3 [Wed Nov 4 07:24:05.264000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=6.3ms idle=1084.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:24:05Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 07:24:05.342000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=77.2ms idle=1088.3ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 07:24:05], true, "145cd314-1cc6-41d1-9fdf-76e05865817b", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 07:24:05.342000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=145cd314-1cc6-41d1-9fdf-76e05865817b CREATED -> EXPIRED [Wed Nov 4 07:24:05.348000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=5.5ms idle=168.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["145cd314-1cc6-41d1-9fdf-76e05865817b"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 07:24:05.349000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=145cd314-1cc6-41d1-9fdf-76e05865817b [Wed Nov 4 07:24:05.349000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=145cd314-1cc6-41d1-9fdf-76e05865817b expired (expires_at 2026-11-04 07:20:17Z, session_status=created) [Wed Nov 4 07:24:05.366000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=9.9ms idle=181.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:24:05Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 07:24:05.366000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 07:24:05.369000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=2.4ms idle=181.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:24:05Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 07:24:05.373000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.9ms queue=1.3ms idle=178.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 07:24:05.524000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399767 scheduled in 18s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 07:24:24.251000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms queue=0.2ms idle=1427.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:24:24Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 07:24:24.296000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=44.2ms idle=1429.6ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 07:24:24], true, "baeed948-1ccd-4120-a191-c8fec4c4ed42", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 07:24:24.296000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=baeed948-1ccd-4120-a191-c8fec4c4ed42 CREATED -> EXPIRED [Wed Nov 4 07:24:24.299000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=2.0ms idle=1474.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["baeed948-1ccd-4120-a191-c8fec4c4ed42"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 07:24:24.299000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=baeed948-1ccd-4120-a191-c8fec4c4ed42 [Wed Nov 4 07:24:24.299000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=baeed948-1ccd-4120-a191-c8fec4c4ed42 expired (expires_at 2026-11-04 07:24:23Z, session_status=created) [Wed Nov 4 07:24:24.301000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms queue=0.3ms idle=1477.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:24:24Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 07:24:24.301000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 07:24:24.302000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1479.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:24:24Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 07:24:24.304000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms queue=1.2ms idle=1480.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 07:24:24.368000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 399769 scheduled in 24s (2 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 07:24:56.271000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms queue=0.3ms idle=1287.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:24:56Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 07:24:56.437000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=164.0ms queue=0.1ms idle=450.6ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 07:24:56], true, "3c7e75d7-ca31-4d75-8416-e1f5db21f9e1", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 07:24:56.437000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=3c7e75d7-ca31-4d75-8416-e1f5db21f9e1 CREATED -> EXPIRED [Wed Nov 4 07:24:56.439000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms queue=0.1ms idle=615.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["3c7e75d7-ca31-4d75-8416-e1f5db21f9e1"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 07:24:56.439000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=3c7e75d7-ca31-4d75-8416-e1f5db21f9e1 [Wed Nov 4 07:24:56.439000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=3c7e75d7-ca31-4d75-8416-e1f5db21f9e1 expired (expires_at 2026-11-04 07:24:48Z, session_status=created) [Wed Nov 4 07:24:56.539000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=99.9ms idle=617.4ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 07:24:56], true, "1cd22f97-2d1c-4f67-8ef8-d4683aa32a1f", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 07:24:56.540000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=1cd22f97-2d1c-4f67-8ef8-d4683aa32a1f CREATED -> EXPIRED [Wed Nov 4 07:24:56.542000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.7ms queue=0.2ms idle=718.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["1cd22f97-2d1c-4f67-8ef8-d4683aa32a1f"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 07:24:56.542000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=1cd22f97-2d1c-4f67-8ef8-d4683aa32a1f [Wed Nov 4 07:24:56.542000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=1cd22f97-2d1c-4f67-8ef8-d4683aa32a1f expired (expires_at 2026-11-04 07:24:54Z, session_status=created) [Wed Nov 4 07:24:56.545000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=2.1ms idle=720.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:24:56Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 07:24:56.545000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 2 payment(s) were due [Wed Nov 4 07:24:56.547000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=723.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 07:24:56Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 07:24:56.548000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=561.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 07:24:56.548000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job: no CREATED payment left, not rescheduling [Wed Nov 4 07:26:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.7ms idle=1575.9ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 07:28:37.014000 2026] [DBConnection.Connection:error] [pid 1089340] [client -] MyXQL.Connection (#PID<0.578.0>) disconnected: ** (DBConnection.ConnectionError) client #PID<0.669.0> timed out because it queued and checked out the connection for longer than 15000ms #PID<0.669.0> was at location: :prim_inet.recv0/3 (myxql 0.7.1) lib/myxql/client.ex:208: MyXQL.Client.recv_packets/5 (myxql 0.7.1) lib/myxql/connection.ex:104: MyXQL.Connection.handle_execute/4 (db_connection 2.7.0) lib/db_connection/holder.ex:354: DBConnection.Holder.holder_apply/4 (db_connection 2.7.0) lib/db_connection.ex:1558: DBConnection.run_execute/5 (db_connection 2.7.0) lib/db_connection.ex:772: DBConnection.parsed_prepare_execute/5 (db_connection 2.7.0) lib/db_connection.ex:764: DBConnection.prepare_execute/4 (myxql 0.7.1) lib/myxql.ex:354: MyXQL.do_query/4 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:1056: Ecto.Adapters.SQL.execute!/5 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:994: Ecto.Adapters.SQL.execute/6 (oban 2.19.1) lib/oban/engines/dolphin.ex:140: Oban.Engines.Dolphin.stage_jobs/3 (oban 2.19.1) lib/oban/engine.[Wed Nov 4 07:30:52.125000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 07:30:52.974000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 07:30:57.975000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 07:31:02.025000 2026] [DBConnection.Connection:error] [pid 1089340] [client -] MyXQL.Connection (#PID<0.581.0>) disconnected: ** (DBConnection.ConnectionError) client #PID<0.667.0> timed out because it queued and checked out the connection for longer than 15000ms #PID<0.667.0> was at location: :prim_inet.recv0/3 (myxql 0.7.1) lib/myxql/client.ex:208: MyXQL.Client.recv_packets/5 (myxql 0.7.1) lib/myxql/connection.ex:104: MyXQL.Connection.handle_execute/4 (db_connection 2.7.0) lib/db_connection/holder.ex:354: DBConnection.Holder.holder_apply/4 (db_connection 2.7.0) lib/db_connection.ex:1558: DBConnection.run_execute/5 (db_connection 2.7.0) lib/db_connection.ex:829: DBConnection.execute/4 (ecto_sql 3.12.1) lib/ecto/adapters/myxql/connection.ex:41: Ecto.Adapters.MyXQL.Connection.execute/4 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:1038: Ecto.Adapters.SQL.execute!/5 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:994: Ecto.Adapters.SQL.execute/6 (oban 2.19.1) lib/oban/peers/database.ex:191: Oban.Peers.Database.delete_expired_peers/1 (oban 2.19.1) lib/oban/peers/database.ex:104: anonymous fn/1 in Oban.Peers.Database.handle_info/2 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:1400: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1756: DBConnection.run_transaction/4 (oban 2.19.1) lib/oban/repo.ex:156: Oban.Repo.transaction/4 (oban 2.19.1) lib/oban/peers/database.ex:108: anonymous fn/2 in Oban.Peers.Database.handle_info/2 (telemetry 1.3.0) /home/prem/canarabank/saaskit/da_product_app_changed/deps/telemetry/src/telemetry.erl:324: :telemetry.span/3 (oban 2.19.1) lib/oban/peers/database.ex:101: Oban.Peers.Database.handle_info/2 (stdlib 5.2.3.2) gen_server.erl:1095: :gen_server.try_handle_info/3 (stdlib 5.2.3.2) gen_server.erl:1183: :gen_server.handle_msg/6 (stdlib 5.2.3.2) proc_lib.erl:241: :proc_lib.init_p_do_apply/3 [Wed Nov 4 07:32:31.282000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 07:32:36.283000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 07:32:38.001000 2026] [DBConnection.Connection:error] [pid 1089340] [client -] MyXQL.Connection (#PID<0.581.0>) disconnected: ** (DBConnection.ConnectionError) client #PID<0.671.0> timed out because it queued and checked out the connection for longer than 15000ms #PID<0.671.0> was at location: :prim_inet.recv0/3 (myxql 0.7.1) lib/myxql/client.ex:208: MyXQL.Client.recv_packets/5 (myxql 0.7.1) lib/myxql/connection.ex:104: MyXQL.Connection.handle_execute/4 (db_connection 2.7.0) lib/db_connection/holder.ex:354: DBConnection.Holder.holder_apply/4 (db_connection 2.7.0) lib/db_connection.ex:1558: DBConnection.run_execute/5 (db_connection 2.7.0) lib/db_connection.ex:772: DBConnection.parsed_prepare_execute/5 (db_connection 2.7.0) lib/db_connection.ex:764: DBConnection.prepare_execute/4 (myxql 0.7.1) lib/myxql.ex:354: MyXQL.do_query/4 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:1056: Ecto.Adapters.SQL.execute!/5 (ecto_sql[Wed Nov 4 07:32:53.501000 2026] [DBConnection.Connection:error] [pid 1089340] [client -] MyXQL.Connection (#PID<0.580.0>) disconnected: ** (DBConnection.ConnectionError) client #PID<0.671.0> timed out because it queued and checked out the connection for longer than 15000ms #PID<0.671.0> was at location: :prim_inet.recv0/3 (myxql 0.7.1) lib/myxql/client.ex:208: MyXQL.Client.recv_packets/5 (myxql 0.7.1) lib/myxql/connection.ex:104: MyXQL.Connection.handle_execute/4 (db_connection 2.7.0) lib/db_connection/holder.ex:354: DBConnection.Holder.holder_apply/4 (db_connection 2.7.0) lib/db_connection.ex:1558: DBConnection.run_execute/5 (db_connection 2.7.0) lib/db_connection.ex:772: DBConnection.parsed_prepare_execute/5 (db_connection 2.7.0) lib/db_connection.ex:764: DBConnection.prepare_execute/4 (myxql 0.7.1) lib/myxql.ex:354: MyXQL.do_query/4 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:1056: Ecto.Adapters.SQL.execute!/5 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:994: Ecto.Adapters.SQL.execute/6 (oban 2.19.1) lib/oban/engines/dolphin.ex:164: Oban.Engines.Dolphin.prune_jobs/3 (oban 2.19.1) lib/oban/engine.ex:272: anonymous fn/4 in Oban.Engine.prune_jobs/3 (oban 2.19.1) lib/oban/engine.ex:387: anonymous fn/3 in Oban.Engine.with_span/4 (telemetry 1.3.0) /home/prem/canarabank/saaskit/da_product_app_changed/deps/telemetry/src/telemetry.erl:324: :telemetry.span/3 (oban 2.19.1) lib/oban/plugins/pruner.ex:134: anonymous fn/1 in Oban.Plugins.Pruner.check_leadership_and_delete_jobs/1 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:1400: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1756: DBConnection.run_transaction/4 (oban 2.19.1) lib/oban/repo.ex:156: Oban.Repo.transaction/4 (oban 2.19.1) lib/oban/plugins/pruner.ex:118: anonymous fn/2 in Oban.Plugins.Pruner.handle_info/2 (telemetry 1.3.0) /home/prem/canarabank/saaskit/da_product_app_changed/deps/telemetry/src/telemetry.erl:324: :telemetry.span/3 [Wed Nov 4 07:33:09.496000 2026] [DBConnection.Connection:error] [pid 1089340] [client -] MyXQL.Connection (#PID<0.578.0>) disconnected: ** (DBConnection.ConnectionError) client #PID<0.671.0> timed out because it queued and checked out the connection for longer than 15000ms #PID<0.671.0> was at location: :prim_inet.recv0/3 (myxql 0.7.1) lib/myxql/client.ex:208: MyXQL.Client.recv_packets/5 (myxql 0.7.1) lib/myxql/connection.ex:104: MyXQL.Connection.handle_execute/4 (db_connection 2.7.0) lib/db_connection/holder.ex:354: DBConnection.Holder.holder_apply/4 (db_connection 2.7.0) lib/db_connection.ex:1558: DBConnection.run_execute/5 (db_connection 2.7.0) lib/db_connection.ex:772: DBConnection.parsed_prepare_execute/5 (db_connection 2.7.0) lib/db_connection.ex:764: DBConnection.prepare_execute/4 (myxql 0.7.1) lib/myxql.ex:354: MyXQL.do_query/4 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:1056: Ecto.Adapters.SQL.execute!/5 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:994: Ecto.Adapters.SQL.execute/6 (oban 2.19.1) lib/oban/engines/dolphin.ex:164: Oban.Engines.Dolphin.prune_jobs/3 (oban 2.19.1) lib/oban/engine.ex:272: anonymous fn/4 in Oban.Engine.prune_jobs/3 (oban 2.19.1) lib/oban/engine.ex:387: anonymous fn/3 in Oban.Engine.with_span/4 (telemetry 1.3.0) /home/prem/canarabank/saaskit/da_product_app_changed/deps/telemetry/src/telemetry.erl:324: :telemetry.span/3 (oban 2.19.1) lib/oban/plugins/pruner.ex:134: anonymous fn/1 in Oban.Plugins.Pruner.check_leadership_and_delete_jobs/1 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:1400: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1756: DBConnection.run_transaction/4 (oban 2.19.1) lib/oban/repo.ex:156: Oban.Repo.transaction/4 (oban 2.19.1) lib/oban/plugins/pruner.ex:118: anonymous fn/2 in Oban.Plugins.Pruner.handle_info/2 (telemetry 1.3.0) /home/prem/canarabank/saaskit/da_product_app_changed/deps/telemetry/src/telemetry.erl:324: :telemetry.span/3 [Wed Nov 4 07:33:15.054000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 07:33:20.055000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 07:36:04.907000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 07:36:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.6ms idle=1548.7ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 07:37:49.669000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 07:37:54.670000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 07:37:56.333000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 07:37:58.864000 2026] [DBConnection.Connection:error] [pid 1089340] [client -] MyXQL.Connection (#PID<0.579.0>) disconnected: ** (DBConnection.ConnectionError) client #PID<0.667.0> timed out because it queued and checked out the connection for longer than 15000ms #PID<0.667.0> was at location: :prim_inet.recv0/3 (myxql 0.7.1) lib/myxql/client.ex:208: MyXQL.Client.recv_packets/5 (myxql 0.7.1) lib/myxql/connection.ex:438: MyXQL.Connection.handle_transaction/3 (db_connection 2.7.0) lib/db_connection/holder.ex:354: DBConnection.Holder.holder_apply/4 (db_connection 2.7.0) lib/db_connection.ex:1891: DBConnection.run_commit/3 (db_connection 2.7.0) lib/db_connection.ex:1366: DBConnection.checkin/4 (db_connection 2.7.0) lib/db_connection.ex:1870: DBConnection.commit/3 (db_connection 2.7.0) lib/db_connection.ex:1783: DBConnection.run_transaction/4 (oban 2.19.1) lib/oban/repo.ex:156: Oban.Repo.transaction/4 (oban 2.19.1) lib/oban/peers/database.ex:108: anonymous fn/2 in Oban.Peers.Database.handle_info/2 (telemetry 1.3.0) /home/prem/canarabank/saaskit/da_product_app_changed/deps/telemetry/src/telemetry.erl:324: :telemetry.span/3 (oban 2.19.1) lib/oban/peers/database.ex:101: Oban.Peers.Database.handle_info/2 (stdlib 5.2.3.2) gen_server.erl:1095: :gen_server.try_handle_info/3 (stdlib 5.2.3.2) gen_server.erl:1183: :gen_server.handle_msg/6 (stdlib 5.2.3.2) proc_lib.erl:241: :proc_lib.init_p_do_apply/3 [Wed Nov 4 07:38:32.908000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 07:38:37.912000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 07:38:42.525000 2026] [DBConnection.Connection:error] [pid 1089340] [client -] MyXQL.Connection (#PID<0.579.0>) disconnected: ** (DBConnection.ConnectionError) client #PID<0.667.0> timed out because it queued and checked out the connection for longer than 15000ms #PID<0.667.0> was at location: :prim_inet.recv0/3 (myxql 0.7.1) lib/myxql/client.ex:208: MyXQL.Client.recv_packets/5 (myxql 0.7.1) lib/myxql/connection.ex:104: MyXQL.Connection.handle_execute[Wed Nov 4 07:45:08.625000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 07:45:13.626000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 07:45:18.598000 2026] [DBConnection.Connection:error] [pid 1089340] [client -] MyXQL.Connection (#PID<0.575.0>) disconnected: ** (DBConnection.ConnectionError) client #PID<0.667.0> timed out because it queued and checked out the connection for longer than 15000ms #PID<0.667.0> was at location: :prim_inet.recv0/3 (myxql 0.7.1) lib/myxql/client.ex:208: MyXQL.Client.recv_packets/5 (myxql 0.7.1) lib/myxql/connection.ex:104: MyXQL.Connection.handle_execute/4 (db_connection 2.7.0) lib/db_connection/holder.ex:354: DBConnection.Holder.holder_apply/4 (db_connection 2.7.0) lib/db_connection.ex:1558: DBConnection.run_execute/5 (db_connection 2.7.0) lib/db_connection.ex:829: DBConnection.execute/4 (ecto_sql 3.12.1) lib/ecto/adapters/myxql/connection.ex:41: Ecto.Adapters.MyXQL.Connection.execute/4 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:1038: Ecto.Adapters.SQL.execute!/5 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:994: Ecto.Adapters.SQL.execute/6 (oban 2.19.1) lib/oban/peers/database.ex:191: Oban.Peers.Database.delete_expired_peers/1 (oban 2.19.1) lib/oban/peers/database.ex:104: anonymous fn/1 in Oban.Peers.Database.handle_info/2 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:1400: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1756: DBConnection.run_transaction/4 (oban 2.19.1) lib/oban/repo.ex:156: Oban.Repo.transaction/4 (oban 2.19.1) lib/oban/peers/database.ex:108: anonymous fn/2 in Oban.Peers.Database.handle_info/2 (telemetry 1.3.0) /home/prem/canarabank/saaskit/da_product_app_changed/deps/telemetry/src/telemetry.erl:324: :telemetry.span/3 (oban 2.19.1) lib/oban/peers/database.ex:101: Oban.Peers.Database.handle_info/2 (stdlib 5.2.3.2) gen_server.erl:1095: :gen_server.try_handle_info/3 (stdlib 5.2.3.2) gen_server.erl:1183: :gen_server.handle_msg/6 (stdlib 5.2.3.2) proc_lib.erl:241: :proc_lib.init_p_do_apply/3 [Wed Nov 4 07:46:50.413000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 07:46:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.8ms idle=1476.4ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 07:49:10.056000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 07:49:15.057000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 07:49:19.873000 2026] [DBConnection.Connection:error] [pid 1089340] [client -] MyXQL.Connection (#PID<0.583.0>) disconnected: ** (DBConnection.ConnectionError) client #PID<0.667.0> timed out because it queued and checked out the connection for longer than 15000ms #PID<0.667.0> was at location: :prim_inet.recv0/3 (myxql 0.7.1) lib/myxql/client.ex:208: MyXQL.Client.recv_packets/5 (myxql 0.7.1) lib/myxql/connection.ex:104: MyXQL.Connection.handle_execute/4 (db_connection 2.7.0) lib/db_connection/holder.ex:354: DBConnection.Holder.holder_apply/4 (db_connection 2.7.0) lib/db_connection.ex:1558: DBConnection.run_execute/5 (db_conn[Wed Nov 4 07:56:50.422000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=1.0ms idle=1386.8ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 07:59:09.129000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 07:59:14.130000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 07:59:18.122000 2026] [DBConnection.Connection:error] [pid 1089340] [client -] MyXQL.Connection (#PID<0.578.0>) disconnected: ** (DBConnection.ConnectionError) client #PID<0.667.0> timed out because it queued and checked out the connection for longer than 15000ms #PID<0.667.0> was at location: :prim_inet.recv0/3 (myxql 0.7.1) lib/myxql/client.ex:208: MyXQL.Client.recv_packets/5 (myxql 0.7.1) lib/myxql/connection.ex:438: MyXQL.Connection.handle_transaction/3 (db_connection 2.7.0) lib/db_connection/holder.ex:354: DBConnection.Holder.holder_apply/4 (db_connection 2.7.0) lib/db_connection.ex:1891: DBConnection.run_commit/3 (db_connection 2.7.0) lib/db_connection.ex:1366: DBConnection.checkin/4 (db_connection 2.7.0) lib/db_connection.ex:1870: DBConnection.commit/3 (db_connection 2.7.0) lib/db_connection.ex:1783: DBConnection.run_transaction/4 (oban 2.19.1) lib/oban/repo.ex:156: Oban.Repo.transaction/4 (oban 2.19.1) lib/oban/peers/database.ex:108: anonymous fn/2 in Oban.Peers.Database.handle_info/2 (telemetry 1.3.0) /home/prem/canarabank/saaskit/da_product_app_changed/deps/telemetry/src/telemetry.erl:324: :telemetry.span/3 (oban 2.19.1) lib/oban/peers/database.ex:101: Oban.Peers.Database.handle_info/2 (stdlib 5.2.3.2) gen_server.erl:1095: :gen_server.try_handle_info/3 (stdlib 5.2.3.2) gen_server.erl:1183: :gen_server.handle_msg/6 (stdlib 5.2.3.2) proc_lib.erl:241: :proc_lib.init_p_do_apply/3 [Wed Nov 4 07:59:51.150000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 07:59:56.151000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 08:00:00.357000 2026] [DBConnection.Connection:error] [pid 1089340] [client -] MyXQL.Connection (#PID<0.583.0>) disconnected: ** (DBConnection.ConnectionError) client #PID<0.667.0> timed out because it queued and checked out the connection for longer than 15000ms #PID<0.667.0> was at location: :prim_inet.recv0/3 (myxql 0.7.1) lib/myxql/client.ex:208: MyXQL.Client.recv_packets/5 (myxql 0.7.1) lib/myxql/connection.ex:104: MyXQL.Connection.handle_execute/4 (db_connection 2.7.0) lib/db_connection/holder.ex:354: DBConnection.Holder.holder_apply/4 (db_connection 2.7.0) lib/db_connection.ex:1558: DBConnection.run_execute/5 (db_connection 2.7.0) lib/db_connection.ex:829: DBConnection.execute/4 (ecto_sql 3.12.1) lib/ecto/adapters/myxql/connection.ex:41: Ecto.Adapters.MyXQL.Connection.execute/4 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:1038: Ecto.Adapters.SQL.execute!/5 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:994: Ecto.Adapters.SQL.execute/6 (oban 2.19.1) lib/oban/peers/database.ex:191: Oban.Peers.Database.delete_expired_peers/1 (oban 2.19.1) lib/oban/peers/database.ex:104: anonymous fn/1 in Oban.Peers.Database.handle_info/2 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:1400: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1756: DBConnection.run_transaction/4 [Wed Nov 4 09:06:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.8ms idle=1147.5ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 09:14:26.201000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 09:16:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.5ms idle=1085.9ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 09:26:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.7ms idle=1910.5ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 09:29:07.672000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 09:29:12.673000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 09:29:16.784000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 09:29:16.993000 2026] [DBConnection.Connection:error] [pid 1089340] [client -] MyXQL.Connection (#PID<0.581.0>) disconnected: ** (DBConnection.ConnectionError) client #PID<0.667.0> timed out because it queued and checked out the connection for longer than 15000ms #PID<0.667.0> was at location: :prim_inet.recv0/3 (myxql 0.7.1) lib/myxql/client.ex:208: MyXQL.Client.recv_packets/5 (myxql 0.7.1) lib/myxql/connection.ex:104: MyXQL.Connection.handle_execute/4 (db_connection 2.7.0) lib/db_connection/holder.ex:354: DBConnection.Holder.holder_apply/4 (db_connection 2.7.0) lib/db_connection.ex:1558: DBConnection.run_execute/5 (db_connection 2.7.0) lib/db_connection.ex:829: DBConnection.execute/4 (ecto_sql 3.12.1) lib/ecto/adapters/myxql/connection.ex:41: Ecto.Adapters.MyXQL.Connection.execute/4 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:1038: Ecto.Adapters.SQL.execute!/5 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:994: Ecto.Adapters.SQL.execute/6 (oban 2.19.1) lib/oban/peers/database.ex:191: Oban.Peers.Database.delete_expired_peers/1 (oban 2.19.1) lib/oban/peers/database.ex:104: anonymous fn/1 in Oban.Peers.Database.handle_info/2 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:1400: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1756: DBConnection.run_transaction/4 (oban 2.19.1) lib/oban/repo.ex:156: Oban.Repo.transaction/4 (oban 2.19.1) lib/oban/peers/database.ex:108: anonymous fn/2 in Oban.Peers.Database.handle_info/2 (telemetry 1.3.0) /home/prem/canarabank/saaskit/da_product_app_changed/deps/telemetry/src/telemetry.erl:324: :telemetry.span/3 (oban 2.19.1) lib/oban/peers/database.ex:101: Oban.Peers.Database.handle_info/2 (stdlib 5.2.3.2) gen_server.erl:1095: :gen_server.try_handle_info/3 (stdlib 5.2.3.2) gen_server.erl:1183: :gen_server.handle_msg/6 (stdlib 5.2.3.2) proc_lib.erl:241: :proc_lib.init_p_do_apply/3 [Wed Nov 4 09:31:02.265000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 09:31:05.748000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 09:31:07.266000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 09:31:11.421000 2026] [DBConnection.Connection:error] [pid 1089340] [client -] MyXQL.Connection (#PID<0.583.0>) disconnected: ** (DBConnection.ConnectionError) client #PID<0.667.0> timed out because it queued and checked out the connection for longer than 15000ms #PID<0.667.0> was at location: :prim_inet.recv0/3 (myxql 0.7.1) lib/myxql/client.ex:208: MyXQL.Client.recv_packets/5 (myxql 0.7.1) lib/myxql/connection.ex:104: MyXQL.Connection.handle_execute/4 (db_connection 2.7.0) lib/db_connection/holder.ex:354: DBConnection.Holder.holder_apply/4 (db_connection 2.7.0) lib/db_connection.ex:1558: DBConnection.run_execute/5 (db_connection 2.7.0) lib/db_connection.ex:829: DBConnection.execute/4 (ecto_sql 3.12.1) lib/ecto/adapters/myxql/connection.ex:41: Ecto.Adapters.MyXQL.Connection.execute/4 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:1038: Ecto.Adapters.SQL.execute!/5 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:994: Ecto.Adapters.SQL.execute/6 (oban 2.19.1) lib/oban/peers/database.ex:191: Oban.Peers.Database.delete_expired_peers/1 (oban 2.19.1) lib/oban/peers/database.ex:104: anonymous fn/1 in Oban.Peers.Database.handle_info/2 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:1400: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1756: DBConnection.run_transaction/4 (oban 2.19.1) lib/oban/repo.ex:156: Oban.Repo.transaction/4 (oban 2.19.1) lib/oban/peers/database.ex:108: anonymous fn/2 in Oban.Peers.Database.handle_info/2 (telemetry 1.3.0) /home/prem/canarabank/saaskit/da_product_app_changed/deps/telemetry/src/telemetry.erl:324: :telemetry.span/3 (oban 2.19.1) lib/oban/peers/database.ex:101: Oban.Peers.Database.handle_info/2 (stdlib 5.2.3.2) gen_server.erl:1095: :gen_server.try_handle_info/3 (stdlib 5.2.3.2) gen_server.erl:1183: :gen_server.handle_msg/6 (stdlib 5.2.3.2) proc_lib.erl:241: :proc_lib.init_p_do_apply/3 [Wed Nov 4 09:36:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.6ms idle=1627.7ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 09:46:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.4ms idle=1619.7ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 09:56:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.6ms idle=1514.4ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 10:00:30.521000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 10:00:35.522000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 10:00:40.340000 2026] [DBConnection.Connection:error] [pid 1089340] [client -] MyXQL.Connection (#PID<0.576.0>) disconnected: ** (DBConnection.ConnectionError) client #PID<0.667.0> timed out because it queued and checked out the connection for longer than 15000ms #PID<0.667.0> was at location: :prim_inet.recv0/3 (myxql 0.7.1) lib/myxql/client.ex:208: MyXQL.Client.recv_packets/5 (myxql 0.7.1) lib/myxql/connection.ex:438: MyXQL.Connection.handle_transaction/3 (db_connection 2.7.0) lib/db_connection/holder.ex:354: DBConnection.Holder.holder_apply/4 (db_connection 2.7.0) lib/db_connection.ex:1891: DBConnection.run_commit/3 (db_connection 2.7.0) lib/db_connection.ex:1366: DBConnection.checkin/4 (db_connection 2.7.0) lib/db_connection.ex:1870: DBConnection.commit/3 (db_connection 2.7.0) lib/db_connection.ex:1783: DBConnection.run_transaction/4 (oban 2.19.1) lib/oban/repo.ex:156: Oban.Repo.transaction/4 (oban 2.19.1) lib/oban/peers/database.ex:108: anonymous fn/2 in Oban.Peers.Database.handle_info/2 (telemetry 1.3.0) /home/prem/canarabank/saaskit/da_product_app_changed/deps/telemetry/src/telemetry.erl:324: :telemetry.span/3 (oban 2.19.1) lib/oban/peers/database.ex:101: Oban.Peers.Database.handle_info/2 (stdlib 5.2.3.2) gen_server.erl:1095: :gen_server.try_handle_info/3 (stdlib 5.2.3.2) gen_server.erl:1183: :gen_server.handle_msg/6 (stdlib 5.2.3.2) proc_lib.erl:241: :proc_lib.init_p_do_apply/3 [Wed Nov 4 10:06:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.6ms idle=1501.7ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 10:13:05.942000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 10:13:06.040000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 10:13:11.042000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 10:16:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.5ms idle=1484.7ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 10:26:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.7ms idle=1471.7ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 10:36:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.6ms idle=1411.8ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 10:46:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.6ms idle=1396.9ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 10:49:14.495000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 10:49:19.496000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 10:56:24.653000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 10:56:29.654000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 10:56:29.971000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 10:56:50.422000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=1.9ms idle=388.9ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 11:01:50.364000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 11:06:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.4ms idle=1221.7ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 11:13:42.265000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 11:13:43.038000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 11:13:47.266000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 11:13:51.537000 2026] [DBConnection.Connection:error] [pid 1089340] [client -] MyXQL.Connection (#PID<0.575.0>) disconnected: ** (DBConnection.ConnectionError) client #PID<0.667.0> timed out because it queued and checked out the connection for longer than 15000ms #PID<0.667.0> was at location: :prim_inet.recv0/3 (myxql 0.7.1) lib/myxql/client.ex:208: MyXQL.Client.recv_packets/5 (myxql 0.7.1) lib/myxql/connection.ex:438: MyXQL.Connection.handle_transaction/3 (db_connection 2.7.0) lib/db_connection/holder.ex:354: DBConnection.Holder.holder_apply/4 (db_connection 2.7.0) lib/db_connection.ex:1891: DBConnection.run_commit/3 (db_connection 2.7.0) lib/db_connection.ex:1366: DBConnection.checkin/4 (db_connection 2.7.0) lib/db_connection.ex:1870: DBConnection.commit/3 (db_connection 2.7.0) lib/db_connection.ex:1783: DBConnection.run_transaction/4 (oban 2.19.1) lib/oban/repo.ex:156: Oban.Repo.transaction/4 (oban 2.19.1) lib/oban/peers/database.ex:108: anonymous fn/2 in Oban.Peers.Database.handle_info/2 (telemetry 1.3.0) /home/prem/canarabank/saaskit/da_product_app_changed/deps/telemetry/src/telemetry.erl:324: :telemetry.span/3 (oban 2.19.1) lib/oban/peers/database.ex:101: Oban.Peers.Database.handle_info/2 (stdlib 5.2.3.2) gen_server.erl:1095: :gen_server.try_handle_info/3 (stdlib 5.2.3.2) gen_server.erl:1183: :gen_server.handle_msg/6 (stdlib 5.2.3.2) proc_lib.erl:241: :proc_lib.init_p_do_apply/3 [Wed Nov 4 11:16:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.5ms idle=1209.6ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 11:20:09.721000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 11:20:14.722000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 11:22:03.895000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 11:22:05.636000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 11:22:08.896000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 11:22:13.731000 2026] [DBConnection.Connection:error] [pid 1089340] [client -] MyXQL.Connection (#PID<0.577.0>) disconnected: ** (DBConnection.ConnectionError) client #PID<0.667.0> timed out because it queued and checked out the connection for longer than 15000ms #PID<0.667.0> was at location: :prim_inet.recv0/3 (myxql 0.7.1) lib/myxql/client.ex:208: MyXQL.Client.recv_packets/5 (myxql 0.7.1) lib/myxql/connection.ex:438: MyXQL.Connection.handle_transaction/3 (db_connection 2.7.0) lib/db_connection/holder.ex:354: DBConnection.Holder.holder_apply/4 (db_connection 2.7.0) lib/db_connection.ex:1891: DBConnection.run_commit/3 (db_connection 2.7.0) lib/db_connection.ex:1366: DBConnection.checkin/4 (db_connection 2.7.0) lib/db_connection.ex:1870: DBConnection.commit/3 (db_connection 2.7.0) lib/db_connection.ex:1783: DBConnection.run_transaction/4 (oban 2.19.1) lib/oban/repo.ex:156: Oban.Repo.transaction/4 (oban 2.19.1) lib/oban/peers/database.ex:108: anonymous fn/2 in Oban.Peers.Database.handle_info/2 (telemetry 1.3.0) /home/prem/canarabank/saaskit/da_product_app_changed/deps/telemetry/src/telemetry.erl:324: :telemetry.span/3 (oban 2.19.1) lib/oban/peers/database.ex:101: Oban.Peers.Database.handle_info/2 (stdlib 5.2.3.2) gen_server.erl:1095: :gen_server.try_handle_info/3 (stdlib 5.2.3.2) gen_server.erl:1183: :gen_server.handle_msg/6 (stdlib 5.2.3.2) proc_lib.erl:241: :proc_lib.init_p_do_apply/3 [Wed Nov 4 11:26:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.7ms idle=1203.1ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 11:32:45.977000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 11:32:50.978000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 11:36:50.430000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.4ms idle=1146.1ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 11:44:30.537000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 11:44:35.538000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 11:44:40.460000 2026] [DBConnection.Connection:error] [pid 1089340] [client -] MyXQL.Connection (#PID<0.580.0>) disconnected: ** (DBConnection.ConnectionError) client #PID<0.667.0> timed out because it queued and checked out the connection for longer than 15000ms #PID<0.667.0> was at location: :prim_inet.recv0/3 (myxql 0.7.1) lib/myxql/client.ex:208: MyXQL.Client.recv_packets/5 (myxql 0.7.1) lib/myxql/connection.ex:104: MyXQL.Connection.handle_execute/4 (db_connection 2.7.0) lib/db_connection/holder.ex:354: DBConnection.Holder.holder_apply/4 (db_connection 2.7.0) lib/db_connection.ex:1558: DBConnection.run_execute/5 (db_connection 2.7.0) lib/db_connection.ex:829: DBConnection.execute/4 (ecto_sql 3.12.1) lib/ecto/adapters/myxql/connection.ex:41: Ecto.Adapters.MyXQL.Connection.execute/4 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:1038: Ecto.Adapters.SQL.execute!/5 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:994: Ecto.Adapters.SQL.execute/6 (oban 2.19.1) lib/oban/peers/database.ex:191: Oban.Peers.Database.delete_expired_peers/1 (oban 2.19.1) lib/oban/peers/database.ex:104: anonymous fn/1 in Oban.Peers.Database.handle_info/2 (ecto_sql 3.12.1) lib/ecto/adapters/sql.ex:1400: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1756: DBConnection.run_transaction/4 (oban 2.19.1) lib/oban/repo.ex:156: Oban.Repo.transaction/4 (oban 2.19.1) lib/oban/peers/database.ex:108: anonymous fn/2 in Oban.Peers.Database.handle_info/2 (telemetry 1.3.0) /home/prem/canarabank/saaskit/da_product_app_changed/deps/telemetry/src/telemetry.erl:324: :telemetry.span/3 (oban 2.19.1) lib/oban/peers/database.ex:101: Oban.Peers.Database.handle_info/2 (stdlib 5.2.3.2) gen_server.erl:1095: :gen_server.try_handle_info/3 (stdlib 5.2.3.2) gen_server.erl:1183: :gen_server.handle_msg/6 (stdlib 5.2.3.2) proc_lib.erl:241: :proc_lib.init_p_do_apply/3 [Wed Nov 4 11:46:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.5ms idle=1944.8ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 11:49:48.787000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 11:51:10.812000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 11:51:15.813000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 11:56:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.6ms idle=1875.8ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 11:57:49.981000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 12:04:51.650000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 12:06:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.6ms idle=1854.7ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 12:07:14.598000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:59974] GET /tabby/demo/result/failure [Wed Nov 4 12:07:14.598000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:59974] Sent 200 in 554µs [Wed Nov 4 12:07:18.012000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:59974] GET /tabby/demo/result/failure [Wed Nov 4 12:07:18.012000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:59974] Sent 200 in 485µs [Wed Nov 4 12:07:21.100000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:59974] GET /tabby/demo [Wed Nov 4 12:07:21.102000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:59974] Sent 200 in 2ms [Wed Nov 4 12:07:21.605000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:59974] POST /tabby/demo/summary [Wed Nov 4 12:07:21.605000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:59974] Sent 200 in 569µs [Wed Nov 4 12:07:22.417000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:59974] POST /tabby/demo/eligibility [Wed Nov 4 12:07:22.667000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:58020] POST /tabby-sim/api/v2/checkout [Wed Nov 4 12:07:22.667000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 127.0.0.1:58020] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 12:07:22.668000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:58020] QUERY OK source="tabby_sim_faults" db=1.0ms idle=456.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 12:07:22.689000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:58020] QUERY OK db=19.4ms queue=0.4ms idle=448.5ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["6d5c23d0-7cd8-442d-b1ad-cc0b79665135", "CREATED", "AED", "e8a2329a-ce7e-4257-9fb7-cd4502d9b060", "slice9", ~U[2026-11-04 12:19:22Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 12:17:22Z], "created", false, ~N[2026-11-04 12:07:22], ~N[2026-11-04 12:07:22]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 12:07:22.689000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1089340] [client 127.0.0.1:58020] [TabbySim] checkout payment=6d5c23d0-7cd8-442d-b1ad-cc0b79665135 session=e8a2329a-ce7e-4257-9fb7-cd4502d9b060 decision=created reason=nil amount=850.00 AED [Wed Nov 4 12:07:22.691000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:58020] QUERY OK source="tabby_sim_payments" db=1.1ms idle=383.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 12:07:22.745000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client 127.0.0.1:58020] [TabbySim] expiry job 400383 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 12:07:22.746000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:58020] Sent 200 in 79ms [Wed Nov 4 12:07:22.747000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:59974] [Tabby] checkout post /api/v2/checkout -> 200 (330 ms, attempt 1) [Wed Nov 4 12:07:22.747000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:59974] [Tabby] session created payment=6d5c23d0-7cd8-442d-b1ad-cc0b79665135 [Wed Nov 4 12:07:22.747000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1089340] [client 115.99.167.137:59974] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 12:07:22.747000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:59974] Sent 200 in 330ms [Wed Nov 4 12:07:37.325000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:59974] POST /tabby/demo/summary [Wed Nov 4 12:07:37.325000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:59974] Sent 200 in 632µs [Wed Nov 4 12:07:38.172000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:59974] POST /tabby/demo/eligibility [Wed Nov 4 12:07:38.502000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:58020] POST /tabby-sim/api/v2/checkout [Wed Nov 4 12:07:38.503000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 127.0.0.1:58020] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "765.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 12:07:38.506000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:58020] QUERY OK source="tabby_sim_faults" db=1.7ms queue=0.1ms idle=1944.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 12:07:38.545000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:58020] QUERY OK db=37.1ms queue=0.8ms idle=1947.0ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["be4fa14a-2980-4f02-81ca-0ba2ef82c77b", "CREATED", "AED", "8ec50718-878f-4301-b6ef-b9f0860ec96d", "slice9", ~U[2026-11-04 12:19:38Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "765.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("765.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 12:17:38Z], "created", false, ~N[2026-11-04 12:07:38], ~N[2026-11-04 12:07:38]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 12:07:38.545000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1089340] [client 127.0.0.1:58020] [TabbySim] checkout payment=be4fa14a-2980-4f02-81ca-0ba2ef82c77b session=8ec50718-878f-4301-b6ef-b9f0860ec96d decision=created reason=nil amount=765.00 AED [Wed Nov 4 12:07:38.546000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:58020] QUERY OK source="tabby_sim_payments" db=0.9ms queue=0.2ms idle=1425.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 12:07:38.549000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:58020] Sent 200 in 46ms [Wed Nov 4 12:07:38.549000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:59974] [Tabby] checkout post /api/v2/checkout -> 200 (376 ms, attempt 1) [Wed Nov 4 12:07:38.549000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:59974] [Tabby] session created payment=be4fa14a-2980-4f02-81ca-0ba2ef82c77b [Wed Nov 4 12:07:38.550000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1089340] [client 115.99.167.137:59974] [Tabby] eligibility: show (amount=765.00 AED) [Wed Nov 4 12:07:38.550000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:59974] Sent 200 in 377ms [Wed Nov 4 12:07:49.408000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:59974] POST /tabby/demo/summary [Wed Nov 4 12:07:49.408000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:59974] Sent 200 in 742µs [Wed Nov 4 12:07:50.584000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:59974] POST /tabby/demo/eligibility [Wed Nov 4 12:07:50.928000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:58020] POST /tabby-sim/api/v2/checkout [Wed Nov 4 12:07:50.928000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 127.0.0.1:58020] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 12:07:50.930000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:58020] QUERY OK source="tabby_sim_faults" db=1.1ms idle=1369.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 12:07:50.977000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:58020] QUERY OK db=46.1ms queue=0.2ms idle=1371.6ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["43284587-3933-4a7f-b7ab-638dccf3064b", "CREATED", "AED", "6f067563-27af-413a-aa39-905872d49b7c", "slice9", ~U[2026-11-04 12:19:50Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 12:17:50Z], "created", false, ~N[2026-11-04 12:07:50], ~N[2026-11-04 12:07:50]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 12:07:50.977000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1089340] [client 127.0.0.1:58020] [TabbySim] checkout payment=43284587-3933-4a7f-b7ab-638dccf3064b session=6f067563-27af-413a-aa39-905872d49b7c decision=created reason=nil amount=850.00 AED [Wed Nov 4 12:07:50.979000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:58020] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1418.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 12:07:50.981000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:58020] Sent 200 in 52ms [Wed Nov 4 12:07:50.981000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:59974] [Tabby] checkout post /api/v2/checkout -> 200 (394 ms, attempt 1) [Wed Nov 4 12:07:50.981000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 115.99.167.137:59974] [Tabby] session created payment=43284587-3933-4a7f-b7ab-638dccf3064b [Wed Nov 4 12:07:50.982000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1089340] [client 115.99.167.137:59974] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 12:07:50.982000 2026] [Phoenix.Logger:info] [pid 1089340] [client 115.99.167.137:59974] Sent 200 in 397ms [Wed Nov 4 12:08:31.081000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.3ms idle=1517.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:08:31Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 12:08:31.081000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 12:08:31.083000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.6ms idle=576.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:08:31Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 12:08:31.084000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=521.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 12:08:37.509000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 12:08:38.859000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 400386 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 12:09:31.932000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=369.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:09:31Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 12:09:31.932000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 12:09:31.934000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=370.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:09:31Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 12:09:31.935000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=371.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 12:09:31.980000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 400387 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 12:10:32.217000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=654.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:10:32Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 12:10:32.218000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 12:10:32.219000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=655.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:10:32Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 12:10:32.220000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=657.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 12:10:32.269000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 400395 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 12:11:32.439000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=873.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:11:32Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 12:11:32.439000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 12:11:32.441000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=875.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:11:32Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 12:11:32.442000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=876.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 12:11:32.487000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 400396 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 12:12:32.771000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1193.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:12:32Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 12:12:32.772000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 12:12:32.774000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1195.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:12:32Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 12:12:32.775000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1196.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 12:12:32.805000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 400402 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 12:13:28.754000 2026] [Phoenix.Logger:info] [pid 1089340] [client 122.166.253.95:63599] GET /tabby/demo [Wed Nov 4 12:13:28.754000 2026] [DaProductAppWeb.Plugs.TabbyDemoGate:warn] [pid 1089340] [client 122.166.253.95:63599] [Tabby] demo 401 GET /tabby/demo [Wed Nov 4 12:13:28.754000 2026] [DaProductAppWeb.Router:debug] [pid 1089340] [client 122.166.253.95:63599] Phoenix.Router halted in :tabby_demo/2 [Wed Nov 4 12:13:28.754000 2026] [Phoenix.Logger:info] [pid 1089340] [client 122.166.253.95:63599] Sent 401 in 638µs [Wed Nov 4 12:13:32.447000 2026] [Phoenix.Logger:info] [pid 1089340] [client 122.166.253.95:59293] GET /tabby/demo [Wed Nov 4 12:13:32.447000 2026] [DaProductAppWeb.Plugs.TabbyDemoGate:warn] [pid 1089340] [client 122.166.253.95:59293] [Tabby] demo 401 GET /tabby/demo [Wed Nov 4 12:13:32.447000 2026] [DaProductAppWeb.Router:debug] [pid 1089340] [client 122.166.253.95:59293] Phoenix.Router halted in :tabby_demo/2 [Wed Nov 4 12:13:32.447000 2026] [Phoenix.Logger:info] [pid 1089340] [client 122.166.253.95:59293] Sent 401 in 595µs [Wed Nov 4 12:13:34.104000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=521.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:13:34Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 12:13:34.104000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 12:13:34.106000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.6ms idle=522.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:13:34Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 12:13:34.107000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=524.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 12:13:34.170000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 400403 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 12:13:35.692000 2026] [Phoenix.Logger:info] [pid 1089340] [client 122.166.253.95:59293] GET /tabby/demo [Wed Nov 4 12:13:35.692000 2026] [DaProductAppWeb.Plugs.TabbyDemoGate:warn] [pid 1089340] [client 122.166.253.95:59293] [Tabby] demo 401 GET /tabby/demo [Wed Nov 4 12:13:35.692000 2026] [DaProductAppWeb.Router:debug] [pid 1089340] [client 122.166.253.95:59293] Phoenix.Router halted in :tabby_demo/2 [Wed Nov 4 12:13:35.692000 2026] [Phoenix.Logger:info] [pid 1089340] [client 122.166.253.95:59293] Sent 401 in 834µs [Wed Nov 4 12:13:45.285000 2026] [Phoenix.Logger:info] [pid 1089340] [client 122.166.253.95:59293] GET /tabby/demo [Wed Nov 4 12:13:45.285000 2026] [DaProductAppWeb.Plugs.TabbyDemoGate:warn] [pid 1089340] [client 122.166.253.95:59293] [Tabby] demo 401 GET /tabby/demo [Wed Nov 4 12:13:45.285000 2026] [DaProductAppWeb.Router:debug] [pid 1089340] [client 122.166.253.95:59293] Phoenix.Router halted in :tabby_demo/2 [Wed Nov 4 12:13:45.285000 2026] [Phoenix.Logger:info] [pid 1089340] [client 122.166.253.95:59293] Sent 401 in 592µs [Wed Nov 4 12:13:48.962000 2026] [Phoenix.Logger:info] [pid 1089340] [client 122.166.253.95:59293] GET /tabby/demo/result/success [Wed Nov 4 12:13:48.963000 2026] [DaProductAppWeb.Plugs.TabbyDemoGate:warn] [pid 1089340] [client 122.166.253.95:59293] [Tabby] demo 401 GET /tabby/demo/result/success [Wed Nov 4 12:13:48.964000 2026] [DaProductAppWeb.Router:debug] [pid 1089340] [client 122.166.253.95:59293] Phoenix.Router halted in :tabby_demo/2 [Wed Nov 4 12:13:48.964000 2026] [Phoenix.Logger:info] [pid 1089340] [client 122.166.253.95:59293] Sent 401 in 1ms [Wed Nov 4 12:14:34.375000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.5ms idle=1789.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:14:34Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 12:14:34.375000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 12:14:34.377000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1095.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:14:34Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 12:14:34.379000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=2.0ms idle=793.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 12:14:34.459000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 400406 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 12:15:34.814000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.6ms idle=1221.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:15:34Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 12:15:34.815000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 12:15:34.816000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1224.2ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:15:34Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 12:15:34.817000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.1ms idle=1225.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 12:15:34.861000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 400410 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 12:16:35.148000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1070.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:16:35Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 12:16:35.148000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 12:16:35.149000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=558.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:16:35Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 12:16:35.151000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms queue=0.1ms idle=560.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 12:16:35.194000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 400413 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 12:16:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.5ms idle=1833.7ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 12:17:36.500000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1910.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:17:36Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 12:17:36.501000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 12:17:36.502000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1911.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:17:36Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 12:17:36.503000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1911.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 12:17:36.529000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 400416 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 12:18:37.801000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1206.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:18:37Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 12:18:37.801000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 12:18:37.802000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1207.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:18:37Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 12:18:37.804000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1208.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 12:18:37.872000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 400420 scheduled in 45s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 12:19:24.413000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=817.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:19:24Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 12:19:24.464000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=50.1ms idle=818.9ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 12:19:24], true, "6d5c23d0-7cd8-442d-b1ad-cc0b79665135", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 12:19:24.465000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=6d5c23d0-7cd8-442d-b1ad-cc0b79665135 CREATED -> EXPIRED [Wed Nov 4 12:19:24.466000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=869.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["6d5c23d0-7cd8-442d-b1ad-cc0b79665135"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 12:19:24.466000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=6d5c23d0-7cd8-442d-b1ad-cc0b79665135 [Wed Nov 4 12:19:24.467000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=6d5c23d0-7cd8-442d-b1ad-cc0b79665135 expired (expires_at 2026-11-04 12:19:22Z, session_status=created) [Wed Nov 4 12:19:24.468000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=871.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:19:24Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 12:19:24.468000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 12:19:24.468000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=872.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:19:24Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 12:19:24.471000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms queue=0.5ms idle=873.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 12:19:24.510000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 400421 scheduled in 14s (2 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 12:19:39.440000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1844.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:19:39Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 12:19:39.498000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=57.3ms idle=1845.8ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 12:19:39], true, "be4fa14a-2980-4f02-81ca-0ba2ef82c77b", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 12:19:39.498000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=be4fa14a-2980-4f02-81ca-0ba2ef82c77b CREATED -> EXPIRED [Wed Nov 4 12:19:39.500000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1903.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["be4fa14a-2980-4f02-81ca-0ba2ef82c77b"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 12:19:39.500000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=be4fa14a-2980-4f02-81ca-0ba2ef82c77b [Wed Nov 4 12:19:39.500000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=be4fa14a-2980-4f02-81ca-0ba2ef82c77b expired (expires_at 2026-11-04 12:19:38Z, session_status=created) [Wed Nov 4 12:19:39.501000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1905.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:19:39Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 12:19:39.501000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 12:19:39.502000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1906.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:19:39Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 12:19:39.503000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1907.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 12:19:39.540000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 400422 scheduled in 11s (1 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 12:19:51.490000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.4ms idle=1089.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:19:51Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 12:19:51.527000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=37.0ms idle=895.5ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 12:19:51], true, "43284587-3933-4a7f-b7ab-638dccf3064b", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 12:19:51.528000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=43284587-3933-4a7f-b7ab-638dccf3064b CREATED -> EXPIRED [Wed Nov 4 12:19:51.530000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.5ms idle=933.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["43284587-3933-4a7f-b7ab-638dccf3064b"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 12:19:51.530000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=43284587-3933-4a7f-b7ab-638dccf3064b [Wed Nov 4 12:19:51.530000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=43284587-3933-4a7f-b7ab-638dccf3064b expired (expires_at 2026-11-04 12:19:50Z, session_status=created) [Wed Nov 4 12:19:51.531000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=935.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:19:51Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 12:19:51.531000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 12:19:51.532000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=937.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:19:51Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 12:19:51.533000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=937.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 12:19:51.533000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job: no CREATED payment left, not rescheduling [Wed Nov 4 12:25:43.984000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 12:25:48.985000 2026] [Oban.Peer:warn] [pid 1089340] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Wed Nov 4 12:26:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.7ms idle=1819.5ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 12:30:42.069000 2026] [Phoenix.Logger:info] [pid 1089340] [client 122.166.253.95:63175] GET /tabby/demo/result/success [Wed Nov 4 12:30:42.069000 2026] [Phoenix.Logger:info] [pid 1089340] [client 122.166.253.95:63175] Sent 200 in 845µs [Wed Nov 4 12:30:42.112000 2026] [Phoenix.Logger:info] [pid 1089340] [client 122.166.253.95:53769] GET /tabby/demo [Wed Nov 4 12:30:42.113000 2026] [Phoenix.Logger:info] [pid 1089340] [client 122.166.253.95:53769] Sent 200 in 1ms [Wed Nov 4 12:30:42.508000 2026] [Phoenix.Logger:info] [pid 1089340] [client 122.166.253.95:63175] GET /tabby/demo [Wed Nov 4 12:30:42.510000 2026] [Phoenix.Logger:info] [pid 1089340] [client 122.166.253.95:63175] Sent 200 in 2ms [Wed Nov 4 12:30:42.564000 2026] [Phoenix.Logger:info] [pid 1089340] [client 122.166.253.95:53769] GET /tabby/demo/status/9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422 [Wed Nov 4 12:30:42.565000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 122.166.253.95:53769] QUERY OK source="tabby_payments" db=1.0ms idle=703.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["9f8f09b6-0ecc-44c0-b883-fb3ea8eb4422"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Wed Nov 4 12:30:42.566000 2026] [Phoenix.Logger:info] [pid 1089340] [client 122.166.253.95:53769] Sent 200 in 2ms [Wed Nov 4 12:30:42.778000 2026] [Phoenix.Logger:info] [pid 1089340] [client 122.166.253.95:51898] POST /tabby/demo/summary [Wed Nov 4 12:30:42.779000 2026] [Phoenix.Logger:info] [pid 1089340] [client 122.166.253.95:51898] Sent 200 in 891µs [Wed Nov 4 12:30:42.980000 2026] [Phoenix.Logger:info] [pid 1089340] [client 122.166.253.95:63175] GET /tabby/demo [Wed Nov 4 12:30:42.983000 2026] [Phoenix.Logger:info] [pid 1089340] [client 122.166.253.95:63175] Sent 200 in 3ms [Wed Nov 4 12:30:43.022000 2026] [Phoenix.Logger:info] [pid 1089340] [client 122.166.253.95:53769] POST /tabby/demo/summary [Wed Nov 4 12:30:43.022000 2026] [Phoenix.Logger:info] [pid 1089340] [client 122.166.253.95:53769] Sent 200 in 638µs [Wed Nov 4 12:30:43.515000 2026] [Phoenix.Logger:info] [pid 1089340] [client 122.166.253.95:53769] POST /tabby/demo/summary [Wed Nov 4 12:30:43.516000 2026] [Phoenix.Logger:info] [pid 1089340] [client 122.166.253.95:53769] Sent 200 in 905µs [Wed Nov 4 12:30:43.740000 2026] [Phoenix.Logger:info] [pid 1089340] [client 122.166.253.95:54842] POST /tabby/demo/eligibility [Wed Nov 4 12:30:43.989000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:34342] POST /tabby-sim/api/v2/checkout [Wed Nov 4 12:30:43.989000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 127.0.0.1:34342] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 12:30:43.991000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:34342] QUERY OK source="tabby_sim_faults" db=1.0ms queue=0.1ms idle=1164.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 12:30:44.039000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:34342] QUERY OK db=47.2ms queue=0.4ms idle=1143.1ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["0a273292-092e-4af0-84f2-3a37d223b621", "CREATED", "AED", "bad5a080-3449-475b-8cd6-aa8578a304f9", "slice9", ~U[2026-11-04 12:42:43Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 12:40:43Z], "created", false, ~N[2026-11-04 12:30:43], ~N[2026-11-04 12:30:43]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 12:30:44.040000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1089340] [client 127.0.0.1:34342] [TabbySim] checkout payment=0a273292-092e-4af0-84f2-3a37d223b621 session=bad5a080-3449-475b-8cd6-aa8578a304f9 decision=created reason=nil amount=850.00 AED [Wed Nov 4 12:30:44.041000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:34342] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.1ms idle=1148.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 12:30:44.066000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client 127.0.0.1:34342] [TabbySim] expiry job 400457 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 12:30:44.066000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:34342] Sent 200 in 77ms [Wed Nov 4 12:30:44.067000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 122.166.253.95:54842] [Tabby] checkout post /api/v2/checkout -> 200 (326 ms, attempt 1) [Wed Nov 4 12:30:44.067000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 122.166.253.95:54842] [Tabby] session created payment=0a273292-092e-4af0-84f2-3a37d223b621 [Wed Nov 4 12:30:44.067000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1089340] [client 122.166.253.95:54842] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 12:30:44.068000 2026] [Phoenix.Logger:info] [pid 1089340] [client 122.166.253.95:54842] Sent 200 in 327ms [Wed Nov 4 12:30:44.356000 2026] [Phoenix.Logger:info] [pid 1089340] [client 122.166.253.95:53769] POST /tabby/demo/eligibility [Wed Nov 4 12:30:44.641000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:34342] POST /tabby-sim/api/v2/checkout [Wed Nov 4 12:30:44.641000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 127.0.0.1:34342] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 12:30:44.642000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:34342] QUERY OK source="tabby_sim_faults" db=1.0ms idle=602.2ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 12:30:44.708000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:34342] QUERY OK db=64.6ms queue=0.1ms idle=602.3ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["f99d3fea-dcea-4e2d-83d9-09a7016a3100", "CREATED", "AED", "f43c70c5-cdb2-494d-86da-54d26199e406", "slice9", ~U[2026-11-04 12:42:44Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 12:40:44Z], "created", false, ~N[2026-11-04 12:30:44], ~N[2026-11-04 12:30:44]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 12:30:44.708000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1089340] [client 127.0.0.1:34342] [TabbySim] checkout payment=f99d3fea-dcea-4e2d-83d9-09a7016a3100 session=f43c70c5-cdb2-494d-86da-54d26199e406 decision=created reason=nil amount=850.00 AED [Wed Nov 4 12:30:44.709000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:34342] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.1ms idle=665.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 12:30:44.711000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:34342] Sent 200 in 70ms [Wed Nov 4 12:30:44.713000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 122.166.253.95:53769] [Tabby] checkout post /api/v2/checkout -> 200 (356 ms, attempt 1) [Wed Nov 4 12:30:44.713000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 122.166.253.95:53769] [Tabby] session created payment=f99d3fea-dcea-4e2d-83d9-09a7016a3100 [Wed Nov 4 12:30:44.714000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1089340] [client 122.166.253.95:53769] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 12:30:44.715000 2026] [Phoenix.Logger:info] [pid 1089340] [client 122.166.253.95:53769] Sent 200 in 359ms [Wed Nov 4 12:30:44.803000 2026] [Phoenix.Logger:info] [pid 1089340] [client 122.166.253.95:54842] POST /tabby/demo/eligibility [Wed Nov 4 12:30:45.046000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:34342] POST /tabby-sim/api/v2/checkout [Wed Nov 4 12:30:45.047000 2026] [Phoenix.Logger:debug] [pid 1089340] [client 127.0.0.1:34342] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Wed Nov 4 12:30:45.048000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:34342] QUERY OK source="tabby_sim_faults" db=0.8ms idle=547.6ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Wed Nov 4 12:30:45.096000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:34342] QUERY OK db=47.4ms queue=0.3ms idle=472.5ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["177136e7-f033-45f5-a09d-2c8dd7035bb0", "CREATED", "AED", "9eb547f1-fc8a-48a7-9fcb-bfb743d2a06d", "slice9", ~U[2026-11-04 12:42:45Z], %{"merchant_code" => "slice9", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-04 12:40:45Z], "created", false, ~N[2026-11-04 12:30:45], ~N[2026-11-04 12:30:45]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Wed Nov 4 12:30:45.097000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 1089340] [client 127.0.0.1:34342] [TabbySim] checkout payment=177136e7-f033-45f5-a09d-2c8dd7035bb0 session=9eb547f1-fc8a-48a7-9fcb-bfb743d2a06d decision=created reason=nil amount=850.00 AED [Wed Nov 4 12:30:45.097000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client 127.0.0.1:34342] QUERY OK source="tabby_sim_payments" db=0.4ms idle=454.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 12:30:45.099000 2026] [Phoenix.Logger:info] [pid 1089340] [client 127.0.0.1:34342] Sent 200 in 53ms [Wed Nov 4 12:30:45.099000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 122.166.253.95:54842] [Tabby] checkout post /api/v2/checkout -> 200 (296 ms, attempt 1) [Wed Nov 4 12:30:45.100000 2026] [DaProductApp.Tabby.Client:info] [pid 1089340] [client 122.166.253.95:54842] [Tabby] session created payment=177136e7-f033-45f5-a09d-2c8dd7035bb0 [Wed Nov 4 12:30:45.100000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 1089340] [client 122.166.253.95:54842] [Tabby] eligibility: show (amount=850.00 AED) [Wed Nov 4 12:30:45.100000 2026] [Phoenix.Logger:info] [pid 1089340] [client 122.166.253.95:54842] Sent 200 in 297ms [Wed Nov 4 12:30:52.326000 2026] [Phoenix.Logger:info] [pid 1089340] [client 122.166.253.95:61810] GET /tabby/demo [Wed Nov 4 12:30:52.326000 2026] [DaProductAppWeb.Plugs.TabbyDemoGate:warn] [pid 1089340] [client 122.166.253.95:61810] [Tabby] demo 401 GET /tabby/demo [Wed Nov 4 12:30:52.327000 2026] [DaProductAppWeb.Router:debug] [pid 1089340] [client 122.166.253.95:61810] Phoenix.Router halted in :tabby_demo/2 [Wed Nov 4 12:30:52.327000 2026] [Phoenix.Logger:info] [pid 1089340] [client 122.166.253.95:61810] Sent 401 in 721µs [Wed Nov 4 12:31:45.293000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1666.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:31:45Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 12:31:45.293000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 12:31:45.294000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1668.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:31:45Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 12:31:45.295000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1668.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 12:31:45.345000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 400458 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 12:32:46.524000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.2ms idle=1892.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:32:46Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 12:32:46.524000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 12:32:46.525000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1893.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:32:46Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 12:32:46.527000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1894.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 12:32:46.567000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 400463 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 12:33:47.840000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=208.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:33:47Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 12:33:47.840000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 12:33:47.841000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=209.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:33:47Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 12:33:47.843000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=210.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 12:33:47.882000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 400465 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 12:34:49.134000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=4.4ms idle=1495.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:34:49Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 12:34:49.135000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 12:34:49.137000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.5ms idle=1501.2ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:34:49Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 12:34:49.139000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1504.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 12:34:49.206000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 400468 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 12:35:50.368000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1084.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:35:50Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 12:35:50.369000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 12:35:50.370000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=735.2ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:35:50Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 12:35:50.371000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=736.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 12:35:50.410000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 400471 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 12:36:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.5ms idle=1812.7ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 12:36:51.673000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=128.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:36:51Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 12:36:51.674000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 12:36:51.675000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=38.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:36:51Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 12:36:51.675000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=39.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 12:36:51.705000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 400474 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 12:37:52.986000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1339.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:37:52Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 12:37:52.986000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 12:37:52.987000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1339.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:37:52Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 12:37:52.988000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1340.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 12:37:53.025000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 400477 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 12:38:54.272000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1624.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:38:54Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 12:38:54.273000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 12:38:54.275000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.7ms idle=1626.2ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:38:54Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 12:38:54.276000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.9ms idle=1627.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 12:38:54.322000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 400481 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 12:39:55.589000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1940.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:39:55Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 12:39:55.589000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 12:39:55.590000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1941.2ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:39:55Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 12:39:55.591000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1942.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 12:39:55.630000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 400482 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 12:40:56.837000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1184.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:40:56Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 12:40:56.837000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 12:40:56.838000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1185.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:40:56Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 12:40:56.839000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1084.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 12:40:56.883000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 400488 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 12:41:58.130000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1476.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:41:58Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 12:41:58.130000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 0 payment(s) were due [Wed Nov 4 12:41:58.131000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.1ms idle=1477.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:41:58Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 12:41:58.132000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms queue=0.1ms idle=1477.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 12:41:58.179000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 400489 scheduled in 45s (3 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 12:42:43.989000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1333.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:42:43Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 12:42:44.013000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=23.2ms idle=1334.9ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 12:42:43], true, "0a273292-092e-4af0-84f2-3a37d223b621", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 12:42:44.013000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=0a273292-092e-4af0-84f2-3a37d223b621 CREATED -> EXPIRED [Wed Nov 4 12:42:44.014000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1358.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["0a273292-092e-4af0-84f2-3a37d223b621"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 12:42:44.014000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=0a273292-092e-4af0-84f2-3a37d223b621 [Wed Nov 4 12:42:44.015000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=0a273292-092e-4af0-84f2-3a37d223b621 expired (expires_at 2026-11-04 12:42:43Z, session_status=created) [Wed Nov 4 12:42:44.016000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1109.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:42:44Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 12:42:44.056000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=39.6ms idle=362.9ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 12:42:44], true, "f99d3fea-dcea-4e2d-83d9-09a7016a3100", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 12:42:44.057000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=f99d3fea-dcea-4e2d-83d9-09a7016a3100 CREATED -> EXPIRED [Wed Nov 4 12:42:44.058000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms queue=0.1ms idle=403.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["f99d3fea-dcea-4e2d-83d9-09a7016a3100"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 12:42:44.058000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=f99d3fea-dcea-4e2d-83d9-09a7016a3100 [Wed Nov 4 12:42:44.059000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=f99d3fea-dcea-4e2d-83d9-09a7016a3100 expired (expires_at 2026-11-04 12:42:44Z, session_status=created) [Wed Nov 4 12:42:44.060000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=405.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:42:44Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 12:42:44.060000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 2 payment(s) were due [Wed Nov 4 12:42:44.061000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=406.2ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:42:44Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 12:42:44.062000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms queue=0.1ms idle=152.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 12:42:44.115000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job 400494 scheduled in 1s (1 CREATED payment(s) waiting, 0 stuck) [Wed Nov 4 12:42:45.990000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=334.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:42:45Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 12:42:46.048000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=57.9ms idle=335.9ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-04 12:42:45], true, "177136e7-f033-45f5-a09d-2c8dd7035bb0", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Wed Nov 4 12:42:46.048000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=177136e7-f033-45f5-a09d-2c8dd7035bb0 CREATED -> EXPIRED [Wed Nov 4 12:42:46.050000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=394.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["177136e7-f033-45f5-a09d-2c8dd7035bb0"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Wed Nov 4 12:42:46.050000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 1089340] [client -] [TabbySim] webhook not sent: event=expire payment=177136e7-f033-45f5-a09d-2c8dd7035bb0 [Wed Nov 4 12:42:46.051000 2026] [DaProductApp.TabbySim.Payments:info] [pid 1089340] [client -] [TabbySim] payment=177136e7-f033-45f5-a09d-2c8dd7035bb0 expired (expires_at 2026-11-04 12:42:45Z, session_status=created) [Wed Nov 4 12:42:46.052000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=396.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:42:46Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Wed Nov 4 12:42:46.052000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 1089340] [client -] [TabbySim] expiry job: 1 payment(s) were due [Wed Nov 4 12:42:46.052000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=397.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-04 12:42:46Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Wed Nov 4 12:42:46.054000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=398.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Wed Nov 4 12:42:46.054000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 1089340] [client -] [TabbySim] expiry job: no CREATED payment left, not rescheduling [Wed Nov 4 12:46:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.6ms idle=1724.8ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 12:56:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.4ms idle=1716.7ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 13:06:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.6ms idle=1709.8ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 13:16:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.6ms idle=1709.8ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 13:26:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.6ms idle=1706.8ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 13:30:00.400000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="report_requests" db=0.5ms queue=0.5ms idle=1706.4ms SELECT r0.`id`, r0.`report_id`, r0.`report_type`, r0.`requester_ref`, r0.`filters`, r0.`status`, r0.`progress_percentage`, r0.`row_count`, r0.`file_path`, r0.`file_size`, r0.`download_token`, r0.`download_count`, r0.`last_downloaded_at`, r0.`error_message`, r0.`expires_at`, r0.`completed_at`, r0.`inserted_at`, r0.`updated_at` FROM `report_requests` AS r0 WHERE (NOT (r0.`expires_at` IS NULL) AND (r0.`expires_at` < ?)) [~U[2026-11-04 13:30:00Z]] ↳ DaProductApp.Workers.ReportRetentionWorker.perform/1, at: lib/da_product_app/workers/report_retention_worker.ex:18 [Wed Nov 4 13:30:00.475000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="report_requests" db=1.6ms idle=1678.8ms SELECT r0.`id`, r0.`report_id`, r0.`report_type`, r0.`requester_ref`, r0.`filters`, r0.`status`, r0.`progress_percentage`, r0.`row_count`, r0.`file_path`, r0.`file_size`, r0.`download_token`, r0.`download_count`, r0.`last_downloaded_at`, r0.`error_message`, r0.`expires_at`, r0.`completed_at`, r0.`inserted_at`, r0.`updated_at` FROM `report_requests` AS r0 WHERE (NOT (r0.`expires_at` IS NULL) AND (r0.`expires_at` < ?)) [~U[2026-11-04 13:30:00Z]] ↳ DaProductApp.Workers.ReportRetentionWorker.perform/1, at: lib/da_product_app/workers/report_retention_worker.ex:18 [Wed Nov 4 13:30:00.596000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="report_requests" db=1.0ms idle=901.9ms SELECT r0.`id`, r0.`report_id`, r0.`report_type`, r0.`requester_ref`, r0.`filters`, r0.`status`, r0.`progress_percentage`, r0.`row_count`, r0.`file_path`, r0.`file_size`, r0.`download_token`, r0.`download_count`, r0.`last_downloaded_at`, r0.`error_message`, r0.`expires_at`, r0.`completed_at`, r0.`inserted_at`, r0.`updated_at` FROM `report_requests` AS r0 WHERE (NOT (r0.`expires_at` IS NULL) AND (r0.`expires_at` < ?)) [~U[2026-11-04 13:30:00Z]] ↳ DaProductApp.Workers.ReportRetentionWorker.perform/1, at: lib/da_product_app/workers/report_retention_worker.ex:18 [Wed Nov 4 13:30:00.778000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="report_requests" db=0.7ms idle=382.9ms SELECT r0.`id`, r0.`report_id`, r0.`report_type`, r0.`requester_ref`, r0.`filters`, r0.`status`, r0.`progress_percentage`, r0.`row_count`, r0.`file_path`, r0.`file_size`, r0.`download_token`, r0.`download_count`, r0.`last_downloaded_at`, r0.`error_message`, r0.`expires_at`, r0.`completed_at`, r0.`inserted_at`, r0.`updated_at` FROM `report_requests` AS r0 WHERE (NOT (r0.`expires_at` IS NULL) AND (r0.`expires_at` < ?)) [~U[2026-11-04 13:30:00Z]] ↳ DaProductApp.Workers.ReportRetentionWorker.perform/1, at: lib/da_product_app/workers/report_retention_worker.ex:18 [Wed Nov 4 13:36:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.6ms idle=1699.8ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 13:46:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.7ms idle=1697.8ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 13:56:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.5ms idle=1686.9ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 14:06:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.5ms idle=1682.8ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 14:16:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.4ms idle=1670.7ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 14:26:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.4ms idle=1660.8ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 14:30:00.298000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="report_requests" db=0.8ms idle=1582.4ms SELECT r0.`id`, r0.`report_id`, r0.`report_type`, r0.`requester_ref`, r0.`filters`, r0.`status`, r0.`progress_percentage`, r0.`row_count`, r0.`file_path`, r0.`file_size`, r0.`download_token`, r0.`download_count`, r0.`last_downloaded_at`, r0.`error_message`, r0.`expires_at`, r0.`completed_at`, r0.`inserted_at`, r0.`updated_at` FROM `report_requests` AS r0 WHERE (NOT (r0.`expires_at` IS NULL) AND (r0.`expires_at` < ?)) [~U[2026-11-04 14:30:00Z]] ↳ DaProductApp.Workers.ReportRetentionWorker.perform/1, at: lib/da_product_app/workers/report_retention_worker.ex:18 [Wed Nov 4 14:30:00.871000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="report_requests" db=0.4ms idle=700.3ms SELECT r0.`id`, r0.`report_id`, r0.`report_type`, r0.`requester_ref`, r0.`filters`, r0.`status`, r0.`progress_percentage`, r0.`row_count`, r0.`file_path`, r0.`file_size`, r0.`download_token`, r0.`download_count`, r0.`last_downloaded_at`, r0.`error_message`, r0.`expires_at`, r0.`completed_at`, r0.`inserted_at`, r0.`updated_at` FROM `report_requests` AS r0 WHERE (NOT (r0.`expires_at` IS NULL) AND (r0.`expires_at` < ?)) [~U[2026-11-04 14:30:00Z]] ↳ DaProductApp.Workers.ReportRetentionWorker.perform/1, at: lib/da_product_app/workers/report_retention_worker.ex:18 [Wed Nov 4 14:30:01.124000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="report_requests" db=0.9ms idle=746.5ms SELECT r0.`id`, r0.`report_id`, r0.`report_type`, r0.`requester_ref`, r0.`filters`, r0.`status`, r0.`progress_percentage`, r0.`row_count`, r0.`file_path`, r0.`file_size`, r0.`download_token`, r0.`download_count`, r0.`last_downloaded_at`, r0.`error_message`, r0.`expires_at`, r0.`completed_at`, r0.`inserted_at`, r0.`updated_at` FROM `report_requests` AS r0 WHERE (NOT (r0.`expires_at` IS NULL) AND (r0.`expires_at` < ?)) [~U[2026-11-04 14:30:01Z]] ↳ DaProductApp.Workers.ReportRetentionWorker.perform/1, at: lib/da_product_app/workers/report_retention_worker.ex:18 [Wed Nov 4 14:30:01.124000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="report_requests" db=0.8ms idle=694.9ms SELECT r0.`id`, r0.`report_id`, r0.`report_type`, r0.`requester_ref`, r0.`filters`, r0.`status`, r0.`progress_percentage`, r0.`row_count`, r0.`file_path`, r0.`file_size`, r0.`download_token`, r0.`download_count`, r0.`last_downloaded_at`, r0.`error_message`, r0.`expires_at`, r0.`completed_at`, r0.`inserted_at`, r0.`updated_at` FROM `report_requests` AS r0 WHERE (NOT (r0.`expires_at` IS NULL) AND (r0.`expires_at` < ?)) [~U[2026-11-04 14:30:01Z]] ↳ DaProductApp.Workers.ReportRetentionWorker.perform/1, at: lib/da_product_app/workers/report_retention_worker.ex:18 [Wed Nov 4 14:36:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.9ms idle=1653.8ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 14:46:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.4ms idle=1641.8ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 14:56:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.6ms idle=1638.8ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 15:06:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.6ms idle=1623.8ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 15:16:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.6ms idle=612.6ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 15:26:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.6ms idle=1599.5ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 15:36:50.421000 2026] [Ecto.Adapters.SQL:debug] [pid 1089340] [client -] QUERY OK source="global_table" db=0.5ms idle=1594.8ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Wed Nov 4 15:42:10.208000 2026] [user_drv:info] [pid 1089340] [client -] Failed to write to standard out (:eio) [Wed Nov 4 15:42:10.209000 2026] [gen_server:error] [pid 1089340] [client -] GenServer :standard_error_sup terminating ** (stop) :eio Last message: {:EXIT, #PID<0.52.0>, :eio} State: {:state, :standard_error, :undefined, #PID<0.52.0>, {:local, :standard_error_sup}} [Wed Nov 4 15:42:10.210000 2026] [da_product_app:error] [pid 1089340] [client -] Process #PID<0.351.0> raised an exception ** (ArgumentError) errors were found at the given arguments: * 1st argument: the device does not exist (stdlib 5.2.3.2) io.erl:98: :io.put_chars(:standard_error, ~c"Failed to write log message to stdout, trying stderr\n") (kernel 9.2.4.3) logger_std_h.erl:514: :logger_std_h.write_to_dev/2 (kernel 9.2.4.3) logger_std_h.erl:435: :logger_std_h.file_ctrl_loop/1 [Wed Nov 4 15:42:10.210000 2026] [gen_server:error] [pid 1089340] [client -] GenServer #PID<0.350.0> terminating ** (stop) {:error, {:write_failed, %{type: :standard_io}, {:badarg, [{:io, :put_chars, [:standard_error, ~c"Failed to write log message to stdout, trying stderr\n"], [file: ~c"io.erl", line: 98, error_info: %{cause: {:io, :arguments}, module: :erl_stdlib_errors}]}, {:logger_std_h, :write_to_dev, 2, [file: ~c"logger_std_h.erl", line: 514]}, {:logger_std_h, :file_ctrl_loop, 1, [file: ~c"logger_std_h.erl", line: 435]}]}}} (kernel 9.2.4.3) logger_std_h.erl:274: :logger_std_h.handle_info/3 (kernel 9.2.4.3) logger_h_common.erl:309: :logger_h_common.handle_info/2 (kernel 9.2.4.3) logger_olp.erl:616: :logger_olp.try_callback_call/4 (kernel 9.2.4.3) logger_olp.erl:270: :logger_olp.handle_info/2 (stdlib 5.2.3.2) gen_server.erl:1095: :gen_server.try_handle_info/3 (stdlib 5.2.3.2) gen_server.erl:1183: :gen_server.handle_msg/6 (stdlib 5.2.3.2) proc_lib.erl:241: :proc_lib.init_p_do_apply/3 Last message: {:EXIT, #PID<0.351.0>, {:badarg, [{:io, :put_chars, [:standard_error, ~c"Failed to write log message to stdout, trying stderr\n"], [file: ~c"io.erl", line: 98, error_info: %{cause: {:io, :arguments}, module: :erl_stdlib_errors}]}, {:logger_std_h, :write_to_dev, 2, [file: ~c"logger_std_h.erl", line: 514]}, {:logger_std_h, :file_ctrl_loop, 1, [file: ~c"logger_std_h.erl", line: 435]}]}} State: %{id: :logger_std_h_default, module: :logger_h_common, mode: :async, idle: false, burst_limit_enable: true, drop_mode_qlen: 200, flush_qlen: 1000, sync_mode_qlen: 10, burst_msg_count: 2, burst_win_ts: -576460750268033, cb_state: %{id: :default, module: :logger_std_h, filesync_repeat_interval: :no_repeat, ctrl_sync_count: 2, handler_state: %{type: :standard_io, file_ctrl_pid: #PID<0.351.0>}, last_op: :write}, last_load_ts: -576426828222615, last_qlen: 0, mode_ref: {:logger_olp, :logger_std_h_default}, overload_kill_restart_after: 5000, burst_limit_max_count: 500, burst_limit_window_time: 1000, overload_kill_enable: false, overload_kill_mem_size: 3000000, overload_kill_qlen: 20000} [Thu Nov 5 04:57:05.328000 2026] [Ecto.Adapters.SQL:debug] [pid 2092987] [client -] QUERY OK source="global_table" db=0.4ms queue=6.0ms idle=92.5ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 04:57:05.475000 2026] [Bandit:info] [pid 2092987] [client -] Running DaProductAppWeb.Endpoint with Bandit 1.6.7 at 0.0.0.0:4030 (http) [Thu Nov 5 04:57:05.487000 2026] [Phoenix.Endpoint.Supervisor:info] [pid 2092987] [client -] Access DaProductAppWeb.Endpoint at http://localhost:4030 [Thu Nov 5 04:57:05.506000 2026] [DaProductApp.MQTT.Handler:info] [pid 2092987] [client -] Device phoenix_client_node_devteam connected [Thu Nov 5 04:59:53.769000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="global_table" db=0.7ms queue=8.1ms idle=121.6ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 04:59:53.992000 2026] [Bandit:info] [pid 2096858] [client -] Running DaProductAppWeb.Endpoint with Bandit 1.6.7 at 0.0.0.0:4030 (http) [Thu Nov 5 04:59:54.005000 2026] [DaProductApp.MQTT.Handler:info] [pid 2096858] [client -] Device phoenix_client_node_devteam connected [Thu Nov 5 04:59:54.017000 2026] [Phoenix.Endpoint.Supervisor:info] [pid 2096858] [client -] Access DaProductAppWeb.Endpoint at http://localhost:4030 [Thu Nov 5 05:00:01.292000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="report_requests" db=11.4ms queue=6.5ms idle=1689.4ms SELECT r0.`id`, r0.`report_id`, r0.`report_type`, r0.`requester_ref`, r0.`filters`, r0.`status`, r0.`progress_percentage`, r0.`row_count`, r0.`file_path`, r0.`file_size`, r0.`download_token`, r0.`download_count`, r0.`last_downloaded_at`, r0.`error_message`, r0.`expires_at`, r0.`completed_at`, r0.`inserted_at`, r0.`updated_at` FROM `report_requests` AS r0 WHERE (NOT (r0.`expires_at` IS NULL) AND (r0.`expires_at` < ?)) [~U[2026-11-05 05:00:01Z]] ↳ DaProductApp.Workers.ReportRetentionWorker.perform/1, at: lib/da_product_app/workers/report_retention_worker.ex:18 [Thu Nov 5 05:00:01.851000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="report_requests" db=14.7ms idle=924.7ms SELECT r0.`id`, r0.`report_id`, r0.`report_type`, r0.`requester_ref`, r0.`filters`, r0.`status`, r0.`progress_percentage`, r0.`row_count`, r0.`file_path`, r0.`file_size`, r0.`download_token`, r0.`download_count`, r0.`last_downloaded_at`, r0.`error_message`, r0.`expires_at`, r0.`completed_at`, r0.`inserted_at`, r0.`updated_at` FROM `report_requests` AS r0 WHERE (NOT (r0.`expires_at` IS NULL) AND (r0.`expires_at` < ?)) [~U[2026-11-05 05:00:01Z]] ↳ DaProductApp.Workers.ReportRetentionWorker.perform/1, at: lib/da_product_app/workers/report_retention_worker.ex:18 [Thu Nov 5 05:00:08.342000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:57585] GET /tabby/demo [Thu Nov 5 05:00:08.614000 2026] [DaProductAppWeb.Plugs.TabbyDemoGate:warn] [pid 2096858] [client 122.166.253.95:57585] [Tabby] demo 401 GET /tabby/demo [Thu Nov 5 05:00:08.625000 2026] [DaProductAppWeb.Router:debug] [pid 2096858] [client 122.166.253.95:57585] Phoenix.Router halted in :tabby_demo/2 [Thu Nov 5 05:00:08.625000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:57585] Sent 401 in 283ms [Thu Nov 5 05:00:37.244000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:57585] GET /tabby/demo [Thu Nov 5 05:00:37.282000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:57585] Sent 200 in 38ms [Thu Nov 5 05:00:37.786000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:57585] POST /tabby/demo/summary [Thu Nov 5 05:00:37.799000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:57585] Sent 200 in 12ms [Thu Nov 5 05:00:38.706000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:52844] POST /tabby/demo/eligibility [Thu Nov 5 05:00:39.079000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:55062] POST /tabby-sim/api/v2/checkout [Thu Nov 5 05:00:39.083000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 127.0.0.1:55062] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 05:00:39.106000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:55062] QUERY OK source="tabby_sim_faults" db=2.4ms queue=1.6ms idle=1438.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 05:00:39.177000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:55062] QUERY OK db=23.4ms queue=0.8ms idle=935.3ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["89ff9f08-68e9-4182-a358-a5b3ff2adbcc", "CREATED", "AED", "c6c61813-8e19-464f-9382-6731285b563b", "demostore", ~U[2026-11-05 05:12:39Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-05 05:10:39Z], "created", false, ~N[2026-11-05 05:00:39], ~N[2026-11-05 05:00:39]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 05:00:39.180000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2096858] [client 127.0.0.1:55062] [TabbySim] checkout payment=89ff9f08-68e9-4182-a358-a5b3ff2adbcc session=c6c61813-8e19-464f-9382-6731285b563b decision=created reason=nil amount=850.00 AED [Thu Nov 5 05:00:39.190000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:55062] QUERY OK source="tabby_sim_payments" db=2.0ms queue=4.0ms idle=684.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:00:39.252000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client 127.0.0.1:55062] [TabbySim] expiry job 402166 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 05:00:39.255000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:55062] Sent 200 in 176ms [Thu Nov 5 05:00:39.262000 2026] [DaProductApp.Tabby.Client:info] [pid 2096858] [client 122.166.253.95:52844] [Tabby] checkout post /api/v2/checkout -> 200 (545 ms, attempt 1) [Thu Nov 5 05:00:39.264000 2026] [DaProductApp.Tabby.Client:info] [pid 2096858] [client 122.166.253.95:52844] [Tabby] session created payment=89ff9f08-68e9-4182-a358-a5b3ff2adbcc [Thu Nov 5 05:00:39.264000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2096858] [client 122.166.253.95:52844] [Tabby] eligibility: show (amount=850.00 AED) [Thu Nov 5 05:00:39.264000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:52844] Sent 200 in 558ms [Thu Nov 5 05:00:53.047000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:52844] POST /tabby/demo/place [Thu Nov 5 05:00:53.118000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:52844] QUERY OK db=52.7ms queue=2.1ms idle=470.1ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`order_reference`,`amount`,`needs_attention`,`success_url`,`cancel_url`,`failure_url`,`captured_amount`,`refunded_amount`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["3e2d7eb0-762c-45e7-a8af-1900739277e8", "new", "AED", "demostore", "DEMO-2CC4291A", Decimal.new("850.00"), false, "http://demo.ctrmv.com:4030/tabby/demo/result/success?lang=en&order=DEMO-2CC4291A", "http://demo.ctrmv.com:4030/tabby/demo/result/cancel?lang=en&order=DEMO-2CC4291A", "http://demo.ctrmv.com:4030/tabby/demo/result/failure?lang=en&order=DEMO-2CC4291A", Decimal.new("0"), Decimal.new("0"), ~N[2026-11-05 05:00:53], ~N[2026-11-05 05:00:53]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Thu Nov 5 05:00:53.461000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:36750] POST /tabby-sim/api/v2/checkout [Thu Nov 5 05:00:53.469000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 127.0.0.1:36750] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/3e2d7eb0-762c-45e7-a8af-1900739277e8/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/3e2d7eb0-762c-45e7-a8af-1900739277e8/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/3e2d7eb0-762c-45e7-a8af-1900739277e8/success"}, "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-2CC4291A"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 05:00:53.472000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:36750] QUERY OK source="tabby_sim_faults" db=3.2ms idle=876.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 05:00:53.556000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:36750] QUERY OK db=79.5ms queue=0.9ms idle=881.7ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`lang`,`amount`,`buyer`,`buyer_history`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`shipping_address`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07", "CREATED", "AED", "98a5e0ff-0e37-493a-ac76-ea2dd2907762", "demostore", ~U[2026-11-05 05:12:53Z], %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/3e2d7eb0-762c-45e7-a8af-1900739277e8/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/3e2d7eb0-762c-45e7-a8af-1900739277e8/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/3e2d7eb0-762c-45e7-a8af-1900739277e8/success"}, "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-2CC4291A"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "0", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo headphones", "unit_price" => "650"}, %{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo smartwatch", "unit_price" => "200"}], "reference_id" => "DEMO-2CC4291A", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "en", Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, %{"registered_since" => "2023-02-01T10:00:00Z"}, [], true, %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/3e2d7eb0-762c-45e7-a8af-1900739277e8/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/3e2d7eb0-762c-45e7-a8af-1900739277e8/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/3e2d7eb0-762c-45e7-a8af-1900739277e8/success"}, [], ~U[2026-11-05 05:10:53Z], "created", %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}, false, ~N[2026-11-05 05:00:53], ~N[2026-11-05 05:00:53]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 05:00:53.556000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2096858] [client 127.0.0.1:36750] [TabbySim] checkout payment=126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07 session=98a5e0ff-0e37-493a-ac76-ea2dd2907762 decision=created reason=nil amount=850.00 AED [Thu Nov 5 05:00:53.560000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:36750] QUERY OK source="tabby_sim_payments" db=2.1ms queue=1.3ms idle=963.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:00:53.563000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:36750] Sent 200 in 102ms [Thu Nov 5 05:00:53.565000 2026] [DaProductApp.Tabby.Client:info] [pid 2096858] [client 122.166.253.95:52844] [Tabby] checkout post /api/v2/checkout -> 200 (446 ms, attempt 1) [Thu Nov 5 05:00:53.565000 2026] [DaProductApp.Tabby.Client:info] [pid 2096858] [client 122.166.253.95:52844] [Tabby] session created payment=126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07 [Thu Nov 5 05:00:53.567000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:52844] QUERY OK source="tabby_payments" db=0.4ms queue=0.8ms idle=756.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["3e2d7eb0-762c-45e7-a8af-1900739277e8"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Thu Nov 5 05:00:53.620000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:52844] QUERY OK source="tabby_payments" db=52.2ms queue=0.4ms idle=673.5ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-05 05:20:53Z], "126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07", "98a5e0ff-0e37-493a-ac76-ea2dd2907762", ~N[2026-11-05 05:00:53], "3e2d7eb0-762c-45e7-a8af-1900739277e8"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Thu Nov 5 05:00:53.620000 2026] [DaProductApp.Tabby.Sessions:info] [pid 2096858] [client 122.166.253.95:52844] [Tabby] session created attempt=3e2d7eb0-762c-45e7-a8af-1900739277e8 payment=126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07 [Thu Nov 5 05:00:53.701000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:52844] Sent 200 in 654ms [Thu Nov 5 05:00:54.225000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:52844] GET /tabby-sim/hpp/98a5e0ff-0e37-493a-ac76-ea2dd2907762 [Thu Nov 5 05:00:54.226000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 122.166.253.95:52844] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "98a5e0ff-0e37-493a-ac76-ea2dd2907762"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 05:00:54.232000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:52844] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.5ms idle=675.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["98a5e0ff-0e37-493a-ac76-ea2dd2907762"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 05:00:54.237000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:52844] Sent 200 in 11ms [Thu Nov 5 05:01:39.589000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms queue=1.1ms idle=1987.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:01:39Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 05:01:39.590000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 05:01:39.591000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms queue=0.6ms idle=1990.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:01:39Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 05:01:39.592000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1991.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:01:39.640000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402168 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 05:02:40.852000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1236.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:02:40Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 05:02:40.853000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 05:02:40.853000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1238.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:02:40Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 05:02:40.855000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1238.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:02:40.905000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402171 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 05:02:52.786000 2026] [Oban.Peer:warn] [pid 2096858] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Thu Nov 5 05:02:54.521000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=0.9ms queue=0.5ms idle=187.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["demostore", ~U[2026-10-18 05:02:54Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 05:02:54.523000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=0.4ms queue=1.3ms idle=135.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["demostore", ~N[2026-11-05 05:00:54], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 05:02:54.527000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=0.6ms queue=3.3ms idle=138.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 05:02:54.530000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=0.8ms queue=1.1ms idle=142.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", ~N[2026-11-05 05:00:54], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 05:02:54.533000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=0.6ms queue=1.6ms idle=144.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["demostore", ~U[2026-11-05 04:57:54Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 05:02:54.536000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=3.1ms idle=147.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["3e2d7eb0-762c-45e7-a8af-1900739277e8"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 05:02:54.902000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:55370] GET /tabby-sim/api/v2/payments/126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07 [Thu Nov 5 05:02:54.902000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 127.0.0.1:55370] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07"} Pipelines: [:tabby_sim_api] [Thu Nov 5 05:02:54.912000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:55370] QUERY OK source="tabby_sim_faults" db=0.3ms queue=0.8ms idle=400.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 05:02:54.913000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:55370] QUERY OK source="tabby_sim_faults" db=0.3ms queue=0.1ms idle=402.2ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 05:02:54.914000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:55370] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.4ms idle=392.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Thu Nov 5 05:02:54.914000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:55370] Sent 200 in 11ms [Thu Nov 5 05:02:54.916000 2026] [DaProductApp.Tabby.Client:info] [pid 2096858] [client -] [Tabby] retrieve get /api/v2/payments/126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07 -> 200 (376 ms, attempt 1) [Thu Nov 5 05:02:54.921000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2096858] [client -] [Tabby] verify: attempt=3e2d7eb0-762c-45e7-a8af-1900739277e8 payment=126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07 is still CREATED at Tabby; it will be looked at again [Thu Nov 5 05:02:54.926000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_webhook_events" db=0.4ms queue=1.5ms idle=400.8ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-05 05:00:54Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Thu Nov 5 05:02:54.943000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_refunds" db=11.4ms queue=1.9ms idle=402.0ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["demostore", ~N[2026-11-05 05:00:54], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Thu Nov 5 05:02:54.945000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=0.3ms queue=0.9ms idle=413.4ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 05:02:54.946000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=0.3ms queue=0.4ms idle=412.3ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["demostore", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 05:02:54.947000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_webhook_events" db=0.3ms queue=0.4ms idle=410.3ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Thu Nov 5 05:02:54.949000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_refunds" db=0.3ms queue=0.8ms idle=287.2ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Thu Nov 5 05:02:54.949000 2026] [DaProductApp.Tabby.Poller:info] [pid 2096858] [client -] [Tabby] poll: handled 1 (created:pending=1); 1 attempt(s) still watched [Thu Nov 5 05:03:41.621000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1004.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:03:41Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 05:03:41.621000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 05:03:41.622000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1004.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:03:41Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 05:03:41.623000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1006.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:03:41.648000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402173 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 05:03:42.945000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:53275] POST /tabby-sim/hpp/98a5e0ff-0e37-493a-ac76-ea2dd2907762 [Thu Nov 5 05:03:42.945000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 122.166.253.95:53275] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "approve", "otp" => "8888", "session_id" => "98a5e0ff-0e37-493a-ac76-ea2dd2907762"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 05:03:42.946000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:53275] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1323.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["98a5e0ff-0e37-493a-ac76-ea2dd2907762"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 05:03:42.995000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:53275] QUERY OK source="tabby_sim_payments" db=47.5ms queue=0.3ms idle=1323.7ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["AUTHORIZED", ~N[2026-11-05 05:03:42], "126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 05:03:42.995000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2096858] [client 122.166.253.95:53275] [TabbySim] payment=126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07 CREATED -> AUTHORIZED [Thu Nov 5 05:03:42.997000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:53275] QUERY OK source="tabby_sim_payments" db=1.1ms queue=0.1ms idle=1371.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 05:03:43.006000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:53275] QUERY OK source="tabby_sim_webhooks" db=0.3ms queue=1.6ms idle=1356.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 05:03:43.006000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2096858] [client 122.166.253.95:53275] [TabbySim] no webhook registered for merchant_code=demostore; event=authorize payment=126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07 [Thu Nov 5 05:03:43.006000 2026] [DaProductApp.TabbySim.Hpp:info] [pid 2096858] [client 122.166.253.95:53275] [TabbySim] hpp payment=126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07 action=approve status=AUTHORIZED [Thu Nov 5 05:03:43.007000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:53275] Sent 302 in 61ms [Thu Nov 5 05:03:43.496000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:53275] GET /tabby/return/3e2d7eb0-762c-45e7-a8af-1900739277e8/success [Thu Nov 5 05:03:43.501000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:53275] QUERY OK source="tabby_payments" db=0.9ms idle=980.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["3e2d7eb0-762c-45e7-a8af-1900739277e8"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 05:03:43.530000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:53275] Sent 302 in 33ms [Thu Nov 5 05:03:43.621000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=0.9ms idle=625.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["3e2d7eb0-762c-45e7-a8af-1900739277e8"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 05:03:43.925000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:55370] GET /tabby-sim/api/v2/payments/126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07 [Thu Nov 5 05:03:43.926000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 127.0.0.1:55370] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07"} Pipelines: [:tabby_sim_api] [Thu Nov 5 05:03:43.928000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:55370] QUERY OK source="tabby_sim_faults" db=2.0ms idle=424.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 05:03:43.929000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:55370] QUERY OK source="tabby_sim_faults" db=0.2ms idle=421.6ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 05:03:43.930000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:55370] QUERY OK source="tabby_sim_payments" db=1.0ms idle=406.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Thu Nov 5 05:03:43.930000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:55370] Sent 200 in 4ms [Thu Nov 5 05:03:43.931000 2026] [DaProductApp.Tabby.Client:info] [pid 2096858] [client -] [Tabby] retrieve get /api/v2/payments/126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07 -> 200 (310 ms, attempt 1) [Thu Nov 5 05:03:43.992000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=60.2ms queue=0.5ms idle=402.0ms UPDATE `tabby_payments` AS t0 SET t0.`authorized_at` = ?, t0.`winner_key` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [~U[2026-11-05 05:03:43Z], "3d565521d75d43a78823c6c8be930b68a0231bb4239919b72c6615d13c556651", "authorized", ~N[2026-11-05 05:03:43], "3e2d7eb0-762c-45e7-a8af-1900739277e8", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 05:03:43.994000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=0.9ms idle=373.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["3e2d7eb0-762c-45e7-a8af-1900739277e8"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 05:03:43.994000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2096858] [client -] [Tabby] verify: attempt=3e2d7eb0-762c-45e7-a8af-1900739277e8 payment=126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07 created -> authorized [Thu Nov 5 05:03:44.014000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:53275] GET /tabby/demo/result/success [Thu Nov 5 05:03:44.014000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:53275] Sent 200 in 454µs [Thu Nov 5 05:03:44.115000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=1.0ms idle=206.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["3e2d7eb0-762c-45e7-a8af-1900739277e8"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 05:03:44.174000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=53.6ms queue=0.3ms idle=190.8ms UPDATE `tabby_payments` AS t0 SET t0.`capture_reference_id` = ?, t0.`claimed_at` = ?, t0.`claimed_by` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["capture-DEMO-2CC4291A", ~U[2026-11-05 05:03:44Z], "nonode@nohost", "capturing", ~N[2026-11-05 05:03:44], "3e2d7eb0-762c-45e7-a8af-1900739277e8", "authorized"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 05:03:44.175000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=244.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["3e2d7eb0-762c-45e7-a8af-1900739277e8"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 05:03:44.175000 2026] [DaProductApp.Tabby.Capture:info] [pid 2096858] [client -] [Tabby] capture: attempt=3e2d7eb0-762c-45e7-a8af-1900739277e8 payment=126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07 claimed (authorized -> capturing) [Thu Nov 5 05:03:44.438000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:55370] POST /tabby-sim/api/v2/payments/126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07/captures [Thu Nov 5 05:03:44.438000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 127.0.0.1:55370] Processing with DaProductAppWeb.TabbySim.PaymentsController.capture/2 Parameters: %{"amount" => "850.00", "id" => "126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07", "reference_id" => "capture-DEMO-2CC4291A"} Pipelines: [:tabby_sim_api] [Thu Nov 5 05:03:44.440000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:55370] QUERY OK source="tabby_sim_faults" db=1.0ms idle=342.2ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["capture", "126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 05:03:44.441000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:55370] QUERY OK source="tabby_sim_faults" db=1.4ms idle=327.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["capture"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 05:03:44.443000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:55370] QUERY OK source="tabby_sim_payments" db=1.4ms idle=326.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07"] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:227 [Thu Nov 5 05:03:44.443000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:55370] QUERY OK db=0.1ms idle=282.0ms begin [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Thu Nov 5 05:03:44.445000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:55370] QUERY OK source="tabby_sim_payments" db=0.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) FOR UPDATE ["126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:231 [Thu Nov 5 05:03:44.446000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:55370] QUERY OK source="tabby_sim_payments" db=0.6ms UPDATE `tabby_sim_payments` SET `status` = ?, `captures` = ?, `closed_at` = ?, `updated_at` = ? WHERE `id` = ? ["CLOSED", [%{"amount" => "850", "created_at" => "2026-11-05T05:03:44Z", "discount_amount" => "0", "id" => "56ca7305-5760-4410-87f3-d8dbabe61da6", "items" => nil, "reference_id" => "capture-DEMO-2CC4291A", "shipping_amount" => "0", "tax_amount" => "0"}], ~U[2026-11-05 05:03:44Z], ~N[2026-11-05 05:03:44], "126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:244 [Thu Nov 5 05:03:44.446000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2096858] [client 127.0.0.1:55370] [TabbySim] capture payment=126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07 status=CLOSED [Thu Nov 5 05:03:44.480000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:55370] QUERY OK db=33.8ms commit [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Thu Nov 5 05:03:44.482000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:55370] QUERY OK source="tabby_sim_webhooks" db=0.9ms queue=0.1ms idle=307.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 05:03:44.482000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2096858] [client 127.0.0.1:55370] [TabbySim] no webhook registered for merchant_code=demostore; event=capture payment=126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07 [Thu Nov 5 05:03:44.483000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:55370] QUERY OK source="tabby_sim_webhooks" db=0.7ms idle=307.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 05:03:44.483000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2096858] [client 127.0.0.1:55370] [TabbySim] no webhook registered for merchant_code=demostore; event=close payment=126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07 [Thu Nov 5 05:03:44.483000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:55370] Sent 200 in 45ms [Thu Nov 5 05:03:44.484000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:53275] GET /tabby/demo/status/3e2d7eb0-762c-45e7-a8af-1900739277e8 [Thu Nov 5 05:03:44.485000 2026] [DaProductApp.Tabby.Client:info] [pid 2096858] [client -] [Tabby] capture post /api/v2/payments/126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07/captures -> 200 (310 ms, attempt 1) [Thu Nov 5 05:03:44.489000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:53275] QUERY OK source="tabby_payments" db=0.5ms idle=197.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["3e2d7eb0-762c-45e7-a8af-1900739277e8"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 05:03:44.489000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:53275] Sent 200 in 4ms [Thu Nov 5 05:03:44.542000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=56.3ms queue=0.4ms idle=243.9ms UPDATE `tabby_payments` AS t0 SET t0.`captured_amount` = ?, t0.`captured_at` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [Decimal.new("850"), ~U[2026-11-05 05:03:44Z], "captured", ~N[2026-11-05 05:03:44], "3e2d7eb0-762c-45e7-a8af-1900739277e8", "capturing"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 05:03:44.544000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=1.2ms idle=168.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["3e2d7eb0-762c-45e7-a8af-1900739277e8"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 05:03:44.544000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2096858] [client -] [Tabby] verify: attempt=3e2d7eb0-762c-45e7-a8af-1900739277e8 payment=126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07 capturing -> captured [Thu Nov 5 05:03:44.544000 2026] [DaProductApp.Tabby.Capture:info] [pid 2096858] [client -] [Tabby] capture: attempt=3e2d7eb0-762c-45e7-a8af-1900739277e8 payment=126ea0a6-d4a9-4dd6-84cd-1135e8a4ed07 is captured [Thu Nov 5 05:03:46.902000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:53275] GET /tabby/demo/status/3e2d7eb0-762c-45e7-a8af-1900739277e8 [Thu Nov 5 05:03:46.903000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:53275] QUERY OK source="tabby_payments" db=0.4ms idle=1285.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["3e2d7eb0-762c-45e7-a8af-1900739277e8"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 05:03:46.903000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:53275] Sent 200 in 1ms [Thu Nov 5 05:04:42.886000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1268.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:04:42Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 05:04:42.886000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 05:04:42.887000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1270.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:04:42Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 05:04:42.888000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1270.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:04:42.915000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402176 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 05:04:55.892000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=1.5ms idle=1273.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["demostore", ~U[2026-10-18 05:04:55Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 05:04:55.894000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=1.5ms idle=1275.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["demostore", ~N[2026-11-05 05:02:55], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 05:04:55.896000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=1.4ms idle=1277.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 05:04:55.897000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=0.7ms queue=0.1ms idle=1279.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", ~N[2026-11-05 05:02:55], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 05:04:55.899000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=1.7ms idle=1280.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["demostore", ~U[2026-11-05 04:59:55Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 05:04:55.903000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_webhook_events" db=1.3ms idle=1284.7ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-05 05:02:55Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Thu Nov 5 05:04:55.907000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_refunds" db=1.2ms idle=1208.5ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["demostore", ~N[2026-11-05 05:02:55], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Thu Nov 5 05:04:55.908000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=0.5ms queue=0.1ms idle=1095.2ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 05:04:55.909000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=1.3ms idle=92.9ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["demostore", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 05:04:55.911000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_webhook_events" db=1.2ms idle=19.4ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Thu Nov 5 05:04:55.913000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_refunds" db=1.4ms idle=18.9ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Thu Nov 5 05:04:55.913000 2026] [DaProductApp.Tabby.Poller:debug] [pid 2096858] [client -] [Tabby] poll: nothing to do; 0 attempt(s) still watched [Thu Nov 5 05:05:20.378000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:60989] GET /tabby/demo [Thu Nov 5 05:05:20.380000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:60989] Sent 200 in 2ms [Thu Nov 5 05:05:20.926000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:60989] POST /tabby/demo/summary [Thu Nov 5 05:05:20.928000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:60989] Sent 200 in 1ms [Thu Nov 5 05:05:21.791000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:60989] POST /tabby/demo/eligibility [Thu Nov 5 05:05:22.082000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:35862] POST /tabby-sim/api/v2/checkout [Thu Nov 5 05:05:22.082000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 127.0.0.1:35862] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 05:05:22.084000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:35862] QUERY OK source="tabby_sim_faults" db=0.8ms queue=0.3ms idle=1155.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 05:05:22.123000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:35862] QUERY OK db=39.0ms idle=501.9ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["6b853551-05a0-4968-88f4-75f33568df2f", "CREATED", "AED", "1f9296fb-9c82-4ee2-bee2-33e01ced7e6a", "demostore", ~U[2026-11-05 05:17:22Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-05 05:15:22Z], "created", false, ~N[2026-11-05 05:05:22], ~N[2026-11-05 05:05:22]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 05:05:22.124000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2096858] [client 127.0.0.1:35862] [TabbySim] checkout payment=6b853551-05a0-4968-88f4-75f33568df2f session=1f9296fb-9c82-4ee2-bee2-33e01ced7e6a decision=created reason=nil amount=850.00 AED [Thu Nov 5 05:05:22.125000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:35862] QUERY OK source="tabby_sim_payments" db=0.9ms idle=505.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:05:22.126000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:35862] Sent 200 in 44ms [Thu Nov 5 05:05:22.127000 2026] [DaProductApp.Tabby.Client:info] [pid 2096858] [client 122.166.253.95:60989] [Tabby] checkout post /api/v2/checkout -> 200 (336 ms, attempt 1) [Thu Nov 5 05:05:22.127000 2026] [DaProductApp.Tabby.Client:info] [pid 2096858] [client 122.166.253.95:60989] [Tabby] session created payment=6b853551-05a0-4968-88f4-75f33568df2f [Thu Nov 5 05:05:22.127000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2096858] [client 122.166.253.95:60989] [Tabby] eligibility: show (amount=850.00 AED) [Thu Nov 5 05:05:22.128000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:60989] Sent 200 in 336ms [Thu Nov 5 05:05:22.637000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:60989] GET /tabby/demo [Thu Nov 5 05:05:22.641000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:60989] Sent 200 in 3ms [Thu Nov 5 05:05:23.326000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:60989] POST /tabby/demo/summary [Thu Nov 5 05:05:23.326000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:60989] Sent 200 in 545µs [Thu Nov 5 05:05:24.251000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:60989] POST /tabby/demo/eligibility [Thu Nov 5 05:05:24.523000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:35862] POST /tabby-sim/api/v2/checkout [Thu Nov 5 05:05:24.523000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 127.0.0.1:35862] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 05:05:24.524000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:35862] QUERY OK source="tabby_sim_faults" db=0.8ms idle=905.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 05:05:24.584000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:35862] QUERY OK db=58.2ms queue=0.9ms idle=906.3ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["cf80c437-65c6-4acb-9de0-e76cc1cedcc3", "CREATED", "AED", "1a5fbcb4-a2df-45a8-8e9e-dcdab1c124b5", "demostore", ~U[2026-11-05 05:17:24Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-05 05:15:24Z], "created", false, ~N[2026-11-05 05:05:24], ~N[2026-11-05 05:05:24]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 05:05:24.584000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2096858] [client 127.0.0.1:35862] [TabbySim] checkout payment=cf80c437-65c6-4acb-9de0-e76cc1cedcc3 session=1a5fbcb4-a2df-45a8-8e9e-dcdab1c124b5 decision=created reason=nil amount=850.00 AED [Thu Nov 5 05:05:24.585000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:35862] QUERY OK source="tabby_sim_payments" db=0.9ms idle=966.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:05:24.587000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:35862] Sent 200 in 64ms [Thu Nov 5 05:05:24.587000 2026] [DaProductApp.Tabby.Client:info] [pid 2096858] [client 122.166.253.95:60989] [Tabby] checkout post /api/v2/checkout -> 200 (336 ms, attempt 1) [Thu Nov 5 05:05:24.587000 2026] [DaProductApp.Tabby.Client:info] [pid 2096858] [client 122.166.253.95:60989] [Tabby] session created payment=cf80c437-65c6-4acb-9de0-e76cc1cedcc3 [Thu Nov 5 05:05:24.588000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2096858] [client 122.166.253.95:60989] [Tabby] eligibility: show (amount=850.00 AED) [Thu Nov 5 05:05:24.588000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:60989] Sent 200 in 337ms [Thu Nov 5 05:05:44.228000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1083.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:05:44Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 05:05:44.229000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 05:05:44.230000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms queue=0.1ms idle=610.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:05:44Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 05:05:44.231000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=612.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:05:44.288000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402179 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 05:06:45.570000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1948.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:06:45Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 05:06:45.570000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 05:06:45.572000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=1.4ms idle=1949.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:06:45Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 05:06:45.573000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms queue=0.1ms idle=1951.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:06:45.598000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402180 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 05:07:46.893000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1270.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:07:46Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 05:07:46.893000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 05:07:46.895000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1272.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:07:46Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 05:07:46.895000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1075.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:07:46.952000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402183 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 05:08:48.160000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1537.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:08:48Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 05:08:48.161000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 05:08:48.161000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1538.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:08:48Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 05:08:48.163000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1539.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:08:48.188000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402184 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 05:09:49.385000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1761.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:09:49Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 05:09:49.385000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 05:09:49.386000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1762.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:09:49Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 05:09:49.387000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1763.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:09:49.439000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402185 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 05:09:53.791000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="global_table" db=0.5ms idle=180.6ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 05:10:50.849000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=221.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:10:50Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 05:10:50.849000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 05:10:50.851000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=223.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:10:50Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 05:10:50.852000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms queue=0.1ms idle=225.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:10:50.897000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402189 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 05:11:52.172000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1540.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:11:52Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 05:11:52.172000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 05:11:52.173000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=1.3ms idle=1540.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:11:52Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 05:11:52.174000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1102.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:11:52.213000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402190 scheduled in 47s (3 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 05:12:40.524000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=881.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:12:40Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 05:12:40.565000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=39.9ms queue=0.3ms idle=882.6ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 05:12:40], true, "89ff9f08-68e9-4182-a358-a5b3ff2adbcc", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 05:12:40.565000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2096858] [client -] [TabbySim] payment=89ff9f08-68e9-4182-a358-a5b3ff2adbcc CREATED -> EXPIRED [Thu Nov 5 05:12:40.566000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=923.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["89ff9f08-68e9-4182-a358-a5b3ff2adbcc"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 05:12:40.566000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2096858] [client -] [TabbySim] webhook not sent: event=expire payment=89ff9f08-68e9-4182-a358-a5b3ff2adbcc [Thu Nov 5 05:12:40.571000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2096858] [client -] [TabbySim] payment=89ff9f08-68e9-4182-a358-a5b3ff2adbcc expired (expires_at 2026-11-05 05:12:39Z, session_status=created) [Thu Nov 5 05:12:40.573000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=1.3ms idle=929.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:12:40Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 05:12:40.573000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 1 payment(s) were due [Thu Nov 5 05:12:40.574000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=931.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:12:40Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 05:12:40.574000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=932.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:12:40.623000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402193 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 05:13:41.802000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=158.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:13:41Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 05:13:41.802000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 05:13:41.803000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=159.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:13:41Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 05:13:41.804000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=160.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:13:41.847000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402194 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 05:14:43.055000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1411.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:14:43Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 05:14:43.055000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 05:14:43.056000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1412.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:14:43Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 05:14:43.057000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1413.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:14:43.131000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402195 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 05:15:44.597000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1951.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:15:44Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 05:15:44.597000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 05:15:44.598000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.1ms idle=1952.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:15:44Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 05:15:44.598000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1130.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:15:44.691000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402198 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 05:16:45.914000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=265.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:16:45Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 05:16:45.914000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 05:16:45.916000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=2.0ms idle=266.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:16:45Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 05:16:45.918000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=268.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:16:45.961000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402199 scheduled in 37s (2 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 05:17:24.126000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1093.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:17:24Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 05:17:24.160000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=33.3ms idle=479.0ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 05:17:24], true, "6b853551-05a0-4968-88f4-75f33568df2f", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 05:17:24.160000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2096858] [client -] [TabbySim] payment=6b853551-05a0-4968-88f4-75f33568df2f CREATED -> EXPIRED [Thu Nov 5 05:17:24.162000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=513.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["6b853551-05a0-4968-88f4-75f33568df2f"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 05:17:24.162000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2096858] [client -] [TabbySim] webhook not sent: event=expire payment=6b853551-05a0-4968-88f4-75f33568df2f [Thu Nov 5 05:17:24.163000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2096858] [client -] [TabbySim] payment=6b853551-05a0-4968-88f4-75f33568df2f expired (expires_at 2026-11-05 05:17:22Z, session_status=created) [Thu Nov 5 05:17:24.217000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=53.0ms idle=516.4ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 05:17:24], true, "cf80c437-65c6-4acb-9de0-e76cc1cedcc3", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 05:17:24.217000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2096858] [client -] [TabbySim] payment=cf80c437-65c6-4acb-9de0-e76cc1cedcc3 CREATED -> EXPIRED [Thu Nov 5 05:17:24.219000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=1.4ms queue=0.2ms idle=570.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["cf80c437-65c6-4acb-9de0-e76cc1cedcc3"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 05:17:24.219000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2096858] [client -] [TabbySim] webhook not sent: event=expire payment=cf80c437-65c6-4acb-9de0-e76cc1cedcc3 [Thu Nov 5 05:17:24.219000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2096858] [client -] [TabbySim] payment=cf80c437-65c6-4acb-9de0-e76cc1cedcc3 expired (expires_at 2026-11-05 05:17:24Z, session_status=created) [Thu Nov 5 05:17:24.220000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=572.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:17:24Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 05:17:24.220000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 2 payment(s) were due [Thu Nov 5 05:17:24.221000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=573.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:17:24Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 05:17:24.222000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=574.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:17:24.223000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job: no CREATED payment left, not rescheduling [Thu Nov 5 05:19:53.791000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="global_table" db=0.8ms idle=1159.8ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 05:20:06.985000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:52242] POST /tabby/demo/place [Thu Nov 5 05:20:07.036000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:52242] QUERY OK db=48.5ms queue=0.8ms idle=1336.2ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`order_reference`,`amount`,`needs_attention`,`success_url`,`cancel_url`,`failure_url`,`captured_amount`,`refunded_amount`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["3a4ac3a5-3c24-450d-88cf-17f34bfc1c4e", "new", "AED", "demostore", "DEMO-F6D206FC", Decimal.new("850.00"), false, "http://demo.ctrmv.com:4030/tabby/demo/result/success?lang=en&order=DEMO-F6D206FC", "http://demo.ctrmv.com:4030/tabby/demo/result/cancel?lang=en&order=DEMO-F6D206FC", "http://demo.ctrmv.com:4030/tabby/demo/result/failure?lang=en&order=DEMO-F6D206FC", Decimal.new("0"), Decimal.new("0"), ~N[2026-11-05 05:20:06], ~N[2026-11-05 05:20:06]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Thu Nov 5 05:20:07.361000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:38154] POST /tabby-sim/api/v2/checkout [Thu Nov 5 05:20:07.361000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 127.0.0.1:38154] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/3a4ac3a5-3c24-450d-88cf-17f34bfc1c4e/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/3a4ac3a5-3c24-450d-88cf-17f34bfc1c4e/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/3a4ac3a5-3c24-450d-88cf-17f34bfc1c4e/success"}, "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.rejected@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-F6D206FC"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 05:20:07.363000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:38154] QUERY OK source="tabby_sim_faults" db=1.1ms idle=845.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 05:20:07.425000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:38154] QUERY OK db=60.4ms queue=0.5ms idle=713.4ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`lang`,`amount`,`buyer`,`buyer_history`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`shipping_address`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["c31a78d5-71e7-46ef-afe6-7ee7b33752b8", "CREATED", "AED", "819e13db-f065-460a-9cb7-2b0c075f79d4", "demostore", ~U[2026-11-05 05:32:07Z], %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/3a4ac3a5-3c24-450d-88cf-17f34bfc1c4e/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/3a4ac3a5-3c24-450d-88cf-17f34bfc1c4e/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/3a4ac3a5-3c24-450d-88cf-17f34bfc1c4e/success"}, "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.rejected@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-F6D206FC"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "0", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo headphones", "unit_price" => "650"}, %{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo smartwatch", "unit_price" => "200"}], "reference_id" => "DEMO-F6D206FC", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "en", Decimal.new("850.00"), %{"email" => "otp.rejected@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, %{"registered_since" => "2023-02-01T10:00:00Z"}, [], true, %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/3a4ac3a5-3c24-450d-88cf-17f34bfc1c4e/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/3a4ac3a5-3c24-450d-88cf-17f34bfc1c4e/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/3a4ac3a5-3c24-450d-88cf-17f34bfc1c4e/success"}, [], ~U[2026-11-05 05:30:07Z], "created", %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}, false, ~N[2026-11-05 05:20:07], ~N[2026-11-05 05:20:07]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 05:20:07.426000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2096858] [client 127.0.0.1:38154] [TabbySim] checkout payment=c31a78d5-71e7-46ef-afe6-7ee7b33752b8 session=819e13db-f065-460a-9cb7-2b0c075f79d4 decision=created reason=nil amount=850.00 AED [Thu Nov 5 05:20:07.427000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:38154] QUERY OK source="tabby_sim_payments" db=0.5ms idle=776.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:20:07.488000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client 127.0.0.1:38154] [TabbySim] expiry job 402205 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 05:20:07.489000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:38154] Sent 200 in 128ms [Thu Nov 5 05:20:07.490000 2026] [DaProductApp.Tabby.Client:info] [pid 2096858] [client 122.166.253.95:52242] [Tabby] checkout post /api/v2/checkout -> 200 (454 ms, attempt 1) [Thu Nov 5 05:20:07.490000 2026] [DaProductApp.Tabby.Client:info] [pid 2096858] [client 122.166.253.95:52242] [Tabby] session created payment=c31a78d5-71e7-46ef-afe6-7ee7b33752b8 [Thu Nov 5 05:20:07.508000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:52242] QUERY OK source="tabby_payments" db=17.6ms idle=707.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["3a4ac3a5-3c24-450d-88cf-17f34bfc1c4e"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Thu Nov 5 05:20:07.599000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:52242] QUERY OK source="tabby_payments" db=85.7ms queue=4.4ms idle=641.9ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-05 05:40:07Z], "c31a78d5-71e7-46ef-afe6-7ee7b33752b8", "819e13db-f065-460a-9cb7-2b0c075f79d4", ~N[2026-11-05 05:20:07], "3a4ac3a5-3c24-450d-88cf-17f34bfc1c4e"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Thu Nov 5 05:20:07.599000 2026] [DaProductApp.Tabby.Sessions:info] [pid 2096858] [client 122.166.253.95:52242] [Tabby] session created attempt=3a4ac3a5-3c24-450d-88cf-17f34bfc1c4e payment=c31a78d5-71e7-46ef-afe6-7ee7b33752b8 [Thu Nov 5 05:20:07.666000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:52242] Sent 200 in 680ms [Thu Nov 5 05:20:08.093000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:52242] GET /tabby-sim/hpp/819e13db-f065-460a-9cb7-2b0c075f79d4 [Thu Nov 5 05:20:08.094000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 122.166.253.95:52242] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "819e13db-f065-460a-9cb7-2b0c075f79d4"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 05:20:08.095000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:52242] QUERY OK source="tabby_sim_payments" db=0.8ms idle=666.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["819e13db-f065-460a-9cb7-2b0c075f79d4"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 05:20:08.095000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:52242] Sent 200 in 1ms [Thu Nov 5 05:20:12.424000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:52242] POST /tabby-sim/hpp/819e13db-f065-460a-9cb7-2b0c075f79d4 [Thu Nov 5 05:20:12.424000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 122.166.253.95:52242] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "approve", "otp" => "8888", "session_id" => "819e13db-f065-460a-9cb7-2b0c075f79d4"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 05:20:12.427000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:52242] QUERY OK source="tabby_sim_payments" db=1.4ms queue=0.8ms idle=1774.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["819e13db-f065-460a-9cb7-2b0c075f79d4"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 05:20:12.475000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:52242] QUERY OK source="tabby_sim_payments" db=47.1ms idle=1777.1ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["REJECTED", ~N[2026-11-05 05:20:12], "c31a78d5-71e7-46ef-afe6-7ee7b33752b8", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 05:20:12.475000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2096858] [client 122.166.253.95:52242] [TabbySim] payment=c31a78d5-71e7-46ef-afe6-7ee7b33752b8 CREATED -> REJECTED [Thu Nov 5 05:20:12.477000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:52242] QUERY OK source="tabby_sim_payments" db=0.9ms queue=0.3ms idle=1824.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["c31a78d5-71e7-46ef-afe6-7ee7b33752b8"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 05:20:12.479000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:52242] QUERY OK source="tabby_sim_webhooks" db=1.5ms idle=933.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 05:20:12.479000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2096858] [client 122.166.253.95:52242] [TabbySim] no webhook registered for merchant_code=demostore; event=reject payment=c31a78d5-71e7-46ef-afe6-7ee7b33752b8 [Thu Nov 5 05:20:12.479000 2026] [DaProductApp.TabbySim.Hpp:info] [pid 2096858] [client 122.166.253.95:52242] [TabbySim] hpp payment=c31a78d5-71e7-46ef-afe6-7ee7b33752b8 action=approve status=REJECTED [Thu Nov 5 05:20:12.479000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:52242] Sent 302 in 55ms [Thu Nov 5 05:20:12.916000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:52242] GET /tabby/return/3a4ac3a5-3c24-450d-88cf-17f34bfc1c4e/failure [Thu Nov 5 05:20:12.918000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:52242] QUERY OK source="tabby_payments" db=0.7ms idle=727.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["3a4ac3a5-3c24-450d-88cf-17f34bfc1c4e"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 05:20:12.958000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:52242] Sent 302 in 42ms [Thu Nov 5 05:20:13.041000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=564.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["3a4ac3a5-3c24-450d-88cf-17f34bfc1c4e"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 05:20:13.411000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:38154] GET /tabby-sim/api/v2/payments/c31a78d5-71e7-46ef-afe6-7ee7b33752b8 [Thu Nov 5 05:20:13.412000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 127.0.0.1:38154] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "c31a78d5-71e7-46ef-afe6-7ee7b33752b8"} Pipelines: [:tabby_sim_api] [Thu Nov 5 05:20:13.421000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:38154] QUERY OK source="tabby_sim_faults" db=8.7ms idle=494.2ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "c31a78d5-71e7-46ef-afe6-7ee7b33752b8"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 05:20:13.423000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:38154] QUERY OK source="tabby_sim_faults" db=2.0ms idle=501.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 05:20:13.425000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:38154] QUERY OK source="tabby_sim_payments" db=0.9ms queue=0.2ms idle=492.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["c31a78d5-71e7-46ef-afe6-7ee7b33752b8"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Thu Nov 5 05:20:13.426000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:38154] Sent 200 in 14ms [Thu Nov 5 05:20:13.426000 2026] [DaProductApp.Tabby.Client:info] [pid 2096858] [client -] [Tabby] retrieve get /api/v2/payments/c31a78d5-71e7-46ef-afe6-7ee7b33752b8 -> 200 (384 ms, attempt 1) [Thu Nov 5 05:20:13.454000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:52242] GET /tabby/demo/result/failure [Thu Nov 5 05:20:13.454000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:52242] Sent 200 in 630µs [Thu Nov 5 05:20:13.480000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=51.5ms queue=1.2ms idle=468.6ms UPDATE `tabby_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["rejected", ~N[2026-11-05 05:20:13], "3a4ac3a5-3c24-450d-88cf-17f34bfc1c4e", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 05:20:13.481000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=0.8ms queue=0.3ms idle=439.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["3a4ac3a5-3c24-450d-88cf-17f34bfc1c4e"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 05:20:13.481000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2096858] [client -] [Tabby] verify: attempt=3a4ac3a5-3c24-450d-88cf-17f34bfc1c4e payment=c31a78d5-71e7-46ef-afe6-7ee7b33752b8 created -> rejected [Thu Nov 5 05:20:19.861000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:52242] GET /tabby/demo [Thu Nov 5 05:20:19.863000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:52242] Sent 200 in 2ms [Thu Nov 5 05:20:20.546000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:57186] POST /tabby/demo/summary [Thu Nov 5 05:20:20.546000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:57186] Sent 200 in 537µs [Thu Nov 5 05:20:21.487000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:57186] POST /tabby/demo/eligibility [Thu Nov 5 05:20:21.864000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:34176] POST /tabby-sim/api/v2/checkout [Thu Nov 5 05:20:21.864000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 127.0.0.1:34176] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 05:20:21.866000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:34176] QUERY OK source="tabby_sim_faults" db=1.2ms idle=1214.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 05:20:21.942000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:34176] QUERY OK db=74.6ms queue=0.3ms idle=1216.0ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["e2885d08-c7c3-4f82-8b1e-ba0ebad0d68f", "CREATED", "AED", "25d391c5-3729-43c3-8325-5cc8a8aaf75c", "demostore", ~U[2026-11-05 05:32:21Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-05 05:30:21Z], "created", false, ~N[2026-11-05 05:20:21], ~N[2026-11-05 05:20:21]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 05:20:21.942000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2096858] [client 127.0.0.1:34176] [TabbySim] checkout payment=e2885d08-c7c3-4f82-8b1e-ba0ebad0d68f session=25d391c5-3729-43c3-8325-5cc8a8aaf75c decision=created reason=nil amount=850.00 AED [Thu Nov 5 05:20:21.943000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:34176] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1291.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:20:21.945000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:34176] Sent 200 in 80ms [Thu Nov 5 05:20:21.945000 2026] [DaProductApp.Tabby.Client:info] [pid 2096858] [client 122.166.253.95:57186] [Tabby] checkout post /api/v2/checkout -> 200 (458 ms, attempt 1) [Thu Nov 5 05:20:21.946000 2026] [DaProductApp.Tabby.Client:info] [pid 2096858] [client 122.166.253.95:57186] [Tabby] session created payment=e2885d08-c7c3-4f82-8b1e-ba0ebad0d68f [Thu Nov 5 05:20:21.946000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2096858] [client 122.166.253.95:57186] [Tabby] eligibility: show (amount=850.00 AED) [Thu Nov 5 05:20:21.946000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:57186] Sent 200 in 459ms [Thu Nov 5 05:21:09.076000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1417.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:21:09Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 05:21:09.076000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 05:21:09.077000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1418.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:21:09Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 05:21:09.078000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1096.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:21:09.118000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402209 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 05:22:09.410000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=1.0ms idle=1164.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["demostore", ~U[2026-10-18 05:22:09Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 05:22:09.412000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=1.0ms idle=752.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["demostore", ~N[2026-11-05 05:20:09], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 05:22:09.413000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=1.2ms idle=754.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 05:22:09.415000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=0.9ms idle=755.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", ~N[2026-11-05 05:20:09], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 05:22:09.416000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=757.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["demostore", ~U[2026-11-05 05:17:09Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 05:22:09.418000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_webhook_events" db=1.5ms idle=758.1ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-05 05:20:09Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Thu Nov 5 05:22:09.419000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_refunds" db=0.4ms idle=760.0ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["demostore", ~N[2026-11-05 05:20:09], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Thu Nov 5 05:22:09.420000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=760.7ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 05:22:09.421000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=109.6ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["demostore", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 05:22:09.422000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_webhook_events" db=0.7ms idle=12.1ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Thu Nov 5 05:22:09.424000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_refunds" db=1.7ms idle=11.8ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Thu Nov 5 05:22:09.424000 2026] [DaProductApp.Tabby.Poller:debug] [pid 2096858] [client -] [Tabby] poll: nothing to do; 0 attempt(s) still watched [Thu Nov 5 05:22:10.395000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=976.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:22:10Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 05:22:10.395000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 05:22:10.396000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=976.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:22:10Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 05:22:10.397000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=976.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:22:10.429000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402212 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 05:22:25.533000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:51672] GET /tabby-sim/admin [Thu Nov 5 05:22:25.533000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 122.166.253.95:51672] Processing with DaProductAppWeb.TabbySim.AdminController.index/2 Parameters: %{} Pipelines: [:tabby_sim_admin] [Thu Nov 5 05:22:25.536000 2026] [DaProductAppWeb.Plugs.TabbySimAdminAuth:warn] [pid 2096858] [client 122.166.253.95:51672] [TabbySim] admin 401 GET /tabby-sim/admin [Thu Nov 5 05:22:25.536000 2026] [DaProductAppWeb.Router:debug] [pid 2096858] [client 122.166.253.95:51672] Phoenix.Router halted in :tabby_sim_admin/2 [Thu Nov 5 05:22:25.536000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:51672] Sent 401 in 3ms [Thu Nov 5 05:22:33.878000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:51672] GET /tabby-sim/admin [Thu Nov 5 05:22:33.878000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 122.166.253.95:51672] Processing with DaProductAppWeb.TabbySim.AdminController.index/2 Parameters: %{} Pipelines: [:tabby_sim_admin] [Thu Nov 5 05:22:33.878000 2026] [DaProductAppWeb.Plugs.TabbySimAdminAuth:warn] [pid 2096858] [client 122.166.253.95:51672] [TabbySim] admin 401 GET /tabby-sim/admin [Thu Nov 5 05:22:33.878000 2026] [DaProductAppWeb.Router:debug] [pid 2096858] [client 122.166.253.95:51672] Phoenix.Router halted in :tabby_sim_admin/2 [Thu Nov 5 05:22:33.879000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:51672] Sent 401 in 1ms [Thu Nov 5 05:22:47.719000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:51672] GET /tabby-sim/admin [Thu Nov 5 05:22:47.720000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 122.166.253.95:51672] Processing with DaProductAppWeb.TabbySim.AdminController.index/2 Parameters: %{} Pipelines: [:tabby_sim_admin] [Thu Nov 5 05:22:47.720000 2026] [DaProductAppWeb.Plugs.TabbySimAdminAuth:warn] [pid 2096858] [client 122.166.253.95:51672] [TabbySim] admin 401 GET /tabby-sim/admin [Thu Nov 5 05:22:47.720000 2026] [DaProductAppWeb.Router:debug] [pid 2096858] [client 122.166.253.95:51672] Phoenix.Router halted in :tabby_sim_admin/2 [Thu Nov 5 05:22:47.720000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:51672] Sent 401 in 1ms [Thu Nov 5 05:23:11.691000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1029.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:23:11Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 05:23:11.692000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 05:23:11.692000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1030.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:23:11Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 05:23:11.693000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1031.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:23:11.738000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402213 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 05:23:14.297000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:51672] GET /tabby-sim/admin [Thu Nov 5 05:23:14.297000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 122.166.253.95:51672] Processing with DaProductAppWeb.TabbySim.AdminController.index/2 Parameters: %{} Pipelines: [:tabby_sim_admin] [Thu Nov 5 05:23:14.306000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:51672] QUERY OK source="tabby_sim_faults" db=0.5ms queue=0.7ms idle=643.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (t0.`remaining` > 0) ORDER BY t0.`id` [] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:18 [Thu Nov 5 05:23:14.315000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:51672] QUERY OK source="tabby_sim_payments" db=8.1ms queue=0.6ms idle=645.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 ORDER BY t0.`inserted_at` DESC, t0.`id` DESC LIMIT ? [30] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:19 [Thu Nov 5 05:23:14.323000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:51672] QUERY OK source="tabby_sim_webhook_deliveries" db=1.3ms queue=2.6ms idle=658.0ms SELECT t0.`id`, t0.`payment_id`, t0.`webhook_id`, t0.`event`, t0.`attempt`, t0.`state`, t0.`url`, t0.`http_status`, t0.`request_body`, t0.`response_body`, t0.`error`, t0.`duration_ms`, t0.`attempted_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhook_deliveries` AS t0 ORDER BY t0.`id` DESC LIMIT ? [40] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:20 [Thu Nov 5 05:23:14.326000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:51672] QUERY OK source="tabby_sim_webhooks" db=0.6ms queue=0.6ms idle=662.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 ORDER BY t0.`id` LIMIT 100 [] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:21 [Thu Nov 5 05:23:14.354000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:51672] Sent 200 in 56ms [Thu Nov 5 05:24:12.971000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=1306.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:24:12Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 05:24:12.971000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 05:24:12.973000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1308.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:24:12Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 05:24:12.974000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.1ms idle=1309.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:24:13.018000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402214 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 05:24:25.242000 2026] [Bandit.Logger:error] [pid 2096858] [client -] ** (Bandit.TransportError) Unrecoverable error: timeout [Thu Nov 5 05:25:14.248000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1581.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:25:14Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 05:25:14.249000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 05:25:14.249000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1582.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:25:14Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 05:25:14.250000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1583.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:25:14.342000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402217 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 05:26:15.645000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1976.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:26:15Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 05:26:15.646000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 05:26:15.646000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1977.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:26:15Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 05:26:15.647000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1978.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:26:15.689000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402218 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 05:27:16.951000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1267.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:27:16Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 05:27:16.952000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 05:27:16.952000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1268.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:27:16Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 05:27:16.953000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1119.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:27:16.998000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402221 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 05:28:18.173000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1488.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:28:18Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 05:28:18.174000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 05:28:18.174000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1490.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:28:18Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 05:28:18.175000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1083.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:28:18.220000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402222 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 05:29:19.437000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1751.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:29:19Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 05:29:19.437000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 05:29:19.438000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms queue=0.1ms idle=1753.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:29:19Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 05:29:19.439000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms queue=0.1ms idle=1753.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:29:19.484000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402223 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 05:29:53.791000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="global_table" db=0.8ms idle=1147.6ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 05:30:00.660000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="report_requests" db=1.2ms idle=1181.4ms SELECT r0.`id`, r0.`report_id`, r0.`report_type`, r0.`requester_ref`, r0.`filters`, r0.`status`, r0.`progress_percentage`, r0.`row_count`, r0.`file_path`, r0.`file_size`, r0.`download_token`, r0.`download_count`, r0.`last_downloaded_at`, r0.`error_message`, r0.`expires_at`, r0.`completed_at`, r0.`inserted_at`, r0.`updated_at` FROM `report_requests` AS r0 WHERE (NOT (r0.`expires_at` IS NULL) AND (r0.`expires_at` < ?)) [~U[2026-11-05 05:30:00Z]] ↳ DaProductApp.Workers.ReportRetentionWorker.perform/1, at: lib/da_product_app/workers/report_retention_worker.ex:18 [Thu Nov 5 05:30:00.831000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="report_requests" db=1.0ms idle=1145.5ms SELECT r0.`id`, r0.`report_id`, r0.`report_type`, r0.`requester_ref`, r0.`filters`, r0.`status`, r0.`progress_percentage`, r0.`row_count`, r0.`file_path`, r0.`file_size`, r0.`download_token`, r0.`download_count`, r0.`last_downloaded_at`, r0.`error_message`, r0.`expires_at`, r0.`completed_at`, r0.`inserted_at`, r0.`updated_at` FROM `report_requests` AS r0 WHERE (NOT (r0.`expires_at` IS NULL) AND (r0.`expires_at` < ?)) [~U[2026-11-05 05:30:00Z]] ↳ DaProductApp.Workers.ReportRetentionWorker.perform/1, at: lib/da_product_app/workers/report_retention_worker.ex:18 [Thu Nov 5 05:30:00.832000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="report_requests" db=1.6ms idle=1145.7ms SELECT r0.`id`, r0.`report_id`, r0.`report_type`, r0.`requester_ref`, r0.`filters`, r0.`status`, r0.`progress_percentage`, r0.`row_count`, r0.`file_path`, r0.`file_size`, r0.`download_token`, r0.`download_count`, r0.`last_downloaded_at`, r0.`error_message`, r0.`expires_at`, r0.`completed_at`, r0.`inserted_at`, r0.`updated_at` FROM `report_requests` AS r0 WHERE (NOT (r0.`expires_at` IS NULL) AND (r0.`expires_at` < ?)) [~U[2026-11-05 05:30:00Z]] ↳ DaProductApp.Workers.ReportRetentionWorker.perform/1, at: lib/da_product_app/workers/report_retention_worker.ex:18 [Thu Nov 5 05:30:01.009000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="report_requests" db=0.4ms idle=349.1ms SELECT r0.`id`, r0.`report_id`, r0.`report_type`, r0.`requester_ref`, r0.`filters`, r0.`status`, r0.`progress_percentage`, r0.`row_count`, r0.`file_path`, r0.`file_size`, r0.`download_token`, r0.`download_count`, r0.`last_downloaded_at`, r0.`error_message`, r0.`expires_at`, r0.`completed_at`, r0.`inserted_at`, r0.`updated_at` FROM `report_requests` AS r0 WHERE (NOT (r0.`expires_at` IS NULL) AND (r0.`expires_at` < ?)) [~U[2026-11-05 05:30:01Z]] ↳ DaProductApp.Workers.ReportRetentionWorker.perform/1, at: lib/da_product_app/workers/report_retention_worker.ex:18 [Thu Nov 5 05:30:01.217000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="report_requests" db=1.8ms idle=489.1ms SELECT r0.`id`, r0.`report_id`, r0.`report_type`, r0.`requester_ref`, r0.`filters`, r0.`status`, r0.`progress_percentage`, r0.`row_count`, r0.`file_path`, r0.`file_size`, r0.`download_token`, r0.`download_count`, r0.`last_downloaded_at`, r0.`error_message`, r0.`expires_at`, r0.`completed_at`, r0.`inserted_at`, r0.`updated_at` FROM `report_requests` AS r0 WHERE (NOT (r0.`expires_at` IS NULL) AND (r0.`expires_at` < ?)) [~U[2026-11-05 05:30:01Z]] ↳ DaProductApp.Workers.ReportRetentionWorker.perform/1, at: lib/da_product_app/workers/report_retention_worker.ex:18 [Thu Nov 5 05:30:20.758000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=86.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:30:20Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 05:30:20.758000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 05:30:20.759000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=73.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:30:20Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 05:30:20.760000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=73.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:30:20.784000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402235 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 05:31:22.300000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1613.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:31:22Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 05:31:22.300000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 05:31:22.301000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1614.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:31:22Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 05:31:22.301000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms queue=0.1ms idle=1614.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:31:22.343000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402236 scheduled in 59s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 05:32:22.618000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1924.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:32:22Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 05:32:22.659000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=40.9ms idle=1925.9ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 05:32:22], true, "e2885d08-c7c3-4f82-8b1e-ba0ebad0d68f", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 05:32:22.659000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2096858] [client -] [TabbySim] payment=e2885d08-c7c3-4f82-8b1e-ba0ebad0d68f CREATED -> EXPIRED [Thu Nov 5 05:32:22.660000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1967.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["e2885d08-c7c3-4f82-8b1e-ba0ebad0d68f"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 05:32:22.660000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2096858] [client -] [TabbySim] webhook not sent: event=expire payment=e2885d08-c7c3-4f82-8b1e-ba0ebad0d68f [Thu Nov 5 05:32:22.661000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2096858] [client -] [TabbySim] payment=e2885d08-c7c3-4f82-8b1e-ba0ebad0d68f expired (expires_at 2026-11-05 05:32:21Z, session_status=created) [Thu Nov 5 05:32:22.662000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1966.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:32:22Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 05:32:22.662000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 1 payment(s) were due [Thu Nov 5 05:32:22.662000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1967.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 05:32:22Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 05:32:22.663000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1141.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 05:32:22.663000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job: no CREATED payment left, not rescheduling [Thu Nov 5 05:39:53.791000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="global_table" db=1.0ms idle=1129.7ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 05:49:53.791000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="global_table" db=0.4ms idle=1112.7ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 05:59:53.790000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="global_table" db=0.4ms idle=1099.7ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 06:00:00.973000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="report_requests" db=1.1ms idle=1233.8ms SELECT r0.`id`, r0.`report_id`, r0.`report_type`, r0.`requester_ref`, r0.`filters`, r0.`status`, r0.`progress_percentage`, r0.`row_count`, r0.`file_path`, r0.`file_size`, r0.`download_token`, r0.`download_count`, r0.`last_downloaded_at`, r0.`error_message`, r0.`expires_at`, r0.`completed_at`, r0.`inserted_at`, r0.`updated_at` FROM `report_requests` AS r0 WHERE (NOT (r0.`expires_at` IS NULL) AND (r0.`expires_at` < ?)) [~U[2026-11-05 06:00:00Z]] ↳ DaProductApp.Workers.ReportRetentionWorker.perform/1, at: lib/da_product_app/workers/report_retention_worker.ex:18 [Thu Nov 5 06:09:53.791000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="global_table" db=0.6ms idle=1996.5ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 06:19:53.791000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="global_table" db=1.1ms idle=1987.6ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 06:29:53.791000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="global_table" db=0.9ms idle=1966.1ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 06:30:00.396000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="report_requests" db=1.1ms idle=584.0ms SELECT r0.`id`, r0.`report_id`, r0.`report_type`, r0.`requester_ref`, r0.`filters`, r0.`status`, r0.`progress_percentage`, r0.`row_count`, r0.`file_path`, r0.`file_size`, r0.`download_token`, r0.`download_count`, r0.`last_downloaded_at`, r0.`error_message`, r0.`expires_at`, r0.`completed_at`, r0.`inserted_at`, r0.`updated_at` FROM `report_requests` AS r0 WHERE (NOT (r0.`expires_at` IS NULL) AND (r0.`expires_at` < ?)) [~U[2026-11-05 06:30:00Z]] ↳ DaProductApp.Workers.ReportRetentionWorker.perform/1, at: lib/da_product_app/workers/report_retention_worker.ex:18 [Thu Nov 5 06:39:53.791000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="global_table" db=0.8ms idle=1960.8ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 06:49:53.791000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="global_table" db=0.5ms queue=0.1ms idle=1949.7ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 06:50:36.823000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:50910] POST /tabby/demo/place [Thu Nov 5 06:50:36.863000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:50910] QUERY OK db=39.6ms idle=1976.3ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`order_reference`,`amount`,`needs_attention`,`success_url`,`cancel_url`,`failure_url`,`captured_amount`,`refunded_amount`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["e2ffc941-3406-4276-a311-61868f933168", "new", "AED", "demostore", "DEMO-D8CEEEDC", Decimal.new("850.00"), false, "http://demo.ctrmv.com:4030/tabby/demo/result/success?lang=en&order=DEMO-D8CEEEDC", "http://demo.ctrmv.com:4030/tabby/demo/result/cancel?lang=en&order=DEMO-D8CEEEDC", "http://demo.ctrmv.com:4030/tabby/demo/result/failure?lang=en&order=DEMO-D8CEEEDC", Decimal.new("0"), Decimal.new("0"), ~N[2026-11-05 06:50:36], ~N[2026-11-05 06:50:36]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Thu Nov 5 06:50:37.093000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:54120] POST /tabby-sim/api/v2/checkout [Thu Nov 5 06:50:37.093000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 127.0.0.1:54120] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/e2ffc941-3406-4276-a311-61868f933168/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/e2ffc941-3406-4276-a311-61868f933168/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/e2ffc941-3406-4276-a311-61868f933168/success"}, "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-D8CEEEDC"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 06:50:37.094000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:54120] QUERY OK source="tabby_sim_faults" db=0.5ms idle=467.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 06:50:37.119000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:54120] QUERY OK db=23.7ms queue=0.3ms idle=384.3ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`lang`,`amount`,`buyer`,`buyer_history`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`shipping_address`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["3bd2f90b-1c09-4003-acd4-c1e672457d9f", "CREATED", "AED", "e10e69dd-14fb-4083-963c-c234ac88b9b3", "demostore", ~U[2026-11-05 07:02:37Z], %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/e2ffc941-3406-4276-a311-61868f933168/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/e2ffc941-3406-4276-a311-61868f933168/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/e2ffc941-3406-4276-a311-61868f933168/success"}, "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-D8CEEEDC"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "0", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo headphones", "unit_price" => "650"}, %{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo smartwatch", "unit_price" => "200"}], "reference_id" => "DEMO-D8CEEEDC", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "en", Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, %{"registered_since" => "2023-02-01T10:00:00Z"}, [], true, %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/e2ffc941-3406-4276-a311-61868f933168/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/e2ffc941-3406-4276-a311-61868f933168/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/e2ffc941-3406-4276-a311-61868f933168/success"}, [], ~U[2026-11-05 07:00:37Z], "created", %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}, false, ~N[2026-11-05 06:50:37], ~N[2026-11-05 06:50:37]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 06:50:37.120000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2096858] [client 127.0.0.1:54120] [TabbySim] checkout payment=3bd2f90b-1c09-4003-acd4-c1e672457d9f session=e10e69dd-14fb-4083-963c-c234ac88b9b3 decision=created reason=nil amount=850.00 AED [Thu Nov 5 06:50:37.121000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:54120] QUERY OK source="tabby_sim_payments" db=0.7ms idle=272.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 06:50:37.177000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client 127.0.0.1:54120] [TabbySim] expiry job 402340 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 06:50:37.177000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:54120] Sent 200 in 84ms [Thu Nov 5 06:50:37.178000 2026] [DaProductApp.Tabby.Client:info] [pid 2096858] [client 122.166.253.95:50910] [Tabby] checkout post /api/v2/checkout -> 200 (314 ms, attempt 1) [Thu Nov 5 06:50:37.178000 2026] [DaProductApp.Tabby.Client:info] [pid 2096858] [client 122.166.253.95:50910] [Tabby] session created payment=3bd2f90b-1c09-4003-acd4-c1e672457d9f [Thu Nov 5 06:50:37.179000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:50910] QUERY OK source="tabby_payments" db=0.5ms idle=331.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e2ffc941-3406-4276-a311-61868f933168"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Thu Nov 5 06:50:37.209000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:50910] QUERY OK source="tabby_payments" db=28.3ms queue=0.4ms idle=316.3ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-05 07:10:37Z], "3bd2f90b-1c09-4003-acd4-c1e672457d9f", "e10e69dd-14fb-4083-963c-c234ac88b9b3", ~N[2026-11-05 06:50:37], "e2ffc941-3406-4276-a311-61868f933168"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Thu Nov 5 06:50:37.209000 2026] [DaProductApp.Tabby.Sessions:info] [pid 2096858] [client 122.166.253.95:50910] [Tabby] session created attempt=e2ffc941-3406-4276-a311-61868f933168 payment=3bd2f90b-1c09-4003-acd4-c1e672457d9f [Thu Nov 5 06:50:37.263000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:50910] Sent 200 in 440ms [Thu Nov 5 06:50:37.745000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:50910] GET /tabby-sim/hpp/e10e69dd-14fb-4083-963c-c234ac88b9b3 [Thu Nov 5 06:50:37.745000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 122.166.253.95:50910] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "e10e69dd-14fb-4083-963c-c234ac88b9b3"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 06:50:37.746000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:50910] QUERY OK source="tabby_sim_payments" db=1.0ms idle=624.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["e10e69dd-14fb-4083-963c-c234ac88b9b3"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 06:50:37.747000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:50910] Sent 200 in 2ms [Thu Nov 5 06:51:32.984000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:50910] POST /tabby-sim/hpp/e10e69dd-14fb-4083-963c-c234ac88b9b3 [Thu Nov 5 06:51:32.984000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 122.166.253.95:50910] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "approve", "otp" => "8888", "session_id" => "e10e69dd-14fb-4083-963c-c234ac88b9b3"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 06:51:32.986000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:50910] QUERY OK source="tabby_sim_payments" db=1.2ms idle=1137.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["e10e69dd-14fb-4083-963c-c234ac88b9b3"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 06:51:33.044000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:50910] QUERY OK source="tabby_sim_payments" db=57.7ms idle=695.3ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["AUTHORIZED", ~N[2026-11-05 06:51:32], "3bd2f90b-1c09-4003-acd4-c1e672457d9f", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 06:51:33.044000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2096858] [client 122.166.253.95:50910] [TabbySim] payment=3bd2f90b-1c09-4003-acd4-c1e672457d9f CREATED -> AUTHORIZED [Thu Nov 5 06:51:33.046000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:50910] QUERY OK source="tabby_sim_payments" db=1.2ms idle=266.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["3bd2f90b-1c09-4003-acd4-c1e672457d9f"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 06:51:33.047000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:50910] QUERY OK source="tabby_sim_webhooks" db=0.9ms idle=198.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 06:51:33.047000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2096858] [client 122.166.253.95:50910] [TabbySim] no webhook registered for merchant_code=demostore; event=authorize payment=3bd2f90b-1c09-4003-acd4-c1e672457d9f [Thu Nov 5 06:51:33.047000 2026] [DaProductApp.TabbySim.Hpp:info] [pid 2096858] [client 122.166.253.95:50910] [TabbySim] hpp payment=3bd2f90b-1c09-4003-acd4-c1e672457d9f action=approve status=AUTHORIZED [Thu Nov 5 06:51:33.048000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:50910] Sent 302 in 64ms [Thu Nov 5 06:51:33.532000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:50910] GET /tabby/return/e2ffc941-3406-4276-a311-61868f933168/success [Thu Nov 5 06:51:33.533000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:50910] QUERY OK source="tabby_payments" db=0.9ms idle=684.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e2ffc941-3406-4276-a311-61868f933168"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 06:51:33.567000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:50910] Sent 302 in 35ms [Thu Nov 5 06:51:33.655000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=1.5ms idle=609.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e2ffc941-3406-4276-a311-61868f933168"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 06:51:33.943000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:54120] GET /tabby-sim/api/v2/payments/3bd2f90b-1c09-4003-acd4-c1e672457d9f [Thu Nov 5 06:51:33.943000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 127.0.0.1:54120] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "3bd2f90b-1c09-4003-acd4-c1e672457d9f"} Pipelines: [:tabby_sim_api] [Thu Nov 5 06:51:33.944000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:54120] QUERY OK source="tabby_sim_faults" db=0.7ms idle=529.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "3bd2f90b-1c09-4003-acd4-c1e672457d9f"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 06:51:33.945000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:54120] QUERY OK source="tabby_sim_faults" db=0.8ms idle=411.2ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 06:51:33.946000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:54120] QUERY OK source="tabby_sim_payments" db=0.5ms idle=410.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["3bd2f90b-1c09-4003-acd4-c1e672457d9f"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Thu Nov 5 06:51:33.946000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:54120] Sent 200 in 3ms [Thu Nov 5 06:51:33.947000 2026] [DaProductApp.Tabby.Client:info] [pid 2096858] [client -] [Tabby] retrieve get /api/v2/payments/3bd2f90b-1c09-4003-acd4-c1e672457d9f -> 200 (291 ms, attempt 1) [Thu Nov 5 06:51:33.985000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=37.6ms queue=0.1ms idle=380.3ms UPDATE `tabby_payments` AS t0 SET t0.`authorized_at` = ?, t0.`winner_key` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [~U[2026-11-05 06:51:33Z], "ce0b0bd399bbcccdbc23a304fd7c1fbdea4d5b0bf3ede231f3f4bcc04e4433ee", "authorized", ~N[2026-11-05 06:51:33], "e2ffc941-3406-4276-a311-61868f933168", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 06:51:33.986000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=332.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e2ffc941-3406-4276-a311-61868f933168"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 06:51:33.986000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2096858] [client -] [Tabby] verify: attempt=e2ffc941-3406-4276-a311-61868f933168 payment=3bd2f90b-1c09-4003-acd4-c1e672457d9f created -> authorized [Thu Nov 5 06:51:34.082000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:50910] GET /tabby/demo/result/success [Thu Nov 5 06:51:34.082000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:50910] Sent 200 in 478µs [Thu Nov 5 06:51:34.116000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=1.5ms idle=170.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e2ffc941-3406-4276-a311-61868f933168"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 06:51:34.144000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=27.2ms idle=171.3ms UPDATE `tabby_payments` AS t0 SET t0.`capture_reference_id` = ?, t0.`claimed_at` = ?, t0.`claimed_by` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["capture-DEMO-D8CEEEDC", ~U[2026-11-05 06:51:34Z], "nonode@nohost", "capturing", ~N[2026-11-05 06:51:34], "e2ffc941-3406-4276-a311-61868f933168", "authorized"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 06:51:34.145000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=196.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e2ffc941-3406-4276-a311-61868f933168"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 06:51:34.145000 2026] [DaProductApp.Tabby.Capture:info] [pid 2096858] [client -] [Tabby] capture: attempt=e2ffc941-3406-4276-a311-61868f933168 payment=3bd2f90b-1c09-4003-acd4-c1e672457d9f claimed (authorized -> capturing) [Thu Nov 5 06:51:34.427000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:54120] POST /tabby-sim/api/v2/payments/3bd2f90b-1c09-4003-acd4-c1e672457d9f/captures [Thu Nov 5 06:51:34.427000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 127.0.0.1:54120] Processing with DaProductAppWeb.TabbySim.PaymentsController.capture/2 Parameters: %{"amount" => "850.00", "id" => "3bd2f90b-1c09-4003-acd4-c1e672457d9f", "reference_id" => "capture-DEMO-D8CEEEDC"} Pipelines: [:tabby_sim_api] [Thu Nov 5 06:51:34.428000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:54120] QUERY OK source="tabby_sim_faults" db=0.9ms idle=313.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["capture", "3bd2f90b-1c09-4003-acd4-c1e672457d9f"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 06:51:34.429000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:54120] QUERY OK source="tabby_sim_faults" db=0.4ms idle=312.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["capture"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 06:51:34.430000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:54120] QUERY OK source="tabby_sim_payments" db=0.8ms idle=285.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["3bd2f90b-1c09-4003-acd4-c1e672457d9f"] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:227 [Thu Nov 5 06:51:34.431000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:54120] QUERY OK db=0.1ms queue=0.3ms idle=285.3ms begin [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Thu Nov 5 06:51:34.431000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:54120] QUERY OK source="tabby_sim_payments" db=0.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) FOR UPDATE ["3bd2f90b-1c09-4003-acd4-c1e672457d9f"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:231 [Thu Nov 5 06:51:34.432000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:54120] QUERY OK source="tabby_sim_payments" db=0.4ms UPDATE `tabby_sim_payments` SET `status` = ?, `captures` = ?, `closed_at` = ?, `updated_at` = ? WHERE `id` = ? ["CLOSED", [%{"amount" => "850", "created_at" => "2026-11-05T06:51:34Z", "discount_amount" => "0", "id" => "d926cc6c-5a9c-4305-acb2-25ce51b9a120", "items" => nil, "reference_id" => "capture-DEMO-D8CEEEDC", "shipping_amount" => "0", "tax_amount" => "0"}], ~U[2026-11-05 06:51:34Z], ~N[2026-11-05 06:51:34], "3bd2f90b-1c09-4003-acd4-c1e672457d9f"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:244 [Thu Nov 5 06:51:34.432000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2096858] [client 127.0.0.1:54120] [TabbySim] capture payment=3bd2f90b-1c09-4003-acd4-c1e672457d9f status=CLOSED [Thu Nov 5 06:51:34.478000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:54120] QUERY OK db=45.6ms commit [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Thu Nov 5 06:51:34.480000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:54120] QUERY OK source="tabby_sim_webhooks" db=0.9ms queue=0.1ms idle=313.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 06:51:34.480000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2096858] [client 127.0.0.1:54120] [TabbySim] no webhook registered for merchant_code=demostore; event=capture payment=3bd2f90b-1c09-4003-acd4-c1e672457d9f [Thu Nov 5 06:51:34.481000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:54120] QUERY OK source="tabby_sim_webhooks" db=0.9ms idle=258.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 06:51:34.481000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2096858] [client 127.0.0.1:54120] [TabbySim] no webhook registered for merchant_code=demostore; event=close payment=3bd2f90b-1c09-4003-acd4-c1e672457d9f [Thu Nov 5 06:51:34.481000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:54120] Sent 200 in 54ms [Thu Nov 5 06:51:34.482000 2026] [DaProductApp.Tabby.Client:info] [pid 2096858] [client -] [Tabby] capture post /api/v2/payments/3bd2f90b-1c09-4003-acd4-c1e672457d9f/captures -> 200 (337 ms, attempt 1) [Thu Nov 5 06:51:34.524000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=41.8ms idle=186.3ms UPDATE `tabby_payments` AS t0 SET t0.`captured_amount` = ?, t0.`captured_at` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [Decimal.new("850"), ~U[2026-11-05 06:51:34Z], "captured", ~N[2026-11-05 06:51:34], "e2ffc941-3406-4276-a311-61868f933168", "capturing"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 06:51:34.526000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=219.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e2ffc941-3406-4276-a311-61868f933168"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 06:51:34.526000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2096858] [client -] [Tabby] verify: attempt=e2ffc941-3406-4276-a311-61868f933168 payment=3bd2f90b-1c09-4003-acd4-c1e672457d9f capturing -> captured [Thu Nov 5 06:51:34.526000 2026] [DaProductApp.Tabby.Capture:info] [pid 2096858] [client -] [Tabby] capture: attempt=e2ffc941-3406-4276-a311-61868f933168 payment=3bd2f90b-1c09-4003-acd4-c1e672457d9f is captured [Thu Nov 5 06:51:34.613000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:50910] GET /tabby/demo/status/e2ffc941-3406-4276-a311-61868f933168 [Thu Nov 5 06:51:34.614000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:50910] QUERY OK source="tabby_payments" db=0.3ms idle=184.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e2ffc941-3406-4276-a311-61868f933168"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 06:51:34.614000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:50910] Sent 200 in 1ms [Thu Nov 5 06:51:37.435000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1586.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 06:51:37Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 06:51:37.435000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 06:51:37.436000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1587.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 06:51:37Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 06:51:37.438000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1589.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 06:51:37.438000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job: no CREATED payment left, not rescheduling [Thu Nov 5 06:52:37.576000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=1.1ms idle=1726.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["demostore", ~U[2026-10-18 06:52:37Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 06:52:37.578000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=1.0ms queue=0.1ms idle=1728.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["demostore", ~N[2026-11-05 06:50:37], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 06:52:37.579000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=1.0ms idle=1729.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 06:52:37.580000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=1097.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", ~N[2026-11-05 06:50:37], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 06:52:37.581000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=1038.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["demostore", ~U[2026-11-05 06:47:37Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 06:52:37.582000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_webhook_events" db=0.8ms idle=733.0ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-05 06:50:37Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Thu Nov 5 06:52:37.583000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_refunds" db=0.7ms idle=734.1ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["demostore", ~N[2026-11-05 06:50:37], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Thu Nov 5 06:52:37.585000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=1.6ms idle=735.2ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 06:52:37.586000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=0.9ms idle=100.2ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["demostore", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 06:52:37.587000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_webhook_events" db=0.6ms idle=12.2ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Thu Nov 5 06:52:37.588000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_refunds" db=0.7ms idle=11.4ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Thu Nov 5 06:52:37.589000 2026] [DaProductApp.Tabby.Poller:debug] [pid 2096858] [client -] [Tabby] poll: nothing to do; 0 attempt(s) still watched [Thu Nov 5 06:57:22.577000 2026] [Bandit.Logger:error] [pid 2096858] [client -] ** (Bandit.TransportError) Unrecoverable error: timeout [Thu Nov 5 06:59:53.791000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="global_table" db=0.6ms idle=1928.3ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 07:00:00.528000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="report_requests" db=0.8ms idle=1540.0ms SELECT r0.`id`, r0.`report_id`, r0.`report_type`, r0.`requester_ref`, r0.`filters`, r0.`status`, r0.`progress_percentage`, r0.`row_count`, r0.`file_path`, r0.`file_size`, r0.`download_token`, r0.`download_count`, r0.`last_downloaded_at`, r0.`error_message`, r0.`expires_at`, r0.`completed_at`, r0.`inserted_at`, r0.`updated_at` FROM `report_requests` AS r0 WHERE (NOT (r0.`expires_at` IS NULL) AND (r0.`expires_at` < ?)) [~U[2026-11-05 07:00:00Z]] ↳ DaProductApp.Workers.ReportRetentionWorker.perform/1, at: lib/da_product_app/workers/report_retention_worker.ex:18 [Thu Nov 5 07:09:53.791000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="global_table" db=0.5ms idle=1912.7ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 07:19:53.792000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="global_table" db=1.5ms idle=1867.6ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 07:27:23.352000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:58304] GET /tabby-sim/admin [Thu Nov 5 07:27:23.352000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 122.166.253.95:58304] Processing with DaProductAppWeb.TabbySim.AdminController.index/2 Parameters: %{} Pipelines: [:tabby_sim_admin] [Thu Nov 5 07:27:23.353000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:58304] QUERY OK source="tabby_sim_faults" db=0.8ms idle=1342.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (t0.`remaining` > 0) ORDER BY t0.`id` [] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:18 [Thu Nov 5 07:27:23.358000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:58304] QUERY OK source="tabby_sim_payments" db=4.1ms idle=1343.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 ORDER BY t0.`inserted_at` DESC, t0.`id` DESC LIMIT ? [30] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:19 [Thu Nov 5 07:27:23.361000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:58304] QUERY OK source="tabby_sim_webhook_deliveries" db=1.7ms idle=1348.3ms SELECT t0.`id`, t0.`payment_id`, t0.`webhook_id`, t0.`event`, t0.`attempt`, t0.`state`, t0.`url`, t0.`http_status`, t0.`request_body`, t0.`response_body`, t0.`error`, t0.`duration_ms`, t0.`attempted_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhook_deliveries` AS t0 ORDER BY t0.`id` DESC LIMIT ? [40] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:20 [Thu Nov 5 07:27:23.362000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:58304] QUERY OK source="tabby_sim_webhooks" db=0.9ms idle=1350.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 ORDER BY t0.`id` LIMIT 100 [] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:21 [Thu Nov 5 07:27:23.363000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:58304] Sent 200 in 11ms [Thu Nov 5 07:29:53.791000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="global_table" db=0.5ms idle=1856.8ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 07:39:53.791000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="global_table" db=1.2ms idle=832.6ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 07:49:53.791000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="global_table" db=0.6ms idle=1808.9ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 07:59:53.791000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="global_table" db=0.9ms idle=1803.8ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 08:09:53.790000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="global_table" db=0.4ms idle=1797.7ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 08:19:53.791000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="global_table" db=0.5ms idle=1794.6ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 08:29:53.791000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="global_table" db=0.7ms idle=1792.6ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 08:39:53.791000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="global_table" db=0.6ms idle=1008.7ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 08:49:53.791000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="global_table" db=0.5ms idle=1997.8ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 08:53:17.676000 2026] [Bandit.InitialHandler:warn] [pid 2096858] [client -] Connection that looks like TLS received on a clear channel [Thu Nov 5 08:53:21.212000 2026] [Phoenix.Logger:info] [pid 2096858] [client 91.196.152.1:37153] GET / [Thu Nov 5 08:53:21.212000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 91.196.152.1:37153] Processing with DaProductAppWeb.PageController.home/2 Parameters: %{} Pipelines: [:browser] [Thu Nov 5 08:53:21.260000 2026] [Phoenix.Logger:info] [pid 2096858] [client 91.196.152.1:37153] Sent 200 in 48ms [Thu Nov 5 08:59:53.791000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="global_table" db=0.6ms idle=1988.9ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 09:09:53.790000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="global_table" db=0.4ms idle=1980.7ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 09:19:53.790000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="global_table" db=0.4ms idle=1971.6ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 09:28:47.553000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:58751] GET /tabby-sim/hpp/e10e69dd-14fb-4083-963c-c234ac88b9b3 [Thu Nov 5 09:28:47.553000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 122.166.253.95:58751] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "e10e69dd-14fb-4083-963c-c234ac88b9b3"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 09:28:47.555000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:58751] QUERY OK source="tabby_sim_payments" db=1.3ms idle=709.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["e10e69dd-14fb-4083-963c-c234ac88b9b3"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 09:28:47.555000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:58751] Sent 200 in 2ms [Thu Nov 5 09:28:49.723000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:58751] GET /tabby-sim/hpp/e10e69dd-14fb-4083-963c-c234ac88b9b3 [Thu Nov 5 09:28:49.723000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 122.166.253.95:58751] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "e10e69dd-14fb-4083-963c-c234ac88b9b3"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 09:28:49.724000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:58751] QUERY OK source="tabby_sim_payments" db=0.7ms idle=878.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["e10e69dd-14fb-4083-963c-c234ac88b9b3"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 09:28:49.724000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:58751] Sent 200 in 1ms [Thu Nov 5 09:28:53.584000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:58751] GET /tabby/demo [Thu Nov 5 09:28:53.588000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:58751] Sent 200 in 4ms [Thu Nov 5 09:28:54.127000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:58751] POST /tabby/demo/summary [Thu Nov 5 09:28:54.127000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:58751] Sent 200 in 536µs [Thu Nov 5 09:28:54.325000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:51416] GET /tabby/demo/result/failure [Thu Nov 5 09:28:54.325000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:51416] Sent 200 in 512µs [Thu Nov 5 09:28:56.984000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:51416] GET /tabby/demo [Thu Nov 5 09:28:56.988000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:51416] Sent 200 in 4ms [Thu Nov 5 09:28:57.477000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:51416] POST /tabby/demo/summary [Thu Nov 5 09:28:57.477000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:51416] Sent 200 in 683µs [Thu Nov 5 09:28:58.368000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:51416] POST /tabby/demo/eligibility [Thu Nov 5 09:28:58.646000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:51282] POST /tabby-sim/api/v2/checkout [Thu Nov 5 09:28:58.646000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 127.0.0.1:51282] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 09:28:58.648000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:51282] QUERY OK source="tabby_sim_faults" db=1.0ms idle=1183.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 09:28:58.693000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:51282] QUERY OK db=44.5ms idle=804.2ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["5aabe53a-0c1b-4c74-bac6-fbf2fb8602b8", "CREATED", "AED", "c0dca60e-8af8-4a97-afe9-81d172d4dc53", "demostore", ~U[2026-11-05 09:40:58Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-05 09:38:58Z], "created", false, ~N[2026-11-05 09:28:58], ~N[2026-11-05 09:28:58]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 09:28:58.694000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2096858] [client 127.0.0.1:51282] [TabbySim] checkout payment=5aabe53a-0c1b-4c74-bac6-fbf2fb8602b8 session=c0dca60e-8af8-4a97-afe9-81d172d4dc53 decision=created reason=nil amount=850.00 AED [Thu Nov 5 09:28:58.695000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:51282] QUERY OK source="tabby_sim_payments" db=1.3ms idle=849.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 09:28:58.742000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client 127.0.0.1:51282] [TabbySim] expiry job 402711 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 09:28:58.743000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:51282] Sent 200 in 96ms [Thu Nov 5 09:28:58.744000 2026] [DaProductApp.Tabby.Client:info] [pid 2096858] [client 122.166.253.95:51416] [Tabby] checkout post /api/v2/checkout -> 200 (375 ms, attempt 1) [Thu Nov 5 09:28:58.744000 2026] [DaProductApp.Tabby.Client:info] [pid 2096858] [client 122.166.253.95:51416] [Tabby] session created payment=5aabe53a-0c1b-4c74-bac6-fbf2fb8602b8 [Thu Nov 5 09:28:58.744000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2096858] [client 122.166.253.95:51416] [Tabby] eligibility: show (amount=850.00 AED) [Thu Nov 5 09:28:58.744000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:51416] Sent 200 in 376ms [Thu Nov 5 09:29:53.791000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="global_table" db=0.6ms queue=0.1ms idle=1946.8ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 09:29:59.725000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1879.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:29:59Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 09:29:59.725000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 09:29:59.726000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1880.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:29:59Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 09:29:59.727000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1880.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 09:29:59.761000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402712 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 09:31:01.089000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1240.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:31:01Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 09:31:01.089000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 09:31:01.090000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms queue=0.1ms idle=1242.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:31:01Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 09:31:01.091000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1242.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 09:31:01.139000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402727 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 09:32:02.364000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=1.4ms idle=1512.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:32:02Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 09:32:02.364000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 09:32:02.367000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=1.5ms idle=1514.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:32:02Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 09:32:02.369000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=2.2ms idle=1516.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 09:32:02.398000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402732 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 09:33:03.760000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1901.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:33:03Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 09:33:03.762000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 09:33:03.763000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=1.6ms idle=1903.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:33:03Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 09:33:03.765000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=1.6ms idle=1905.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 09:33:03.815000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402733 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 09:34:05.037000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1171.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:34:05Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 09:34:05.037000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 09:34:05.039000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=1.3ms idle=1087.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:34:05Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 09:34:05.040000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=177.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 09:34:05.074000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402736 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 09:35:06.384000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1155.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:35:06Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 09:35:06.384000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 09:35:06.386000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=521.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:35:06Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 09:35:06.387000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=522.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 09:35:06.522000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402739 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 09:36:07.787000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1922.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:36:07Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 09:36:07.787000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 09:36:07.788000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1924.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:36:07Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 09:36:07.789000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1924.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 09:36:07.842000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402743 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 09:37:09.064000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1197.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:37:09Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 09:37:09.064000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 09:37:09.066000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=1.4ms idle=1080.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:37:09Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 09:37:09.067000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=201.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 09:37:09.128000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402746 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 09:38:10.354000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1484.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:38:10Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 09:38:10.354000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 09:38:10.356000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1486.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:38:10Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 09:38:10.356000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1487.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 09:38:10.421000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402749 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 09:39:11.628000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1758.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:39:11Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 09:39:11.628000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 09:39:11.629000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1758.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:39:11Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 09:39:11.630000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1759.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 09:39:11.687000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402750 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 09:39:23.689000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:52790] POST /tabby/demo/eligibility [Thu Nov 5 09:39:23.948000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:35140] POST /tabby-sim/api/v2/checkout [Thu Nov 5 09:39:23.948000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 127.0.0.1:35140] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 09:39:23.949000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:35140] QUERY OK source="tabby_sim_faults" db=1.1ms idle=1078.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 09:39:23.970000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:35140] QUERY OK db=19.7ms queue=0.3ms idle=1080.5ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`rejection_reason`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["1da26088-d8bd-428f-b10a-87f17a51aad8", "CREATED", "AED", "f4ed083a-e723-41a3-b641-9318d4ba03cb", "demostore", ~U[2026-11-05 09:51:23Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), "not_available", %{"email" => "otp.success@tabby.ai", "phone" => "+971500000002"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-05 09:49:23Z], "rejected", false, ~N[2026-11-05 09:39:23], ~N[2026-11-05 09:39:23]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 09:39:23.970000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2096858] [client 127.0.0.1:35140] [TabbySim] checkout payment=1da26088-d8bd-428f-b10a-87f17a51aad8 session=f4ed083a-e723-41a3-b641-9318d4ba03cb decision=rejected reason="not_available" amount=850.00 AED [Thu Nov 5 09:39:23.971000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:35140] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1101.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 09:39:23.973000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:35140] Sent 200 in 25ms [Thu Nov 5 09:39:23.974000 2026] [DaProductApp.Tabby.Client:info] [pid 2096858] [client 122.166.253.95:52790] [Tabby] checkout post /api/v2/checkout -> 200 (284 ms, attempt 1) [Thu Nov 5 09:39:23.974000 2026] [DaProductApp.Tabby.Client:info] [pid 2096858] [client 122.166.253.95:52790] [Tabby] session rejected by pre-scoring (business outcome) reason=not_available [Thu Nov 5 09:39:23.974000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2096858] [client 122.166.253.95:52790] [Tabby] eligibility: hide reason=not_available (amount=850.00 AED) [Thu Nov 5 09:39:23.974000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:52790] Sent 200 in 285ms [Thu Nov 5 09:39:26.778000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:52790] POST /tabby/demo/summary [Thu Nov 5 09:39:26.778000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:52790] Sent 200 in 537µs [Thu Nov 5 09:39:28.180000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:52790] POST /tabby/demo/eligibility [Thu Nov 5 09:39:28.469000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:35140] POST /tabby-sim/api/v2/checkout [Thu Nov 5 09:39:28.469000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 127.0.0.1:35140] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 09:39:28.470000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:35140] QUERY OK source="tabby_sim_faults" db=0.4ms idle=600.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 09:39:28.507000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:35140] QUERY OK db=36.4ms queue=0.3ms idle=601.0ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["9b677d99-2d79-4407-9928-5918b4bafafd", "CREATED", "AED", "faf7f4af-209a-4cde-9e5f-9219d6ebba40", "demostore", ~U[2026-11-05 09:51:28Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-05 09:49:28Z], "created", false, ~N[2026-11-05 09:39:28], ~N[2026-11-05 09:39:28]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 09:39:28.508000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2096858] [client 127.0.0.1:35140] [TabbySim] checkout payment=9b677d99-2d79-4407-9928-5918b4bafafd session=faf7f4af-209a-4cde-9e5f-9219d6ebba40 decision=created reason=nil amount=850.00 AED [Thu Nov 5 09:39:28.509000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:35140] QUERY OK source="tabby_sim_payments" db=0.5ms idle=638.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 09:39:28.511000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:35140] Sent 200 in 42ms [Thu Nov 5 09:39:28.512000 2026] [DaProductApp.Tabby.Client:info] [pid 2096858] [client 122.166.253.95:52790] [Tabby] checkout post /api/v2/checkout -> 200 (332 ms, attempt 1) [Thu Nov 5 09:39:28.512000 2026] [DaProductApp.Tabby.Client:info] [pid 2096858] [client 122.166.253.95:52790] [Tabby] session created payment=9b677d99-2d79-4407-9928-5918b4bafafd [Thu Nov 5 09:39:28.512000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2096858] [client 122.166.253.95:52790] [Tabby] eligibility: show (amount=850.00 AED) [Thu Nov 5 09:39:28.512000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:52790] Sent 200 in 332ms [Thu Nov 5 09:39:53.790000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="global_table" db=0.4ms idle=1927.2ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 09:40:12.904000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1028.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:40:12Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 09:40:12.904000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 09:40:12.905000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1029.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:40:12Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 09:40:12.906000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.1ms idle=1030.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 09:40:12.973000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402756 scheduled in 46s (3 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 09:41:00.412000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1536.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:41:00Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 09:41:00.440000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=27.3ms queue=0.1ms idle=1537.2ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 09:41:00], true, "5aabe53a-0c1b-4c74-bac6-fbf2fb8602b8", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 09:41:00.440000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2096858] [client -] [TabbySim] payment=5aabe53a-0c1b-4c74-bac6-fbf2fb8602b8 CREATED -> EXPIRED [Thu Nov 5 09:41:00.441000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.1ms idle=1129.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["5aabe53a-0c1b-4c74-bac6-fbf2fb8602b8"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 09:41:00.442000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2096858] [client -] [TabbySim] webhook not sent: event=expire payment=5aabe53a-0c1b-4c74-bac6-fbf2fb8602b8 [Thu Nov 5 09:41:00.442000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2096858] [client -] [TabbySim] payment=5aabe53a-0c1b-4c74-bac6-fbf2fb8602b8 expired (expires_at 2026-11-05 09:40:58Z, session_status=created) [Thu Nov 5 09:41:00.443000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.2ms idle=567.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:41:00Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 09:41:00.444000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 1 payment(s) were due [Thu Nov 5 09:41:00.445000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=568.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:41:00Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 09:41:00.446000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=569.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 09:41:00.480000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402758 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 09:42:01.755000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=1.8ms idle=1874.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:42:01Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 09:42:01.755000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 09:42:01.757000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=1.8ms idle=1877.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:42:01Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 09:42:01.761000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=1.7ms queue=0.3ms idle=1880.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 09:42:01.901000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402763 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 09:43:03.202000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=2.0ms idle=1320.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:43:03Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 09:43:03.203000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 09:43:03.209000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=2.9ms queue=3.2ms idle=1322.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:43:03Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 09:43:03.219000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=9.8ms idle=1329.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 09:43:03.281000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402764 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 09:44:04.493000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1600.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:44:04Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 09:44:04.493000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 09:44:04.494000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1601.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:44:04Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 09:44:04.495000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.3ms idle=1602.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 09:44:04.525000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402767 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 09:45:05.896000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=1.9ms idle=168.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:45:05Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 09:45:05.896000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 09:45:05.898000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=5.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:45:05Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 09:45:05.898000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=6.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 09:45:05.966000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402771 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 09:46:07.370000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1476.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:46:07Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 09:46:07.370000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 09:46:07.372000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1478.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:46:07Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 09:46:07.372000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1479.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 09:46:07.418000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402773 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 09:46:11.434000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:53038] POST /tabby/demo/place [Thu Nov 5 09:46:11.481000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:53038] QUERY OK db=43.6ms queue=1.0ms idle=543.3ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`order_reference`,`amount`,`needs_attention`,`success_url`,`cancel_url`,`failure_url`,`captured_amount`,`refunded_amount`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["85f1dfd9-0a51-44f3-8461-beae2f83be0b", "new", "AED", "demostore", "DEMO-9204C9C1", Decimal.new("850.00"), false, "http://demo.ctrmv.com:4030/tabby/demo/result/success?lang=en&order=DEMO-9204C9C1", "http://demo.ctrmv.com:4030/tabby/demo/result/cancel?lang=en&order=DEMO-9204C9C1", "http://demo.ctrmv.com:4030/tabby/demo/result/failure?lang=en&order=DEMO-9204C9C1", Decimal.new("0"), Decimal.new("0"), ~N[2026-11-05 09:46:11], ~N[2026-11-05 09:46:11]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Thu Nov 5 09:46:11.804000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:34088] POST /tabby-sim/api/v2/checkout [Thu Nov 5 09:46:11.804000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 127.0.0.1:34088] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/85f1dfd9-0a51-44f3-8461-beae2f83be0b/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/85f1dfd9-0a51-44f3-8461-beae2f83be0b/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/85f1dfd9-0a51-44f3-8461-beae2f83be0b/success"}, "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-9204C9C1"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 09:46:11.806000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:34088] QUERY OK source="tabby_sim_faults" db=0.8ms idle=912.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 09:46:11.874000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:34088] QUERY OK db=66.9ms idle=913.3ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`lang`,`amount`,`buyer`,`buyer_history`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`session_status`,`shipping_address`,`is_expired`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["a1b2ab54-f2da-4c1c-bb9d-9bd113919a75", "CREATED", "AED", "74ce410f-4182-4531-8e63-6da4aa7f4f82", "demostore", ~U[2026-11-05 09:58:11Z], %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/85f1dfd9-0a51-44f3-8461-beae2f83be0b/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/85f1dfd9-0a51-44f3-8461-beae2f83be0b/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/85f1dfd9-0a51-44f3-8461-beae2f83be0b/success"}, "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-9204C9C1"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "0", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo headphones", "unit_price" => "650"}, %{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo smartwatch", "unit_price" => "200"}], "reference_id" => "DEMO-9204C9C1", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "en", Decimal.new("850.00"), %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, %{"registered_since" => "2023-02-01T10:00:00Z"}, [], true, %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/85f1dfd9-0a51-44f3-8461-beae2f83be0b/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/85f1dfd9-0a51-44f3-8461-beae2f83be0b/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/85f1dfd9-0a51-44f3-8461-beae2f83be0b/success"}, [], ~U[2026-11-05 09:56:11Z], "created", %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}, false, ~N[2026-11-05 09:46:11], ~N[2026-11-05 09:46:11]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 09:46:11.874000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2096858] [client 127.0.0.1:34088] [TabbySim] checkout payment=a1b2ab54-f2da-4c1c-bb9d-9bd113919a75 session=74ce410f-4182-4531-8e63-6da4aa7f4f82 decision=created reason=nil amount=850.00 AED [Thu Nov 5 09:46:11.875000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:34088] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.1ms idle=981.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 09:46:11.880000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:34088] Sent 200 in 75ms [Thu Nov 5 09:46:11.882000 2026] [DaProductApp.Tabby.Client:info] [pid 2096858] [client 122.166.253.95:53038] [Tabby] checkout post /api/v2/checkout -> 200 (400 ms, attempt 1) [Thu Nov 5 09:46:11.882000 2026] [DaProductApp.Tabby.Client:info] [pid 2096858] [client 122.166.253.95:53038] [Tabby] session created payment=a1b2ab54-f2da-4c1c-bb9d-9bd113919a75 [Thu Nov 5 09:46:11.886000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:53038] QUERY OK source="tabby_payments" db=1.1ms queue=0.2ms idle=682.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["85f1dfd9-0a51-44f3-8461-beae2f83be0b"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Thu Nov 5 09:46:11.955000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:53038] QUERY OK source="tabby_payments" db=67.3ms idle=605.5ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-05 10:06:11Z], "a1b2ab54-f2da-4c1c-bb9d-9bd113919a75", "74ce410f-4182-4531-8e63-6da4aa7f4f82", ~N[2026-11-05 09:46:11], "85f1dfd9-0a51-44f3-8461-beae2f83be0b"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Thu Nov 5 09:46:11.955000 2026] [DaProductApp.Tabby.Sessions:info] [pid 2096858] [client 122.166.253.95:53038] [Tabby] session created attempt=85f1dfd9-0a51-44f3-8461-beae2f83be0b payment=a1b2ab54-f2da-4c1c-bb9d-9bd113919a75 [Thu Nov 5 09:46:11.987000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:53038] Sent 200 in 553ms [Thu Nov 5 09:46:12.543000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:53038] GET /tabby-sim/hpp/74ce410f-4182-4531-8e63-6da4aa7f4f82 [Thu Nov 5 09:46:12.548000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 122.166.253.95:53038] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "74ce410f-4182-4531-8e63-6da4aa7f4f82"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 09:46:12.553000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:53038] QUERY OK source="tabby_sim_payments" db=4.3ms idle=674.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["74ce410f-4182-4531-8e63-6da4aa7f4f82"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 09:46:12.553000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:53038] Sent 200 in 9ms [Thu Nov 5 09:46:19.375000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:53038] POST /tabby-sim/hpp/74ce410f-4182-4531-8e63-6da4aa7f4f82 [Thu Nov 5 09:46:19.375000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 122.166.253.95:53038] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "approve", "otp" => "8888", "session_id" => "74ce410f-4182-4531-8e63-6da4aa7f4f82"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 09:46:19.378000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:53038] QUERY OK source="tabby_sim_payments" db=2.1ms idle=1481.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["74ce410f-4182-4531-8e63-6da4aa7f4f82"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 09:46:19.404000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:53038] QUERY OK source="tabby_sim_payments" db=26.3ms idle=1484.3ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["AUTHORIZED", ~N[2026-11-05 09:46:19], "a1b2ab54-f2da-4c1c-bb9d-9bd113919a75", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 09:46:19.405000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2096858] [client 122.166.253.95:53038] [TabbySim] payment=a1b2ab54-f2da-4c1c-bb9d-9bd113919a75 CREATED -> AUTHORIZED [Thu Nov 5 09:46:19.409000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:53038] QUERY OK source="tabby_sim_payments" db=2.7ms idle=1512.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["a1b2ab54-f2da-4c1c-bb9d-9bd113919a75"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 09:46:19.410000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:53038] QUERY OK source="tabby_sim_webhooks" db=0.8ms idle=1100.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 09:46:19.411000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2096858] [client 122.166.253.95:53038] [TabbySim] no webhook registered for merchant_code=demostore; event=authorize payment=a1b2ab54-f2da-4c1c-bb9d-9bd113919a75 [Thu Nov 5 09:46:19.411000 2026] [DaProductApp.TabbySim.Hpp:info] [pid 2096858] [client 122.166.253.95:53038] [TabbySim] hpp payment=a1b2ab54-f2da-4c1c-bb9d-9bd113919a75 action=approve status=AUTHORIZED [Thu Nov 5 09:46:19.411000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:53038] Sent 302 in 36ms [Thu Nov 5 09:46:19.839000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:53038] GET /tabby/return/85f1dfd9-0a51-44f3-8461-beae2f83be0b/success [Thu Nov 5 09:46:19.841000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:53038] QUERY OK source="tabby_payments" db=1.0ms idle=947.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["85f1dfd9-0a51-44f3-8461-beae2f83be0b"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 09:46:19.890000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:53038] Sent 302 in 50ms [Thu Nov 5 09:46:19.971000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=592.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["85f1dfd9-0a51-44f3-8461-beae2f83be0b"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 09:46:20.277000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:34088] GET /tabby-sim/api/v2/payments/a1b2ab54-f2da-4c1c-bb9d-9bd113919a75 [Thu Nov 5 09:46:20.278000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 127.0.0.1:34088] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "a1b2ab54-f2da-4c1c-bb9d-9bd113919a75"} Pipelines: [:tabby_sim_api] [Thu Nov 5 09:46:20.279000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:34088] QUERY OK source="tabby_sim_faults" db=1.2ms idle=554.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "a1b2ab54-f2da-4c1c-bb9d-9bd113919a75"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 09:46:20.280000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:34088] QUERY OK source="tabby_sim_faults" db=0.6ms idle=438.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 09:46:20.281000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:34088] QUERY OK source="tabby_sim_payments" db=0.4ms idle=436.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["a1b2ab54-f2da-4c1c-bb9d-9bd113919a75"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Thu Nov 5 09:46:20.281000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:34088] Sent 200 in 4ms [Thu Nov 5 09:46:20.282000 2026] [DaProductApp.Tabby.Client:info] [pid 2096858] [client -] [Tabby] retrieve get /api/v2/payments/a1b2ab54-f2da-4c1c-bb9d-9bd113919a75 -> 200 (311 ms, attempt 1) [Thu Nov 5 09:46:20.335000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:53038] GET /tabby/demo/result/success [Thu Nov 5 09:46:20.335000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:53038] Sent 200 in 535µs [Thu Nov 5 09:46:20.347000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=65.0ms idle=392.5ms UPDATE `tabby_payments` AS t0 SET t0.`authorized_at` = ?, t0.`winner_key` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [~U[2026-11-05 09:46:20Z], "c3da0a13ef43f719f2db590ca51dc27512b0f3d5eb30b2ff9ec856a0ed88e5ce", "authorized", ~N[2026-11-05 09:46:20], "85f1dfd9-0a51-44f3-8461-beae2f83be0b", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 09:46:20.348000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=376.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["85f1dfd9-0a51-44f3-8461-beae2f83be0b"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 09:46:20.348000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2096858] [client -] [Tabby] verify: attempt=85f1dfd9-0a51-44f3-8461-beae2f83be0b payment=a1b2ab54-f2da-4c1c-bb9d-9bd113919a75 created -> authorized [Thu Nov 5 09:46:20.481000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=201.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["85f1dfd9-0a51-44f3-8461-beae2f83be0b"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 09:46:20.518000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=35.7ms idle=201.7ms UPDATE `tabby_payments` AS t0 SET t0.`capture_reference_id` = ?, t0.`claimed_at` = ?, t0.`claimed_by` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["capture-DEMO-9204C9C1", ~U[2026-11-05 09:46:20Z], "nonode@nohost", "capturing", ~N[2026-11-05 09:46:20], "85f1dfd9-0a51-44f3-8461-beae2f83be0b", "authorized"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 09:46:20.519000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=200.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["85f1dfd9-0a51-44f3-8461-beae2f83be0b"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 09:46:20.519000 2026] [DaProductApp.Tabby.Capture:info] [pid 2096858] [client -] [Tabby] capture: attempt=85f1dfd9-0a51-44f3-8461-beae2f83be0b payment=a1b2ab54-f2da-4c1c-bb9d-9bd113919a75 claimed (authorized -> capturing) [Thu Nov 5 09:46:20.797000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:34088] POST /tabby-sim/api/v2/payments/a1b2ab54-f2da-4c1c-bb9d-9bd113919a75/captures [Thu Nov 5 09:46:20.798000 2026] [Phoenix.Logger:debug] [pid 2096858] [client 127.0.0.1:34088] Processing with DaProductAppWeb.TabbySim.PaymentsController.capture/2 Parameters: %{"amount" => "850.00", "id" => "a1b2ab54-f2da-4c1c-bb9d-9bd113919a75", "reference_id" => "capture-DEMO-9204C9C1"} Pipelines: [:tabby_sim_api] [Thu Nov 5 09:46:20.799000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:34088] QUERY OK source="tabby_sim_faults" db=0.4ms queue=0.3ms idle=370.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["capture", "a1b2ab54-f2da-4c1c-bb9d-9bd113919a75"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 09:46:20.800000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:34088] QUERY OK source="tabby_sim_faults" db=0.3ms idle=318.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["capture"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 09:46:20.801000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:34088] QUERY OK source="tabby_sim_payments" db=0.8ms idle=318.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["a1b2ab54-f2da-4c1c-bb9d-9bd113919a75"] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:227 [Thu Nov 5 09:46:20.801000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:34088] QUERY OK db=0.2ms idle=283.2ms begin [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Thu Nov 5 09:46:20.802000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:34088] QUERY OK source="tabby_sim_payments" db=1.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) FOR UPDATE ["a1b2ab54-f2da-4c1c-bb9d-9bd113919a75"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:231 [Thu Nov 5 09:46:20.804000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:34088] QUERY OK source="tabby_sim_payments" db=1.2ms UPDATE `tabby_sim_payments` SET `status` = ?, `captures` = ?, `closed_at` = ?, `updated_at` = ? WHERE `id` = ? ["CLOSED", [%{"amount" => "850", "created_at" => "2026-11-05T09:46:20Z", "discount_amount" => "0", "id" => "3a5aec07-3ce0-4b5d-af61-105ea504a395", "items" => nil, "reference_id" => "capture-DEMO-9204C9C1", "shipping_amount" => "0", "tax_amount" => "0"}], ~U[2026-11-05 09:46:20Z], ~N[2026-11-05 09:46:20], "a1b2ab54-f2da-4c1c-bb9d-9bd113919a75"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:244 [Thu Nov 5 09:46:20.805000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2096858] [client 127.0.0.1:34088] [TabbySim] capture payment=a1b2ab54-f2da-4c1c-bb9d-9bd113919a75 status=CLOSED [Thu Nov 5 09:46:20.844000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:34088] QUERY OK db=38.8ms commit [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Thu Nov 5 09:46:20.845000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:53038] GET /tabby/demo/status/85f1dfd9-0a51-44f3-8461-beae2f83be0b [Thu Nov 5 09:46:20.845000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:34088] QUERY OK source="tabby_sim_webhooks" db=0.7ms idle=325.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 09:46:20.845000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2096858] [client 127.0.0.1:34088] [TabbySim] no webhook registered for merchant_code=demostore; event=capture payment=a1b2ab54-f2da-4c1c-bb9d-9bd113919a75 [Thu Nov 5 09:46:20.846000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:53038] QUERY OK source="tabby_payments" db=0.5ms idle=314.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["85f1dfd9-0a51-44f3-8461-beae2f83be0b"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 09:46:20.847000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:53038] Sent 200 in 1ms [Thu Nov 5 09:46:20.847000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 127.0.0.1:34088] QUERY OK source="tabby_sim_webhooks" db=0.7ms idle=253.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 09:46:20.847000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2096858] [client 127.0.0.1:34088] [TabbySim] no webhook registered for merchant_code=demostore; event=close payment=a1b2ab54-f2da-4c1c-bb9d-9bd113919a75 [Thu Nov 5 09:46:20.847000 2026] [Phoenix.Logger:info] [pid 2096858] [client 127.0.0.1:34088] Sent 200 in 49ms [Thu Nov 5 09:46:20.848000 2026] [DaProductApp.Tabby.Client:info] [pid 2096858] [client -] [Tabby] capture post /api/v2/payments/a1b2ab54-f2da-4c1c-bb9d-9bd113919a75/captures -> 200 (329 ms, attempt 1) [Thu Nov 5 09:46:20.913000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=64.3ms idle=204.9ms UPDATE `tabby_payments` AS t0 SET t0.`captured_amount` = ?, t0.`captured_at` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [Decimal.new("850"), ~U[2026-11-05 09:46:20Z], "captured", ~N[2026-11-05 09:46:20], "85f1dfd9-0a51-44f3-8461-beae2f83be0b", "capturing"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 09:46:20.914000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=236.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["85f1dfd9-0a51-44f3-8461-beae2f83be0b"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 09:46:20.914000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2096858] [client -] [Tabby] verify: attempt=85f1dfd9-0a51-44f3-8461-beae2f83be0b payment=a1b2ab54-f2da-4c1c-bb9d-9bd113919a75 capturing -> captured [Thu Nov 5 09:46:20.914000 2026] [DaProductApp.Tabby.Capture:info] [pid 2096858] [client -] [Tabby] capture: attempt=85f1dfd9-0a51-44f3-8461-beae2f83be0b payment=a1b2ab54-f2da-4c1c-bb9d-9bd113919a75 is captured [Thu Nov 5 09:46:23.383000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:53038] GET /tabby/demo/status/85f1dfd9-0a51-44f3-8461-beae2f83be0b [Thu Nov 5 09:46:23.385000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client 122.166.253.95:53038] QUERY OK source="tabby_payments" db=1.2ms queue=0.1ms idle=1490.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["85f1dfd9-0a51-44f3-8461-beae2f83be0b"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 09:46:23.386000 2026] [Phoenix.Logger:info] [pid 2096858] [client 122.166.253.95:53038] Sent 200 in 2ms [Thu Nov 5 09:47:08.631000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1736.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:47:08Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 09:47:08.631000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2096858] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 09:47:08.632000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1737.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 09:47:08Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 09:47:08.633000 2026] [Ecto.Adapters.SQL:debug] [pid 2096858] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1091.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 09:47:08.906000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2096858] [client -] [TabbySim] expiry job 402779 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 10:00:20.482000 2026] [Ecto.Adapters.SQL:debug] [pid 2418816] [client -] QUERY OK source="global_table" db=0.4ms queue=3.6ms idle=70.2ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 10:00:20.633000 2026] [Bandit:info] [pid 2418816] [client -] Running DaProductAppWeb.Endpoint with Bandit 1.6.7 at 0.0.0.0:4030 (http) [Thu Nov 5 10:00:20.647000 2026] [Phoenix.Endpoint.Supervisor:info] [pid 2418816] [client -] Access DaProductAppWeb.Endpoint at http://localhost:4030 [Thu Nov 5 10:00:20.682000 2026] [DaProductApp.MQTT.Handler:info] [pid 2418816] [client -] Device phoenix_client_node_devteam connected [Thu Nov 5 10:00:21.722000 2026] [Ecto.Adapters.SQL:debug] [pid 2418816] [client -] QUERY OK source="tabby_payments" db=1.8ms queue=3.4ms idle=1300.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["MPPOS", ~U[2026-10-18 10:00:21Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 10:00:21.728000 2026] [Ecto.Adapters.SQL:debug] [pid 2418816] [client -] QUERY OK source="tabby_payments" db=1.9ms queue=0.9ms idle=1317.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["MPPOS", ~N[2026-11-05 09:58:21], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 10:00:21.730000 2026] [Ecto.Adapters.SQL:debug] [pid 2418816] [client -] QUERY OK source="tabby_payments" db=0.5ms queue=0.6ms idle=1323.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["MPPOS", ~N[2026-11-05 09:58:21], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 10:00:21.732000 2026] [Ecto.Adapters.SQL:debug] [pid 2418816] [client -] QUERY OK source="tabby_payments" db=0.3ms queue=0.6ms idle=1325.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["MPPOS", ~U[2026-11-05 09:55:21Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 10:00:21.735000 2026] [Ecto.Adapters.SQL:debug] [pid 2418816] [client -] QUERY OK source="tabby_payments" db=1.0ms queue=1.2ms idle=1327.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["MPPOS", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 10:00:21.755000 2026] [Ecto.Adapters.SQL:debug] [pid 2418816] [client -] QUERY OK source="tabby_webhook_events" db=0.7ms queue=0.8ms idle=1347.7ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-05 09:58:21Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Thu Nov 5 10:00:21.762000 2026] [Ecto.Adapters.SQL:debug] [pid 2418816] [client -] QUERY OK source="tabby_refunds" db=0.6ms queue=0.9ms idle=1354.7ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["MPPOS", ~N[2026-11-05 09:58:21], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Thu Nov 5 10:00:21.764000 2026] [Ecto.Adapters.SQL:debug] [pid 2418816] [client -] QUERY OK source="tabby_payments" db=0.9ms queue=0.7ms idle=1259.7ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["MPPOS"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 10:00:21.765000 2026] [Ecto.Adapters.SQL:debug] [pid 2418816] [client -] QUERY OK source="tabby_payments" db=0.3ms queue=0.5ms idle=290.1ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["MPPOS", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 10:00:21.767000 2026] [Ecto.Adapters.SQL:debug] [pid 2418816] [client -] QUERY OK source="tabby_webhook_events" db=0.7ms queue=0.4ms idle=123.0ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Thu Nov 5 10:00:21.768000 2026] [Ecto.Adapters.SQL:debug] [pid 2418816] [client -] QUERY OK source="tabby_refunds" db=0.3ms queue=0.6ms idle=56.7ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["MPPOS"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Thu Nov 5 10:00:21.769000 2026] [DaProductApp.Tabby.Poller:debug] [pid 2418816] [client -] [Tabby] poll: nothing to do; 0 attempt(s) still watched [Thu Nov 5 10:00:38.004000 2026] [Phoenix.Logger:info] [pid 2418816] [client 122.166.253.95:61911] GET /tabby/demo [Thu Nov 5 10:00:38.062000 2026] [Phoenix.Logger:info] [pid 2418816] [client 122.166.253.95:61911] Sent 200 in 58ms [Thu Nov 5 10:00:38.550000 2026] [Phoenix.Logger:info] [pid 2418816] [client 122.166.253.95:61911] POST /tabby/demo/summary [Thu Nov 5 10:00:38.562000 2026] [Phoenix.Logger:info] [pid 2418816] [client 122.166.253.95:61911] Sent 200 in 11ms [Thu Nov 5 10:00:39.448000 2026] [Phoenix.Logger:info] [pid 2418816] [client 122.166.253.95:61911] POST /tabby/demo/eligibility [Thu Nov 5 10:00:40.279000 2026] [DaProductApp.Tabby.Client:info] [pid 2418816] [client 122.166.253.95:61911] [Tabby] checkout post /api/v2/checkout -> 200 (809 ms, attempt 1) [Thu Nov 5 10:00:40.288000 2026] [DaProductApp.Tabby.Client:info] [pid 2418816] [client 122.166.253.95:61911] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Thu Nov 5 10:00:40.288000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2418816] [client 122.166.253.95:61911] [Tabby] eligibility: hide reason=order_amount_too_high (amount=850.00 AED) [Thu Nov 5 10:00:40.288000 2026] [Phoenix.Logger:info] [pid 2418816] [client 122.166.253.95:61911] Sent 200 in 840ms [Thu Nov 5 10:02:27.920000 2026] [Phoenix.Logger:info] [pid 2418816] [client 127.0.0.1:54682] GET /tabby/demo [Thu Nov 5 10:02:27.920000 2026] [DaProductAppWeb.Plugs.TabbyDemoGate:warn] [pid 2418816] [client 127.0.0.1:54682] [Tabby] demo 401 GET /tabby/demo [Thu Nov 5 10:02:27.921000 2026] [DaProductAppWeb.Router:debug] [pid 2418816] [client 127.0.0.1:54682] Phoenix.Router halted in :tabby_demo/2 [Thu Nov 5 10:02:27.921000 2026] [Phoenix.Logger:info] [pid 2418816] [client 127.0.0.1:54682] Sent 401 in 1ms [Thu Nov 5 10:02:28.271000 2026] [Phoenix.Logger:info] [pid 2418816] [client 78.47.213.209:39450] GET /tabby/demo [Thu Nov 5 10:02:28.271000 2026] [DaProductAppWeb.Plugs.TabbyDemoGate:warn] [pid 2418816] [client 78.47.213.209:39450] [Tabby] demo 401 GET /tabby/demo [Thu Nov 5 10:02:28.271000 2026] [DaProductAppWeb.Router:debug] [pid 2418816] [client 78.47.213.209:39450] Phoenix.Router halted in :tabby_demo/2 [Thu Nov 5 10:02:28.271000 2026] [Phoenix.Logger:info] [pid 2418816] [client 78.47.213.209:39450] Sent 401 in 627µs [Thu Nov 5 10:04:24.743000 2026] [Ecto.Adapters.SQL:debug] [pid 2423966] [client -] QUERY OK source="global_table" db=0.8ms queue=6.7ms idle=104.3ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 10:04:24.878000 2026] [DaProductApp.MQTT.Handler:info] [pid 2423966] [client -] Device phoenix_client_node_devteam connected [Thu Nov 5 10:04:24.879000 2026] [Bandit:info] [pid 2423966] [client -] Running DaProductAppWeb.Endpoint with Bandit 1.6.7 at 0.0.0.0:4030 (http) [Thu Nov 5 10:04:24.886000 2026] [Phoenix.Endpoint.Supervisor:info] [pid 2423966] [client -] Access DaProductAppWeb.Endpoint at http://localhost:4030 [Thu Nov 5 10:04:26.617000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2423966] [client -] Live reload: priv/static/assets/app.js [Thu Nov 5 10:04:26.643000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2423966] [client -] Live reload: priv/static/assets/app.js [Thu Nov 5 10:04:26.643000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2423966] [client -] Live reload: priv/static/assets/app.js [Thu Nov 5 10:04:26.643000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2423966] [client -] Live reload: priv/static/assets/app.js [Thu Nov 5 10:04:26.644000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2423966] [client -] Live reload: priv/static/assets/app.js [Thu Nov 5 10:04:28.642000 2026] [Phoenix.Logger:info] [pid 2423966] [client 122.166.253.95:61095] GET /tabby-sim/admin [Thu Nov 5 10:04:28.681000 2026] [Phoenix.Logger:info] [pid 2423966] [client 122.166.253.95:64652] GET /tabby/demo [Thu Nov 5 10:04:28.696000 2026] [Phoenix.Logger:debug] [pid 2423966] [client 122.166.253.95:61095] Processing with DaProductAppWeb.TabbySim.AdminController.index/2 Parameters: %{} Pipelines: [:tabby_sim_admin] [Thu Nov 5 10:04:28.795000 2026] [Phoenix.Logger:info] [pid 2423966] [client 122.166.253.95:64652] Sent 200 in 114ms [Thu Nov 5 10:04:28.822000 2026] [Phoenix.Logger:info] [pid 2423966] [client 122.166.253.95:61095] Sent 404 in 179ms [Thu Nov 5 10:04:28.827000 2026] [Plug.Debugger:debug] [pid 2423966] [client 122.166.253.95:61095] ** (Phoenix.Router.NoRouteError) no route found for GET /tabby-sim/admin (DaProductAppWeb.Router) (da_product_app 0.1.0) lib/da_product_app_web/plugs/tabby_sim_gate.ex:16: DaProductAppWeb.Plugs.TabbySimGate.call/2 (da_product_app 0.1.0) DaProductAppWeb.Router.tabby_sim_admin/2 (da_product_app 0.1.0) lib/da_product_app_web/router.ex:1: DaProductAppWeb.Router.__pipe_through10__/1 (phoenix 1.7.19) lib/phoenix/router.ex:475: Phoenix.Router.__call__/5 (da_product_app 0.1.0) lib/da_product_app_web/endpoint.ex:1: DaProductAppWeb.Endpoint.plug_builder_call/2 (da_product_app 0.1.0) /home/prem/canarabank/saaskit/da_product_app_changed/deps/plug/lib/plug/debugger.ex:136: DaProductAppWeb.Endpoint."call (overridable 3)"/2 (da_product_app 0.1.0) lib/da_product_app_web/endpoint.ex:1: DaProductAppWeb.Endpoint.call/2 (phoenix 1.7.19) lib/phoenix/endpoint/sync_code_reload_plug.ex:22: Phoenix.Endpoint.SyncCodeReloadPlug.do_call/4 (bandit 1.6.7) lib/bandit/pipeline.ex:129: Bandit.Pipeline.call_plug!/2 (bandit 1.6.7) lib/bandit/pipeline.ex:40: Bandit.Pipeline.run/4 (bandit 1.6.7) lib/bandit/http1/handler.ex:12: Bandit.HTTP1.Handler.handle_data/3 (bandit 1.6.7) lib/bandit/delegating_handler.ex:18: Bandit.DelegatingHandler.handle_data/3 (bandit 1.6.7) lib/bandit/delegating_handler.ex:8: Bandit.DelegatingHandler.handle_continue/2 (stdlib 5.2.3.2) gen_server.erl:1085: :gen_server.try_handle_continue/3 (stdlib 5.2.3.2) gen_server.erl:995: :gen_server.loop/7 (stdlib 5.2.3.2) proc_lib.erl:241: :proc_lib.init_p_do_apply/3 [Thu Nov 5 10:04:29.443000 2026] [Phoenix.Logger:info] [pid 2423966] [client 122.166.253.95:61095] POST /tabby/demo/summary [Thu Nov 5 10:04:29.454000 2026] [Phoenix.Logger:info] [pid 2423966] [client 122.166.253.95:61095] Sent 200 in 10ms [Thu Nov 5 10:04:30.484000 2026] [Phoenix.Logger:info] [pid 2423966] [client 122.166.253.95:52641] POST /tabby/demo/eligibility [Thu Nov 5 10:04:31.350000 2026] [DaProductApp.Tabby.Client:info] [pid 2423966] [client 122.166.253.95:52641] [Tabby] checkout post /api/v2/checkout -> 200 (848 ms, attempt 1) [Thu Nov 5 10:04:31.352000 2026] [DaProductApp.Tabby.Client:info] [pid 2423966] [client 122.166.253.95:52641] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Thu Nov 5 10:04:31.352000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2423966] [client 122.166.253.95:52641] [Tabby] eligibility: hide reason=order_amount_too_high (amount=850.00 AED) [Thu Nov 5 10:04:31.352000 2026] [Phoenix.Logger:info] [pid 2423966] [client 122.166.253.95:52641] Sent 200 in 867ms [Thu Nov 5 10:04:48.929000 2026] [Phoenix.Logger:info] [pid 2423966] [client 122.166.253.95:52641] GET /tabby/demo [Thu Nov 5 10:04:48.931000 2026] [Phoenix.Logger:info] [pid 2423966] [client 122.166.253.95:52641] Sent 200 in 2ms [Thu Nov 5 10:04:49.440000 2026] [Phoenix.Logger:info] [pid 2423966] [client 122.166.253.95:52641] POST /tabby/demo/summary [Thu Nov 5 10:04:49.441000 2026] [Phoenix.Logger:info] [pid 2423966] [client 122.166.253.95:52641] Sent 200 in 1ms [Thu Nov 5 10:04:50.325000 2026] [Phoenix.Logger:info] [pid 2423966] [client 122.166.253.95:52641] POST /tabby/demo/eligibility [Thu Nov 5 10:04:50.758000 2026] [DaProductApp.Tabby.Client:info] [pid 2423966] [client 122.166.253.95:52641] [Tabby] checkout post /api/v2/checkout -> 200 (433 ms, attempt 1) [Thu Nov 5 10:04:50.759000 2026] [DaProductApp.Tabby.Client:info] [pid 2423966] [client 122.166.253.95:52641] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Thu Nov 5 10:04:50.759000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2423966] [client 122.166.253.95:52641] [Tabby] eligibility: hide reason=order_amount_too_high (amount=850.00 AED) [Thu Nov 5 10:04:50.759000 2026] [Phoenix.Logger:info] [pid 2423966] [client 122.166.253.95:52641] Sent 200 in 434ms [Thu Nov 5 10:06:23.178000 2026] [Phoenix.Logger:info] [pid 2423966] [client 122.166.253.95:57270] GET /tabby/demo [Thu Nov 5 10:06:23.179000 2026] [Phoenix.Logger:info] [pid 2423966] [client 122.166.253.95:57270] Sent 200 in 1ms [Thu Nov 5 10:06:23.656000 2026] [Phoenix.Logger:info] [pid 2423966] [client 122.166.253.95:57270] POST /tabby/demo/summary [Thu Nov 5 10:06:23.656000 2026] [Phoenix.Logger:info] [pid 2423966] [client 122.166.253.95:57270] Sent 200 in 890µs [Thu Nov 5 10:06:24.518000 2026] [Phoenix.Logger:info] [pid 2423966] [client 122.166.253.95:57270] POST /tabby/demo/eligibility [Thu Nov 5 10:06:24.968000 2026] [DaProductApp.Tabby.Client:info] [pid 2423966] [client 122.166.253.95:57270] [Tabby] checkout post /api/v2/checkout -> 200 (449 ms, attempt 1) [Thu Nov 5 10:06:24.968000 2026] [DaProductApp.Tabby.Client:info] [pid 2423966] [client 122.166.253.95:57270] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Thu Nov 5 10:06:24.968000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2423966] [client 122.166.253.95:57270] [Tabby] eligibility: hide reason=order_amount_too_high (amount=850.00 AED) [Thu Nov 5 10:06:24.968000 2026] [Phoenix.Logger:info] [pid 2423966] [client 122.166.253.95:57270] Sent 200 in 450ms [Thu Nov 5 10:06:31.773000 2026] [Phoenix.Logger:info] [pid 2423966] [client 122.166.253.95:57270] POST /tabby/demo/summary [Thu Nov 5 10:06:31.773000 2026] [Phoenix.Logger:info] [pid 2423966] [client 122.166.253.95:57270] Sent 200 in 571µs [Thu Nov 5 10:08:13.986000 2026] [Phoenix.Logger:info] [pid 2423966] [client 122.166.253.95:59143] GET /tabby/demo [Thu Nov 5 10:08:13.988000 2026] [Phoenix.Logger:info] [pid 2423966] [client 122.166.253.95:59143] Sent 200 in 2ms [Thu Nov 5 10:08:14.510000 2026] [Phoenix.Logger:info] [pid 2423966] [client 122.166.253.95:59143] POST /tabby/demo/summary [Thu Nov 5 10:08:14.510000 2026] [Phoenix.Logger:info] [pid 2423966] [client 122.166.253.95:59143] Sent 200 in 515µs [Thu Nov 5 10:08:15.400000 2026] [Phoenix.Logger:info] [pid 2423966] [client 122.166.253.95:56829] POST /tabby/demo/eligibility [Thu Nov 5 10:08:15.843000 2026] [DaProductApp.Tabby.Client:info] [pid 2423966] [client 122.166.253.95:56829] [Tabby] checkout post /api/v2/checkout -> 200 (443 ms, attempt 1) [Thu Nov 5 10:08:15.843000 2026] [DaProductApp.Tabby.Client:info] [pid 2423966] [client 122.166.253.95:56829] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Thu Nov 5 10:08:15.843000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2423966] [client 122.166.253.95:56829] [Tabby] eligibility: hide reason=order_amount_too_high (amount=850.00 AED) [Thu Nov 5 10:08:15.843000 2026] [Phoenix.Logger:info] [pid 2423966] [client 122.166.253.95:56829] Sent 200 in 443ms [Thu Nov 5 10:08:19.967000 2026] [Phoenix.Logger:info] [pid 2423966] [client 122.166.253.95:56829] POST /tabby/demo/summary [Thu Nov 5 10:08:19.968000 2026] [Phoenix.Logger:info] [pid 2423966] [client 122.166.253.95:56829] Sent 200 in 574µs [Thu Nov 5 10:08:20.827000 2026] [Phoenix.Logger:info] [pid 2423966] [client 122.166.253.95:56829] POST /tabby/demo/eligibility [Thu Nov 5 10:08:21.318000 2026] [DaProductApp.Tabby.Client:info] [pid 2423966] [client 122.166.253.95:56829] [Tabby] checkout post /api/v2/checkout -> 200 (491 ms, attempt 1) [Thu Nov 5 10:08:21.319000 2026] [DaProductApp.Tabby.Client:info] [pid 2423966] [client 122.166.253.95:56829] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Thu Nov 5 10:08:21.319000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2423966] [client 122.166.253.95:56829] [Tabby] eligibility: hide reason=order_amount_too_high (amount=1050.00 AED) [Thu Nov 5 10:08:21.319000 2026] [Phoenix.Logger:info] [pid 2423966] [client 122.166.253.95:56829] Sent 200 in 492ms [Thu Nov 5 10:10:15.076000 2026] [Ecto.Adapters.SQL:debug] [pid 2430619] [client -] QUERY OK source="global_table" db=0.7ms queue=4.2ms idle=60.2ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 10:10:15.190000 2026] [Bandit:info] [pid 2430619] [client -] Running DaProductAppWeb.Endpoint with Bandit 1.6.7 at 0.0.0.0:4030 (http) [Thu Nov 5 10:10:15.201000 2026] [Phoenix.Endpoint.Supervisor:info] [pid 2430619] [client -] Access DaProductAppWeb.Endpoint at http://localhost:4030 [Thu Nov 5 10:10:15.235000 2026] [DaProductApp.MQTT.Handler:info] [pid 2430619] [client -] Device phoenix_client_node_devteam connected [Thu Nov 5 10:10:17.617000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2430619] [client -] Live reload: priv/static/assets/app.js [Thu Nov 5 10:10:17.617000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2430619] [client -] Live reload: priv/static/assets/app.js [Thu Nov 5 10:10:17.617000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2430619] [client -] Live reload: priv/static/assets/app.js [Thu Nov 5 10:10:17.647000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2430619] [client -] Live reload: priv/static/assets/app.js [Thu Nov 5 10:10:17.650000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2430619] [client -] Live reload: priv/static/assets/app.js [Thu Nov 5 10:10:17.651000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2430619] [client -] Live reload: priv/static/assets/app.js [Thu Nov 5 10:10:17.652000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2430619] [client -] Live reload: priv/static/assets/app.js [Thu Nov 5 10:10:17.654000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2430619] [client -] Live reload: priv/static/assets/app.js [Thu Nov 5 10:10:17.655000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2430619] [client -] Live reload: priv/static/assets/app.js [Thu Nov 5 10:10:19.694000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:49280] GET /tabby/demo [Thu Nov 5 10:10:19.760000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:55547] GET /tabby/demo [Thu Nov 5 10:10:19.771000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:49280] Sent 200 in 77ms [Thu Nov 5 10:10:19.772000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:55547] Sent 200 in 11ms [Thu Nov 5 10:10:19.803000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:59854] GET /tabby-sim/admin [Thu Nov 5 10:10:19.806000 2026] [Phoenix.Logger:debug] [pid 2430619] [client 122.166.253.95:59854] Processing with DaProductAppWeb.TabbySim.AdminController.index/2 Parameters: %{} Pipelines: [:tabby_sim_admin] [Thu Nov 5 10:10:19.900000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:59854] Sent 404 in 97ms [Thu Nov 5 10:10:19.906000 2026] [Plug.Debugger:debug] [pid 2430619] [client 122.166.253.95:59854] ** (Phoenix.Router.NoRouteError) no route found for GET /tabby-sim/admin (DaProductAppWeb.Router) (da_product_app 0.1.0) lib/da_product_app_web/plugs/tabby_sim_gate.ex:16: DaProductAppWeb.Plugs.TabbySimGate.call/2 (da_product_app 0.1.0) DaProductAppWeb.Router.tabby_sim_admin/2 (da_product_app 0.1.0) lib/da_product_app_web/router.ex:1: DaProductAppWeb.Router.__pipe_through10__/1 (phoenix 1.7.19) lib/phoenix/router.ex:475: Phoenix.Router.__call__/5 (da_product_app 0.1.0) lib/da_product_app_web/endpoint.ex:1: DaProductAppWeb.Endpoint.plug_builder_call/2 (da_product_app 0.1.0) /home/prem/canarabank/saaskit/da_product_app_changed/deps/plug/lib/plug/debugger.ex:136: DaProductAppWeb.Endpoint."call (overridable 3)"/2 (da_product_app 0.1.0) lib/da_product_app_web/endpoint.ex:1: DaProductAppWeb.Endpoint.call/2 (phoenix 1.7.19) lib/phoenix/endpoint/sync_code_reload_plug.ex:22: Phoenix.Endpoint.SyncCodeReloadPlug.do_call/4 (bandit 1.6.7) lib/bandit/pipeline.ex:129: Bandit.Pipeline.call_plug!/2 (bandit 1.6.7) lib/bandit/pipeline.ex:40: Bandit.Pipeline.run/4 (bandit 1.6.7) lib/bandit/http1/handler.ex:12: Bandit.HTTP1.Handler.handle_data/3 (bandit 1.6.7) lib/bandit/delegating_handler.ex:18: Bandit.DelegatingHandler.handle_data/3 (bandit 1.6.7) lib/bandit/delegating_handler.ex:8: Bandit.DelegatingHandler.handle_continue/2 (stdlib 5.2.3.2) gen_server.erl:1085: :gen_server.try_handle_continue/3 (stdlib 5.2.3.2) gen_server.erl:995: :gen_server.loop/7 (stdlib 5.2.3.2) proc_lib.erl:241: :proc_lib.init_p_do_apply/3 [Thu Nov 5 10:10:20.381000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:55547] POST /tabby/demo/summary [Thu Nov 5 10:10:20.393000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:55547] Sent 200 in 12ms [Thu Nov 5 10:10:20.458000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:49280] POST /tabby/demo/summary [Thu Nov 5 10:10:20.460000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:49280] Sent 200 in 1ms [Thu Nov 5 10:10:21.504000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:59854] POST /tabby/demo/eligibility [Thu Nov 5 10:10:21.507000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:49280] POST /tabby/demo/eligibility [Thu Nov 5 10:10:22.316000 2026] [DaProductApp.Tabby.Client:info] [pid 2430619] [client 122.166.253.95:49280] [Tabby] checkout post /api/v2/checkout -> 200 (800 ms, attempt 1) [Thu Nov 5 10:10:22.316000 2026] [DaProductApp.Tabby.Client:info] [pid 2430619] [client 122.166.253.95:59854] [Tabby] checkout post /api/v2/checkout -> 200 (800 ms, attempt 1) [Thu Nov 5 10:10:22.318000 2026] [DaProductApp.Tabby.Client:info] [pid 2430619] [client 122.166.253.95:59854] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Thu Nov 5 10:10:22.318000 2026] [DaProductApp.Tabby.Client:info] [pid 2430619] [client 122.166.253.95:49280] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Thu Nov 5 10:10:22.318000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2430619] [client 122.166.253.95:49280] [Tabby] eligibility: hide reason=order_amount_too_high (amount=1050.00 AED) [Thu Nov 5 10:10:22.318000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2430619] [client 122.166.253.95:59854] [Tabby] eligibility: hide reason=order_amount_too_high (amount=1050.00 AED) [Thu Nov 5 10:10:22.318000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:49280] Sent 200 in 811ms [Thu Nov 5 10:10:22.318000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:59854] Sent 200 in 814ms [Thu Nov 5 10:10:32.362000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:49280] GET /tabby/demo [Thu Nov 5 10:10:32.367000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:49280] Sent 200 in 5ms [Thu Nov 5 10:10:32.859000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:49280] POST /tabby/demo/summary [Thu Nov 5 10:10:32.859000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:49280] Sent 200 in 569µs [Thu Nov 5 10:10:33.700000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:59854] POST /tabby/demo/eligibility [Thu Nov 5 10:10:34.112000 2026] [DaProductApp.Tabby.Client:info] [pid 2430619] [client 122.166.253.95:59854] [Tabby] checkout post /api/v2/checkout -> 200 (412 ms, attempt 1) [Thu Nov 5 10:10:34.112000 2026] [DaProductApp.Tabby.Client:info] [pid 2430619] [client 122.166.253.95:59854] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Thu Nov 5 10:10:34.112000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2430619] [client 122.166.253.95:59854] [Tabby] eligibility: hide reason=order_amount_too_high (amount=1050.00 AED) [Thu Nov 5 10:10:34.113000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:59854] Sent 200 in 413ms [Thu Nov 5 10:11:12.790000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:59854] POST /tabby/demo/summary [Thu Nov 5 10:11:12.791000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:59854] Sent 200 in 969µs [Thu Nov 5 10:11:13.723000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:59854] POST /tabby/demo/eligibility [Thu Nov 5 10:11:14.155000 2026] [DaProductApp.Tabby.Client:info] [pid 2430619] [client 122.166.253.95:59854] [Tabby] checkout post /api/v2/checkout -> 200 (430 ms, attempt 1) [Thu Nov 5 10:11:14.156000 2026] [DaProductApp.Tabby.Client:info] [pid 2430619] [client 122.166.253.95:59854] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Thu Nov 5 10:11:14.156000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2430619] [client 122.166.253.95:59854] [Tabby] eligibility: hide reason=order_amount_too_high (amount=850.00 AED) [Thu Nov 5 10:11:14.156000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:59854] Sent 200 in 432ms [Thu Nov 5 10:11:16.219000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:59854] POST /tabby/demo/summary [Thu Nov 5 10:11:16.219000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:59854] Sent 200 in 571µs [Thu Nov 5 10:11:17.166000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:59854] POST /tabby/demo/eligibility [Thu Nov 5 10:11:17.629000 2026] [DaProductApp.Tabby.Client:info] [pid 2430619] [client 122.166.253.95:59854] [Tabby] checkout post /api/v2/checkout -> 200 (463 ms, attempt 1) [Thu Nov 5 10:11:17.630000 2026] [DaProductApp.Tabby.Client:info] [pid 2430619] [client 122.166.253.95:59854] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Thu Nov 5 10:11:17.630000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2430619] [client 122.166.253.95:59854] [Tabby] eligibility: hide reason=order_amount_too_high (amount=945.00 AED) [Thu Nov 5 10:11:17.630000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:59854] Sent 200 in 464ms [Thu Nov 5 10:11:21.106000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:59854] POST /tabby/demo/summary [Thu Nov 5 10:11:21.106000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:59854] Sent 200 in 721µs [Thu Nov 5 10:11:22.031000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:59854] POST /tabby/demo/eligibility [Thu Nov 5 10:11:22.219000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:49280] POST /tabby/demo/summary [Thu Nov 5 10:11:22.219000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:49280] Sent 200 in 510µs [Thu Nov 5 10:11:22.468000 2026] [DaProductApp.Tabby.Client:info] [pid 2430619] [client 122.166.253.95:59854] [Tabby] checkout post /api/v2/checkout -> 200 (436 ms, attempt 1) [Thu Nov 5 10:11:22.468000 2026] [DaProductApp.Tabby.Client:info] [pid 2430619] [client 122.166.253.95:59854] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Thu Nov 5 10:11:22.468000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2430619] [client 122.166.253.95:59854] [Tabby] eligibility: hide reason=order_amount_too_high (amount=745.00 AED) [Thu Nov 5 10:11:22.468000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:59854] Sent 200 in 437ms [Thu Nov 5 10:11:23.075000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:59854] POST /tabby/demo/eligibility [Thu Nov 5 10:11:23.517000 2026] [DaProductApp.Tabby.Client:info] [pid 2430619] [client 122.166.253.95:59854] [Tabby] checkout post /api/v2/checkout -> 200 (442 ms, attempt 1) [Thu Nov 5 10:11:23.517000 2026] [DaProductApp.Tabby.Client:info] [pid 2430619] [client 122.166.253.95:59854] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Thu Nov 5 10:11:23.517000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2430619] [client 122.166.253.95:59854] [Tabby] eligibility: hide reason=order_amount_too_high (amount=95.00 AED) [Thu Nov 5 10:11:23.517000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:59854] Sent 200 in 442ms [Thu Nov 5 10:11:24.917000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:59854] GET /tabby/demo [Thu Nov 5 10:11:24.920000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:59854] Sent 200 in 3ms [Thu Nov 5 10:11:25.594000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:59854] POST /tabby/demo/summary [Thu Nov 5 10:11:25.595000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:59854] Sent 200 in 871µs [Thu Nov 5 10:11:26.463000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:59854] POST /tabby/demo/eligibility [Thu Nov 5 10:11:26.949000 2026] [DaProductApp.Tabby.Client:info] [pid 2430619] [client 122.166.253.95:59854] [Tabby] checkout post /api/v2/checkout -> 200 (486 ms, attempt 1) [Thu Nov 5 10:11:26.951000 2026] [DaProductApp.Tabby.Client:info] [pid 2430619] [client 122.166.253.95:59854] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Thu Nov 5 10:11:26.951000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2430619] [client 122.166.253.95:59854] [Tabby] eligibility: hide reason=order_amount_too_high (amount=95.00 AED) [Thu Nov 5 10:11:26.951000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:59854] Sent 200 in 488ms [Thu Nov 5 10:11:42.382000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:59854] GET /tabby/demo [Thu Nov 5 10:11:42.385000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:59854] Sent 200 in 2ms [Thu Nov 5 10:11:42.937000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:59854] POST /tabby/demo/summary [Thu Nov 5 10:11:42.937000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:59854] Sent 200 in 542µs [Thu Nov 5 10:11:43.763000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:59854] POST /tabby/demo/eligibility [Thu Nov 5 10:11:44.211000 2026] [DaProductApp.Tabby.Client:info] [pid 2430619] [client 122.166.253.95:59854] [Tabby] checkout post /api/v2/checkout -> 200 (448 ms, attempt 1) [Thu Nov 5 10:11:44.211000 2026] [DaProductApp.Tabby.Client:info] [pid 2430619] [client 122.166.253.95:59854] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Thu Nov 5 10:11:44.212000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2430619] [client 122.166.253.95:59854] [Tabby] eligibility: hide reason=order_amount_too_high (amount=95.00 AED) [Thu Nov 5 10:11:44.212000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:59854] Sent 200 in 449ms [Thu Nov 5 10:20:15.095000 2026] [Ecto.Adapters.SQL:debug] [pid 2430619] [client -] QUERY OK source="global_table" db=0.7ms idle=1120.7ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 10:30:15.095000 2026] [Ecto.Adapters.SQL:debug] [pid 2430619] [client -] QUERY OK source="global_table" db=0.8ms idle=1111.6ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 10:39:23.505000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2430619] [client -] Live reload: lib/da_product_app_web/controllers/tabby_sim/hpp_controller.ex [Thu Nov 5 10:39:23.509000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2430619] [client -] Live reload: lib/da_product_app_web/controllers/tabby_sim/hpp_controller.ex [Thu Nov 5 10:39:23.510000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2430619] [client -] Live reload: lib/da_product_app_web/controllers/tabby_sim/hpp_controller.ex [Thu Nov 5 10:39:25.719000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:52947] GET /tabby-sim/admin [Thu Nov 5 10:39:25.719000 2026] [Phoenix.Logger:debug] [pid 2430619] [client 122.166.253.95:52947] Processing with DaProductAppWeb.TabbySim.AdminController.index/2 Parameters: %{} Pipelines: [:tabby_sim_admin] [Thu Nov 5 10:39:25.791000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:52663] GET /tabby/demo [Thu Nov 5 10:39:25.826000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:52663] Sent 200 in 35ms [Thu Nov 5 10:39:25.853000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:54088] GET /tabby/demo [Thu Nov 5 10:39:26.010000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:54088] Sent 200 in 156ms [Thu Nov 5 10:39:26.195000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:52947] Sent 404 in 475ms [Thu Nov 5 10:39:26.207000 2026] [Plug.Debugger:debug] [pid 2430619] [client 122.166.253.95:52947] ** (Phoenix.Router.NoRouteError) no route found for GET /tabby-sim/admin (DaProductAppWeb.Router) (da_product_app 0.1.0) lib/da_product_app_web/plugs/tabby_sim_gate.ex:16: DaProductAppWeb.Plugs.TabbySimGate.call/2 (da_product_app 0.1.0) DaProductAppWeb.Router.tabby_sim_admin/2 (da_product_app 0.1.0) lib/da_product_app_web/router.ex:1: DaProductAppWeb.Router.__pipe_through10__/1 (phoenix 1.7.19) lib/phoenix/router.ex:475: Phoenix.Router.__call__/5 (da_product_app 0.1.0) lib/da_product_app_web/endpoint.ex:1: DaProductAppWeb.Endpoint.plug_builder_call/2 (da_product_app 0.1.0) /home/prem/canarabank/saaskit/da_product_app_changed/deps/plug/lib/plug/debugger.ex:136: DaProductAppWeb.Endpoint."call (overridable 3)"/2 (da_product_app 0.1.0) lib/da_product_app_web/endpoint.ex:1: DaProductAppWeb.Endpoint.call/2 (phoenix 1.7.19) lib/phoenix/endpoint/sync_code_reload_plug.ex:22: Phoenix.Endpoint.SyncCodeReloadPlug.do_call/4 (bandit 1.6.7) lib/bandit/pipeline.ex:129: Bandit.Pipeline.call_plug!/2 (bandit 1.6.7) lib/bandit/pipeline.ex:40: Bandit.Pipeline.run/4 (bandit 1.6.7) lib/bandit/http1/handler.ex:12: Bandit.HTTP1.Handler.handle_data/3 (bandit 1.6.7) lib/bandit/delegating_handler.ex:18: Bandit.DelegatingHandler.handle_data/3 (bandit 1.6.7) lib/bandit/delegating_handler.ex:8: Bandit.DelegatingHandler.handle_continue/2 (stdlib 5.2.3.2) gen_server.erl:1085: :gen_server.try_handle_continue/3 (stdlib 5.2.3.2) gen_server.erl:995: :gen_server.loop/7 (stdlib 5.2.3.2) proc_lib.erl:241: :proc_lib.init_p_do_apply/3 [Thu Nov 5 10:39:26.848000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:52663] POST /tabby/demo/summary [Thu Nov 5 10:39:26.848000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:52663] Sent 200 in 555µs [Thu Nov 5 10:39:27.002000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:54088] POST /tabby/demo/summary [Thu Nov 5 10:39:27.002000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:54088] Sent 200 in 530µs [Thu Nov 5 10:39:28.661000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:54088] POST /tabby/demo/eligibility [Thu Nov 5 10:39:28.740000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:52663] POST /tabby/demo/eligibility [Thu Nov 5 10:39:29.164000 2026] [DaProductApp.Tabby.Client:info] [pid 2430619] [client 122.166.253.95:54088] [Tabby] checkout post /api/v2/checkout -> 200 (501 ms, attempt 1) [Thu Nov 5 10:39:29.165000 2026] [DaProductApp.Tabby.Client:info] [pid 2430619] [client 122.166.253.95:54088] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Thu Nov 5 10:39:29.166000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2430619] [client 122.166.253.95:54088] [Tabby] eligibility: hide reason=order_amount_too_high (amount=95.00 AED) [Thu Nov 5 10:39:29.168000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:54088] Sent 200 in 506ms [Thu Nov 5 10:39:29.209000 2026] [DaProductApp.Tabby.Client:info] [pid 2430619] [client 122.166.253.95:52663] [Tabby] checkout post /api/v2/checkout -> 200 (468 ms, attempt 1) [Thu Nov 5 10:39:29.210000 2026] [DaProductApp.Tabby.Client:info] [pid 2430619] [client 122.166.253.95:52663] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Thu Nov 5 10:39:29.210000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2430619] [client 122.166.253.95:52663] [Tabby] eligibility: hide reason=order_amount_too_high (amount=95.00 AED) [Thu Nov 5 10:39:29.213000 2026] [Phoenix.Logger:info] [pid 2430619] [client 122.166.253.95:52663] Sent 200 in 472ms [Thu Nov 5 10:52:37.525000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="global_table" db=1.0ms queue=3.2ms idle=63.0ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 10:52:37.631000 2026] [DaProductApp.MQTT.Handler:info] [pid 2482969] [client -] Device phoenix_client_node_devteam connected [Thu Nov 5 10:52:37.633000 2026] [Bandit:info] [pid 2482969] [client -] Running DaProductAppWeb.Endpoint with Bandit 1.6.7 at 0.0.0.0:4030 (http) [Thu Nov 5 10:52:37.642000 2026] [Phoenix.Endpoint.Supervisor:info] [pid 2482969] [client -] Access DaProductAppWeb.Endpoint at http://localhost:4030 [Thu Nov 5 10:52:38.715000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=7.8ms queue=1.2ms idle=1248.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 10:52:38Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 10:52:38.797000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=77.9ms queue=0.7ms idle=1261.5ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 10:52:38], true, "1da26088-d8bd-428f-b10a-87f17a51aad8", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 10:52:38.798000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2482969] [client -] [TabbySim] payment=1da26088-d8bd-428f-b10a-87f17a51aad8 CREATED -> EXPIRED [Thu Nov 5 10:52:38.799000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.4ms idle=1342.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["1da26088-d8bd-428f-b10a-87f17a51aad8"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 10:52:38.806000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2482969] [client -] [TabbySim] payment=1da26088-d8bd-428f-b10a-87f17a51aad8 expired (expires_at 2026-11-05 09:51:23Z, session_status=rejected) [Thu Nov 5 10:52:38.876000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=68.6ms queue=0.1ms idle=1351.0ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 10:52:38], true, "9b677d99-2d79-4407-9928-5918b4bafafd", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 10:52:38.877000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2482969] [client -] [TabbySim] payment=9b677d99-2d79-4407-9928-5918b4bafafd CREATED -> EXPIRED [Thu Nov 5 10:52:38.882000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=3.4ms queue=0.1ms idle=1422.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["9b677d99-2d79-4407-9928-5918b4bafafd"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 10:52:38.911000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2482969] [client -] [TabbySim] webhook not sent: event=expire payment=9b677d99-2d79-4407-9928-5918b4bafafd [Thu Nov 5 10:52:38.911000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2482969] [client -] [TabbySim] payment=9b677d99-2d79-4407-9928-5918b4bafafd expired (expires_at 2026-11-05 09:51:28Z, session_status=created) [Thu Nov 5 10:52:38.918000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=4.9ms queue=1.2ms idle=1455.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 10:52:38Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 10:52:38.933000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2482969] [client -] [TabbySim] expiry job: 2 payment(s) were due [Thu Nov 5 10:52:38.940000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms queue=6.4ms idle=1477.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 10:52:38Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 10:52:38.981000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms queue=3.3ms idle=1446.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 10:52:38.990000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2482969] [client -] [TabbySim] expiry job: no CREATED payment left, not rescheduling [Thu Nov 5 10:52:50.524000 2026] [Phoenix.Logger:info] [pid 2482969] [client 127.0.0.1:37984] GET /tabby-sim/api/v1/webhooks [Thu Nov 5 10:52:50.556000 2026] [Phoenix.Logger:debug] [pid 2482969] [client 127.0.0.1:37984] Processing with DaProductAppWeb.TabbySim.WebhooksController.index/2 Parameters: %{} Pipelines: [:tabby_sim_webhooks] [Thu Nov 5 10:52:50.569000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 127.0.0.1:37984] QUERY OK source="tabby_sim_faults" db=0.5ms queue=0.4ms idle=983.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["webhook_list"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 10:52:50.573000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 127.0.0.1:37984] QUERY OK source="tabby_sim_webhooks" db=0.4ms queue=0.5ms idle=255.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductAppWeb.TabbySim.WebhooksController.list/1, at: lib/da_product_app_web/controllers/tabby_sim/webhooks_controller.ex:35 [Thu Nov 5 10:52:50.573000 2026] [Phoenix.Logger:info] [pid 2482969] [client 127.0.0.1:37984] Sent 200 in 48ms [Thu Nov 5 10:52:50.580000 2026] [DaProductApp.Tabby.Client:info] [pid 2482969] [client -] [Tabby] list_webhooks get /api/v1/webhooks -> 200 (362 ms, attempt 1) [Thu Nov 5 10:52:50.838000 2026] [Phoenix.Logger:info] [pid 2482969] [client 127.0.0.1:37984] POST /tabby-sim/api/v1/webhooks [Thu Nov 5 10:52:50.838000 2026] [Phoenix.Logger:debug] [pid 2482969] [client 127.0.0.1:37984] Processing with DaProductAppWeb.TabbySim.WebhooksController.create/2 Parameters: %{"header" => %{"title" => "X-Auth-Key", "value" => "whsec-demo-9f3a7c21"}, "url" => "http://demo.ctrmv.com:4030/tabby/webhooks"} Pipelines: [:tabby_sim_webhooks] [Thu Nov 5 10:52:50.839000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 127.0.0.1:37984] QUERY OK source="tabby_sim_faults" db=0.7ms idle=435.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["webhook_register"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 10:52:50.840000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 127.0.0.1:37984] QUERY OK db=0.1ms queue=0.1ms idle=436.6ms begin [] ↳ DaProductAppWeb.TabbySim.WebhooksController.register/2, at: lib/da_product_app_web/controllers/tabby_sim/webhooks_controller.ex:14 [Thu Nov 5 10:52:50.841000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 127.0.0.1:37984] QUERY OK source="tabby_sim_webhooks" db=0.4ms SELECT t0.`id` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) FOR UPDATE ["demostore"] ↳ anonymous fn/2 in DaProductApp.TabbySim.Webhooks.register/2, at: lib/da_product_app/tabby_sim/webhooks.ex:33 [Thu Nov 5 10:52:50.855000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 127.0.0.1:37984] QUERY OK db=0.3ms INSERT INTO `tabby_sim_webhooks` (`url`,`merchant_code`,`header_value`,`header_title`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?) ["http://demo.ctrmv.com:4030/tabby/webhooks", "demostore", "whsec-demo-9f3a7c21", "X-Auth-Key", ~N[2026-11-05 10:52:50], ~N[2026-11-05 10:52:50]] ↳ anonymous fn/2 in DaProductApp.TabbySim.Webhooks.register/2, at: lib/da_product_app/tabby_sim/webhooks.ex:38 [Thu Nov 5 10:52:50.897000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 127.0.0.1:37984] QUERY OK db=41.6ms commit [] ↳ DaProductAppWeb.TabbySim.WebhooksController.register/2, at: lib/da_product_app_web/controllers/tabby_sim/webhooks_controller.ex:14 [Thu Nov 5 10:52:50.897000 2026] [DaProductAppWeb.TabbySim.WebhooksController:info] [pid 2482969] [client 127.0.0.1:37984] [TabbySim] webhook registered id=53 merchant_code=demostore url=http://demo.ctrmv.com:4030/tabby/webhooks [Thu Nov 5 10:52:50.900000 2026] [Phoenix.Logger:info] [pid 2482969] [client 127.0.0.1:37984] Sent 200 in 62ms [Thu Nov 5 10:52:50.901000 2026] [DaProductApp.Tabby.Client:info] [pid 2482969] [client -] [Tabby] register_webhook post /api/v1/webhooks -> 200 (321 ms, attempt 1) [Thu Nov 5 10:52:50.902000 2026] [DaProductApp.Tabby.WebhookRegistration:info] [pid 2482969] [client -] [Tabby] webhook registration: registered http://demo.ctrmv.com:4030/tabby/webhooks (header X-Auth-Key) [Thu Nov 5 10:53:08.509000 2026] [Phoenix.Logger:info] [pid 2482969] [client 122.166.253.95:64022] GET /tabby/demo [Thu Nov 5 10:53:08.524000 2026] [Phoenix.Logger:info] [pid 2482969] [client 122.166.253.95:64022] Sent 200 in 15ms [Thu Nov 5 10:53:09.053000 2026] [Phoenix.Logger:info] [pid 2482969] [client 122.166.253.95:64022] POST /tabby/demo/summary [Thu Nov 5 10:53:09.065000 2026] [Phoenix.Logger:info] [pid 2482969] [client 122.166.253.95:64022] Sent 200 in 11ms [Thu Nov 5 10:53:09.937000 2026] [Phoenix.Logger:info] [pid 2482969] [client 122.166.253.95:55337] POST /tabby/demo/eligibility [Thu Nov 5 10:53:10.197000 2026] [Phoenix.Logger:info] [pid 2482969] [client 127.0.0.1:49608] POST /tabby-sim/api/v2/checkout [Thu Nov 5 10:53:10.197000 2026] [Phoenix.Logger:debug] [pid 2482969] [client 127.0.0.1:49608] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "95.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 10:53:10.200000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 127.0.0.1:49608] QUERY OK source="tabby_sim_faults" db=0.4ms idle=1796.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 10:53:10.243000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 127.0.0.1:49608] QUERY OK db=31.7ms queue=0.7ms idle=1549.9ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`captures`,`is_test`,`merchant_urls`,`refunds`,`session_expires_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["5571ac2e-9234-4205-9bf2-97ab4daa11f7", "CREATED", "AED", "6d79c1f7-01f4-4fa1-8c95-d482f3b71809", "demostore", ~U[2026-11-05 11:05:10Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "95.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("95.00"), %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, [], true, %{"cancel" => nil, "failure" => nil, "success" => nil}, [], ~U[2026-11-05 11:03:10Z], ~N[2026-11-05 10:53:10], ~N[2026-11-05 10:53:10]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 10:53:10.245000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2482969] [client 127.0.0.1:49608] [TabbySim] checkout payment=5571ac2e-9234-4205-9bf2-97ab4daa11f7 session=6d79c1f7-01f4-4fa1-8c95-d482f3b71809 decision=created reason=nil amount=95.00 AED [Thu Nov 5 10:53:10.246000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 127.0.0.1:49608] QUERY OK source="tabby_sim_payments" db=1.1ms queue=0.1ms idle=1421.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 10:53:10.292000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2482969] [client 127.0.0.1:49608] [TabbySim] expiry job 402958 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 10:53:10.293000 2026] [Phoenix.Logger:info] [pid 2482969] [client 127.0.0.1:49608] Sent 200 in 96ms [Thu Nov 5 10:53:10.293000 2026] [DaProductApp.Tabby.Client:info] [pid 2482969] [client 122.166.253.95:55337] [Tabby] checkout post /api/v2/checkout -> 200 (351 ms, attempt 1) [Thu Nov 5 10:53:10.295000 2026] [DaProductApp.Tabby.Client:info] [pid 2482969] [client 122.166.253.95:55337] [Tabby] session created payment=5571ac2e-9234-4205-9bf2-97ab4daa11f7 [Thu Nov 5 10:53:10.296000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2482969] [client 122.166.253.95:55337] [Tabby] eligibility: show (amount=95.00 AED) [Thu Nov 5 10:53:10.296000 2026] [Phoenix.Logger:info] [pid 2482969] [client 122.166.253.95:55337] Sent 200 in 358ms [Thu Nov 5 10:53:16.908000 2026] [Phoenix.Logger:info] [pid 2482969] [client 122.166.253.95:55337] POST /tabby/demo/place [Thu Nov 5 10:53:16.953000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 122.166.253.95:55337] QUERY OK db=29.7ms queue=0.6ms idle=1519.6ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`amount`,`needs_attention`,`order_reference`,`success_url`,`cancel_url`,`failure_url`,`captured_amount`,`refunded_amount`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["7b446038-d580-4b0f-8f0f-fb07ad829902", "new", "AED", "demostore", Decimal.new("95.00"), false, "DEMO-9A9C8373", "http://demo.ctrmv.com:4030/tabby/demo/result/success?lang=en&order=DEMO-9A9C8373", "http://demo.ctrmv.com:4030/tabby/demo/result/cancel?lang=en&order=DEMO-9A9C8373", "http://demo.ctrmv.com:4030/tabby/demo/result/failure?lang=en&order=DEMO-9A9C8373", Decimal.new("0"), Decimal.new("0"), ~N[2026-11-05 10:53:16], ~N[2026-11-05 10:53:16]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Thu Nov 5 10:53:17.242000 2026] [Phoenix.Logger:info] [pid 2482969] [client 127.0.0.1:37984] POST /tabby-sim/api/v2/checkout [Thu Nov 5 10:53:17.245000 2026] [Phoenix.Logger:debug] [pid 2482969] [client 127.0.0.1:37984] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/7b446038-d580-4b0f-8f0f-fb07ad829902/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/7b446038-d580-4b0f-8f0f-fb07ad829902/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/7b446038-d580-4b0f-8f0f-fb07ad829902/success"}, "payment" => %{"amount" => "95.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo sunglasses", "unit_price" => "95.00"}], "reference_id" => "DEMO-9A9C8373"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 10:53:17.247000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 127.0.0.1:37984] QUERY OK source="tabby_sim_faults" db=1.1ms idle=1842.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 10:53:17.303000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 127.0.0.1:37984] QUERY OK db=54.1ms queue=0.5ms idle=1843.7ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`session_status`,`is_expired`,`amount`,`buyer`,`buyer_history`,`captures`,`is_test`,`lang`,`merchant_urls`,`refunds`,`session_expires_at`,`shipping_address`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["4f1f0547-721a-41ad-b541-63eeba23e297", "CREATED", "AED", "78e0eaf9-c81a-4a03-b803-c9cf6d77dd04", "demostore", ~U[2026-11-05 11:05:17Z], %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/7b446038-d580-4b0f-8f0f-fb07ad829902/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/7b446038-d580-4b0f-8f0f-fb07ad829902/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/7b446038-d580-4b0f-8f0f-fb07ad829902/success"}, "payment" => %{"amount" => "95.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo sunglasses", "unit_price" => "95.00"}], "reference_id" => "DEMO-9A9C8373"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "0", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo sunglasses", "unit_price" => "95"}], "reference_id" => "DEMO-9A9C8373", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "created", false, Decimal.new("95.00"), %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, %{"registered_since" => "2023-02-01T10:00:00Z"}, [], true, "en", %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/7b446038-d580-4b0f-8f0f-fb07ad829902/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/7b446038-d580-4b0f-8f0f-fb07ad829902/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/7b446038-d580-4b0f-8f0f-fb07ad829902/success"}, [], ~U[2026-11-05 11:03:17Z], %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}, ~N[2026-11-05 10:53:17], ~N[2026-11-05 10:53:17]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 10:53:17.303000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2482969] [client 127.0.0.1:37984] [TabbySim] checkout payment=4f1f0547-721a-41ad-b541-63eeba23e297 session=78e0eaf9-c81a-4a03-b803-c9cf6d77dd04 decision=created reason=nil amount=95.00 AED [Thu Nov 5 10:53:17.305000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 127.0.0.1:37984] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1900.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 10:53:17.306000 2026] [Phoenix.Logger:info] [pid 2482969] [client 127.0.0.1:37984] Sent 200 in 64ms [Thu Nov 5 10:53:17.307000 2026] [DaProductApp.Tabby.Client:info] [pid 2482969] [client 122.166.253.95:55337] [Tabby] checkout post /api/v2/checkout -> 200 (353 ms, attempt 1) [Thu Nov 5 10:53:17.307000 2026] [DaProductApp.Tabby.Client:info] [pid 2482969] [client 122.166.253.95:55337] [Tabby] session created payment=4f1f0547-721a-41ad-b541-63eeba23e297 [Thu Nov 5 10:53:17.308000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 122.166.253.95:55337] QUERY OK source="tabby_payments" db=0.5ms queue=0.3ms idle=621.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["7b446038-d580-4b0f-8f0f-fb07ad829902"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Thu Nov 5 10:53:17.354000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 122.166.253.95:55337] QUERY OK source="tabby_payments" db=45.1ms queue=0.6ms idle=592.0ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-05 11:13:17Z], "4f1f0547-721a-41ad-b541-63eeba23e297", "78e0eaf9-c81a-4a03-b803-c9cf6d77dd04", ~N[2026-11-05 10:53:17], "7b446038-d580-4b0f-8f0f-fb07ad829902"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Thu Nov 5 10:53:17.355000 2026] [DaProductApp.Tabby.Sessions:info] [pid 2482969] [client 122.166.253.95:55337] [Tabby] session created attempt=7b446038-d580-4b0f-8f0f-fb07ad829902 payment=4f1f0547-721a-41ad-b541-63eeba23e297 [Thu Nov 5 10:53:17.396000 2026] [Phoenix.Logger:info] [pid 2482969] [client 122.166.253.95:55337] Sent 200 in 488ms [Thu Nov 5 10:53:17.880000 2026] [Phoenix.Logger:info] [pid 2482969] [client 122.166.253.95:55337] GET /tabby-sim/hpp/78e0eaf9-c81a-4a03-b803-c9cf6d77dd04 [Thu Nov 5 10:53:17.880000 2026] [Phoenix.Logger:debug] [pid 2482969] [client 122.166.253.95:55337] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "78e0eaf9-c81a-4a03-b803-c9cf6d77dd04"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 10:53:17.885000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 122.166.253.95:55337] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.5ms idle=582.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["78e0eaf9-c81a-4a03-b803-c9cf6d77dd04"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 10:53:17.892000 2026] [Phoenix.Logger:info] [pid 2482969] [client 122.166.253.95:55337] Sent 200 in 12ms [Thu Nov 5 10:54:10.952000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=1.4ms idle=1545.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 10:54:10Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 10:54:10.952000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2482969] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 10:54:10.954000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=1.6ms idle=1547.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 10:54:10Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 10:54:10.955000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1549.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 10:54:11.001000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2482969] [client -] [TabbySim] expiry job 402963 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 10:55:12.229000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1822.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 10:55:12Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 10:55:12.229000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2482969] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 10:55:12.231000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=1.6ms idle=1824.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 10:55:12Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 10:55:12.232000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1826.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 10:55:12.312000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2482969] [client -] [TabbySim] expiry job 402967 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 10:55:18.228000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=0.6ms queue=0.5ms idle=1079.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["demostore", ~U[2026-10-18 10:55:18Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 10:55:18.229000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=0.5ms queue=0.4ms idle=820.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["demostore", ~N[2026-11-05 10:53:18], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 10:55:18.231000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=0.6ms queue=0.4ms idle=822.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 10:55:18.233000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=0.3ms queue=0.9ms idle=823.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", ~N[2026-11-05 10:53:18], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 10:55:18.234000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=0.4ms queue=0.7ms idle=825.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["demostore", ~U[2026-11-05 10:50:18Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 10:55:18.236000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=0.9ms idle=826.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["7b446038-d580-4b0f-8f0f-fb07ad829902"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 10:55:18.527000 2026] [Phoenix.Logger:info] [pid 2482969] [client 127.0.0.1:45306] GET /tabby-sim/api/v2/payments/4f1f0547-721a-41ad-b541-63eeba23e297 [Thu Nov 5 10:55:18.527000 2026] [Phoenix.Logger:debug] [pid 2482969] [client 127.0.0.1:45306] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "4f1f0547-721a-41ad-b541-63eeba23e297"} Pipelines: [:tabby_sim_api] [Thu Nov 5 10:55:18.533000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 127.0.0.1:45306] QUERY OK source="tabby_sim_faults" db=0.9ms queue=0.4ms idle=381.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "4f1f0547-721a-41ad-b541-63eeba23e297"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 10:55:18.535000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 127.0.0.1:45306] QUERY OK source="tabby_sim_faults" db=1.0ms idle=314.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 10:55:18.536000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 127.0.0.1:45306] QUERY OK source="tabby_sim_payments" db=0.9ms idle=306.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["4f1f0547-721a-41ad-b541-63eeba23e297"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Thu Nov 5 10:55:18.536000 2026] [Phoenix.Logger:info] [pid 2482969] [client 127.0.0.1:45306] Sent 200 in 9ms [Thu Nov 5 10:55:18.537000 2026] [DaProductApp.Tabby.Client:info] [pid 2482969] [client -] [Tabby] retrieve get /api/v2/payments/4f1f0547-721a-41ad-b541-63eeba23e297 -> 200 (301 ms, attempt 1) [Thu Nov 5 10:55:18.541000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2482969] [client -] [Tabby] verify: attempt=7b446038-d580-4b0f-8f0f-fb07ad829902 payment=4f1f0547-721a-41ad-b541-63eeba23e297 is still CREATED at Tabby; it will be looked at again [Thu Nov 5 10:55:18.544000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_webhook_events" db=0.4ms queue=0.7ms idle=313.7ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-05 10:53:18Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Thu Nov 5 10:55:18.548000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_refunds" db=0.7ms queue=0.4ms idle=316.1ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["demostore", ~N[2026-11-05 10:53:18], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Thu Nov 5 10:55:18.549000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=0.4ms queue=0.5ms idle=315.7ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 10:55:18.551000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=0.5ms queue=0.4ms idle=315.4ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["demostore", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 10:55:18.552000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_webhook_events" db=0.3ms queue=0.5ms idle=315.4ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Thu Nov 5 10:55:18.553000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_refunds" db=0.4ms queue=0.5ms idle=241.1ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Thu Nov 5 10:55:18.553000 2026] [DaProductApp.Tabby.Poller:info] [pid 2482969] [client -] [Tabby] poll: handled 1 (created:pending=1); 1 attempt(s) still watched [Thu Nov 5 10:56:13.604000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1191.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 10:56:13Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 10:56:13.604000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2482969] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 10:56:13.606000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=1.4ms idle=1192.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 10:56:13Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 10:56:13.607000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1194.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 10:56:13.659000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2482969] [client -] [TabbySim] expiry job 402971 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 10:57:14.941000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=1.7ms idle=1527.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 10:57:14Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 10:57:14.942000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2482969] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 10:57:14.943000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=1530.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 10:57:14Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 10:57:14.945000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1531.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 10:57:15.089000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2482969] [client -] [TabbySim] expiry job 402974 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 10:57:19.944000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=1.0ms idle=1530.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["demostore", ~U[2026-10-18 10:57:19Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 10:57:19.945000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=1.3ms idle=1532.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["demostore", ~N[2026-11-05 10:55:19], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 10:57:19.947000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=1.2ms queue=0.3ms idle=1533.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 10:57:19.949000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=1.2ms queue=0.3ms idle=1535.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", ~N[2026-11-05 10:55:19], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 10:57:19.951000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=0.7ms queue=0.1ms idle=1537.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["demostore", ~U[2026-11-05 10:52:19Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 10:57:19.952000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=1538.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["7b446038-d580-4b0f-8f0f-fb07ad829902"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 10:57:20.366000 2026] [Phoenix.Logger:info] [pid 2482969] [client 127.0.0.1:50306] GET /tabby-sim/api/v2/payments/4f1f0547-721a-41ad-b541-63eeba23e297 [Thu Nov 5 10:57:20.368000 2026] [Phoenix.Logger:debug] [pid 2482969] [client 127.0.0.1:50306] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "4f1f0547-721a-41ad-b541-63eeba23e297"} Pipelines: [:tabby_sim_api] [Thu Nov 5 10:57:20.370000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 127.0.0.1:50306] QUERY OK source="tabby_sim_faults" db=1.5ms idle=498.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "4f1f0547-721a-41ad-b541-63eeba23e297"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 10:57:20.373000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 127.0.0.1:50306] QUERY OK source="tabby_sim_faults" db=1.7ms queue=0.4ms idle=428.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 10:57:20.374000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 127.0.0.1:50306] QUERY OK source="tabby_sim_payments" db=0.5ms idle=429.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["4f1f0547-721a-41ad-b541-63eeba23e297"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Thu Nov 5 10:57:20.374000 2026] [Phoenix.Logger:info] [pid 2482969] [client 127.0.0.1:50306] Sent 200 in 7ms [Thu Nov 5 10:57:20.375000 2026] [DaProductApp.Tabby.Client:info] [pid 2482969] [client -] [Tabby] retrieve get /api/v2/payments/4f1f0547-721a-41ad-b541-63eeba23e297 -> 200 (423 ms, attempt 1) [Thu Nov 5 10:57:20.377000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2482969] [client -] [Tabby] verify: attempt=7b446038-d580-4b0f-8f0f-fb07ad829902 payment=4f1f0547-721a-41ad-b541-63eeba23e297 is still CREATED at Tabby; it will be looked at again [Thu Nov 5 10:57:20.378000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_webhook_events" db=1.1ms idle=431.7ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-05 10:55:19Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Thu Nov 5 10:57:20.382000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_refunds" db=1.5ms queue=1.4ms idle=431.3ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["demostore", ~N[2026-11-05 10:55:19], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Thu Nov 5 10:57:20.383000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=0.9ms idle=432.9ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 10:57:20.386000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=1.5ms queue=0.1ms idle=433.6ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["demostore", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 10:57:20.387000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_webhook_events" db=0.4ms idle=434.4ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Thu Nov 5 10:57:20.387000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_refunds" db=0.4ms idle=220.9ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Thu Nov 5 10:57:20.388000 2026] [DaProductApp.Tabby.Poller:info] [pid 2482969] [client -] [Tabby] poll: handled 1 (created:pending=1); 1 attempt(s) still watched [Thu Nov 5 10:58:16.253000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1837.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 10:58:16Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 10:58:16.253000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2482969] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 10:58:16.255000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=1.6ms idle=1838.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 10:58:16Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 10:58:16.256000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.1ms idle=1840.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 10:58:16.297000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2482969] [client -] [TabbySim] expiry job 402978 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 10:59:17.533000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1115.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 10:59:17Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 10:59:17.533000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2482969] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 10:59:17.534000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1089.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 10:59:17Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 10:59:17.535000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=118.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 10:59:17.572000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2482969] [client -] [TabbySim] expiry job 402980 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 10:59:21.622000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=0.9ms idle=204.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["demostore", ~U[2026-10-18 10:59:21Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 10:59:21.623000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=206.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["demostore", ~N[2026-11-05 10:57:21], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 10:59:21.625000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=0.8ms queue=0.1ms idle=206.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 10:59:21.626000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=0.8ms queue=0.2ms idle=208.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", ~N[2026-11-05 10:57:21], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 10:59:21.628000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=1.0ms idle=209.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["demostore", ~U[2026-11-05 10:54:21Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 10:59:21.629000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=0.3ms idle=211.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["7b446038-d580-4b0f-8f0f-fb07ad829902"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 10:59:22.153000 2026] [Phoenix.Logger:info] [pid 2482969] [client 127.0.0.1:45058] GET /tabby-sim/api/v2/payments/4f1f0547-721a-41ad-b541-63eeba23e297 [Thu Nov 5 10:59:22.155000 2026] [Phoenix.Logger:debug] [pid 2482969] [client 127.0.0.1:45058] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "4f1f0547-721a-41ad-b541-63eeba23e297"} Pipelines: [:tabby_sim_api] [Thu Nov 5 10:59:22.156000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 127.0.0.1:45058] QUERY OK source="tabby_sim_faults" db=1.0ms idle=617.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "4f1f0547-721a-41ad-b541-63eeba23e297"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 10:59:22.157000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 127.0.0.1:45058] QUERY OK source="tabby_sim_faults" db=0.8ms idle=535.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 10:59:22.158000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 127.0.0.1:45058] QUERY OK source="tabby_sim_payments" db=0.7ms idle=535.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["4f1f0547-721a-41ad-b541-63eeba23e297"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Thu Nov 5 10:59:22.158000 2026] [Phoenix.Logger:info] [pid 2482969] [client 127.0.0.1:45058] Sent 200 in 5ms [Thu Nov 5 10:59:22.159000 2026] [DaProductApp.Tabby.Client:info] [pid 2482969] [client -] [Tabby] retrieve get /api/v2/payments/4f1f0547-721a-41ad-b541-63eeba23e297 -> 200 (530 ms, attempt 1) [Thu Nov 5 10:59:22.160000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2482969] [client -] [Tabby] verify: attempt=7b446038-d580-4b0f-8f0f-fb07ad829902 payment=4f1f0547-721a-41ad-b541-63eeba23e297 is still CREATED at Tabby; it will be looked at again [Thu Nov 5 10:59:22.161000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_webhook_events" db=0.4ms idle=536.7ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-05 10:57:21Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Thu Nov 5 10:59:22.162000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_refunds" db=0.9ms idle=536.2ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["demostore", ~N[2026-11-05 10:57:21], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Thu Nov 5 10:59:22.163000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=535.7ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 10:59:22.164000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=535.4ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["demostore", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 10:59:22.165000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_webhook_events" db=0.6ms idle=535.4ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Thu Nov 5 10:59:22.166000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_refunds" db=0.8ms idle=215.9ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Thu Nov 5 10:59:22.166000 2026] [DaProductApp.Tabby.Poller:info] [pid 2482969] [client -] [Tabby] poll: handled 1 (created:pending=1); 1 attempt(s) still watched [Thu Nov 5 11:00:19.038000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1611.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:00:19Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:00:19.039000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2482969] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 11:00:19.041000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=1615.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:00:19Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 11:00:19.043000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=1.3ms idle=1616.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:00:19.149000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2482969] [client -] [TabbySim] expiry job 403006 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 11:01:20.382000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1954.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:01:20Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:01:20.382000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2482969] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 11:01:20.383000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1955.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:01:20Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 11:01:20.384000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.1ms idle=1956.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:01:20.427000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2482969] [client -] [TabbySim] expiry job 403007 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 11:01:23.513000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=1.1ms idle=1085.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["demostore", ~U[2026-10-18 11:01:23Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:01:23.514000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=1086.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["demostore", ~N[2026-11-05 10:59:23], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:01:23.516000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=1.2ms idle=1088.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:01:23.517000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=1089.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", ~N[2026-11-05 10:59:23], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:01:23.518000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=0.9ms idle=1090.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["demostore", ~U[2026-11-05 10:56:23Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:01:23.519000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=100.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["7b446038-d580-4b0f-8f0f-fb07ad829902"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 11:01:23.776000 2026] [Phoenix.Logger:info] [pid 2482969] [client 127.0.0.1:59912] GET /tabby-sim/api/v2/payments/4f1f0547-721a-41ad-b541-63eeba23e297 [Thu Nov 5 11:01:23.776000 2026] [Phoenix.Logger:debug] [pid 2482969] [client 127.0.0.1:59912] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "4f1f0547-721a-41ad-b541-63eeba23e297"} Pipelines: [:tabby_sim_api] [Thu Nov 5 11:01:23.777000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 127.0.0.1:59912] QUERY OK source="tabby_sim_faults" db=0.6ms queue=0.2ms idle=349.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "4f1f0547-721a-41ad-b541-63eeba23e297"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 11:01:23.778000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 127.0.0.1:59912] QUERY OK source="tabby_sim_faults" db=0.6ms idle=265.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 11:01:23.780000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 127.0.0.1:59912] QUERY OK source="tabby_sim_payments" db=1.1ms idle=265.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["4f1f0547-721a-41ad-b541-63eeba23e297"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Thu Nov 5 11:01:23.780000 2026] [Phoenix.Logger:info] [pid 2482969] [client 127.0.0.1:59912] Sent 200 in 4ms [Thu Nov 5 11:01:23.781000 2026] [DaProductApp.Tabby.Client:info] [pid 2482969] [client -] [Tabby] retrieve get /api/v2/payments/4f1f0547-721a-41ad-b541-63eeba23e297 -> 200 (261 ms, attempt 1) [Thu Nov 5 11:01:23.781000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2482969] [client -] [Tabby] verify: attempt=7b446038-d580-4b0f-8f0f-fb07ad829902 payment=4f1f0547-721a-41ad-b541-63eeba23e297 is still CREATED at Tabby; it will be looked at again [Thu Nov 5 11:01:23.782000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_webhook_events" db=0.4ms queue=0.1ms idle=267.1ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-05 10:59:23Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Thu Nov 5 11:01:23.784000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_refunds" db=1.2ms idle=266.3ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["demostore", ~N[2026-11-05 10:59:23], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Thu Nov 5 11:01:23.786000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=266.9ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 11:01:23.788000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=2.3ms idle=267.5ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["demostore", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 11:01:23.792000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_webhook_events" db=2.5ms idle=270.0ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Thu Nov 5 11:01:23.794000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_refunds" db=1.4ms idle=206.5ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Thu Nov 5 11:01:23.795000 2026] [DaProductApp.Tabby.Poller:info] [pid 2482969] [client -] [Tabby] poll: handled 1 (created:pending=1); 1 attempt(s) still watched [Thu Nov 5 11:02:21.840000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1411.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:02:21Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:02:21.840000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2482969] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 11:02:21.841000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1412.2ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:02:21Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 11:02:21.842000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1413.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:02:21.906000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2482969] [client -] [TabbySim] expiry job 403013 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 11:02:37.539000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="global_table" db=0.5ms idle=1126.9ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 11:03:22.164000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1735.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:03:22Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:03:22.164000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2482969] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 11:03:22.165000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1072.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:03:22Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 11:03:22.166000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.1ms idle=737.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:03:22.208000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2482969] [client -] [TabbySim] expiry job 403014 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 11:03:24.188000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=1.2ms idle=757.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["demostore", ~U[2026-10-18 11:03:24Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:03:24.190000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=1.2ms idle=759.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["demostore", ~N[2026-11-05 11:01:24], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:03:24.191000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=1.2ms idle=760.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:03:24.193000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=0.8ms queue=0.1ms idle=762.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", ~N[2026-11-05 11:01:24], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:03:24.194000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=763.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["demostore", ~U[2026-11-05 10:58:24Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:03:24.195000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=0.9ms idle=764.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["7b446038-d580-4b0f-8f0f-fb07ad829902"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 11:03:24.441000 2026] [Phoenix.Logger:info] [pid 2482969] [client 127.0.0.1:45656] GET /tabby-sim/api/v2/payments/4f1f0547-721a-41ad-b541-63eeba23e297 [Thu Nov 5 11:03:24.441000 2026] [Phoenix.Logger:debug] [pid 2482969] [client 127.0.0.1:45656] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "4f1f0547-721a-41ad-b541-63eeba23e297"} Pipelines: [:tabby_sim_api] [Thu Nov 5 11:03:24.442000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 127.0.0.1:45656] QUERY OK source="tabby_sim_faults" db=1.2ms idle=341.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "4f1f0547-721a-41ad-b541-63eeba23e297"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 11:03:24.443000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 127.0.0.1:45656] QUERY OK source="tabby_sim_faults" db=0.4ms idle=256.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 11:03:24.444000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 127.0.0.1:45656] QUERY OK source="tabby_sim_payments" db=0.7ms idle=255.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["4f1f0547-721a-41ad-b541-63eeba23e297"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Thu Nov 5 11:03:24.445000 2026] [Phoenix.Logger:info] [pid 2482969] [client 127.0.0.1:45656] Sent 200 in 4ms [Thu Nov 5 11:03:24.445000 2026] [DaProductApp.Tabby.Client:info] [pid 2482969] [client -] [Tabby] retrieve get /api/v2/payments/4f1f0547-721a-41ad-b541-63eeba23e297 -> 200 (249 ms, attempt 1) [Thu Nov 5 11:03:24.445000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2482969] [client -] [Tabby] verify: attempt=7b446038-d580-4b0f-8f0f-fb07ad829902 payment=4f1f0547-721a-41ad-b541-63eeba23e297 is still CREATED at Tabby; it will be looked at again [Thu Nov 5 11:03:24.446000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_webhook_events" db=0.7ms idle=255.7ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-05 11:01:24Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Thu Nov 5 11:03:24.447000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_refunds" db=0.8ms idle=255.1ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["demostore", ~N[2026-11-05 11:01:24], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Thu Nov 5 11:03:24.448000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=254.9ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 11:03:24.449000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=254.8ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["demostore", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 11:03:24.450000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_webhook_events" db=0.8ms idle=254.4ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Thu Nov 5 11:03:24.452000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_refunds" db=0.9ms idle=195.9ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Thu Nov 5 11:03:24.452000 2026] [DaProductApp.Tabby.Poller:info] [pid 2482969] [client -] [Tabby] poll: handled 1 (created:pending=1); 1 attempt(s) still watched [Thu Nov 5 11:04:23.494000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1064.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:04:23Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:04:23.494000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2482969] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 11:04:23.496000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms queue=0.1ms idle=1066.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:04:23Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 11:04:23.498000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=1.6ms queue=0.1ms idle=1068.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:04:23.536000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2482969] [client -] [TabbySim] expiry job 403019 scheduled in 47s (2 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 11:05:11.811000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1380.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:05:11Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:05:11.867000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=56.2ms idle=1381.0ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 11:05:11], true, "5571ac2e-9234-4205-9bf2-97ab4daa11f7", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 11:05:11.867000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2482969] [client -] [TabbySim] payment=5571ac2e-9234-4205-9bf2-97ab4daa11f7 CREATED -> EXPIRED [Thu Nov 5 11:05:11.868000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1437.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["5571ac2e-9234-4205-9bf2-97ab4daa11f7"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 11:05:11.869000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2482969] [client -] [TabbySim] webhook not sent: event=expire payment=5571ac2e-9234-4205-9bf2-97ab4daa11f7 [Thu Nov 5 11:05:11.869000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2482969] [client -] [TabbySim] payment=5571ac2e-9234-4205-9bf2-97ab4daa11f7 expired (expires_at 2026-11-05 11:05:10Z, session_status=created) [Thu Nov 5 11:05:11.871000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=1.7ms idle=1438.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:05:11Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:05:11.871000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2482969] [client -] [TabbySim] expiry job: 1 payment(s) were due [Thu Nov 5 11:05:11.872000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1441.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:05:11Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 11:05:11.873000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms queue=0.1ms idle=1195.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:05:11.926000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2482969] [client -] [TabbySim] expiry job 403023 scheduled in 6s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 11:05:19.919000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=1.9ms idle=486.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:05:19Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:05:19.961000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=41.3ms idle=489.5ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 11:05:19], true, "4f1f0547-721a-41ad-b541-63eeba23e297", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 11:05:19.962000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2482969] [client -] [TabbySim] payment=4f1f0547-721a-41ad-b541-63eeba23e297 CREATED -> EXPIRED [Thu Nov 5 11:05:19.963000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=1.3ms idle=532.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["4f1f0547-721a-41ad-b541-63eeba23e297"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 11:05:19.964000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2482969] [client -] [TabbySim] webhook not sent: event=expire payment=4f1f0547-721a-41ad-b541-63eeba23e297 [Thu Nov 5 11:05:19.964000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2482969] [client -] [TabbySim] payment=4f1f0547-721a-41ad-b541-63eeba23e297 expired (expires_at 2026-11-05 11:05:17Z, session_status=created) [Thu Nov 5 11:05:19.965000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=534.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:05:19Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:05:19.965000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2482969] [client -] [TabbySim] expiry job: 1 payment(s) were due [Thu Nov 5 11:05:19.966000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=535.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:05:19Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 11:05:19.968000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms queue=0.4ms idle=536.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:05:19.968000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2482969] [client -] [TabbySim] expiry job: no CREATED payment left, not rescheduling [Thu Nov 5 11:05:26.096000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=665.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["demostore", ~U[2026-10-18 11:05:26Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:05:26.097000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=1.1ms queue=0.1ms idle=666.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["demostore", ~N[2026-11-05 11:03:26], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:05:26.099000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=1.3ms idle=667.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:05:26.101000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=1.0ms idle=669.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", ~N[2026-11-05 11:03:26], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:05:26.102000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=671.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["demostore", ~U[2026-11-05 11:00:26Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:05:26.103000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=672.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["7b446038-d580-4b0f-8f0f-fb07ad829902"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 11:05:26.362000 2026] [Phoenix.Logger:info] [pid 2482969] [client 127.0.0.1:54720] GET /tabby-sim/api/v2/payments/4f1f0547-721a-41ad-b541-63eeba23e297 [Thu Nov 5 11:05:26.362000 2026] [Phoenix.Logger:debug] [pid 2482969] [client 127.0.0.1:54720] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "4f1f0547-721a-41ad-b541-63eeba23e297"} Pipelines: [:tabby_sim_api] [Thu Nov 5 11:05:26.364000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 127.0.0.1:54720] QUERY OK source="tabby_sim_faults" db=0.7ms idle=356.6ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "4f1f0547-721a-41ad-b541-63eeba23e297"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 11:05:26.364000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 127.0.0.1:54720] QUERY OK source="tabby_sim_faults" db=0.4ms idle=269.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 11:05:26.365000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 127.0.0.1:54720] QUERY OK source="tabby_sim_payments" db=0.4ms idle=268.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["4f1f0547-721a-41ad-b541-63eeba23e297"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Thu Nov 5 11:05:26.365000 2026] [Phoenix.Logger:info] [pid 2482969] [client 127.0.0.1:54720] Sent 200 in 3ms [Thu Nov 5 11:05:26.366000 2026] [DaProductApp.Tabby.Client:info] [pid 2482969] [client -] [Tabby] retrieve get /api/v2/payments/4f1f0547-721a-41ad-b541-63eeba23e297 -> 200 (263 ms, attempt 1) [Thu Nov 5 11:05:26.400000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=33.3ms queue=0.3ms idle=268.8ms UPDATE `tabby_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["expired", ~N[2026-11-05 11:05:26], "7b446038-d580-4b0f-8f0f-fb07ad829902", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 11:05:26.402000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=1.0ms idle=301.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["7b446038-d580-4b0f-8f0f-fb07ad829902"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 11:05:26.402000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2482969] [client -] [Tabby] verify: attempt=7b446038-d580-4b0f-8f0f-fb07ad829902 payment=4f1f0547-721a-41ad-b541-63eeba23e297 created -> expired [Thu Nov 5 11:05:26.403000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_webhook_events" db=1.0ms idle=301.3ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-05 11:03:26Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Thu Nov 5 11:05:26.404000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_refunds" db=0.5ms idle=301.6ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["demostore", ~N[2026-11-05 11:03:26], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Thu Nov 5 11:05:26.405000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=301.5ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 11:05:26.406000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=238.7ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["demostore", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 11:05:26.407000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_webhook_events" db=0.5ms idle=155.9ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Thu Nov 5 11:05:26.408000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="tabby_refunds" db=0.7ms idle=43.6ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Thu Nov 5 11:05:26.408000 2026] [DaProductApp.Tabby.Poller:info] [pid 2482969] [client -] [Tabby] poll: handled 1 (created:recorded_expired=1); 0 attempt(s) still watched [Thu Nov 5 11:12:37.539000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="global_table" db=1.0ms idle=1113.7ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 11:22:37.540000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="global_table" db=1.5ms idle=1095.8ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 11:32:37.539000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client -] QUERY OK source="global_table" db=0.5ms idle=1086.6ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 11:32:51.078000 2026] [Phoenix.Logger:info] [pid 2482969] [client 115.99.167.137:53185] GET /tabby-sim/admin [Thu Nov 5 11:32:51.079000 2026] [Phoenix.Logger:debug] [pid 2482969] [client 115.99.167.137:53185] Processing with DaProductAppWeb.TabbySim.AdminController.index/2 Parameters: %{} Pipelines: [:tabby_sim_admin] [Thu Nov 5 11:32:51.086000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 115.99.167.137:53185] QUERY OK source="tabby_sim_faults" db=0.4ms queue=0.7ms idle=614.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (t0.`remaining` > 0) ORDER BY t0.`id` [] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:18 [Thu Nov 5 11:32:51.091000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 115.99.167.137:53185] QUERY OK source="tabby_sim_payments" db=3.6ms queue=0.4ms idle=615.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 ORDER BY t0.`inserted_at` DESC, t0.`id` DESC LIMIT ? [30] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:19 [Thu Nov 5 11:32:51.096000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 115.99.167.137:53185] QUERY OK source="tabby_sim_webhook_deliveries" db=1.4ms queue=0.6ms idle=622.9ms SELECT t0.`id`, t0.`payment_id`, t0.`webhook_id`, t0.`event`, t0.`attempt`, t0.`state`, t0.`url`, t0.`http_status`, t0.`request_body`, t0.`response_body`, t0.`error`, t0.`duration_ms`, t0.`attempted_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhook_deliveries` AS t0 ORDER BY t0.`id` DESC LIMIT ? [40] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:20 [Thu Nov 5 11:32:51.098000 2026] [Ecto.Adapters.SQL:debug] [pid 2482969] [client 115.99.167.137:53185] QUERY OK source="tabby_sim_webhooks" db=0.5ms queue=0.5ms idle=625.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 ORDER BY t0.`id` LIMIT 100 [] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:21 [Thu Nov 5 11:32:51.110000 2026] [Phoenix.Logger:info] [pid 2482969] [client 115.99.167.137:53185] Sent 200 in 31ms [Thu Nov 5 11:34:50.851000 2026] [Bandit.Logger:error] [pid 2482969] [client -] ** (Bandit.TransportError) Unrecoverable error: timeout [Thu Nov 5 11:35:33.783000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="global_table" db=0.5ms queue=14.1ms idle=255.0ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 11:35:34.385000 2026] [Bandit:info] [pid 2547400] [client -] Running DaProductAppWeb.Endpoint with Bandit 1.6.7 at 0.0.0.0:4030 (http) [Thu Nov 5 11:35:34.464000 2026] [Phoenix.Endpoint.Supervisor:info] [pid 2547400] [client -] Access DaProductAppWeb.Endpoint at http://localhost:4030 [Thu Nov 5 11:35:34.724000 2026] [DaProductApp.MQTT.Handler:info] [pid 2547400] [client -] Device phoenix_client_node_devteam connected [Thu Nov 5 11:35:42.585000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2547400] [client -] Live reload: priv/static/assets/app.js [Thu Nov 5 11:35:42.585000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2547400] [client -] Live reload: priv/static/assets/app.js [Thu Nov 5 11:35:42.584000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2547400] [client -] Live reload: priv/static/assets/app.js [Thu Nov 5 11:35:42.791000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2547400] [client -] Live reload: priv/static/assets/app.js [Thu Nov 5 11:35:42.791000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2547400] [client -] Live reload: priv/static/assets/app.js [Thu Nov 5 11:35:42.791000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2547400] [client -] Live reload: priv/static/assets/app.js [Thu Nov 5 11:35:42.791000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2547400] [client -] Live reload: priv/static/assets/app.js [Thu Nov 5 11:35:42.794000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2547400] [client -] Live reload: priv/static/assets/app.js [Thu Nov 5 11:35:42.799000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2547400] [client -] Live reload: priv/static/assets/app.js [Thu Nov 5 11:35:44.865000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] GET /tabby/demo [Thu Nov 5 11:35:44.888000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:54920] GET /tabby-sim/admin [Thu Nov 5 11:35:44.942000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:57371] GET /tabby-sim/hpp/78e0eaf9-c81a-4a03-b803-c9cf6d77dd04 [Thu Nov 5 11:35:44.967000 2026] [Phoenix.Logger:debug] [pid 2547400] [client 115.99.167.137:57371] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "78e0eaf9-c81a-4a03-b803-c9cf6d77dd04"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 11:35:44.966000 2026] [Phoenix.Logger:debug] [pid 2547400] [client 115.99.167.137:54920] Processing with DaProductAppWeb.TabbySim.AdminController.index/2 Parameters: %{} Pipelines: [:tabby_sim_admin] [Thu Nov 5 11:35:45.055000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:54920] QUERY OK source="tabby_sim_faults" db=2.4ms queue=2.0ms idle=1795.6ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (t0.`remaining` > 0) ORDER BY t0.`id` [] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:18 [Thu Nov 5 11:35:45.079000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:57371] QUERY OK source="tabby_sim_payments" db=19.5ms queue=1.6ms idle=1801.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["78e0eaf9-c81a-4a03-b803-c9cf6d77dd04"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 11:35:45.087000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:54920] QUERY OK source="tabby_sim_payments" db=20.4ms queue=0.8ms idle=1400.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 ORDER BY t0.`inserted_at` DESC, t0.`id` DESC LIMIT ? [30] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:19 [Thu Nov 5 11:35:45.101000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:57371] Sent 410 in 159ms [Thu Nov 5 11:35:45.138000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] Sent 200 in 273ms [Thu Nov 5 11:35:45.140000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:54920] QUERY OK source="tabby_sim_webhook_deliveries" db=2.1ms queue=1.0ms idle=623.9ms SELECT t0.`id`, t0.`payment_id`, t0.`webhook_id`, t0.`event`, t0.`attempt`, t0.`state`, t0.`url`, t0.`http_status`, t0.`request_body`, t0.`response_body`, t0.`error`, t0.`duration_ms`, t0.`attempted_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhook_deliveries` AS t0 ORDER BY t0.`id` DESC LIMIT ? [40] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:20 [Thu Nov 5 11:35:45.146000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:54920] QUERY OK source="tabby_sim_webhooks" db=0.5ms queue=1.2ms idle=602.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 ORDER BY t0.`id` LIMIT 100 [] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:21 [Thu Nov 5 11:35:45.166000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:54920] Sent 200 in 277ms [Thu Nov 5 11:35:45.663000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:54920] POST /tabby/demo/summary [Thu Nov 5 11:35:45.672000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:54920] Sent 200 in 8ms [Thu Nov 5 11:35:47.432000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] POST /tabby/demo/eligibility [Thu Nov 5 11:35:47.812000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:49240] POST /tabby-sim/api/v2/checkout [Thu Nov 5 11:35:47.812000 2026] [Phoenix.Logger:debug] [pid 2547400] [client 127.0.0.1:49240] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "95.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 11:35:47.822000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:49240] QUERY OK source="tabby_sim_faults" db=0.8ms queue=0.4ms idle=1566.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 11:35:47.939000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:49240] QUERY OK db=86.8ms queue=0.5ms idle=1590.7ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`is_test`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["51cc61f1-7da0-4c44-ba51-8a9e210e9ceb", "CREATED", "AED", "48780811-ba98-444f-a0d4-ca361245fa27", "demostore", ~U[2026-11-05 11:47:47Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "95.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "created", %{"cancel" => nil, "failure" => nil, "success" => nil}, ~U[2026-11-05 11:45:47Z], false, Decimal.new("95.00"), [], [], true, ~N[2026-11-05 11:35:47], ~N[2026-11-05 11:35:47]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 11:35:47.941000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2547400] [client 127.0.0.1:49240] [TabbySim] checkout payment=51cc61f1-7da0-4c44-ba51-8a9e210e9ceb session=48780811-ba98-444f-a0d4-ca361245fa27 decision=created reason=nil amount=95.00 AED [Thu Nov 5 11:35:47.945000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:49240] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.4ms idle=1688.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:35:48.048000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2547400] [client 127.0.0.1:49240] [TabbySim] expiry job 403103 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 11:35:48.048000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:49240] Sent 200 in 236ms [Thu Nov 5 11:35:48.060000 2026] [DaProductApp.Tabby.Client:info] [pid 2547400] [client 115.99.167.137:61428] [Tabby] checkout post /api/v2/checkout -> 200 (613 ms, attempt 1) [Thu Nov 5 11:35:48.062000 2026] [DaProductApp.Tabby.Client:info] [pid 2547400] [client 115.99.167.137:61428] [Tabby] session created payment=51cc61f1-7da0-4c44-ba51-8a9e210e9ceb [Thu Nov 5 11:35:48.062000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2547400] [client 115.99.167.137:61428] [Tabby] eligibility: show (amount=95.00 AED) [Thu Nov 5 11:35:48.062000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] Sent 200 in 630ms [Thu Nov 5 11:36:03.893000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] GET /tabby/demo [Thu Nov 5 11:36:03.901000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] Sent 200 in 8ms [Thu Nov 5 11:36:04.726000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] POST /tabby/demo/summary [Thu Nov 5 11:36:04.727000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] Sent 200 in 680µs [Thu Nov 5 11:36:05.627000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] POST /tabby/demo/eligibility [Thu Nov 5 11:36:05.909000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:49240] POST /tabby-sim/api/v2/checkout [Thu Nov 5 11:36:05.909000 2026] [Phoenix.Logger:debug] [pid 2547400] [client 127.0.0.1:49240] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "95.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 11:36:05.912000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:49240] QUERY OK source="tabby_sim_faults" db=2.0ms queue=0.1ms idle=654.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 11:36:05.950000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:49240] QUERY OK db=37.0ms queue=0.5ms idle=657.0ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`is_test`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["bc08a9bf-a0b3-4c41-b39e-f74c1dccec16", "CREATED", "AED", "04ad6c71-ff5c-4c69-b5b2-e8260e321473", "demostore", ~U[2026-11-05 11:48:05Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "95.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "created", %{"cancel" => nil, "failure" => nil, "success" => nil}, ~U[2026-11-05 11:46:05Z], false, Decimal.new("95.00"), [], [], true, ~N[2026-11-05 11:36:05], ~N[2026-11-05 11:36:05]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 11:36:05.950000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2547400] [client 127.0.0.1:49240] [TabbySim] checkout payment=bc08a9bf-a0b3-4c41-b39e-f74c1dccec16 session=04ad6c71-ff5c-4c69-b5b2-e8260e321473 decision=created reason=nil amount=95.00 AED [Thu Nov 5 11:36:05.952000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:49240] QUERY OK source="tabby_sim_payments" db=0.8ms queue=0.3ms idle=695.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:36:05.955000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:49240] Sent 200 in 46ms [Thu Nov 5 11:36:05.955000 2026] [DaProductApp.Tabby.Client:info] [pid 2547400] [client 115.99.167.137:61428] [Tabby] checkout post /api/v2/checkout -> 200 (327 ms, attempt 1) [Thu Nov 5 11:36:05.955000 2026] [DaProductApp.Tabby.Client:info] [pid 2547400] [client 115.99.167.137:61428] [Tabby] session created payment=bc08a9bf-a0b3-4c41-b39e-f74c1dccec16 [Thu Nov 5 11:36:05.955000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2547400] [client 115.99.167.137:61428] [Tabby] eligibility: show (amount=95.00 AED) [Thu Nov 5 11:36:05.956000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] Sent 200 in 328ms [Thu Nov 5 11:36:10.438000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] POST /tabby/demo/place [Thu Nov 5 11:36:10.473000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:61428] QUERY OK db=20.4ms queue=0.7ms idle=1197.2ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`amount`,`order_reference`,`needs_attention`,`success_url`,`cancel_url`,`failure_url`,`captured_amount`,`refunded_amount`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["3bd3a15c-5e05-43b8-8b90-570da7ab13d4", "new", "AED", "demostore", Decimal.new("95.00"), "DEMO-7DFBECB1", false, "http://demo.ctrmv.com:4030/tabby/demo/result/success?lang=en&order=DEMO-7DFBECB1", "http://demo.ctrmv.com:4030/tabby/demo/result/cancel?lang=en&order=DEMO-7DFBECB1", "http://demo.ctrmv.com:4030/tabby/demo/result/failure?lang=en&order=DEMO-7DFBECB1", Decimal.new("0"), Decimal.new("0"), ~N[2026-11-05 11:36:10], ~N[2026-11-05 11:36:10]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Thu Nov 5 11:36:10.730000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:37648] POST /tabby-sim/api/v2/checkout [Thu Nov 5 11:36:10.730000 2026] [Phoenix.Logger:debug] [pid 2547400] [client 127.0.0.1:37648] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/3bd3a15c-5e05-43b8-8b90-570da7ab13d4/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/3bd3a15c-5e05-43b8-8b90-570da7ab13d4/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/3bd3a15c-5e05-43b8-8b90-570da7ab13d4/success"}, "payment" => %{"amount" => "95.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo sunglasses", "unit_price" => "95.00"}], "reference_id" => "DEMO-7DFBECB1"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 11:36:10.731000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK source="tabby_sim_faults" db=0.5ms idle=1475.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 11:36:10.826000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK db=93.3ms queue=0.7ms idle=1477.1ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`lang`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`buyer_history`,`is_test`,`shipping_address`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635", "CREATED", "AED", "a72d8d54-793d-4bbc-800f-b6a852610d5e", "demostore", ~U[2026-11-05 11:48:10Z], %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/3bd3a15c-5e05-43b8-8b90-570da7ab13d4/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/3bd3a15c-5e05-43b8-8b90-570da7ab13d4/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/3bd3a15c-5e05-43b8-8b90-570da7ab13d4/success"}, "payment" => %{"amount" => "95.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo sunglasses", "unit_price" => "95.00"}], "reference_id" => "DEMO-7DFBECB1"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "0", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo sunglasses", "unit_price" => "95"}], "reference_id" => "DEMO-7DFBECB1", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "en", %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "created", %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/3bd3a15c-5e05-43b8-8b90-570da7ab13d4/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/3bd3a15c-5e05-43b8-8b90-570da7ab13d4/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/3bd3a15c-5e05-43b8-8b90-570da7ab13d4/success"}, ~U[2026-11-05 11:46:10Z], false, Decimal.new("95.00"), [], [], %{"registered_since" => "2023-02-01T10:00:00Z"}, true, %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}, ~N[2026-11-05 11:36:10], ~N[2026-11-05 11:36:10]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 11:36:10.827000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2547400] [client 127.0.0.1:37648] [TabbySim] checkout payment=edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635 session=a72d8d54-793d-4bbc-800f-b6a852610d5e decision=created reason=nil amount=95.00 AED [Thu Nov 5 11:36:10.828000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK source="tabby_sim_payments" db=1.1ms queue=0.2ms idle=1572.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:36:10.830000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:37648] Sent 200 in 100ms [Thu Nov 5 11:36:10.831000 2026] [DaProductApp.Tabby.Client:info] [pid 2547400] [client 115.99.167.137:61428] [Tabby] checkout post /api/v2/checkout -> 200 (357 ms, attempt 1) [Thu Nov 5 11:36:10.831000 2026] [DaProductApp.Tabby.Client:info] [pid 2547400] [client 115.99.167.137:61428] [Tabby] session created payment=edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635 [Thu Nov 5 11:36:10.832000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:61428] QUERY OK source="tabby_payments" db=0.3ms queue=0.4ms idle=627.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["3bd3a15c-5e05-43b8-8b90-570da7ab13d4"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Thu Nov 5 11:36:10.878000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:61428] QUERY OK source="tabby_payments" db=45.5ms queue=0.4ms idle=544.9ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-05 11:56:10Z], "edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635", "a72d8d54-793d-4bbc-800f-b6a852610d5e", ~N[2026-11-05 11:36:10], "3bd3a15c-5e05-43b8-8b90-570da7ab13d4"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Thu Nov 5 11:36:10.879000 2026] [DaProductApp.Tabby.Sessions:info] [pid 2547400] [client 115.99.167.137:61428] [Tabby] session created attempt=3bd3a15c-5e05-43b8-8b90-570da7ab13d4 payment=edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635 [Thu Nov 5 11:36:10.913000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] Sent 200 in 475ms [Thu Nov 5 11:36:11.348000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] GET /tabby-sim/hpp/a72d8d54-793d-4bbc-800f-b6a852610d5e [Thu Nov 5 11:36:11.348000 2026] [Phoenix.Logger:debug] [pid 2547400] [client 115.99.167.137:61428] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "a72d8d54-793d-4bbc-800f-b6a852610d5e"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 11:36:11.350000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:61428] QUERY OK source="tabby_sim_payments" db=0.9ms queue=0.2ms idle=576.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["a72d8d54-793d-4bbc-800f-b6a852610d5e"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 11:36:11.356000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] Sent 200 in 8ms [Thu Nov 5 11:36:49.012000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.5ms idle=1755.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:36:49Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:36:49.012000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2547400] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 11:36:49.013000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms queue=0.4ms idle=1136.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:36:49Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 11:36:49.014000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=758.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:36:49.074000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2547400] [client -] [TabbySim] expiry job 403107 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 11:37:03.881000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] POST /tabby-sim/hpp/a72d8d54-793d-4bbc-800f-b6a852610d5e [Thu Nov 5 11:37:03.882000 2026] [Phoenix.Logger:debug] [pid 2547400] [client 115.99.167.137:61428] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "approve", "otp" => "8888", "plan" => "4", "session_id" => "a72d8d54-793d-4bbc-800f-b6a852610d5e", "ui" => "1"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 11:37:03.883000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:61428] QUERY OK source="tabby_sim_payments" db=1.3ms idle=1624.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["a72d8d54-793d-4bbc-800f-b6a852610d5e"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 11:37:03.916000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:61428] QUERY OK source="tabby_sim_payments" db=31.7ms queue=0.5ms idle=1626.3ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["AUTHORIZED", ~N[2026-11-05 11:37:03], "edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 11:37:03.916000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2547400] [client 115.99.167.137:61428] [TabbySim] payment=edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635 CREATED -> AUTHORIZED [Thu Nov 5 11:37:03.919000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:61428] QUERY OK source="tabby_sim_payments" db=1.3ms queue=1.2ms idle=1659.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 11:37:03.943000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:61428] QUERY OK source="tabby_sim_webhooks" db=0.6ms queue=1.0ms idle=1683.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 11:37:03.982000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2547400] [client 115.99.167.137:61428] [TabbySim] webhook queued job=403110 event=authorize payment=edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635 webhook=53 [Thu Nov 5 11:37:03.982000 2026] [DaProductApp.TabbySim.Hpp:info] [pid 2547400] [client 115.99.167.137:61428] [TabbySim] hpp payment=edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635 action=approve status=AUTHORIZED [Thu Nov 5 11:37:03.983000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:61428] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.1ms idle=726.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["a72d8d54-793d-4bbc-800f-b6a852610d5e"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 11:37:03.984000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] Sent 200 in 102ms [Thu Nov 5 11:37:04.083000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_webhooks" db=2.0ms queue=0.9ms idle=353.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 11:37:04.552000 2026] [Phoenix.Logger:info] [pid 2547400] [client 78.47.213.209:53980] POST /tabby/webhooks [Thu Nov 5 11:37:04.559000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 78.47.213.209:53980] QUERY OK source="tabby_payments" db=0.4ms queue=0.4ms idle=642.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 11:37:04.592000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 78.47.213.209:53980] QUERY OK db=29.3ms queue=0.5ms idle=642.2ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["authorized", false, "edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635", "{\"amount\":\"95\",\"captures\":[],\"closed_at\":null,\"created_at\":\"2026-11-05T11:36:10Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T11:48:10Z\",\"id\":\"edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-7DFBECB1\"},\"refunds\":[],\"status\":\"authorized\",\"token\":null}", ~U[2026-11-05 11:37:04Z], ~N[2026-11-05 11:37:04], ~N[2026-11-05 11:37:04]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 11:37:04.676000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2547400] [client 78.47.213.209:53980] [Tabby] webhook 200: event=27 payment=edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635 saved and queued [Thu Nov 5 11:37:04.676000 2026] [Phoenix.Logger:info] [pid 2547400] [client 78.47.213.209:53980] Sent 200 in 124ms [Thu Nov 5 11:37:04.747000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK db=68.1ms queue=0.7ms idle=696.6ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "authorize", ~U[2026-11-05 11:37:04Z], "edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635", 53, 200, 594, %{"amount" => "95", "captures" => [], "closed_at" => nil, "created_at" => "2026-11-05T11:36:10Z", "currency" => "AED", "expires_at" => "2026-11-05T11:48:10Z", "id" => "edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-7DFBECB1"}, "refunds" => [], "status" => "authorized", "token" => nil}, ~N[2026-11-05 11:37:04], ~N[2026-11-05 11:37:04]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 11:37:04.747000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2547400] [client -] [TabbySim] webhook attempt=1 success event=authorize payment=edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635 url=http://demo.ctrmv.com:4030/tabby/webhooks (594 ms) [Thu Nov 5 11:37:04.775000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_webhook_events" db=0.3ms queue=0.5ms idle=691.2ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [27] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 11:37:04.777000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.9ms idle=468.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 11:37:04.784000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=1.3ms idle=390.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["3bd3a15c-5e05-43b8-8b90-570da7ab13d4"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 11:37:05.048000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:37648] GET /tabby-sim/api/v2/payments/edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635 [Thu Nov 5 11:37:05.048000 2026] [Phoenix.Logger:debug] [pid 2547400] [client 127.0.0.1:37648] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635"} Pipelines: [:tabby_sim_api] [Thu Nov 5 11:37:05.055000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK source="tabby_sim_faults" db=0.5ms queue=0.5ms idle=307.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 11:37:05.056000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK source="tabby_sim_faults" db=0.5ms idle=281.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 11:37:05.058000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK source="tabby_sim_payments" db=1.0ms queue=0.2ms idle=281.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Thu Nov 5 11:37:05.058000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:37648] Sent 200 in 10ms [Thu Nov 5 11:37:05.059000 2026] [DaProductApp.Tabby.Client:info] [pid 2547400] [client -] [Tabby] retrieve get /api/v2/payments/edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635 -> 200 (274 ms, attempt 1) [Thu Nov 5 11:37:05.109000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=43.8ms queue=0.8ms idle=287.3ms UPDATE `tabby_payments` AS t0 SET t0.`authorized_at` = ?, t0.`winner_key` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [~U[2026-11-05 11:37:05Z], "7d9fdd5dc512ef69edb6b88eef94bf3d542cb91dd28569f598af3149f7acd712", "authorized", ~N[2026-11-05 11:37:05], "3bd3a15c-5e05-43b8-8b90-570da7ab13d4", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 11:37:05.110000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=324.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["3bd3a15c-5e05-43b8-8b90-570da7ab13d4"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 11:37:05.110000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2547400] [client -] [Tabby] verify: attempt=3bd3a15c-5e05-43b8-8b90-570da7ab13d4 payment=edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635 created -> authorized [Thu Nov 5 11:37:05.227000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_webhook_events" db=43.1ms queue=0.7ms idle=310.5ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 11:37:05Z], 27] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 11:37:05.227000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2547400] [client -] [Tabby] webhook job: event=27 payment=edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635 processed (recorded authorized) [Thu Nov 5 11:37:05.332000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=3.6ms idle=272.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["3bd3a15c-5e05-43b8-8b90-570da7ab13d4"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 11:37:05.399000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=31.3ms queue=0.4ms idle=309.0ms UPDATE `tabby_payments` AS t0 SET t0.`capture_reference_id` = ?, t0.`claimed_at` = ?, t0.`claimed_by` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["capture-DEMO-7DFBECB1", ~U[2026-11-05 11:37:05Z], "nonode@nohost", "capturing", ~N[2026-11-05 11:37:05], "3bd3a15c-5e05-43b8-8b90-570da7ab13d4", "authorized"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 11:37:05.400000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=1.1ms idle=290.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["3bd3a15c-5e05-43b8-8b90-570da7ab13d4"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 11:37:05.402000 2026] [DaProductApp.Tabby.Capture:info] [pid 2547400] [client -] [Tabby] capture: attempt=3bd3a15c-5e05-43b8-8b90-570da7ab13d4 payment=edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635 claimed (authorized -> capturing) [Thu Nov 5 11:37:05.745000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:37648] POST /tabby-sim/api/v2/payments/edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635/captures [Thu Nov 5 11:37:05.746000 2026] [Phoenix.Logger:debug] [pid 2547400] [client 127.0.0.1:37648] Processing with DaProductAppWeb.TabbySim.PaymentsController.capture/2 Parameters: %{"amount" => "95.00", "id" => "edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635", "reference_id" => "capture-DEMO-7DFBECB1"} Pipelines: [:tabby_sim_api] [Thu Nov 5 11:37:05.748000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK source="tabby_sim_faults" db=1.3ms idle=563.6ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["capture", "edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 11:37:05.750000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK source="tabby_sim_faults" db=1.1ms idle=522.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["capture"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 11:37:05.756000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK source="tabby_sim_payments" db=5.6ms idle=457.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635"] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:227 [Thu Nov 5 11:37:05.760000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK db=1.3ms queue=0.6ms idle=437.4ms begin [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Thu Nov 5 11:37:05.764000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK source="tabby_sim_payments" db=2.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) FOR UPDATE ["edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:231 [Thu Nov 5 11:37:05.768000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK source="tabby_sim_payments" db=0.5ms UPDATE `tabby_sim_payments` SET `status` = ?, `captures` = ?, `closed_at` = ?, `updated_at` = ? WHERE `id` = ? ["CLOSED", [%{"amount" => "95", "created_at" => "2026-11-05T11:37:05Z", "discount_amount" => "0", "id" => "610eae03-761c-4806-ab9a-9c223dbd68dd", "items" => nil, "reference_id" => "capture-DEMO-7DFBECB1", "shipping_amount" => "0", "tax_amount" => "0"}], ~U[2026-11-05 11:37:05Z], ~N[2026-11-05 11:37:05], "edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:244 [Thu Nov 5 11:37:05.770000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2547400] [client 127.0.0.1:37648] [TabbySim] capture payment=edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635 status=CLOSED [Thu Nov 5 11:37:05.833000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK db=63.5ms commit [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Thu Nov 5 11:37:05.835000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK source="tabby_sim_webhooks" db=1.1ms queue=0.1ms idle=501.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 11:37:05.912000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2547400] [client 127.0.0.1:37648] [TabbySim] webhook queued job=403113 event=capture payment=edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635 webhook=53 [Thu Nov 5 11:37:05.914000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK source="tabby_sim_webhooks" db=1.0ms idle=513.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 11:37:05.940000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2547400] [client 127.0.0.1:37648] [TabbySim] webhook queued job=403114 event=close payment=edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635 webhook=53 [Thu Nov 5 11:37:05.940000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:37648] Sent 200 in 195ms [Thu Nov 5 11:37:05.941000 2026] [DaProductApp.Tabby.Client:info] [pid 2547400] [client -] [Tabby] capture post /api/v2/payments/edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635/captures -> 200 (538 ms, attempt 1) [Thu Nov 5 11:37:05.990000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=47.3ms queue=0.3ms idle=194.1ms UPDATE `tabby_payments` AS t0 SET t0.`captured_amount` = ?, t0.`captured_at` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [Decimal.new("95"), ~U[2026-11-05 11:37:05Z], "captured", ~N[2026-11-05 11:37:05], "3bd3a15c-5e05-43b8-8b90-570da7ab13d4", "capturing"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 11:37:05.991000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=239.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["3bd3a15c-5e05-43b8-8b90-570da7ab13d4"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 11:37:05.991000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2547400] [client -] [Tabby] verify: attempt=3bd3a15c-5e05-43b8-8b90-570da7ab13d4 payment=edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635 capturing -> captured [Thu Nov 5 11:37:05.991000 2026] [DaProductApp.Tabby.Capture:info] [pid 2547400] [client -] [Tabby] capture: attempt=3bd3a15c-5e05-43b8-8b90-570da7ab13d4 payment=edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635 is captured [Thu Nov 5 11:37:06.003000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_webhooks" db=0.9ms idle=168.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 11:37:06.316000 2026] [Phoenix.Logger:info] [pid 2547400] [client 78.47.213.209:53980] POST /tabby/webhooks [Thu Nov 5 11:37:06.318000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 78.47.213.209:53980] QUERY OK source="tabby_payments" db=0.9ms idle=377.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 11:37:06.442000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 78.47.213.209:53980] QUERY OK db=122.9ms queue=0.4ms idle=329.2ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["authorized", false, "edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635", "{\"amount\":\"95\",\"captures\":[{\"amount\":\"95\",\"created_at\":\"2026-11-05T11:37:05Z\",\"discount_amount\":\"0\",\"id\":\"610eae03-761c-4806-ab9a-9c223dbd68dd\",\"items\":null,\"reference_id\":\"capture-DEMO-7DFBECB1\",\"shipping_amount\":\"0\",\"tax_amount\":\"0\"}],\"closed_at\":null,\"created_at\":\"2026-11-05T11:36:10Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T11:48:10Z\",\"id\":\"edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-7DFBECB1\"},\"refunds\":[],\"status\":\"authorized\",\"token\":null}", ~U[2026-11-05 11:37:06Z], ~N[2026-11-05 11:37:06], ~N[2026-11-05 11:37:06]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 11:37:06.469000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2547400] [client 78.47.213.209:53980] [Tabby] webhook 200: event=28 payment=edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635 saved and queued [Thu Nov 5 11:37:06.469000 2026] [Phoenix.Logger:info] [pid 2547400] [client 78.47.213.209:53980] Sent 200 in 153ms [Thu Nov 5 11:37:06.523000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK db=50.8ms queue=1.0ms idle=467.9ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "capture", ~U[2026-11-05 11:37:06Z], "edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635", 53, 200, 468, %{"amount" => "95", "captures" => [%{"amount" => "95", "created_at" => "2026-11-05T11:37:05Z", "discount_amount" => "0", "id" => "610eae03-761c-4806-ab9a-9c223dbd68dd", "items" => nil, "reference_id" => "capture-DEMO-7DFBECB1", "shipping_amount" => "0", "tax_amount" => "0"}], "closed_at" => nil, "created_at" => "2026-11-05T11:36:10Z", "currency" => "AED", "expires_at" => "2026-11-05T11:48:10Z", "id" => "edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-7DFBECB1"}, "refunds" => [], "status" => "authorized", "token" => nil}, ~N[2026-11-05 11:37:06], ~N[2026-11-05 11:37:06]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 11:37:06.526000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2547400] [client -] [TabbySim] webhook attempt=1 success event=capture payment=edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635 url=http://demo.ctrmv.com:4030/tabby/webhooks (468 ms) [Thu Nov 5 11:37:06.556000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_webhook_events" db=0.5ms idle=457.3ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [28] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 11:37:06.560000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=2.9ms idle=371.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 11:37:06.562000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=1.4ms idle=242.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["3bd3a15c-5e05-43b8-8b90-570da7ab13d4"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 11:37:06.656000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_webhook_events" db=93.9ms idle=120.1ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 11:37:06Z], 28] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 11:37:06.658000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2547400] [client -] [Tabby] webhook job: event=28 payment=edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635 processed (already_final) [Thu Nov 5 11:37:06.829000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] GET /tabby/return/3bd3a15c-5e05-43b8-8b90-570da7ab13d4/success [Thu Nov 5 11:37:06.835000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:61428] QUERY OK source="tabby_payments" db=1.1ms idle=277.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["3bd3a15c-5e05-43b8-8b90-570da7ab13d4"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 11:37:06.884000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] Sent 302 in 54ms [Thu Nov 5 11:37:06.968000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=329.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["3bd3a15c-5e05-43b8-8b90-570da7ab13d4"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 11:37:07.326000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] GET /tabby/demo/result/success [Thu Nov 5 11:37:07.327000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] Sent 200 in 751µs [Thu Nov 5 11:37:07.809000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] GET /tabby/demo/status/3bd3a15c-5e05-43b8-8b90-570da7ab13d4 [Thu Nov 5 11:37:07.812000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:61428] QUERY OK source="tabby_payments" db=0.4ms idle=843.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["3bd3a15c-5e05-43b8-8b90-570da7ab13d4"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 11:37:07.812000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] Sent 200 in 3ms [Thu Nov 5 11:37:08.131000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_webhooks" db=2.1ms idle=1068.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 11:37:08.401000 2026] [Phoenix.Logger:info] [pid 2547400] [client 78.47.213.209:53980] POST /tabby/webhooks [Thu Nov 5 11:37:08.402000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 78.47.213.209:53980] QUERY OK source="tabby_payments" db=0.5ms idle=780.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 11:37:08.456000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 78.47.213.209:53980] QUERY OK db=52.0ms queue=0.4ms idle=697.5ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["closed", false, "edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635", "{\"amount\":\"95\",\"captures\":[{\"amount\":\"95\",\"created_at\":\"2026-11-05T11:37:05Z\",\"discount_amount\":\"0\",\"id\":\"610eae03-761c-4806-ab9a-9c223dbd68dd\",\"items\":null,\"reference_id\":\"capture-DEMO-7DFBECB1\",\"shipping_amount\":\"0\",\"tax_amount\":\"0\"}],\"closed_at\":\"2026-11-05T11:37:05Z\",\"created_at\":\"2026-11-05T11:36:10Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T11:48:10Z\",\"id\":\"edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-7DFBECB1\"},\"refunds\":[],\"status\":\"closed\",\"token\":null}", ~U[2026-11-05 11:37:08Z], ~N[2026-11-05 11:37:08], ~N[2026-11-05 11:37:08]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 11:37:08.490000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2547400] [client 78.47.213.209:53980] [Tabby] webhook 200: event=29 payment=edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635 saved and queued [Thu Nov 5 11:37:08.490000 2026] [Phoenix.Logger:info] [pid 2547400] [client 78.47.213.209:53980] Sent 200 in 88ms [Thu Nov 5 11:37:08.542000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK db=51.8ms idle=361.7ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "close", ~U[2026-11-05 11:37:08Z], "edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635", 53, 200, 359, %{"amount" => "95", "captures" => [%{"amount" => "95", "created_at" => "2026-11-05T11:37:05Z", "discount_amount" => "0", "id" => "610eae03-761c-4806-ab9a-9c223dbd68dd", "items" => nil, "reference_id" => "capture-DEMO-7DFBECB1", "shipping_amount" => "0", "tax_amount" => "0"}], "closed_at" => "2026-11-05T11:37:05Z", "created_at" => "2026-11-05T11:36:10Z", "currency" => "AED", "expires_at" => "2026-11-05T11:48:10Z", "id" => "edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-7DFBECB1"}, "refunds" => [], "status" => "closed", "token" => nil}, ~N[2026-11-05 11:37:08], ~N[2026-11-05 11:37:08]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 11:37:08.543000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2547400] [client -] [TabbySim] webhook attempt=1 success event=close payment=edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635 url=http://demo.ctrmv.com:4030/tabby/webhooks (359 ms) [Thu Nov 5 11:37:08.572000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_webhook_events" db=0.3ms idle=316.9ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [29] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 11:37:08.573000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=317.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 11:37:08.575000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=1.3ms idle=289.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["3bd3a15c-5e05-43b8-8b90-570da7ab13d4"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 11:37:08.622000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_webhook_events" db=46.3ms idle=172.8ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 11:37:08Z], 29] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 11:37:08.622000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2547400] [client -] [Tabby] webhook job: event=29 payment=edfcdfe3-d18f-4bb5-b0e0-b10f3e75c635 processed (already_final) [Thu Nov 5 11:37:21.317000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] POST /tabby-sim/hpp/a72d8d54-793d-4bbc-800f-b6a852610d5e [Thu Nov 5 11:37:21.318000 2026] [Phoenix.Logger:debug] [pid 2547400] [client 115.99.167.137:61428] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "approve", "otp" => "8888", "plan" => "4", "session_id" => "a72d8d54-793d-4bbc-800f-b6a852610d5e", "ui" => "1"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 11:37:21.319000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:61428] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1063.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["a72d8d54-793d-4bbc-800f-b6a852610d5e"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 11:37:21.319000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] Sent 200 in 2ms [Thu Nov 5 11:37:28.618000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] GET /tabby-sim/hpp/a72d8d54-793d-4bbc-800f-b6a852610d5e [Thu Nov 5 11:37:28.618000 2026] [Phoenix.Logger:debug] [pid 2547400] [client 115.99.167.137:61428] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "a72d8d54-793d-4bbc-800f-b6a852610d5e"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 11:37:28.620000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:61428] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.1ms idle=364.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["a72d8d54-793d-4bbc-800f-b6a852610d5e"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 11:37:28.620000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] Sent 200 in 1ms [Thu Nov 5 11:37:30.783000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] GET /tabby/demo [Thu Nov 5 11:37:30.785000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] Sent 200 in 2ms [Thu Nov 5 11:37:31.285000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] POST /tabby/demo/summary [Thu Nov 5 11:37:31.285000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] Sent 200 in 523µs [Thu Nov 5 11:37:32.124000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] POST /tabby/demo/eligibility [Thu Nov 5 11:37:32.369000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:56320] POST /tabby-sim/api/v2/checkout [Thu Nov 5 11:37:32.370000 2026] [Phoenix.Logger:debug] [pid 2547400] [client 127.0.0.1:56320] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 11:37:32.371000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:56320] QUERY OK source="tabby_sim_faults" db=0.8ms idle=471.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 11:37:32.389000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:56320] QUERY OK db=17.7ms idle=387.8ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`is_test`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["0c23d069-a70b-4a13-949b-f9451e00985c", "CREATED", "AED", "91307dee-0fee-44a3-af7f-65c68cf93dfb", "demostore", ~U[2026-11-05 11:49:32Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "created", %{"cancel" => nil, "failure" => nil, "success" => nil}, ~U[2026-11-05 11:47:32Z], false, Decimal.new("850.00"), [], [], true, ~N[2026-11-05 11:37:32], ~N[2026-11-05 11:37:32]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 11:37:32.389000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2547400] [client 127.0.0.1:56320] [TabbySim] checkout payment=0c23d069-a70b-4a13-949b-f9451e00985c session=91307dee-0fee-44a3-af7f-65c68cf93dfb decision=created reason=nil amount=850.00 AED [Thu Nov 5 11:37:32.390000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:56320] QUERY OK source="tabby_sim_payments" db=0.6ms idle=265.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:37:32.392000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:56320] Sent 200 in 23ms [Thu Nov 5 11:37:32.393000 2026] [DaProductApp.Tabby.Client:info] [pid 2547400] [client 115.99.167.137:61428] [Tabby] checkout post /api/v2/checkout -> 200 (268 ms, attempt 1) [Thu Nov 5 11:37:32.393000 2026] [DaProductApp.Tabby.Client:info] [pid 2547400] [client 115.99.167.137:61428] [Tabby] session created payment=0c23d069-a70b-4a13-949b-f9451e00985c [Thu Nov 5 11:37:32.394000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2547400] [client 115.99.167.137:61428] [Tabby] eligibility: show (amount=850.00 AED) [Thu Nov 5 11:37:32.394000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] Sent 200 in 269ms [Thu Nov 5 11:37:36.214000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] POST /tabby/demo/place [Thu Nov 5 11:37:36.237000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:61428] QUERY OK db=21.4ms queue=0.4ms idle=1960.2ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`amount`,`order_reference`,`needs_attention`,`success_url`,`cancel_url`,`failure_url`,`captured_amount`,`refunded_amount`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["896f5965-d326-46b2-947d-4a13bda8c652", "new", "AED", "demostore", Decimal.new("850.00"), "DEMO-64E3C66A", false, "http://demo.ctrmv.com:4030/tabby/demo/result/success?lang=en&order=DEMO-64E3C66A", "http://demo.ctrmv.com:4030/tabby/demo/result/cancel?lang=en&order=DEMO-64E3C66A", "http://demo.ctrmv.com:4030/tabby/demo/result/failure?lang=en&order=DEMO-64E3C66A", Decimal.new("0"), Decimal.new("0"), ~N[2026-11-05 11:37:36], ~N[2026-11-05 11:37:36]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Thu Nov 5 11:37:36.462000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:37648] POST /tabby-sim/api/v2/checkout [Thu Nov 5 11:37:36.462000 2026] [Phoenix.Logger:debug] [pid 2547400] [client 127.0.0.1:37648] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/896f5965-d326-46b2-947d-4a13bda8c652/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/896f5965-d326-46b2-947d-4a13bda8c652/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/896f5965-d326-46b2-947d-4a13bda8c652/success"}, "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-64E3C66A"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 11:37:36.463000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK source="tabby_sim_faults" db=0.6ms idle=355.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 11:37:36.492000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK db=28.3ms queue=0.2ms idle=328.5ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`lang`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`buyer_history`,`is_test`,`shipping_address`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["c7cfbeb6-2f8e-4fdc-b195-7f062b36c537", "CREATED", "AED", "2a01b033-034d-4aef-ae81-42fb0464bf50", "demostore", ~U[2026-11-05 11:49:36Z], %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/896f5965-d326-46b2-947d-4a13bda8c652/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/896f5965-d326-46b2-947d-4a13bda8c652/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/896f5965-d326-46b2-947d-4a13bda8c652/success"}, "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-64E3C66A"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "0", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo headphones", "unit_price" => "650"}, %{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo smartwatch", "unit_price" => "200"}], "reference_id" => "DEMO-64E3C66A", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "en", %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "created", %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/896f5965-d326-46b2-947d-4a13bda8c652/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/896f5965-d326-46b2-947d-4a13bda8c652/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/896f5965-d326-46b2-947d-4a13bda8c652/success"}, ~U[2026-11-05 11:47:36Z], false, Decimal.new("850.00"), [], [], %{"registered_since" => "2023-02-01T10:00:00Z"}, true, %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}, ~N[2026-11-05 11:37:36], ~N[2026-11-05 11:37:36]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 11:37:36.493000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2547400] [client 127.0.0.1:37648] [TabbySim] checkout payment=c7cfbeb6-2f8e-4fdc-b195-7f062b36c537 session=2a01b033-034d-4aef-ae81-42fb0464bf50 decision=created reason=nil amount=850.00 AED [Thu Nov 5 11:37:36.494000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK source="tabby_sim_payments" db=1.3ms idle=256.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:37:36.496000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:37648] Sent 200 in 34ms [Thu Nov 5 11:37:36.496000 2026] [DaProductApp.Tabby.Client:info] [pid 2547400] [client 115.99.167.137:61428] [Tabby] checkout post /api/v2/checkout -> 200 (259 ms, attempt 1) [Thu Nov 5 11:37:36.497000 2026] [DaProductApp.Tabby.Client:info] [pid 2547400] [client 115.99.167.137:61428] [Tabby] session created payment=c7cfbeb6-2f8e-4fdc-b195-7f062b36c537 [Thu Nov 5 11:37:36.497000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:61428] QUERY OK source="tabby_payments" db=0.4ms idle=242.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["896f5965-d326-46b2-947d-4a13bda8c652"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Thu Nov 5 11:37:36.539000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:61428] QUERY OK source="tabby_payments" db=40.6ms queue=0.5ms idle=242.9ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-05 11:57:36Z], "c7cfbeb6-2f8e-4fdc-b195-7f062b36c537", "2a01b033-034d-4aef-ae81-42fb0464bf50", ~N[2026-11-05 11:37:36], "896f5965-d326-46b2-947d-4a13bda8c652"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Thu Nov 5 11:37:36.539000 2026] [DaProductApp.Tabby.Sessions:info] [pid 2547400] [client 115.99.167.137:61428] [Tabby] session created attempt=896f5965-d326-46b2-947d-4a13bda8c652 payment=c7cfbeb6-2f8e-4fdc-b195-7f062b36c537 [Thu Nov 5 11:37:36.541000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] Sent 200 in 327ms [Thu Nov 5 11:37:37.042000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] GET /tabby-sim/hpp/2a01b033-034d-4aef-ae81-42fb0464bf50 [Thu Nov 5 11:37:37.043000 2026] [Phoenix.Logger:debug] [pid 2547400] [client 115.99.167.137:61428] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "2a01b033-034d-4aef-ae81-42fb0464bf50"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 11:37:37.045000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:61428] QUERY OK source="tabby_sim_payments" db=1.6ms idle=686.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["2a01b033-034d-4aef-ae81-42fb0464bf50"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 11:37:37.045000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] Sent 200 in 3ms [Thu Nov 5 11:37:45.211000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] POST /tabby-sim/hpp/2a01b033-034d-4aef-ae81-42fb0464bf50 [Thu Nov 5 11:37:45.211000 2026] [Phoenix.Logger:debug] [pid 2547400] [client 115.99.167.137:61428] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "cancel", "otp" => "", "plan" => "6", "session_id" => "2a01b033-034d-4aef-ae81-42fb0464bf50", "ui" => "1"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 11:37:45.213000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:61428] QUERY OK source="tabby_sim_payments" db=1.1ms idle=956.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["2a01b033-034d-4aef-ae81-42fb0464bf50"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 11:37:45.248000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:61428] QUERY OK source="tabby_sim_payments" db=34.9ms queue=0.5ms idle=958.2ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 11:37:45], true, "c7cfbeb6-2f8e-4fdc-b195-7f062b36c537", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 11:37:45.249000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2547400] [client 115.99.167.137:61428] [TabbySim] payment=c7cfbeb6-2f8e-4fdc-b195-7f062b36c537 CREATED -> EXPIRED [Thu Nov 5 11:37:45.254000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:61428] QUERY OK source="tabby_sim_payments" db=5.0ms queue=0.3ms idle=994.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["c7cfbeb6-2f8e-4fdc-b195-7f062b36c537"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 11:37:45.255000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2547400] [client 115.99.167.137:61428] [TabbySim] webhook not sent: event=expire payment=c7cfbeb6-2f8e-4fdc-b195-7f062b36c537 [Thu Nov 5 11:37:45.255000 2026] [DaProductApp.TabbySim.Hpp:info] [pid 2547400] [client 115.99.167.137:61428] [TabbySim] hpp payment=c7cfbeb6-2f8e-4fdc-b195-7f062b36c537 action=cancel status=EXPIRED [Thu Nov 5 11:37:45.256000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:61428] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1000.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["2a01b033-034d-4aef-ae81-42fb0464bf50"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 11:37:45.257000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] Sent 200 in 45ms [Thu Nov 5 11:37:47.976000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] GET /tabby/return/896f5965-d326-46b2-947d-4a13bda8c652/cancel [Thu Nov 5 11:37:47.977000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:61428] QUERY OK source="tabby_payments" db=0.5ms queue=0.1ms idle=1721.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["896f5965-d326-46b2-947d-4a13bda8c652"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 11:37:48.012000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] Sent 302 in 36ms [Thu Nov 5 11:37:48.094000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.9ms idle=1837.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["896f5965-d326-46b2-947d-4a13bda8c652"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 11:37:48.361000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:37648] GET /tabby-sim/api/v2/payments/c7cfbeb6-2f8e-4fdc-b195-7f062b36c537 [Thu Nov 5 11:37:48.361000 2026] [Phoenix.Logger:debug] [pid 2547400] [client 127.0.0.1:37648] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "c7cfbeb6-2f8e-4fdc-b195-7f062b36c537"} Pipelines: [:tabby_sim_api] [Thu Nov 5 11:37:48.363000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK source="tabby_sim_faults" db=1.9ms idle=384.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "c7cfbeb6-2f8e-4fdc-b195-7f062b36c537"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 11:37:48.364000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK source="tabby_sim_faults" db=0.6ms queue=0.1ms idle=385.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 11:37:48.366000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK source="tabby_sim_payments" db=1.0ms idle=352.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["c7cfbeb6-2f8e-4fdc-b195-7f062b36c537"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Thu Nov 5 11:37:48.366000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:37648] Sent 200 in 5ms [Thu Nov 5 11:37:48.367000 2026] [DaProductApp.Tabby.Client:info] [pid 2547400] [client -] [Tabby] retrieve get /api/v2/payments/c7cfbeb6-2f8e-4fdc-b195-7f062b36c537 -> 200 (272 ms, attempt 1) [Thu Nov 5 11:37:48.401000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=32.9ms queue=0.6ms idle=274.8ms UPDATE `tabby_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["expired", ~N[2026-11-05 11:37:48], "896f5965-d326-46b2-947d-4a13bda8c652", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 11:37:48.402000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=307.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["896f5965-d326-46b2-947d-4a13bda8c652"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 11:37:48.402000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2547400] [client -] [Tabby] verify: attempt=896f5965-d326-46b2-947d-4a13bda8c652 payment=c7cfbeb6-2f8e-4fdc-b195-7f062b36c537 created -> expired [Thu Nov 5 11:37:48.428000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] GET /tabby/demo/result/cancel [Thu Nov 5 11:37:48.428000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] Sent 200 in 496µs [Thu Nov 5 11:37:50.319000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=63.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:37:50Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:37:50.319000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2547400] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 11:37:50.320000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=64.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:37:50Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 11:37:50.321000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=65.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:37:50.393000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2547400] [client -] [TabbySim] expiry job 403119 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 11:37:51.085000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] GET /tabby/demo [Thu Nov 5 11:37:51.091000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] Sent 200 in 5ms [Thu Nov 5 11:37:51.640000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] POST /tabby/demo/summary [Thu Nov 5 11:37:51.640000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] Sent 200 in 614µs [Thu Nov 5 11:37:52.525000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] POST /tabby/demo/eligibility [Thu Nov 5 11:37:52.792000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:56320] POST /tabby-sim/api/v2/checkout [Thu Nov 5 11:37:52.792000 2026] [Phoenix.Logger:debug] [pid 2547400] [client 127.0.0.1:56320] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 11:37:52.793000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:56320] QUERY OK source="tabby_sim_faults" db=0.4ms queue=0.1ms idle=537.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 11:37:52.829000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:56320] QUERY OK db=34.5ms queue=0.3ms idle=538.1ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`is_test`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["d3a67956-af8b-497a-bf6c-63b088c48792", "CREATED", "AED", "72e76f5f-e0a0-45e3-aa8e-b6ac57418b46", "demostore", ~U[2026-11-05 11:49:52Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "created", %{"cancel" => nil, "failure" => nil, "success" => nil}, ~U[2026-11-05 11:47:52Z], false, Decimal.new("850.00"), [], [], true, ~N[2026-11-05 11:37:52], ~N[2026-11-05 11:37:52]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 11:37:52.829000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2547400] [client 127.0.0.1:56320] [TabbySim] checkout payment=d3a67956-af8b-497a-bf6c-63b088c48792 session=72e76f5f-e0a0-45e3-aa8e-b6ac57418b46 decision=created reason=nil amount=850.00 AED [Thu Nov 5 11:37:52.830000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:56320] QUERY OK source="tabby_sim_payments" db=0.8ms queue=0.2ms idle=573.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:37:52.832000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:56320] Sent 200 in 40ms [Thu Nov 5 11:37:52.833000 2026] [DaProductApp.Tabby.Client:info] [pid 2547400] [client 115.99.167.137:61428] [Tabby] checkout post /api/v2/checkout -> 200 (307 ms, attempt 1) [Thu Nov 5 11:37:52.833000 2026] [DaProductApp.Tabby.Client:info] [pid 2547400] [client 115.99.167.137:61428] [Tabby] session created payment=d3a67956-af8b-497a-bf6c-63b088c48792 [Thu Nov 5 11:37:52.833000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2547400] [client 115.99.167.137:61428] [Tabby] eligibility: show (amount=850.00 AED) [Thu Nov 5 11:37:52.833000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] Sent 200 in 307ms [Thu Nov 5 11:38:01.316000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] POST /tabby/demo/place [Thu Nov 5 11:38:01.370000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:61428] QUERY OK db=51.5ms queue=1.0ms idle=1062.9ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`amount`,`order_reference`,`needs_attention`,`success_url`,`cancel_url`,`failure_url`,`captured_amount`,`refunded_amount`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["ec8214ae-fa7f-4bd2-8acd-3d186d000c69", "new", "AED", "demostore", Decimal.new("850.00"), "DEMO-7D49D767", false, "http://demo.ctrmv.com:4030/tabby/demo/result/success?lang=en&order=DEMO-7D49D767", "http://demo.ctrmv.com:4030/tabby/demo/result/cancel?lang=en&order=DEMO-7D49D767", "http://demo.ctrmv.com:4030/tabby/demo/result/failure?lang=en&order=DEMO-7D49D767", Decimal.new("0"), Decimal.new("0"), ~N[2026-11-05 11:38:01], ~N[2026-11-05 11:38:01]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Thu Nov 5 11:38:01.633000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:37648] POST /tabby-sim/api/v2/checkout [Thu Nov 5 11:38:01.635000 2026] [Phoenix.Logger:debug] [pid 2547400] [client 127.0.0.1:37648] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/ec8214ae-fa7f-4bd2-8acd-3d186d000c69/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/ec8214ae-fa7f-4bd2-8acd-3d186d000c69/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/ec8214ae-fa7f-4bd2-8acd-3d186d000c69/success"}, "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-7D49D767"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 11:38:01.639000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK source="tabby_sim_faults" db=2.8ms queue=1.3ms idle=1380.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 11:38:01.675000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK db=32.7ms queue=0.5ms idle=1387.0ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`lang`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`buyer_history`,`is_test`,`shipping_address`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["79ca9d9b-4c7a-4c80-ba71-4203aadb2a07", "CREATED", "AED", "1072b3e2-a1c4-4bf9-80dd-446ec3b8517d", "demostore", ~U[2026-11-05 11:50:01Z], %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/ec8214ae-fa7f-4bd2-8acd-3d186d000c69/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/ec8214ae-fa7f-4bd2-8acd-3d186d000c69/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/ec8214ae-fa7f-4bd2-8acd-3d186d000c69/success"}, "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-7D49D767"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "0", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo headphones", "unit_price" => "650"}, %{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo smartwatch", "unit_price" => "200"}], "reference_id" => "DEMO-7D49D767", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "en", %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "created", %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/ec8214ae-fa7f-4bd2-8acd-3d186d000c69/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/ec8214ae-fa7f-4bd2-8acd-3d186d000c69/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/ec8214ae-fa7f-4bd2-8acd-3d186d000c69/success"}, ~U[2026-11-05 11:48:01Z], false, Decimal.new("850.00"), [], [], %{"registered_since" => "2023-02-01T10:00:00Z"}, true, %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}, ~N[2026-11-05 11:38:01], ~N[2026-11-05 11:38:01]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 11:38:01.676000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2547400] [client 127.0.0.1:37648] [TabbySim] checkout payment=79ca9d9b-4c7a-4c80-ba71-4203aadb2a07 session=1072b3e2-a1c4-4bf9-80dd-446ec3b8517d decision=created reason=nil amount=850.00 AED [Thu Nov 5 11:38:01.678000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK source="tabby_sim_payments" db=2.3ms idle=1385.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:38:01.682000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:37648] Sent 200 in 48ms [Thu Nov 5 11:38:01.687000 2026] [DaProductApp.Tabby.Client:info] [pid 2547400] [client 115.99.167.137:61428] [Tabby] checkout post /api/v2/checkout -> 200 (316 ms, attempt 1) [Thu Nov 5 11:38:01.687000 2026] [DaProductApp.Tabby.Client:info] [pid 2547400] [client 115.99.167.137:61428] [Tabby] session created payment=79ca9d9b-4c7a-4c80-ba71-4203aadb2a07 [Thu Nov 5 11:38:01.695000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:61428] QUERY OK source="tabby_payments" db=6.8ms idle=632.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["ec8214ae-fa7f-4bd2-8acd-3d186d000c69"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Thu Nov 5 11:38:01.740000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:61428] QUERY OK source="tabby_payments" db=42.6ms queue=0.7ms idle=556.8ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-05 11:58:01Z], "79ca9d9b-4c7a-4c80-ba71-4203aadb2a07", "1072b3e2-a1c4-4bf9-80dd-446ec3b8517d", ~N[2026-11-05 11:38:01], "ec8214ae-fa7f-4bd2-8acd-3d186d000c69"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Thu Nov 5 11:38:01.740000 2026] [DaProductApp.Tabby.Sessions:info] [pid 2547400] [client 115.99.167.137:61428] [Tabby] session created attempt=ec8214ae-fa7f-4bd2-8acd-3d186d000c69 payment=79ca9d9b-4c7a-4c80-ba71-4203aadb2a07 [Thu Nov 5 11:38:01.749000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] Sent 200 in 432ms [Thu Nov 5 11:38:02.286000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] GET /tabby-sim/hpp/1072b3e2-a1c4-4bf9-80dd-446ec3b8517d [Thu Nov 5 11:38:02.287000 2026] [Phoenix.Logger:debug] [pid 2547400] [client 115.99.167.137:61428] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "1072b3e2-a1c4-4bf9-80dd-446ec3b8517d"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 11:38:02.288000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:61428] QUERY OK source="tabby_sim_payments" db=0.6ms idle=781.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["1072b3e2-a1c4-4bf9-80dd-446ec3b8517d"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 11:38:02.288000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] Sent 200 in 2ms [Thu Nov 5 11:38:11.429000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.5ms queue=0.5ms idle=391.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["demostore", ~U[2026-10-18 11:38:11Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:38:11.430000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.5ms queue=0.4ms idle=174.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["demostore", ~N[2026-11-05 11:36:11], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:38:11.432000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.3ms queue=0.7ms idle=176.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:38:11.433000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.3ms queue=0.6ms idle=177.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", ~N[2026-11-05 11:36:11], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:38:11.435000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.4ms queue=0.4ms idle=179.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["demostore", ~U[2026-11-05 11:33:11Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:38:11.436000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_webhook_events" db=0.5ms queue=0.4ms idle=180.4ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-05 11:36:11Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Thu Nov 5 11:38:11.441000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_refunds" db=0.5ms queue=0.6ms idle=184.7ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["demostore", ~N[2026-11-05 11:36:11], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Thu Nov 5 11:38:11.442000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.4ms queue=0.5ms idle=186.3ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 11:38:11.443000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.3ms queue=0.3ms idle=114.1ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["demostore", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 11:38:11.444000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_webhook_events" db=0.3ms queue=0.4ms idle=21.8ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Thu Nov 5 11:38:11.445000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_refunds" db=0.3ms queue=0.4ms idle=15.4ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Thu Nov 5 11:38:11.445000 2026] [DaProductApp.Tabby.Poller:debug] [pid 2547400] [client -] [Tabby] poll: nothing to do; 1 attempt(s) still watched [Thu Nov 5 11:38:20.714000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] POST /tabby-sim/hpp/1072b3e2-a1c4-4bf9-80dd-446ec3b8517d [Thu Nov 5 11:38:20.714000 2026] [Phoenix.Logger:debug] [pid 2547400] [client 115.99.167.137:61428] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "approve", "otp" => "8888", "plan" => "4", "session_id" => "1072b3e2-a1c4-4bf9-80dd-446ec3b8517d", "ui" => "1"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 11:38:20.716000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:61428] QUERY OK source="tabby_sim_payments" db=1.5ms idle=1459.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["1072b3e2-a1c4-4bf9-80dd-446ec3b8517d"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 11:38:20.742000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:61428] QUERY OK source="tabby_sim_payments" db=25.0ms idle=1461.5ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["AUTHORIZED", ~N[2026-11-05 11:38:20], "79ca9d9b-4c7a-4c80-ba71-4203aadb2a07", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 11:38:20.742000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2547400] [client 115.99.167.137:61428] [TabbySim] payment=79ca9d9b-4c7a-4c80-ba71-4203aadb2a07 CREATED -> AUTHORIZED [Thu Nov 5 11:38:20.743000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:61428] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1487.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["79ca9d9b-4c7a-4c80-ba71-4203aadb2a07"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 11:38:20.744000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:61428] QUERY OK source="tabby_sim_webhooks" db=0.3ms queue=0.1ms idle=1488.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 11:38:20.794000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2547400] [client 115.99.167.137:61428] [TabbySim] webhook queued job=403123 event=authorize payment=79ca9d9b-4c7a-4c80-ba71-4203aadb2a07 webhook=53 [Thu Nov 5 11:38:20.795000 2026] [DaProductApp.TabbySim.Hpp:info] [pid 2547400] [client 115.99.167.137:61428] [TabbySim] hpp payment=79ca9d9b-4c7a-4c80-ba71-4203aadb2a07 action=approve status=AUTHORIZED [Thu Nov 5 11:38:20.796000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:61428] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1540.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["1072b3e2-a1c4-4bf9-80dd-446ec3b8517d"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 11:38:20.796000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] Sent 200 in 82ms [Thu Nov 5 11:38:20.884000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_webhooks" db=0.9ms idle=522.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 11:38:21.131000 2026] [Phoenix.Logger:info] [pid 2547400] [client 78.47.213.209:40726] POST /tabby/webhooks [Thu Nov 5 11:38:21.132000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 78.47.213.209:40726] QUERY OK source="tabby_payments" db=0.9ms idle=415.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["79ca9d9b-4c7a-4c80-ba71-4203aadb2a07"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 11:38:21.165000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 78.47.213.209:40726] QUERY OK db=31.7ms queue=0.3ms idle=390.9ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["authorized", false, "79ca9d9b-4c7a-4c80-ba71-4203aadb2a07", "{\"amount\":\"850\",\"captures\":[],\"closed_at\":null,\"created_at\":\"2026-11-05T11:38:01Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T11:50:01Z\",\"id\":\"79ca9d9b-4c7a-4c80-ba71-4203aadb2a07\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-7D49D767\"},\"refunds\":[],\"status\":\"authorized\",\"token\":null}", ~U[2026-11-05 11:38:21Z], ~N[2026-11-05 11:38:21], ~N[2026-11-05 11:38:21]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 11:38:21.199000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2547400] [client 78.47.213.209:40726] [Tabby] webhook 200: event=30 payment=79ca9d9b-4c7a-4c80-ba71-4203aadb2a07 saved and queued [Thu Nov 5 11:38:21.199000 2026] [Phoenix.Logger:info] [pid 2547400] [client 78.47.213.209:40726] Sent 200 in 68ms [Thu Nov 5 11:38:21.232000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK db=32.0ms queue=0.4ms idle=405.5ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "authorize", ~U[2026-11-05 11:38:21Z], "79ca9d9b-4c7a-4c80-ba71-4203aadb2a07", 53, 200, 315, %{"amount" => "850", "captures" => [], "closed_at" => nil, "created_at" => "2026-11-05T11:38:01Z", "currency" => "AED", "expires_at" => "2026-11-05T11:50:01Z", "id" => "79ca9d9b-4c7a-4c80-ba71-4203aadb2a07", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-7D49D767"}, "refunds" => [], "status" => "authorized", "token" => nil}, ~N[2026-11-05 11:38:21], ~N[2026-11-05 11:38:21]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 11:38:21.233000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2547400] [client -] [TabbySim] webhook attempt=1 success event=authorize payment=79ca9d9b-4c7a-4c80-ba71-4203aadb2a07 url=http://demo.ctrmv.com:4030/tabby/webhooks (315 ms) [Thu Nov 5 11:38:21.300000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_webhook_events" db=0.6ms idle=362.8ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [30] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 11:38:21.301000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.7ms queue=0.1ms idle=277.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["79ca9d9b-4c7a-4c80-ba71-4203aadb2a07"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 11:38:21.302000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.4ms queue=0.1ms idle=169.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["ec8214ae-fa7f-4bd2-8acd-3d186d000c69"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 11:38:21.560000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:37648] GET /tabby-sim/api/v2/payments/79ca9d9b-4c7a-4c80-ba71-4203aadb2a07 [Thu Nov 5 11:38:21.560000 2026] [Phoenix.Logger:debug] [pid 2547400] [client 127.0.0.1:37648] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "79ca9d9b-4c7a-4c80-ba71-4203aadb2a07"} Pipelines: [:tabby_sim_api] [Thu Nov 5 11:38:21.561000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK source="tabby_sim_faults" db=1.2ms idle=327.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "79ca9d9b-4c7a-4c80-ba71-4203aadb2a07"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 11:38:21.562000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK source="tabby_sim_faults" db=0.4ms idle=294.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 11:38:21.564000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK source="tabby_sim_payments" db=0.8ms idle=263.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["79ca9d9b-4c7a-4c80-ba71-4203aadb2a07"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Thu Nov 5 11:38:21.564000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:37648] Sent 200 in 4ms [Thu Nov 5 11:38:21.564000 2026] [DaProductApp.Tabby.Client:info] [pid 2547400] [client -] [Tabby] retrieve get /api/v2/payments/79ca9d9b-4c7a-4c80-ba71-4203aadb2a07 -> 200 (262 ms, attempt 1) [Thu Nov 5 11:38:21.601000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=35.7ms idle=264.4ms UPDATE `tabby_payments` AS t0 SET t0.`authorized_at` = ?, t0.`winner_key` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [~U[2026-11-05 11:38:21Z], "9a891723abaf6a7ff9cd23e5259ac74dbd7d85c4041b43fc03b779de68f80a67", "authorized", ~N[2026-11-05 11:38:21], "ec8214ae-fa7f-4bd2-8acd-3d186d000c69", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 11:38:21.602000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=299.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["ec8214ae-fa7f-4bd2-8acd-3d186d000c69"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 11:38:21.602000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2547400] [client -] [Tabby] verify: attempt=ec8214ae-fa7f-4bd2-8acd-3d186d000c69 payment=79ca9d9b-4c7a-4c80-ba71-4203aadb2a07 created -> authorized [Thu Nov 5 11:38:21.664000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_webhook_events" db=30.7ms idle=276.5ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 11:38:21Z], 30] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 11:38:21.664000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2547400] [client -] [Tabby] webhook job: event=30 payment=79ca9d9b-4c7a-4c80-ba71-4203aadb2a07 processed (recorded authorized) [Thu Nov 5 11:38:21.740000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=178.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["ec8214ae-fa7f-4bd2-8acd-3d186d000c69"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 11:38:21.799000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=58.9ms idle=178.0ms UPDATE `tabby_payments` AS t0 SET t0.`capture_reference_id` = ?, t0.`claimed_at` = ?, t0.`claimed_by` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["capture-DEMO-7D49D767", ~U[2026-11-05 11:38:21Z], "nonode@nohost", "capturing", ~N[2026-11-05 11:38:21], "ec8214ae-fa7f-4bd2-8acd-3d186d000c69", "authorized"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 11:38:21.801000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=1.0ms idle=199.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["ec8214ae-fa7f-4bd2-8acd-3d186d000c69"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 11:38:21.801000 2026] [DaProductApp.Tabby.Capture:info] [pid 2547400] [client -] [Tabby] capture: attempt=ec8214ae-fa7f-4bd2-8acd-3d186d000c69 payment=79ca9d9b-4c7a-4c80-ba71-4203aadb2a07 claimed (authorized -> capturing) [Thu Nov 5 11:38:22.032000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:37648] POST /tabby-sim/api/v2/payments/79ca9d9b-4c7a-4c80-ba71-4203aadb2a07/captures [Thu Nov 5 11:38:22.032000 2026] [Phoenix.Logger:debug] [pid 2547400] [client 127.0.0.1:37648] Processing with DaProductAppWeb.TabbySim.PaymentsController.capture/2 Parameters: %{"amount" => "850.00", "id" => "79ca9d9b-4c7a-4c80-ba71-4203aadb2a07", "reference_id" => "capture-DEMO-7D49D767"} Pipelines: [:tabby_sim_api] [Thu Nov 5 11:38:22.034000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK source="tabby_sim_faults" db=1.4ms idle=399.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["capture", "79ca9d9b-4c7a-4c80-ba71-4203aadb2a07"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 11:38:22.035000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK source="tabby_sim_faults" db=1.3ms idle=370.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["capture"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 11:38:22.036000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK source="tabby_sim_payments" db=0.6ms idle=296.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["79ca9d9b-4c7a-4c80-ba71-4203aadb2a07"] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:227 [Thu Nov 5 11:38:22.037000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK db=0.5ms idle=297.3ms begin [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Thu Nov 5 11:38:22.039000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK source="tabby_sim_payments" db=1.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) FOR UPDATE ["79ca9d9b-4c7a-4c80-ba71-4203aadb2a07"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:231 [Thu Nov 5 11:38:22.041000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK source="tabby_sim_payments" db=1.0ms UPDATE `tabby_sim_payments` SET `status` = ?, `captures` = ?, `closed_at` = ?, `updated_at` = ? WHERE `id` = ? ["CLOSED", [%{"amount" => "850", "created_at" => "2026-11-05T11:38:22Z", "discount_amount" => "0", "id" => "0afde8f0-77b6-4384-89f2-809ee1bfe31f", "items" => nil, "reference_id" => "capture-DEMO-7D49D767", "shipping_amount" => "0", "tax_amount" => "0"}], ~U[2026-11-05 11:38:22Z], ~N[2026-11-05 11:38:22], "79ca9d9b-4c7a-4c80-ba71-4203aadb2a07"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:244 [Thu Nov 5 11:38:22.041000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2547400] [client 127.0.0.1:37648] [TabbySim] capture payment=79ca9d9b-4c7a-4c80-ba71-4203aadb2a07 status=CLOSED [Thu Nov 5 11:38:22.098000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK db=56.6ms commit [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Thu Nov 5 11:38:22.099000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK source="tabby_sim_webhooks" db=0.4ms idle=358.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 11:38:22.200000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2547400] [client 127.0.0.1:37648] [TabbySim] webhook queued job=403126 event=capture payment=79ca9d9b-4c7a-4c80-ba71-4203aadb2a07 webhook=53 [Thu Nov 5 11:38:22.201000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:37648] QUERY OK source="tabby_sim_webhooks" db=0.6ms idle=400.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 11:38:22.254000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2547400] [client 127.0.0.1:37648] [TabbySim] webhook queued job=403127 event=close payment=79ca9d9b-4c7a-4c80-ba71-4203aadb2a07 webhook=53 [Thu Nov 5 11:38:22.254000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:37648] Sent 200 in 222ms [Thu Nov 5 11:38:22.255000 2026] [DaProductApp.Tabby.Client:info] [pid 2547400] [client -] [Tabby] capture post /api/v2/payments/79ca9d9b-4c7a-4c80-ba71-4203aadb2a07/captures -> 200 (453 ms, attempt 1) [Thu Nov 5 11:38:22.327000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_webhooks" db=0.6ms idle=292.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 11:38:22.343000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=87.1ms idle=331.0ms UPDATE `tabby_payments` AS t0 SET t0.`captured_amount` = ?, t0.`captured_at` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [Decimal.new("850"), ~U[2026-11-05 11:38:22Z], "captured", ~N[2026-11-05 11:38:22], "ec8214ae-fa7f-4bd2-8acd-3d186d000c69", "capturing"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 11:38:22.344000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=307.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["ec8214ae-fa7f-4bd2-8acd-3d186d000c69"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 11:38:22.344000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2547400] [client -] [Tabby] verify: attempt=ec8214ae-fa7f-4bd2-8acd-3d186d000c69 payment=79ca9d9b-4c7a-4c80-ba71-4203aadb2a07 capturing -> captured [Thu Nov 5 11:38:22.344000 2026] [DaProductApp.Tabby.Capture:info] [pid 2547400] [client -] [Tabby] capture: attempt=ec8214ae-fa7f-4bd2-8acd-3d186d000c69 payment=79ca9d9b-4c7a-4c80-ba71-4203aadb2a07 is captured [Thu Nov 5 11:38:22.617000 2026] [Phoenix.Logger:info] [pid 2547400] [client 78.47.213.209:40726] POST /tabby/webhooks [Thu Nov 5 11:38:22.618000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 78.47.213.209:40726] QUERY OK source="tabby_payments" db=0.8ms idle=363.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["79ca9d9b-4c7a-4c80-ba71-4203aadb2a07"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 11:38:22.675000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 78.47.213.209:40726] QUERY OK db=55.9ms queue=0.3ms idle=292.4ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["authorized", false, "79ca9d9b-4c7a-4c80-ba71-4203aadb2a07", "{\"amount\":\"850\",\"captures\":[{\"amount\":\"850\",\"created_at\":\"2026-11-05T11:38:22Z\",\"discount_amount\":\"0\",\"id\":\"0afde8f0-77b6-4384-89f2-809ee1bfe31f\",\"items\":null,\"reference_id\":\"capture-DEMO-7D49D767\",\"shipping_amount\":\"0\",\"tax_amount\":\"0\"}],\"closed_at\":null,\"created_at\":\"2026-11-05T11:38:01Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T11:50:01Z\",\"id\":\"79ca9d9b-4c7a-4c80-ba71-4203aadb2a07\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-7D49D767\"},\"refunds\":[],\"status\":\"authorized\",\"token\":null}", ~U[2026-11-05 11:38:22Z], ~N[2026-11-05 11:38:22], ~N[2026-11-05 11:38:22]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 11:38:22.717000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2547400] [client 78.47.213.209:40726] [Tabby] webhook 200: event=31 payment=79ca9d9b-4c7a-4c80-ba71-4203aadb2a07 saved and queued [Thu Nov 5 11:38:22.717000 2026] [Phoenix.Logger:info] [pid 2547400] [client 78.47.213.209:40726] Sent 200 in 100ms [Thu Nov 5 11:38:22.740000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK db=22.2ms idle=373.6ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "capture", ~U[2026-11-05 11:38:22Z], "79ca9d9b-4c7a-4c80-ba71-4203aadb2a07", 53, 200, 390, %{"amount" => "850", "captures" => [%{"amount" => "850", "created_at" => "2026-11-05T11:38:22Z", "discount_amount" => "0", "id" => "0afde8f0-77b6-4384-89f2-809ee1bfe31f", "items" => nil, "reference_id" => "capture-DEMO-7D49D767", "shipping_amount" => "0", "tax_amount" => "0"}], "closed_at" => nil, "created_at" => "2026-11-05T11:38:01Z", "currency" => "AED", "expires_at" => "2026-11-05T11:50:01Z", "id" => "79ca9d9b-4c7a-4c80-ba71-4203aadb2a07", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-7D49D767"}, "refunds" => [], "status" => "authorized", "token" => nil}, ~N[2026-11-05 11:38:22], ~N[2026-11-05 11:38:22]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 11:38:22.740000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2547400] [client -] [TabbySim] webhook attempt=1 success event=capture payment=79ca9d9b-4c7a-4c80-ba71-4203aadb2a07 url=http://demo.ctrmv.com:4030/tabby/webhooks (390 ms) [Thu Nov 5 11:38:22.804000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_webhook_events" db=0.6ms idle=390.9ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [31] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 11:38:22.805000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.7ms queue=0.1ms idle=308.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["79ca9d9b-4c7a-4c80-ba71-4203aadb2a07"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 11:38:22.805000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.3ms idle=187.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["ec8214ae-fa7f-4bd2-8acd-3d186d000c69"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 11:38:22.849000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_webhook_events" db=43.4ms idle=131.1ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 11:38:22Z], 31] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 11:38:22.849000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2547400] [client -] [Tabby] webhook job: event=31 payment=79ca9d9b-4c7a-4c80-ba71-4203aadb2a07 processed (already_final) [Thu Nov 5 11:38:23.533000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] GET /tabby/return/ec8214ae-fa7f-4bd2-8acd-3d186d000c69/success [Thu Nov 5 11:38:23.534000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:61428] QUERY OK source="tabby_payments" db=0.3ms queue=0.1ms idle=729.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["ec8214ae-fa7f-4bd2-8acd-3d186d000c69"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 11:38:23.569000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] Sent 302 in 36ms [Thu Nov 5 11:38:23.652000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=766.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["ec8214ae-fa7f-4bd2-8acd-3d186d000c69"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 11:38:23.980000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] GET /tabby/demo/result/success [Thu Nov 5 11:38:23.980000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] Sent 200 in 467µs [Thu Nov 5 11:38:24.431000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] GET /tabby/demo/status/ec8214ae-fa7f-4bd2-8acd-3d186d000c69 [Thu Nov 5 11:38:24.432000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:61428] QUERY OK source="tabby_payments" db=0.7ms queue=0.1ms idle=895.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["ec8214ae-fa7f-4bd2-8acd-3d186d000c69"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 11:38:24.432000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] Sent 200 in 1ms [Thu Nov 5 11:38:24.550000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_webhooks" db=0.3ms idle=897.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 11:38:24.801000 2026] [Phoenix.Logger:info] [pid 2547400] [client 78.47.213.209:40726] POST /tabby/webhooks [Thu Nov 5 11:38:24.803000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 78.47.213.209:40726] QUERY OK source="tabby_payments" db=0.8ms queue=0.3ms idle=933.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["79ca9d9b-4c7a-4c80-ba71-4203aadb2a07"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 11:38:24.842000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 78.47.213.209:40726] QUERY OK db=38.8ms idle=561.8ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["closed", false, "79ca9d9b-4c7a-4c80-ba71-4203aadb2a07", "{\"amount\":\"850\",\"captures\":[{\"amount\":\"850\",\"created_at\":\"2026-11-05T11:38:22Z\",\"discount_amount\":\"0\",\"id\":\"0afde8f0-77b6-4384-89f2-809ee1bfe31f\",\"items\":null,\"reference_id\":\"capture-DEMO-7D49D767\",\"shipping_amount\":\"0\",\"tax_amount\":\"0\"}],\"closed_at\":\"2026-11-05T11:38:22Z\",\"created_at\":\"2026-11-05T11:38:01Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T11:50:01Z\",\"id\":\"79ca9d9b-4c7a-4c80-ba71-4203aadb2a07\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-7D49D767\"},\"refunds\":[],\"status\":\"closed\",\"token\":null}", ~U[2026-11-05 11:38:24Z], ~N[2026-11-05 11:38:24], ~N[2026-11-05 11:38:24]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 11:38:24.885000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2547400] [client 78.47.213.209:40726] [Tabby] webhook 200: event=32 payment=79ca9d9b-4c7a-4c80-ba71-4203aadb2a07 saved and queued [Thu Nov 5 11:38:24.885000 2026] [Phoenix.Logger:info] [pid 2547400] [client 78.47.213.209:40726] Sent 200 in 83ms [Thu Nov 5 11:38:24.990000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_webhook_events" db=1.0ms idle=438.7ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [32] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 11:38:24.991000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=395.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["79ca9d9b-4c7a-4c80-ba71-4203aadb2a07"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 11:38:24.992000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.3ms queue=0.2ms idle=311.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["ec8214ae-fa7f-4bd2-8acd-3d186d000c69"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 11:38:25.007000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK db=120.1ms queue=0.5ms idle=418.6ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "close", ~U[2026-11-05 11:38:24Z], "79ca9d9b-4c7a-4c80-ba71-4203aadb2a07", 53, 200, 336, %{"amount" => "850", "captures" => [%{"amount" => "850", "created_at" => "2026-11-05T11:38:22Z", "discount_amount" => "0", "id" => "0afde8f0-77b6-4384-89f2-809ee1bfe31f", "items" => nil, "reference_id" => "capture-DEMO-7D49D767", "shipping_amount" => "0", "tax_amount" => "0"}], "closed_at" => "2026-11-05T11:38:22Z", "created_at" => "2026-11-05T11:38:01Z", "currency" => "AED", "expires_at" => "2026-11-05T11:50:01Z", "id" => "79ca9d9b-4c7a-4c80-ba71-4203aadb2a07", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-7D49D767"}, "refunds" => [], "status" => "closed", "token" => nil}, ~N[2026-11-05 11:38:24], ~N[2026-11-05 11:38:24]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 11:38:25.007000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2547400] [client -] [TabbySim] webhook attempt=1 success event=close payment=79ca9d9b-4c7a-4c80-ba71-4203aadb2a07 url=http://demo.ctrmv.com:4030/tabby/webhooks (336 ms) [Thu Nov 5 11:38:25.058000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_webhook_events" db=66.6ms idle=280.1ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 11:38:24Z], 32] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 11:38:25.059000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2547400] [client -] [Tabby] webhook job: event=32 payment=79ca9d9b-4c7a-4c80-ba71-4203aadb2a07 processed (already_final) [Thu Nov 5 11:38:43.911000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] GET /tabby/demo [Thu Nov 5 11:38:43.913000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] Sent 200 in 2ms [Thu Nov 5 11:38:44.369000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] POST /tabby/demo/summary [Thu Nov 5 11:38:44.369000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] Sent 200 in 673µs [Thu Nov 5 11:38:45.243000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] POST /tabby/demo/eligibility [Thu Nov 5 11:38:45.469000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:56320] POST /tabby-sim/api/v2/checkout [Thu Nov 5 11:38:45.469000 2026] [Phoenix.Logger:debug] [pid 2547400] [client 127.0.0.1:56320] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 11:38:45.471000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:56320] QUERY OK source="tabby_sim_faults" db=1.1ms idle=1214.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 11:38:45.511000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:56320] QUERY OK db=39.6ms queue=0.4ms idle=945.0ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`is_test`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["349e0131-485f-4675-a54b-9a22e7f4025d", "CREATED", "AED", "ca273bcd-01cc-428c-918f-fa1776968a9e", "demostore", ~U[2026-11-05 11:50:45Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "created", %{"cancel" => nil, "failure" => nil, "success" => nil}, ~U[2026-11-05 11:48:45Z], false, Decimal.new("850.00"), [], [], true, ~N[2026-11-05 11:38:45], ~N[2026-11-05 11:38:45]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 11:38:45.512000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2547400] [client 127.0.0.1:56320] [TabbySim] checkout payment=349e0131-485f-4675-a54b-9a22e7f4025d session=ca273bcd-01cc-428c-918f-fa1776968a9e decision=created reason=nil amount=850.00 AED [Thu Nov 5 11:38:45.513000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:56320] QUERY OK source="tabby_sim_payments" db=0.9ms idle=456.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:38:45.515000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:56320] Sent 200 in 46ms [Thu Nov 5 11:38:45.516000 2026] [DaProductApp.Tabby.Client:info] [pid 2547400] [client 115.99.167.137:61428] [Tabby] checkout post /api/v2/checkout -> 200 (272 ms, attempt 1) [Thu Nov 5 11:38:45.517000 2026] [DaProductApp.Tabby.Client:info] [pid 2547400] [client 115.99.167.137:61428] [Tabby] session created payment=349e0131-485f-4675-a54b-9a22e7f4025d [Thu Nov 5 11:38:45.517000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2547400] [client 115.99.167.137:61428] [Tabby] eligibility: show (amount=850.00 AED) [Thu Nov 5 11:38:45.517000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:61428] Sent 200 in 274ms [Thu Nov 5 11:38:51.724000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=468.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:38:51Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:38:51.725000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2547400] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 11:38:51.727000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=1.6ms queue=0.1ms idle=469.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:38:51Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 11:38:51.727000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=472.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:38:51.783000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2547400] [client -] [TabbySim] expiry job 403131 scheduled in 60s (5 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 11:39:53.303000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=349.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:39:53Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:39:53.304000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2547400] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 11:39:53.305000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=48.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:39:53Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 11:39:53.306000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=49.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:39:53.362000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2547400] [client -] [TabbySim] expiry job 403133 scheduled in 60s (5 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 11:40:12.119000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=1.5ms idle=860.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["demostore", ~U[2026-10-18 11:40:12Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:40:12.121000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=1.6ms queue=0.4ms idle=862.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["demostore", ~N[2026-11-05 11:38:12], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:40:12.122000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.9ms idle=864.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:40:12.124000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=866.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", ~N[2026-11-05 11:38:12], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:40:12.125000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=1.2ms idle=866.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["demostore", ~U[2026-11-05 11:35:12Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:40:12.127000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_webhook_events" db=1.2ms idle=869.1ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-05 11:38:12Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Thu Nov 5 11:40:12.129000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_refunds" db=0.9ms idle=870.6ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["demostore", ~N[2026-11-05 11:38:12], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Thu Nov 5 11:40:12.130000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=1.5ms idle=871.6ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 11:40:12.132000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=1.3ms queue=0.1ms idle=96.6ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["demostore", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 11:40:12.133000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_webhook_events" db=0.6ms idle=15.8ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Thu Nov 5 11:40:12.134000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_refunds" db=1.0ms idle=14.7ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Thu Nov 5 11:40:12.134000 2026] [DaProductApp.Tabby.Poller:debug] [pid 2547400] [client -] [Tabby] poll: nothing to do; 0 attempt(s) still watched [Thu Nov 5 11:40:54.485000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1226.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:40:54Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:40:54.486000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2547400] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 11:40:54.487000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1228.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:40:54Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 11:40:54.487000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1229.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:40:54.534000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2547400] [client -] [TabbySim] expiry job 403140 scheduled in 60s (5 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 11:41:55.855000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1592.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:41:55Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:41:55.856000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2547400] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 11:41:55.857000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1593.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:41:55Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 11:41:55.858000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1594.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:41:55.889000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2547400] [client -] [TabbySim] expiry job 403141 scheduled in 60s (5 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 11:42:56.243000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1970.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:42:56Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:42:56.243000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2547400] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 11:42:56.245000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=1.3ms idle=1971.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:42:56Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 11:42:56.246000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1087.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:42:56.282000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2547400] [client -] [TabbySim] expiry job 403146 scheduled in 60s (5 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 11:43:57.475000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1198.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:43:57Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:43:57.475000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2547400] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 11:43:57.476000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1199.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:43:57Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 11:43:57.477000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1200.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:43:57.510000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2547400] [client -] [TabbySim] expiry job 403147 scheduled in 60s (5 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 11:44:30.010000 2026] [Oban.Peer:warn] [pid 2547400] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Thu Nov 5 11:44:35.017000 2026] [Oban.Peer:warn] [pid 2547400] [client -] [message: "Oban.Peer.leader?/2 check failed due to {:timeout, {GenServer, :call, [#PID<0.667.0>, :leader?, 5000]}}", source: :oban, module: Oban.Peer] [Thu Nov 5 11:44:58.554000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=274.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:44:58Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:44:58.554000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2547400] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 11:44:58.556000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms queue=0.1ms idle=275.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:44:58Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 11:44:58.557000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=277.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:44:58.607000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2547400] [client -] [TabbySim] expiry job 403151 scheduled in 60s (5 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 11:45:33.849000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="global_table" db=0.8ms idle=1555.7ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 11:46:00.021000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1738.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:46:00Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:46:00.021000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2547400] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 11:46:00.022000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms queue=0.1ms idle=1740.2ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:46:00Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 11:46:00.023000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1741.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:46:00.083000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2547400] [client -] [TabbySim] expiry job 403156 scheduled in 60s (5 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 11:47:01.327000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1044.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:47:01Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:47:01.327000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2547400] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 11:47:01.328000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1045.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:47:01Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 11:47:01.329000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms queue=0.1ms idle=1046.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:47:01.400000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2547400] [client -] [TabbySim] expiry job 403161 scheduled in 46s (5 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 11:47:48.583000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=1.6ms idle=1300.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:47:48Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:47:48.661000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=77.2ms idle=1302.8ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 11:47:48], true, "51cc61f1-7da0-4c44-ba51-8a9e210e9ceb", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 11:47:48.661000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2547400] [client -] [TabbySim] payment=51cc61f1-7da0-4c44-ba51-8a9e210e9ceb CREATED -> EXPIRED [Thu Nov 5 11:47:48.663000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1172.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["51cc61f1-7da0-4c44-ba51-8a9e210e9ceb"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 11:47:48.663000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2547400] [client -] [TabbySim] webhook not sent: event=expire payment=51cc61f1-7da0-4c44-ba51-8a9e210e9ceb [Thu Nov 5 11:47:48.668000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2547400] [client -] [TabbySim] payment=51cc61f1-7da0-4c44-ba51-8a9e210e9ceb expired (expires_at 2026-11-05 11:47:47Z, session_status=created) [Thu Nov 5 11:47:48.669000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=387.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:47:48Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:47:48.669000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2547400] [client -] [TabbySim] expiry job: 1 payment(s) were due [Thu Nov 5 11:47:48.671000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=1.7ms idle=388.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:47:48Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 11:47:48.672000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.3ms idle=390.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:47:48.788000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2547400] [client -] [TabbySim] expiry job 403162 scheduled in 17s (4 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 11:48:06.711000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=428.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:48:06Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:48:06.796000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=84.7ms idle=430.1ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 11:48:06], true, "bc08a9bf-a0b3-4c41-b39e-f74c1dccec16", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 11:48:06.796000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2547400] [client -] [TabbySim] payment=bc08a9bf-a0b3-4c41-b39e-f74c1dccec16 CREATED -> EXPIRED [Thu Nov 5 11:48:06.797000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=515.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["bc08a9bf-a0b3-4c41-b39e-f74c1dccec16"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 11:48:06.797000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2547400] [client -] [TabbySim] webhook not sent: event=expire payment=bc08a9bf-a0b3-4c41-b39e-f74c1dccec16 [Thu Nov 5 11:48:06.797000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2547400] [client -] [TabbySim] payment=bc08a9bf-a0b3-4c41-b39e-f74c1dccec16 expired (expires_at 2026-11-05 11:48:05Z, session_status=created) [Thu Nov 5 11:48:06.798000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=516.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:48:06Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:48:06.798000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2547400] [client -] [TabbySim] expiry job: 1 payment(s) were due [Thu Nov 5 11:48:06.799000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=517.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:48:06Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 11:48:06.801000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=1.3ms queue=0.1ms idle=518.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:48:06.892000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2547400] [client -] [TabbySim] expiry job 403165 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 11:49:08.014000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1727.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:49:08Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:49:08.015000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2547400] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 11:49:08.016000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1728.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:49:08Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 11:49:08.017000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1729.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:49:08.056000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2547400] [client -] [TabbySim] expiry job 403166 scheduled in 24s (3 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 11:49:33.192000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=1.3ms idle=1903.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:49:33Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:49:33.274000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=81.9ms idle=1905.4ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 11:49:33], true, "0c23d069-a70b-4a13-949b-f9451e00985c", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 11:49:33.275000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2547400] [client -] [TabbySim] payment=0c23d069-a70b-4a13-949b-f9451e00985c CREATED -> EXPIRED [Thu Nov 5 11:49:33.276000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=1.4ms queue=0.2ms idle=1987.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["0c23d069-a70b-4a13-949b-f9451e00985c"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 11:49:33.277000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2547400] [client -] [TabbySim] webhook not sent: event=expire payment=0c23d069-a70b-4a13-949b-f9451e00985c [Thu Nov 5 11:49:33.277000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2547400] [client -] [TabbySim] payment=0c23d069-a70b-4a13-949b-f9451e00985c expired (expires_at 2026-11-05 11:49:32Z, session_status=created) [Thu Nov 5 11:49:33.279000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.1ms idle=1174.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:49:33Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:49:33.279000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2547400] [client -] [TabbySim] expiry job: 1 payment(s) were due [Thu Nov 5 11:49:33.280000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1161.2ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:49:33Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 11:49:33.281000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=993.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:49:33.387000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2547400] [client -] [TabbySim] expiry job 403167 scheduled in 19s (2 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 11:49:54.292000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1003.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:49:54Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:49:54.338000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=46.0ms idle=67.8ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 11:49:54], true, "d3a67956-af8b-497a-bf6c-63b088c48792", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 11:49:54.339000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2547400] [client -] [TabbySim] payment=d3a67956-af8b-497a-bf6c-63b088c48792 CREATED -> EXPIRED [Thu Nov 5 11:49:54.343000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=3.0ms idle=51.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["d3a67956-af8b-497a-bf6c-63b088c48792"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 11:49:54.343000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2547400] [client -] [TabbySim] webhook not sent: event=expire payment=d3a67956-af8b-497a-bf6c-63b088c48792 [Thu Nov 5 11:49:54.343000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2547400] [client -] [TabbySim] payment=d3a67956-af8b-497a-bf6c-63b088c48792 expired (expires_at 2026-11-05 11:49:52Z, session_status=created) [Thu Nov 5 11:49:54.344000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=55.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:49:54Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:49:54.344000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2547400] [client -] [TabbySim] expiry job: 1 payment(s) were due [Thu Nov 5 11:49:54.345000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=56.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:49:54Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 11:49:54.347000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms queue=0.1ms idle=57.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:49:54.393000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2547400] [client -] [TabbySim] expiry job 403168 scheduled in 51s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 11:50:47.016000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=726.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:50:47Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:50:47.094000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=77.2ms idle=728.1ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 11:50:47], true, "349e0131-485f-4675-a54b-9a22e7f4025d", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 11:50:47.094000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2547400] [client -] [TabbySim] payment=349e0131-485f-4675-a54b-9a22e7f4025d CREATED -> EXPIRED [Thu Nov 5 11:50:47.095000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=806.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["349e0131-485f-4675-a54b-9a22e7f4025d"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 11:50:47.096000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2547400] [client -] [TabbySim] webhook not sent: event=expire payment=349e0131-485f-4675-a54b-9a22e7f4025d [Thu Nov 5 11:50:47.096000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2547400] [client -] [TabbySim] payment=349e0131-485f-4675-a54b-9a22e7f4025d expired (expires_at 2026-11-05 11:50:45Z, session_status=created) [Thu Nov 5 11:50:47.097000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=807.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:50:47Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:50:47.097000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2547400] [client -] [TabbySim] expiry job: 1 payment(s) were due [Thu Nov 5 11:50:47.098000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=808.2ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:50:47Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 11:50:47.098000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=809.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:50:47.098000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2547400] [client -] [TabbySim] expiry job: no CREATED payment left, not rescheduling [Thu Nov 5 11:50:57.529000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:57837] POST /tabby/demo/place [Thu Nov 5 11:50:57.562000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:57837] QUERY OK db=32.0ms queue=0.4ms idle=1240.7ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`amount`,`order_reference`,`needs_attention`,`success_url`,`cancel_url`,`failure_url`,`captured_amount`,`refunded_amount`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["c6d480cc-525a-461f-ae29-06d284b09e16", "new", "AED", "demostore", Decimal.new("850.00"), "DEMO-DD001BC3", false, "http://demo.ctrmv.com:4030/tabby/demo/result/success?lang=en&order=DEMO-DD001BC3", "http://demo.ctrmv.com:4030/tabby/demo/result/cancel?lang=en&order=DEMO-DD001BC3", "http://demo.ctrmv.com:4030/tabby/demo/result/failure?lang=en&order=DEMO-DD001BC3", Decimal.new("0"), Decimal.new("0"), ~N[2026-11-05 11:50:57], ~N[2026-11-05 11:50:57]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Thu Nov 5 11:50:57.828000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:48344] POST /tabby-sim/api/v2/checkout [Thu Nov 5 11:50:57.829000 2026] [Phoenix.Logger:debug] [pid 2547400] [client 127.0.0.1:48344] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/c6d480cc-525a-461f-ae29-06d284b09e16/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/c6d480cc-525a-461f-ae29-06d284b09e16/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/c6d480cc-525a-461f-ae29-06d284b09e16/success"}, "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-DD001BC3"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 11:50:57.830000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:48344] QUERY OK source="tabby_sim_faults" db=1.0ms idle=1539.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 11:50:57.851000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:48344] QUERY OK db=19.7ms queue=0.7ms idle=1541.6ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`lang`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`buyer_history`,`is_test`,`shipping_address`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912", "CREATED", "AED", "819afd8d-3904-430b-92e8-be76d68ecf96", "demostore", ~U[2026-11-05 12:02:57Z], %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/c6d480cc-525a-461f-ae29-06d284b09e16/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/c6d480cc-525a-461f-ae29-06d284b09e16/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/c6d480cc-525a-461f-ae29-06d284b09e16/success"}, "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-DD001BC3"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "0", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo headphones", "unit_price" => "650"}, %{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo smartwatch", "unit_price" => "200"}], "reference_id" => "DEMO-DD001BC3", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, "en", %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "created", %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/c6d480cc-525a-461f-ae29-06d284b09e16/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/c6d480cc-525a-461f-ae29-06d284b09e16/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/c6d480cc-525a-461f-ae29-06d284b09e16/success"}, ~U[2026-11-05 12:00:57Z], false, Decimal.new("850.00"), [], [], %{"registered_since" => "2023-02-01T10:00:00Z"}, true, %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}, ~N[2026-11-05 11:50:57], ~N[2026-11-05 11:50:57]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 11:50:57.852000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2547400] [client 127.0.0.1:48344] [TabbySim] checkout payment=5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912 session=819afd8d-3904-430b-92e8-be76d68ecf96 decision=created reason=nil amount=850.00 AED [Thu Nov 5 11:50:57.853000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:48344] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.1ms idle=1563.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:50:57.919000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2547400] [client 127.0.0.1:48344] [TabbySim] expiry job 403176 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 11:50:57.920000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:48344] Sent 200 in 92ms [Thu Nov 5 11:50:57.922000 2026] [DaProductApp.Tabby.Client:info] [pid 2547400] [client 115.99.167.137:57837] [Tabby] checkout post /api/v2/checkout -> 200 (359 ms, attempt 1) [Thu Nov 5 11:50:57.922000 2026] [DaProductApp.Tabby.Client:info] [pid 2547400] [client 115.99.167.137:57837] [Tabby] session created payment=5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912 [Thu Nov 5 11:50:57.923000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:57837] QUERY OK source="tabby_payments" db=0.6ms idle=598.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["c6d480cc-525a-461f-ae29-06d284b09e16"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Thu Nov 5 11:50:57.960000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:57837] QUERY OK source="tabby_payments" db=35.3ms queue=0.5ms idle=515.5ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-05 12:10:57Z], "5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912", "819afd8d-3904-430b-92e8-be76d68ecf96", ~N[2026-11-05 11:50:57], "c6d480cc-525a-461f-ae29-06d284b09e16"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Thu Nov 5 11:50:57.960000 2026] [DaProductApp.Tabby.Sessions:info] [pid 2547400] [client 115.99.167.137:57837] [Tabby] session created attempt=c6d480cc-525a-461f-ae29-06d284b09e16 payment=5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912 [Thu Nov 5 11:50:58.006000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:57837] Sent 200 in 477ms [Thu Nov 5 11:50:58.440000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:57837] GET /tabby-sim/hpp/819afd8d-3904-430b-92e8-be76d68ecf96 [Thu Nov 5 11:50:58.440000 2026] [Phoenix.Logger:debug] [pid 2547400] [client 115.99.167.137:57837] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "819afd8d-3904-430b-92e8-be76d68ecf96"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 11:50:58.442000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:57837] QUERY OK source="tabby_sim_payments" db=1.6ms idle=586.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["819afd8d-3904-430b-92e8-be76d68ecf96"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 11:50:58.443000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:57837] Sent 200 in 3ms [Thu Nov 5 11:51:23.497000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:57837] POST /tabby-sim/hpp/819afd8d-3904-430b-92e8-be76d68ecf96 [Thu Nov 5 11:51:23.498000 2026] [Phoenix.Logger:debug] [pid 2547400] [client 115.99.167.137:57837] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "approve", "otp" => "1235", "plan" => "6", "session_id" => "819afd8d-3904-430b-92e8-be76d68ecf96", "ui" => "1"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 11:51:23.500000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:57837] QUERY OK source="tabby_sim_payments" db=1.2ms idle=1206.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["819afd8d-3904-430b-92e8-be76d68ecf96"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 11:51:23.500000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:57837] Sent 200 in 3ms [Thu Nov 5 11:51:40.211000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:57837] POST /tabby-sim/hpp/819afd8d-3904-430b-92e8-be76d68ecf96 [Thu Nov 5 11:51:40.212000 2026] [Phoenix.Logger:debug] [pid 2547400] [client 115.99.167.137:57837] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "approve", "otp" => "1235", "plan" => "6", "session_id" => "819afd8d-3904-430b-92e8-be76d68ecf96", "ui" => "1"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 11:51:40.213000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 115.99.167.137:57837] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1918.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["819afd8d-3904-430b-92e8-be76d68ecf96"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 11:51:40.214000 2026] [Phoenix.Logger:info] [pid 2547400] [client 115.99.167.137:57837] Sent 200 in 2ms [Thu Nov 5 11:51:59.512000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1181.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:51:59Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:51:59.512000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2547400] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 11:51:59.513000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=219.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:51:59Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 11:51:59.514000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=220.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:51:59.581000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2547400] [client -] [TabbySim] expiry job 403178 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 11:52:58.347000 2026] [Bandit.Logger:error] [pid 2547400] [client -] ** (Bandit.TransportError) Unrecoverable error: timeout [Thu Nov 5 11:52:59.965000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=1.0ms idle=670.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["demostore", ~U[2026-10-18 11:52:59Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:52:59.967000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=672.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["demostore", ~N[2026-11-05 11:50:59], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:52:59.968000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=673.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:52:59.969000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=674.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", ~N[2026-11-05 11:50:59], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:52:59.970000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=675.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["demostore", ~U[2026-11-05 11:47:59Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:52:59.971000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=676.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["c6d480cc-525a-461f-ae29-06d284b09e16"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 11:53:00.211000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:56670] GET /tabby-sim/api/v2/payments/5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912 [Thu Nov 5 11:53:00.211000 2026] [Phoenix.Logger:debug] [pid 2547400] [client 127.0.0.1:56670] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912"} Pipelines: [:tabby_sim_api] [Thu Nov 5 11:53:00.212000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:56670] QUERY OK source="tabby_sim_faults" db=1.0ms idle=330.2ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 11:53:00.214000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:56670] QUERY OK source="tabby_sim_faults" db=1.1ms idle=248.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 11:53:00.215000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:56670] QUERY OK source="tabby_sim_payments" db=0.7ms idle=248.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Thu Nov 5 11:53:00.215000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:56670] Sent 200 in 4ms [Thu Nov 5 11:53:00.216000 2026] [DaProductApp.Tabby.Client:info] [pid 2547400] [client -] [Tabby] retrieve get /api/v2/payments/5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912 -> 200 (244 ms, attempt 1) [Thu Nov 5 11:53:00.217000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2547400] [client -] [Tabby] verify: attempt=c6d480cc-525a-461f-ae29-06d284b09e16 payment=5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912 is still CREATED at Tabby; it will be looked at again [Thu Nov 5 11:53:00.218000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_webhook_events" db=1.3ms idle=250.4ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-05 11:50:59Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Thu Nov 5 11:53:00.220000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_refunds" db=0.9ms idle=251.3ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["demostore", ~N[2026-11-05 11:50:59], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Thu Nov 5 11:53:00.221000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=251.6ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 11:53:00.222000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.9ms idle=251.2ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["demostore", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 11:53:00.224000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_webhook_events" db=1.0ms idle=251.7ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Thu Nov 5 11:53:00.225000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_refunds" db=0.8ms idle=207.6ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Thu Nov 5 11:53:00.225000 2026] [DaProductApp.Tabby.Poller:info] [pid 2547400] [client -] [Tabby] poll: handled 1 (created:pending=1); 1 attempt(s) still watched [Thu Nov 5 11:53:00.957000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=734.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:53:00Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:53:00.957000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2547400] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 11:53:00.958000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=734.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:53:00Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 11:53:00.959000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.1ms idle=734.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:53:01.049000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2547400] [client -] [TabbySim] expiry job 403184 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 11:54:02.294000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1998.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:54:02Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:54:02.295000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2547400] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 11:54:02.296000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=1.5ms idle=1999.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:54:02Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 11:54:02.300000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=3.4ms idle=121.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:54:02.358000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2547400] [client -] [TabbySim] expiry job 403187 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 11:55:01.663000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=1.0ms idle=1365.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["demostore", ~U[2026-10-18 11:55:01Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:55:01.664000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=1.4ms idle=1366.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["demostore", ~N[2026-11-05 11:53:01], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:55:01.666000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=1.0ms idle=1368.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:55:01.667000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=1369.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", ~N[2026-11-05 11:53:01], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:55:01.668000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=1370.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["demostore", ~U[2026-11-05 11:50:01Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:55:01.669000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.3ms idle=1371.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["c6d480cc-525a-461f-ae29-06d284b09e16"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 11:55:02.089000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:39974] GET /tabby-sim/api/v2/payments/5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912 [Thu Nov 5 11:55:02.089000 2026] [Phoenix.Logger:debug] [pid 2547400] [client 127.0.0.1:39974] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912"} Pipelines: [:tabby_sim_api] [Thu Nov 5 11:55:02.090000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:39974] QUERY OK source="tabby_sim_faults" db=0.4ms queue=0.4ms idle=555.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 11:55:02.092000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:39974] QUERY OK source="tabby_sim_faults" db=1.0ms idle=429.6ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 11:55:02.095000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:39974] QUERY OK source="tabby_sim_payments" db=3.2ms idle=429.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Thu Nov 5 11:55:02.097000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:39974] Sent 200 in 8ms [Thu Nov 5 11:55:02.098000 2026] [DaProductApp.Tabby.Client:info] [pid 2547400] [client -] [Tabby] retrieve get /api/v2/payments/5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912 -> 200 (429 ms, attempt 1) [Thu Nov 5 11:55:02.098000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2547400] [client -] [Tabby] verify: attempt=c6d480cc-525a-461f-ae29-06d284b09e16 payment=5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912 is still CREATED at Tabby; it will be looked at again [Thu Nov 5 11:55:02.100000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_webhook_events" db=1.3ms idle=434.0ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-05 11:53:01Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Thu Nov 5 11:55:02.104000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_refunds" db=2.7ms idle=435.4ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["demostore", ~N[2026-11-05 11:53:01], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Thu Nov 5 11:55:02.108000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=4.0ms idle=437.6ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 11:55:02.116000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=6.4ms idle=440.7ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["demostore", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 11:55:02.119000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_webhook_events" db=2.6ms idle=447.5ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Thu Nov 5 11:55:02.122000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_refunds" db=2.8ms idle=314.6ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Thu Nov 5 11:55:02.122000 2026] [DaProductApp.Tabby.Poller:info] [pid 2547400] [client -] [Tabby] poll: handled 1 (created:pending=1); 1 attempt(s) still watched [Thu Nov 5 11:55:03.932000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=3.7ms queue=1.6ms idle=629.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:55:03Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:55:03.932000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2547400] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 11:55:03.940000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=7.1ms idle=634.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:55:03Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 11:55:03.959000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=4.6ms queue=8.5ms idle=646.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:55:04.077000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2547400] [client -] [TabbySim] expiry job 403191 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 11:55:33.849000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="global_table" db=0.7ms idle=1533.7ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 11:56:05.308000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1006.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:56:05Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:56:05.308000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2547400] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 11:56:05.309000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1007.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:56:05Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 11:56:05.309000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1008.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:56:05.359000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2547400] [client -] [TabbySim] expiry job 403196 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 11:57:03.748000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=2.5ms idle=1442.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["demostore", ~U[2026-10-18 11:57:03Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:57:03.756000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=3.7ms idle=1449.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["demostore", ~N[2026-11-05 11:55:03], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:57:03.763000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=5.8ms idle=1452.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:57:03.770000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=3.4ms idle=1113.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", ~N[2026-11-05 11:55:03], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:57:03.772000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=1.4ms queue=0.6ms idle=464.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["demostore", ~U[2026-11-05 11:52:03Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:57:03.775000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=2.7ms idle=467.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["c6d480cc-525a-461f-ae29-06d284b09e16"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 11:57:05.065000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:51342] GET /tabby-sim/api/v2/payments/5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912 [Thu Nov 5 11:57:05.066000 2026] [Phoenix.Logger:debug] [pid 2547400] [client 127.0.0.1:51342] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912"} Pipelines: [:tabby_sim_api] [Thu Nov 5 11:57:05.068000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:51342] QUERY OK source="tabby_sim_faults" db=1.8ms idle=1321.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 11:57:05.069000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:51342] QUERY OK source="tabby_sim_faults" db=0.4ms idle=1320.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 11:57:05.070000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:51342] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1313.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Thu Nov 5 11:57:05.070000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:51342] Sent 200 in 5ms [Thu Nov 5 11:57:05.071000 2026] [DaProductApp.Tabby.Client:info] [pid 2547400] [client -] [Tabby] retrieve get /api/v2/payments/5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912 -> 200 (1291 ms, attempt 1) [Thu Nov 5 11:57:05.071000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2547400] [client -] [Tabby] verify: attempt=c6d480cc-525a-461f-ae29-06d284b09e16 payment=5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912 is still CREATED at Tabby; it will be looked at again [Thu Nov 5 11:57:05.074000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_webhook_events" db=2.1ms idle=1308.2ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-05 11:55:03Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Thu Nov 5 11:57:05.078000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_refunds" db=2.6ms queue=1.6ms idle=1305.2ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["demostore", ~N[2026-11-05 11:55:03], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Thu Nov 5 11:57:05.082000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=3.5ms idle=1306.2ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 11:57:05.094000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=3.8ms queue=1.7ms idle=1312.8ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["demostore", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 11:57:05.097000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_webhook_events" db=2.3ms queue=0.3ms idle=399.1ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Thu Nov 5 11:57:05.099000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_refunds" db=0.9ms idle=280.6ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Thu Nov 5 11:57:05.099000 2026] [DaProductApp.Tabby.Poller:info] [pid 2547400] [client -] [Tabby] poll: handled 1 (created:pending=1); 1 attempt(s) still watched [Thu Nov 5 11:57:06.993000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=687.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:57:06Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:57:06.993000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2547400] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 11:57:06.997000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms queue=0.1ms idle=690.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:57:06Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 11:57:06.998000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=692.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:57:07.242000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2547400] [client -] [TabbySim] expiry job 403200 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 11:58:08.222000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=1.3ms idle=1909.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:58:08Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:58:08.222000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2547400] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 11:58:08.226000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=1.9ms idle=1911.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:58:08Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 11:58:08.227000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.4ms idle=1915.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:58:08.266000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2547400] [client -] [TabbySim] expiry job 403203 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 11:59:05.452000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=1.0ms idle=1133.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["demostore", ~U[2026-10-18 11:59:05Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:59:05.454000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=1.3ms idle=1134.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["demostore", ~N[2026-11-05 11:57:05], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:59:05.456000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=1.3ms idle=1136.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:59:05.457000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=1.0ms queue=0.1ms idle=1137.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", ~N[2026-11-05 11:57:05], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:59:05.458000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=1139.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["demostore", ~U[2026-11-05 11:54:05Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 11:59:05.459000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=1140.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["c6d480cc-525a-461f-ae29-06d284b09e16"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 11:59:06.072000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:54214] GET /tabby-sim/api/v2/payments/5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912 [Thu Nov 5 11:59:06.073000 2026] [Phoenix.Logger:debug] [pid 2547400] [client 127.0.0.1:54214] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912"} Pipelines: [:tabby_sim_api] [Thu Nov 5 11:59:06.077000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:54214] QUERY OK source="tabby_sim_faults" db=3.1ms queue=0.3ms idle=710.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 11:59:06.079000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:54214] QUERY OK source="tabby_sim_faults" db=0.5ms queue=0.1ms idle=627.2ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 11:59:06.081000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:54214] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.2ms idle=627.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Thu Nov 5 11:59:06.081000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:54214] Sent 200 in 9ms [Thu Nov 5 11:59:06.082000 2026] [DaProductApp.Tabby.Client:info] [pid 2547400] [client -] [Tabby] retrieve get /api/v2/payments/5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912 -> 200 (623 ms, attempt 1) [Thu Nov 5 11:59:06.083000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2547400] [client -] [Tabby] verify: attempt=c6d480cc-525a-461f-ae29-06d284b09e16 payment=5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912 is still CREATED at Tabby; it will be looked at again [Thu Nov 5 11:59:06.085000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_webhook_events" db=1.4ms queue=0.3ms idle=629.1ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-05 11:57:05Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Thu Nov 5 11:59:06.087000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_refunds" db=1.5ms idle=629.8ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["demostore", ~N[2026-11-05 11:57:05], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Thu Nov 5 11:59:06.089000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=1.0ms idle=630.2ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 11:59:06.090000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.6ms queue=0.2ms idle=630.6ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["demostore", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 11:59:06.092000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_webhook_events" db=1.0ms queue=0.3ms idle=631.1ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Thu Nov 5 11:59:06.093000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_refunds" db=0.7ms idle=238.8ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Thu Nov 5 11:59:06.093000 2026] [DaProductApp.Tabby.Poller:info] [pid 2547400] [client -] [Tabby] poll: handled 1 (created:pending=1); 1 attempt(s) still watched [Thu Nov 5 11:59:09.505000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=186.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:59:09Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 11:59:09.505000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2547400] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 11:59:09.506000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=187.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 11:59:09Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 11:59:09.507000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=188.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 11:59:09.554000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2547400] [client -] [TabbySim] expiry job 403205 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:00:00.858000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="report_requests" db=0.4ms queue=0.5ms idle=1539.3ms SELECT r0.`id`, r0.`report_id`, r0.`report_type`, r0.`requester_ref`, r0.`filters`, r0.`status`, r0.`progress_percentage`, r0.`row_count`, r0.`file_path`, r0.`file_size`, r0.`download_token`, r0.`download_count`, r0.`last_downloaded_at`, r0.`error_message`, r0.`expires_at`, r0.`completed_at`, r0.`inserted_at`, r0.`updated_at` FROM `report_requests` AS r0 WHERE (NOT (r0.`expires_at` IS NULL) AND (r0.`expires_at` < ?)) [~U[2026-11-05 12:00:00Z]] ↳ DaProductApp.Workers.ReportRetentionWorker.perform/1, at: lib/da_product_app/workers/report_retention_worker.ex:18 [Thu Nov 5 12:00:00.859000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="report_requests" db=0.7ms queue=0.9ms idle=1539.3ms SELECT r0.`id`, r0.`report_id`, r0.`report_type`, r0.`requester_ref`, r0.`filters`, r0.`status`, r0.`progress_percentage`, r0.`row_count`, r0.`file_path`, r0.`file_size`, r0.`download_token`, r0.`download_count`, r0.`last_downloaded_at`, r0.`error_message`, r0.`expires_at`, r0.`completed_at`, r0.`inserted_at`, r0.`updated_at` FROM `report_requests` AS r0 WHERE (NOT (r0.`expires_at` IS NULL) AND (r0.`expires_at` < ?)) [~U[2026-11-05 12:00:00Z]] ↳ DaProductApp.Workers.ReportRetentionWorker.perform/1, at: lib/da_product_app/workers/report_retention_worker.ex:18 [Thu Nov 5 12:00:00.859000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="report_requests" db=1.2ms queue=0.5ms idle=1539.4ms SELECT r0.`id`, r0.`report_id`, r0.`report_type`, r0.`requester_ref`, r0.`filters`, r0.`status`, r0.`progress_percentage`, r0.`row_count`, r0.`file_path`, r0.`file_size`, r0.`download_token`, r0.`download_count`, r0.`last_downloaded_at`, r0.`error_message`, r0.`expires_at`, r0.`completed_at`, r0.`inserted_at`, r0.`updated_at` FROM `report_requests` AS r0 WHERE (NOT (r0.`expires_at` IS NULL) AND (r0.`expires_at` < ?)) [~U[2026-11-05 12:00:00Z]] ↳ DaProductApp.Workers.ReportRetentionWorker.perform/1, at: lib/da_product_app/workers/report_retention_worker.ex:18 [Thu Nov 5 12:00:01.176000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="report_requests" db=2.1ms queue=0.1ms idle=584.7ms SELECT r0.`id`, r0.`report_id`, r0.`report_type`, r0.`requester_ref`, r0.`filters`, r0.`status`, r0.`progress_percentage`, r0.`row_count`, r0.`file_path`, r0.`file_size`, r0.`download_token`, r0.`download_count`, r0.`last_downloaded_at`, r0.`error_message`, r0.`expires_at`, r0.`completed_at`, r0.`inserted_at`, r0.`updated_at` FROM `report_requests` AS r0 WHERE (NOT (r0.`expires_at` IS NULL) AND (r0.`expires_at` < ?)) [~U[2026-11-05 12:00:01Z]] ↳ DaProductApp.Workers.ReportRetentionWorker.perform/1, at: lib/da_product_app/workers/report_retention_worker.ex:18 [Thu Nov 5 12:00:01.287000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="report_requests" db=0.7ms idle=427.9ms SELECT r0.`id`, r0.`report_id`, r0.`report_type`, r0.`requester_ref`, r0.`filters`, r0.`status`, r0.`progress_percentage`, r0.`row_count`, r0.`file_path`, r0.`file_size`, r0.`download_token`, r0.`download_count`, r0.`last_downloaded_at`, r0.`error_message`, r0.`expires_at`, r0.`completed_at`, r0.`inserted_at`, r0.`updated_at` FROM `report_requests` AS r0 WHERE (NOT (r0.`expires_at` IS NULL) AND (r0.`expires_at` < ?)) [~U[2026-11-05 12:00:01Z]] ↳ DaProductApp.Workers.ReportRetentionWorker.perform/1, at: lib/da_product_app/workers/report_retention_worker.ex:18 [Thu Nov 5 12:00:10.883000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=3.2ms idle=1554.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:00:10Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:00:10.883000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2547400] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:00:10.885000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1176.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:00:10Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:00:10.886000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=560.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:00:10.932000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2547400] [client -] [TabbySim] expiry job 403230 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:01:06.993000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=1664.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["demostore", ~U[2026-10-18 12:01:06Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:01:06.994000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=1.3ms queue=0.1ms idle=1089.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["demostore", ~N[2026-11-05 11:59:06], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:01:06.996000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.9ms queue=0.2ms idle=668.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:01:06.998000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=1.7ms queue=0.1ms idle=669.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", ~N[2026-11-05 11:59:06], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:01:07.000000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=1.4ms idle=671.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["demostore", ~U[2026-11-05 11:56:06Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:01:07.001000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=673.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["c6d480cc-525a-461f-ae29-06d284b09e16"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:01:07.319000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:49834] GET /tabby-sim/api/v2/payments/5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912 [Thu Nov 5 12:01:07.320000 2026] [Phoenix.Logger:debug] [pid 2547400] [client 127.0.0.1:49834] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912"} Pipelines: [:tabby_sim_api] [Thu Nov 5 12:01:07.322000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:49834] QUERY OK source="tabby_sim_faults" db=0.9ms queue=0.1ms idle=415.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 12:01:07.324000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:49834] QUERY OK source="tabby_sim_faults" db=1.6ms idle=330.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:01:07.325000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client 127.0.0.1:49834] QUERY OK source="tabby_sim_payments" db=0.5ms idle=331.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Thu Nov 5 12:01:07.325000 2026] [Phoenix.Logger:info] [pid 2547400] [client 127.0.0.1:49834] Sent 200 in 5ms [Thu Nov 5 12:01:07.326000 2026] [DaProductApp.Tabby.Client:info] [pid 2547400] [client -] [Tabby] retrieve get /api/v2/payments/5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912 -> 200 (325 ms, attempt 1) [Thu Nov 5 12:01:07.326000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2547400] [client -] [Tabby] verify: attempt=c6d480cc-525a-461f-ae29-06d284b09e16 payment=5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912 is still CREATED at Tabby; it will be looked at again [Thu Nov 5 12:01:07.328000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_webhook_events" db=1.3ms idle=332.0ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-05 11:59:06Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Thu Nov 5 12:01:07.330000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_refunds" db=1.1ms idle=332.5ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["demostore", ~N[2026-11-05 11:59:06], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Thu Nov 5 12:01:07.331000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=1.0ms idle=331.7ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 12:01:07.332000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=331.3ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["demostore", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 12:01:07.334000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_webhook_events" db=1.3ms idle=331.6ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Thu Nov 5 12:01:07.335000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_refunds" db=0.5ms idle=236.5ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Thu Nov 5 12:01:07.335000 2026] [DaProductApp.Tabby.Poller:info] [pid 2547400] [client -] [Tabby] poll: handled 1 (created:pending=1); 1 attempt(s) still watched [Thu Nov 5 12:01:12.106000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=777.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:01:12Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:01:12.106000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2547400] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:01:12.107000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.1ms idle=778.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:01:12Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:01:12.108000 2026] [Ecto.Adapters.SQL:debug] [pid 2547400] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=779.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:01:12.134000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2547400] [client -] [TabbySim] expiry job 403232 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:01:26.865000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="global_table" db=2.4ms queue=4.6ms idle=60.9ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 12:01:27.047000 2026] [Bandit:info] [pid 2594513] [client -] Running DaProductAppWeb.Endpoint with Bandit 1.6.7 at 0.0.0.0:4030 (http) [Thu Nov 5 12:01:27.075000 2026] [Phoenix.Endpoint.Supervisor:info] [pid 2594513] [client -] Access DaProductAppWeb.Endpoint at http://localhost:4030 [Thu Nov 5 12:01:27.169000 2026] [DaProductApp.MQTT.Handler:info] [pid 2594513] [client -] Device phoenix_client_node_devteam connected [Thu Nov 5 12:01:28.941000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: priv/static/assets/app.js [Thu Nov 5 12:01:28.941000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: priv/static/assets/app.js [Thu Nov 5 12:01:28.970000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: priv/static/assets/app.js [Thu Nov 5 12:01:28.971000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: priv/static/assets/app.js [Thu Nov 5 12:01:28.971000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: priv/static/assets/app.js [Thu Nov 5 12:01:28.976000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: priv/static/assets/app.js [Thu Nov 5 12:01:28.977000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: priv/static/assets/app.js [Thu Nov 5 12:01:28.977000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: priv/static/assets/app.js [Thu Nov 5 12:01:30.877000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:56575] GET /tabby-sim/hpp/78e0eaf9-c81a-4a03-b803-c9cf6d77dd04 [Thu Nov 5 12:01:30.905000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52117] POST /tabby-sim/hpp/819afd8d-3904-430b-92e8-be76d68ecf96 [Thu Nov 5 12:01:30.919000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] GET /tabby-sim/admin [Thu Nov 5 12:01:30.933000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:50484] Processing with DaProductAppWeb.TabbySim.AdminController.index/2 Parameters: %{} Pipelines: [:tabby_sim_admin] [Thu Nov 5 12:01:30.933000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:56575] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "78e0eaf9-c81a-4a03-b803-c9cf6d77dd04"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:01:30.934000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:52117] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "approve", "otp" => "1235", "plan" => "6", "session_id" => "819afd8d-3904-430b-92e8-be76d68ecf96", "ui" => "1"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:01:30.973000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:50484] QUERY OK source="tabby_sim_faults" db=1.5ms queue=0.6ms idle=381.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (t0.`remaining` > 0) ORDER BY t0.`id` [] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:18 [Thu Nov 5 12:01:30.978000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:56575] QUERY OK source="tabby_sim_payments" db=10.1ms queue=1.6ms idle=377.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["78e0eaf9-c81a-4a03-b803-c9cf6d77dd04"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:01:30.979000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:52117] QUERY OK source="tabby_sim_payments" db=10.9ms queue=1.5ms idle=377.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["819afd8d-3904-430b-92e8-be76d68ecf96"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:01:30.989000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:50484] QUERY OK source="tabby_sim_payments" db=7.2ms queue=0.5ms idle=288.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 ORDER BY t0.`inserted_at` DESC, t0.`id` DESC LIMIT ? [30] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:19 [Thu Nov 5 12:01:31.003000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:56575] Sent 410 in 125ms [Thu Nov 5 12:01:31.003000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52117] Sent 410 in 97ms [Thu Nov 5 12:01:31.016000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:50484] QUERY OK source="tabby_sim_webhook_deliveries" db=1.0ms queue=0.7ms idle=327.8ms SELECT t0.`id`, t0.`payment_id`, t0.`webhook_id`, t0.`event`, t0.`attempt`, t0.`state`, t0.`url`, t0.`http_status`, t0.`request_body`, t0.`response_body`, t0.`error`, t0.`duration_ms`, t0.`attempted_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhook_deliveries` AS t0 ORDER BY t0.`id` DESC LIMIT ? [40] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:20 [Thu Nov 5 12:01:31.021000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:50484] QUERY OK source="tabby_sim_webhooks" db=1.1ms queue=0.6ms idle=330.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 ORDER BY t0.`id` LIMIT 100 [] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:21 [Thu Nov 5 12:01:31.050000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] Sent 200 in 130ms [Thu Nov 5 12:01:40.966000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] POST /tabby-sim/hpp/819afd8d-3904-430b-92e8-be76d68ecf96 [Thu Nov 5 12:01:40.967000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:50484] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "approve", "otp" => "1235", "plan" => "6", "session_id" => "819afd8d-3904-430b-92e8-be76d68ecf96", "ui" => "1"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:01:40.969000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:50484] QUERY OK source="tabby_sim_payments" db=1.3ms queue=0.1ms idle=216.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["819afd8d-3904-430b-92e8-be76d68ecf96"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:01:40.969000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] Sent 410 in 2ms [Thu Nov 5 12:01:44.316000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] GET /tabby-sim/hpp/819afd8d-3904-430b-92e8-be76d68ecf96 [Thu Nov 5 12:01:44.316000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:50484] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "819afd8d-3904-430b-92e8-be76d68ecf96"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:01:44.318000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:50484] QUERY OK source="tabby_sim_payments" db=1.2ms idle=1565.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["819afd8d-3904-430b-92e8-be76d68ecf96"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:01:44.318000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] Sent 410 in 2ms [Thu Nov 5 12:01:46.653000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] GET /tabby-sim/hpp/819afd8d-3904-430b-92e8-be76d68ecf96 [Thu Nov 5 12:01:46.653000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:50484] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "819afd8d-3904-430b-92e8-be76d68ecf96"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:01:46.655000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:50484] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1902.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["819afd8d-3904-430b-92e8-be76d68ecf96"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:01:46.655000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] Sent 410 in 2ms [Thu Nov 5 12:02:13.195000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.5ms idle=1438.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:02:13Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:02:13.195000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:02:13.196000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.4ms idle=1441.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:02:13Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:02:13.199000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms queue=0.3ms idle=1095.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:02:13.231000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403238 scheduled in 44s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:02:17.999000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] GET /tabby-sim/hpp/78e0eaf9-c81a-4a03-b803-c9cf6d77dd04 [Thu Nov 5 12:02:17.999000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:50484] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "78e0eaf9-c81a-4a03-b803-c9cf6d77dd04"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:02:18.001000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:50484] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1245.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["78e0eaf9-c81a-4a03-b803-c9cf6d77dd04"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:02:18.001000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] Sent 410 in 1ms [Thu Nov 5 12:02:19.543000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] GET /tabby/demo [Thu Nov 5 12:02:19.560000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] Sent 200 in 17ms [Thu Nov 5 12:02:20.031000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] POST /tabby/demo/summary [Thu Nov 5 12:02:20.035000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] Sent 200 in 4ms [Thu Nov 5 12:02:20.902000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] POST /tabby/demo/eligibility [Thu Nov 5 12:02:21.265000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:40792] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:02:21.265000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:40792] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:02:21.274000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:40792] QUERY OK source="tabby_sim_faults" db=0.4ms queue=0.4ms idle=1144.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:02:21.342000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:40792] QUERY OK db=54.6ms queue=0.5ms idle=602.3ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`is_test`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["4b581d05-8a68-4ba3-ada6-d0ed6ea5df7b", "CREATED", "AED", "99466862-2756-449e-a081-63b97d80a83d", "demostore", ~U[2026-11-05 12:14:21Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "created", %{"cancel" => nil, "failure" => nil, "success" => nil}, ~U[2026-11-05 12:12:21Z], false, Decimal.new("850.00"), [], [], true, ~N[2026-11-05 12:02:21], ~N[2026-11-05 12:02:21]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:02:21.344000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:40792] [TabbySim] checkout payment=4b581d05-8a68-4ba3-ada6-d0ed6ea5df7b session=99466862-2756-449e-a081-63b97d80a83d decision=created reason=nil amount=850.00 AED [Thu Nov 5 12:02:21.345000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:40792] QUERY OK source="tabby_sim_payments" db=0.8ms idle=591.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:02:21.347000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:40792] Sent 200 in 82ms [Thu Nov 5 12:02:21.356000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:50484] [Tabby] checkout post /api/v2/checkout -> 200 (447 ms, attempt 1) [Thu Nov 5 12:02:21.358000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:50484] [Tabby] session created payment=4b581d05-8a68-4ba3-ada6-d0ed6ea5df7b [Thu Nov 5 12:02:21.358000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2594513] [client 115.99.167.137:50484] [Tabby] eligibility: show (amount=850.00 AED) [Thu Nov 5 12:02:21.358000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] Sent 200 in 456ms [Thu Nov 5 12:02:28.906000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] POST /tabby/demo/place [Thu Nov 5 12:02:28.979000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:50484] QUERY OK db=58.6ms queue=0.4ms idle=762.7ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`amount`,`order_reference`,`needs_attention`,`success_url`,`cancel_url`,`failure_url`,`captured_amount`,`refunded_amount`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["e08868d7-f1ed-44fa-8494-fa47a06ff5ce", "new", "AED", "demostore", Decimal.new("850.00"), "DEMO-04A518F0", false, "http://demo.ctrmv.com:4030/tabby/demo/result/success?lang=en&order=DEMO-04A518F0", "http://demo.ctrmv.com:4030/tabby/demo/result/cancel?lang=en&order=DEMO-04A518F0", "http://demo.ctrmv.com:4030/tabby/demo/result/failure?lang=en&order=DEMO-04A518F0", Decimal.new("0"), Decimal.new("0"), ~N[2026-11-05 12:02:28], ~N[2026-11-05 12:02:28]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Thu Nov 5 12:02:29.296000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:59238] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:02:29.296000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:59238] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/e08868d7-f1ed-44fa-8494-fa47a06ff5ce/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/e08868d7-f1ed-44fa-8494-fa47a06ff5ce/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/e08868d7-f1ed-44fa-8494-fa47a06ff5ce/success"}, "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-04A518F0"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:02:29.297000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59238] QUERY OK source="tabby_sim_faults" db=0.4ms queue=0.1ms idle=543.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:02:29.396000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59238] QUERY OK db=97.5ms queue=0.4ms idle=544.7ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`buyer_history`,`is_test`,`lang`,`shipping_address`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["ba63e363-af19-43a7-aa42-5c68fd1b6d93", "CREATED", "AED", "bd62cd5c-1227-4c44-914b-dedc951b70e2", "demostore", ~U[2026-11-05 12:14:29Z], %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/e08868d7-f1ed-44fa-8494-fa47a06ff5ce/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/e08868d7-f1ed-44fa-8494-fa47a06ff5ce/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/e08868d7-f1ed-44fa-8494-fa47a06ff5ce/success"}, "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-04A518F0"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "0", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo headphones", "unit_price" => "650"}, %{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo smartwatch", "unit_price" => "200"}], "reference_id" => "DEMO-04A518F0", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "created", %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/e08868d7-f1ed-44fa-8494-fa47a06ff5ce/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/e08868d7-f1ed-44fa-8494-fa47a06ff5ce/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/e08868d7-f1ed-44fa-8494-fa47a06ff5ce/success"}, ~U[2026-11-05 12:12:29Z], false, Decimal.new("850.00"), [], [], %{"registered_since" => "2023-02-01T10:00:00Z"}, true, "en", %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}, ~N[2026-11-05 12:02:29], ~N[2026-11-05 12:02:29]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:02:29.396000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:59238] [TabbySim] checkout payment=ba63e363-af19-43a7-aa42-5c68fd1b6d93 session=bd62cd5c-1227-4c44-914b-dedc951b70e2 decision=created reason=nil amount=850.00 AED [Thu Nov 5 12:02:29.398000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59238] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.1ms idle=644.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:02:29.400000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:59238] Sent 200 in 104ms [Thu Nov 5 12:02:29.400000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:50484] [Tabby] checkout post /api/v2/checkout -> 200 (422 ms, attempt 1) [Thu Nov 5 12:02:29.401000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:50484] [Tabby] session created payment=ba63e363-af19-43a7-aa42-5c68fd1b6d93 [Thu Nov 5 12:02:29.402000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:50484] QUERY OK source="tabby_payments" db=0.4ms queue=0.6ms idle=647.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e08868d7-f1ed-44fa-8494-fa47a06ff5ce"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Thu Nov 5 12:02:29.486000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:50484] QUERY OK source="tabby_payments" db=83.1ms queue=0.8ms idle=622.1ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-05 12:22:29Z], "ba63e363-af19-43a7-aa42-5c68fd1b6d93", "bd62cd5c-1227-4c44-914b-dedc951b70e2", ~N[2026-11-05 12:02:29], "e08868d7-f1ed-44fa-8494-fa47a06ff5ce"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Thu Nov 5 12:02:29.487000 2026] [DaProductApp.Tabby.Sessions:info] [pid 2594513] [client 115.99.167.137:50484] [Tabby] session created attempt=e08868d7-f1ed-44fa-8494-fa47a06ff5ce payment=ba63e363-af19-43a7-aa42-5c68fd1b6d93 [Thu Nov 5 12:02:29.490000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] Sent 200 in 584ms [Thu Nov 5 12:02:29.914000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] GET /tabby-sim/hpp/bd62cd5c-1227-4c44-914b-dedc951b70e2 [Thu Nov 5 12:02:29.914000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:50484] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "bd62cd5c-1227-4c44-914b-dedc951b70e2"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:02:29.915000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:50484] QUERY OK source="tabby_sim_payments" db=0.6ms idle=753.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["bd62cd5c-1227-4c44-914b-dedc951b70e2"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:02:29.922000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] Sent 200 in 7ms [Thu Nov 5 12:02:58.433000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1678.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:02:58Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:02:58.457000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=23.1ms queue=0.5ms idle=1680.4ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 12:02:58], true, "5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:02:58.458000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912 CREATED -> EXPIRED [Thu Nov 5 12:02:58.459000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.5ms idle=1704.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:02:58.465000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook not sent: event=expire payment=5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912 [Thu Nov 5 12:02:58.467000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912 expired (expires_at 2026-11-05 12:02:57Z, session_status=created) [Thu Nov 5 12:02:58.469000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1714.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:02:58Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:02:58.469000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 1 payment(s) were due [Thu Nov 5 12:02:58.470000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1716.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:02:58Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:02:58.472000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1496.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:02:58.519000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403239 scheduled in 60s (2 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:03:04.656000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] POST /tabby-sim/hpp/bd62cd5c-1227-4c44-914b-dedc951b70e2 [Thu Nov 5 12:03:04.656000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:50484] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "approve", "otp" => "8888", "plan" => "6", "session_id" => "bd62cd5c-1227-4c44-914b-dedc951b70e2", "ui" => "1"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:03:04.658000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:50484] QUERY OK source="tabby_sim_payments" db=0.6ms idle=903.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["bd62cd5c-1227-4c44-914b-dedc951b70e2"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:03:04.686000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:50484] QUERY OK source="tabby_sim_payments" db=27.6ms queue=0.3ms idle=904.9ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["AUTHORIZED", ~N[2026-11-05 12:03:04], "ba63e363-af19-43a7-aa42-5c68fd1b6d93", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:03:04.687000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client 115.99.167.137:50484] [TabbySim] payment=ba63e363-af19-43a7-aa42-5c68fd1b6d93 CREATED -> AUTHORIZED [Thu Nov 5 12:03:04.689000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:50484] QUERY OK source="tabby_sim_payments" db=1.5ms idle=933.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["ba63e363-af19-43a7-aa42-5c68fd1b6d93"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:03:04.691000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:50484] QUERY OK source="tabby_sim_webhooks" db=0.9ms queue=0.6ms idle=935.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 12:03:04.732000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client 115.99.167.137:50484] [TabbySim] webhook queued job=403240 event=authorize payment=ba63e363-af19-43a7-aa42-5c68fd1b6d93 webhook=53 [Thu Nov 5 12:03:04.733000 2026] [DaProductApp.TabbySim.Hpp:info] [pid 2594513] [client 115.99.167.137:50484] [TabbySim] hpp payment=ba63e363-af19-43a7-aa42-5c68fd1b6d93 action=approve status=AUTHORIZED [Thu Nov 5 12:03:04.735000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:50484] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.5ms idle=979.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["bd62cd5c-1227-4c44-914b-dedc951b70e2"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:03:04.735000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] Sent 200 in 79ms [Thu Nov 5 12:03:04.835000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_webhooks" db=0.6ms queue=0.7ms idle=479.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 12:03:05.122000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:36646] POST /tabby/webhooks [Thu Nov 5 12:03:05.131000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:36646] QUERY OK source="tabby_payments" db=0.6ms queue=0.9ms idle=471.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["ba63e363-af19-43a7-aa42-5c68fd1b6d93"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:03:05.180000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:36646] QUERY OK db=46.3ms queue=0.4ms idle=447.2ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["authorized", false, "ba63e363-af19-43a7-aa42-5c68fd1b6d93", "{\"amount\":\"850\",\"captures\":[],\"closed_at\":null,\"created_at\":\"2026-11-05T12:02:29Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T12:14:29Z\",\"id\":\"ba63e363-af19-43a7-aa42-5c68fd1b6d93\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-04A518F0\"},\"refunds\":[],\"status\":\"authorized\",\"token\":null}", ~U[2026-11-05 12:03:05Z], ~N[2026-11-05 12:03:05], ~N[2026-11-05 12:03:05]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 12:03:05.352000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2594513] [client 78.47.213.209:36646] [Tabby] webhook 200: event=33 payment=ba63e363-af19-43a7-aa42-5c68fd1b6d93 saved and queued [Thu Nov 5 12:03:05.352000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:36646] Sent 200 in 229ms [Thu Nov 5 12:03:05.429000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK db=73.7ms queue=0.8ms idle=619.6ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "authorize", ~U[2026-11-05 12:03:05Z], "ba63e363-af19-43a7-aa42-5c68fd1b6d93", 53, 200, 518, %{"amount" => "850", "captures" => [], "closed_at" => nil, "created_at" => "2026-11-05T12:02:29Z", "currency" => "AED", "expires_at" => "2026-11-05T12:14:29Z", "id" => "ba63e363-af19-43a7-aa42-5c68fd1b6d93", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-04A518F0"}, "refunds" => [], "status" => "authorized", "token" => nil}, ~N[2026-11-05 12:03:05], ~N[2026-11-05 12:03:05]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 12:03:05.430000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook attempt=1 success event=authorize payment=ba63e363-af19-43a7-aa42-5c68fd1b6d93 url=http://demo.ctrmv.com:4030/tabby/webhooks (518 ms) [Thu Nov 5 12:03:05.441000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.4ms queue=0.4ms idle=422.9ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [33] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 12:03:05.442000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=310.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["ba63e363-af19-43a7-aa42-5c68fd1b6d93"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:03:05.446000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.1ms idle=265.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e08868d7-f1ed-44fa-8494-fa47a06ff5ce"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:03:05.756000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:59238] GET /tabby-sim/api/v2/payments/ba63e363-af19-43a7-aa42-5c68fd1b6d93 [Thu Nov 5 12:03:05.756000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:59238] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "ba63e363-af19-43a7-aa42-5c68fd1b6d93"} Pipelines: [:tabby_sim_api] [Thu Nov 5 12:03:05.764000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59238] QUERY OK source="tabby_sim_faults" db=0.3ms queue=0.5ms idle=333.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "ba63e363-af19-43a7-aa42-5c68fd1b6d93"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 12:03:05.765000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59238] QUERY OK source="tabby_sim_faults" db=0.7ms idle=323.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:03:05.767000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59238] QUERY OK source="tabby_sim_payments" db=1.5ms queue=0.1ms idle=323.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["ba63e363-af19-43a7-aa42-5c68fd1b6d93"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Thu Nov 5 12:03:05.767000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:59238] Sent 200 in 11ms [Thu Nov 5 12:03:05.768000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client -] [Tabby] retrieve get /api/v2/payments/ba63e363-af19-43a7-aa42-5c68fd1b6d93 -> 200 (321 ms, attempt 1) [Thu Nov 5 12:03:05.831000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=58.5ms queue=0.6ms idle=329.8ms UPDATE `tabby_payments` AS t0 SET t0.`authorized_at` = ?, t0.`winner_key` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [~U[2026-11-05 12:03:05Z], "e0c5b3f59561b224088a1ea1b7fe1f82bfb0c44c48624d478ae2cf089825338e", "authorized", ~N[2026-11-05 12:03:05], "e08868d7-f1ed-44fa-8494-fa47a06ff5ce", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 12:03:05.833000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=385.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e08868d7-f1ed-44fa-8494-fa47a06ff5ce"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:03:05.833000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2594513] [client -] [Tabby] verify: attempt=e08868d7-f1ed-44fa-8494-fa47a06ff5ce payment=ba63e363-af19-43a7-aa42-5c68fd1b6d93 created -> authorized [Thu Nov 5 12:03:05.977000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=68.9ms queue=0.4ms idle=367.9ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 12:03:05Z], 33] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 12:03:05.978000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2594513] [client -] [Tabby] webhook job: event=33 payment=ba63e363-af19-43a7-aa42-5c68fd1b6d93 processed (recorded authorized) [Thu Nov 5 12:03:06.046000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.1ms idle=280.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e08868d7-f1ed-44fa-8494-fa47a06ff5ce"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:03:06.200000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=149.8ms queue=0.4ms idle=284.3ms UPDATE `tabby_payments` AS t0 SET t0.`capture_reference_id` = ?, t0.`claimed_at` = ?, t0.`claimed_by` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["capture-DEMO-04A518F0", ~U[2026-11-05 12:03:06Z], "nonode@nohost", "capturing", ~N[2026-11-05 12:03:06], "e08868d7-f1ed-44fa-8494-fa47a06ff5ce", "authorized"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 12:03:06.201000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.1ms queue=0.1ms idle=368.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e08868d7-f1ed-44fa-8494-fa47a06ff5ce"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:03:06.201000 2026] [DaProductApp.Tabby.Capture:info] [pid 2594513] [client -] [Tabby] capture: attempt=e08868d7-f1ed-44fa-8494-fa47a06ff5ce payment=ba63e363-af19-43a7-aa42-5c68fd1b6d93 claimed (authorized -> capturing) [Thu Nov 5 12:03:06.532000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:59238] POST /tabby-sim/api/v2/payments/ba63e363-af19-43a7-aa42-5c68fd1b6d93/captures [Thu Nov 5 12:03:06.533000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:59238] Processing with DaProductAppWeb.TabbySim.PaymentsController.capture/2 Parameters: %{"amount" => "850.00", "id" => "ba63e363-af19-43a7-aa42-5c68fd1b6d93", "reference_id" => "capture-DEMO-04A518F0"} Pipelines: [:tabby_sim_api] [Thu Nov 5 12:03:06.534000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59238] QUERY OK source="tabby_sim_faults" db=1.1ms queue=0.4ms idle=555.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["capture", "ba63e363-af19-43a7-aa42-5c68fd1b6d93"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 12:03:06.536000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59238] QUERY OK source="tabby_sim_faults" db=0.6ms queue=0.2ms idle=493.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["capture"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:03:06.537000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59238] QUERY OK source="tabby_sim_payments" db=1.0ms idle=490.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["ba63e363-af19-43a7-aa42-5c68fd1b6d93"] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:227 [Thu Nov 5 12:03:06.537000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59238] QUERY OK db=0.2ms idle=482.9ms begin [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Thu Nov 5 12:03:06.539000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59238] QUERY OK source="tabby_sim_payments" db=0.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) FOR UPDATE ["ba63e363-af19-43a7-aa42-5c68fd1b6d93"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:231 [Thu Nov 5 12:03:06.540000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59238] QUERY OK source="tabby_sim_payments" db=0.5ms UPDATE `tabby_sim_payments` SET `status` = ?, `closed_at` = ?, `captures` = ?, `updated_at` = ? WHERE `id` = ? ["CLOSED", ~U[2026-11-05 12:03:06Z], [%{"amount" => "850", "created_at" => "2026-11-05T12:03:06Z", "discount_amount" => "0", "id" => "b5601ae5-9632-4c46-b96f-2057acc2275e", "items" => nil, "reference_id" => "capture-DEMO-04A518F0", "shipping_amount" => "0", "tax_amount" => "0"}], ~N[2026-11-05 12:03:06], "ba63e363-af19-43a7-aa42-5c68fd1b6d93"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:244 [Thu Nov 5 12:03:06.540000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client 127.0.0.1:59238] [TabbySim] capture payment=ba63e363-af19-43a7-aa42-5c68fd1b6d93 status=CLOSED [Thu Nov 5 12:03:06.608000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59238] QUERY OK db=68.0ms commit [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Thu Nov 5 12:03:06.610000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59238] QUERY OK source="tabby_sim_webhooks" db=1.1ms idle=505.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 12:03:06.710000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client 127.0.0.1:59238] [TabbySim] webhook queued job=403243 event=capture payment=ba63e363-af19-43a7-aa42-5c68fd1b6d93 webhook=53 [Thu Nov 5 12:03:06.713000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59238] QUERY OK source="tabby_sim_webhooks" db=1.5ms queue=0.1ms idle=509.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 12:03:06.811000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client 127.0.0.1:59238] [TabbySim] webhook queued job=403244 event=close payment=ba63e363-af19-43a7-aa42-5c68fd1b6d93 webhook=53 [Thu Nov 5 12:03:06.812000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:59238] Sent 200 in 280ms [Thu Nov 5 12:03:06.814000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client -] [Tabby] capture post /api/v2/payments/ba63e363-af19-43a7-aa42-5c68fd1b6d93/captures -> 200 (612 ms, attempt 1) [Thu Nov 5 12:03:06.866000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_webhooks" db=1.6ms idle=330.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 12:03:06.898000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=82.9ms queue=0.5ms idle=420.3ms UPDATE `tabby_payments` AS t0 SET t0.`captured_amount` = ?, t0.`captured_at` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [Decimal.new("850"), ~U[2026-11-05 12:03:06Z], "captured", ~N[2026-11-05 12:03:06], "e08868d7-f1ed-44fa-8494-fa47a06ff5ce", "capturing"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 12:03:06.900000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.2ms queue=0.3ms idle=362.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e08868d7-f1ed-44fa-8494-fa47a06ff5ce"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:03:06.900000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2594513] [client -] [Tabby] verify: attempt=e08868d7-f1ed-44fa-8494-fa47a06ff5ce payment=ba63e363-af19-43a7-aa42-5c68fd1b6d93 capturing -> captured [Thu Nov 5 12:03:06.901000 2026] [DaProductApp.Tabby.Capture:info] [pid 2594513] [client -] [Tabby] capture: attempt=e08868d7-f1ed-44fa-8494-fa47a06ff5ce payment=ba63e363-af19-43a7-aa42-5c68fd1b6d93 is captured [Thu Nov 5 12:03:07.200000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:36646] POST /tabby/webhooks [Thu Nov 5 12:03:07.201000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:36646] QUERY OK source="tabby_payments" db=0.9ms idle=389.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["ba63e363-af19-43a7-aa42-5c68fd1b6d93"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:03:07.243000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:36646] QUERY OK db=40.8ms queue=0.5ms idle=338.0ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["authorized", false, "ba63e363-af19-43a7-aa42-5c68fd1b6d93", "{\"amount\":\"850\",\"captures\":[{\"amount\":\"850\",\"created_at\":\"2026-11-05T12:03:06Z\",\"discount_amount\":\"0\",\"id\":\"b5601ae5-9632-4c46-b96f-2057acc2275e\",\"items\":null,\"reference_id\":\"capture-DEMO-04A518F0\",\"shipping_amount\":\"0\",\"tax_amount\":\"0\"}],\"closed_at\":null,\"created_at\":\"2026-11-05T12:02:29Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T12:14:29Z\",\"id\":\"ba63e363-af19-43a7-aa42-5c68fd1b6d93\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-04A518F0\"},\"refunds\":[],\"status\":\"authorized\",\"token\":null}", ~U[2026-11-05 12:03:07Z], ~N[2026-11-05 12:03:07], ~N[2026-11-05 12:03:07]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 12:03:07.287000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2594513] [client 78.47.213.209:36646] [Tabby] webhook 200: event=34 payment=ba63e363-af19-43a7-aa42-5c68fd1b6d93 saved and queued [Thu Nov 5 12:03:07.287000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:36646] Sent 200 in 87ms [Thu Nov 5 12:03:07.411000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK db=122.9ms idle=332.8ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "capture", ~U[2026-11-05 12:03:07Z], "ba63e363-af19-43a7-aa42-5c68fd1b6d93", 53, 200, 421, %{"amount" => "850", "captures" => [%{"amount" => "850", "created_at" => "2026-11-05T12:03:06Z", "discount_amount" => "0", "id" => "b5601ae5-9632-4c46-b96f-2057acc2275e", "items" => nil, "reference_id" => "capture-DEMO-04A518F0", "shipping_amount" => "0", "tax_amount" => "0"}], "closed_at" => nil, "created_at" => "2026-11-05T12:02:29Z", "currency" => "AED", "expires_at" => "2026-11-05T12:14:29Z", "id" => "ba63e363-af19-43a7-aa42-5c68fd1b6d93", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-04A518F0"}, "refunds" => [], "status" => "authorized", "token" => nil}, ~N[2026-11-05 12:03:07], ~N[2026-11-05 12:03:07]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 12:03:07.411000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook attempt=1 success event=capture payment=ba63e363-af19-43a7-aa42-5c68fd1b6d93 url=http://demo.ctrmv.com:4030/tabby/webhooks (421 ms) [Thu Nov 5 12:03:07.444000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=1.6ms idle=241.3ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [34] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 12:03:07.446000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.6ms queue=0.4ms idle=230.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["ba63e363-af19-43a7-aa42-5c68fd1b6d93"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:03:07.448000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.3ms idle=202.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e08868d7-f1ed-44fa-8494-fa47a06ff5ce"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:03:07.520000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=71.4ms idle=202.5ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 12:03:07Z], 34] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 12:03:07.520000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2594513] [client -] [Tabby] webhook job: event=34 payment=ba63e363-af19-43a7-aa42-5c68fd1b6d93 processed (already_final) [Thu Nov 5 12:03:07.527000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] GET /tabby/return/e08868d7-f1ed-44fa-8494-fa47a06ff5ce/success [Thu Nov 5 12:03:07.535000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:50484] QUERY OK source="tabby_payments" db=1.1ms idle=91.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e08868d7-f1ed-44fa-8494-fa47a06ff5ce"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:03:07.649000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] Sent 302 in 122ms [Thu Nov 5 12:03:07.723000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.4ms queue=0.4ms idle=202.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["demostore", ~U[2026-10-18 12:03:07Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:03:07.725000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.4ms queue=0.9ms idle=199.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["demostore", ~N[2026-11-05 12:01:07], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:03:07.726000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms queue=0.4ms idle=190.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:03:07.728000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.3ms queue=0.4ms idle=191.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", ~N[2026-11-05 12:01:07], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:03:07.729000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.3ms queue=0.4ms idle=189.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["demostore", ~U[2026-11-05 11:58:07Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:03:07.730000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=161.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["c6d480cc-525a-461f-ae29-06d284b09e16"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:03:07.837000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=120.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e08868d7-f1ed-44fa-8494-fa47a06ff5ce"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:03:08.093000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:59238] GET /tabby-sim/api/v2/payments/5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912 [Thu Nov 5 12:03:08.093000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:59238] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912"} Pipelines: [:tabby_sim_api] [Thu Nov 5 12:03:08.095000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59238] QUERY OK source="tabby_sim_faults" db=0.9ms idle=364.6ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 12:03:08.096000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59238] QUERY OK source="tabby_sim_faults" db=0.7ms idle=364.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:03:08.097000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59238] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.1ms idle=269.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Thu Nov 5 12:03:08.097000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:59238] Sent 200 in 3ms [Thu Nov 5 12:03:08.098000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client -] [Tabby] retrieve get /api/v2/payments/5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912 -> 200 (368 ms, attempt 1) [Thu Nov 5 12:03:08.138000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] GET /tabby/demo/result/success [Thu Nov 5 12:03:08.138000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] Sent 200 in 468µs [Thu Nov 5 12:03:08.141000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=42.2ms queue=0.7ms idle=261.5ms UPDATE `tabby_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["expired", ~N[2026-11-05 12:03:08], "c6d480cc-525a-461f-ae29-06d284b09e16", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 12:03:08.142000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=304.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["c6d480cc-525a-461f-ae29-06d284b09e16"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:03:08.142000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2594513] [client -] [Tabby] verify: attempt=c6d480cc-525a-461f-ae29-06d284b09e16 payment=5a51d4ae-7ed9-4b95-a8e4-9d1c07eaa912 created -> expired [Thu Nov 5 12:03:08.143000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.3ms queue=0.4ms idle=230.0ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-05 12:01:07Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Thu Nov 5 12:03:08.148000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_refunds" db=1.3ms queue=0.4ms idle=220.1ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["demostore", ~N[2026-11-05 12:01:07], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Thu Nov 5 12:03:08.149000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms queue=0.4ms idle=221.8ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 12:03:08.151000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms queue=0.5ms idle=173.3ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["demostore", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 12:03:08.152000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.2ms queue=0.9ms idle=140.9ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Thu Nov 5 12:03:08.153000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_refunds" db=0.3ms queue=0.4ms idle=57.9ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Thu Nov 5 12:03:08.154000 2026] [DaProductApp.Tabby.Poller:info] [pid 2594513] [client -] [Tabby] poll: handled 1 (created:recorded_expired=1); 0 attempt(s) still watched [Thu Nov 5 12:03:08.586000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] GET /tabby/demo/status/e08868d7-f1ed-44fa-8494-fa47a06ff5ce [Thu Nov 5 12:03:08.594000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:50484] QUERY OK source="tabby_payments" db=1.2ms idle=443.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e08868d7-f1ed-44fa-8494-fa47a06ff5ce"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:03:08.594000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] Sent 200 in 8ms [Thu Nov 5 12:03:08.624000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_webhooks" db=0.6ms idle=472.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 12:03:08.930000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:36646] POST /tabby/webhooks [Thu Nov 5 12:03:08.932000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:36646] QUERY OK source="tabby_payments" db=0.8ms idle=731.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["ba63e363-af19-43a7-aa42-5c68fd1b6d93"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:03:08.973000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:36646] QUERY OK db=39.8ms queue=0.2ms idle=681.9ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["closed", false, "ba63e363-af19-43a7-aa42-5c68fd1b6d93", "{\"amount\":\"850\",\"captures\":[{\"amount\":\"850\",\"created_at\":\"2026-11-05T12:03:06Z\",\"discount_amount\":\"0\",\"id\":\"b5601ae5-9632-4c46-b96f-2057acc2275e\",\"items\":null,\"reference_id\":\"capture-DEMO-04A518F0\",\"shipping_amount\":\"0\",\"tax_amount\":\"0\"}],\"closed_at\":\"2026-11-05T12:03:06Z\",\"created_at\":\"2026-11-05T12:02:29Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T12:14:29Z\",\"id\":\"ba63e363-af19-43a7-aa42-5c68fd1b6d93\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-04A518F0\"},\"refunds\":[],\"status\":\"closed\",\"token\":null}", ~U[2026-11-05 12:03:08Z], ~N[2026-11-05 12:03:08], ~N[2026-11-05 12:03:08]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 12:03:09.034000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2594513] [client 78.47.213.209:36646] [Tabby] webhook 200: event=35 payment=ba63e363-af19-43a7-aa42-5c68fd1b6d93 saved and queued [Thu Nov 5 12:03:09.034000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:36646] Sent 200 in 103ms [Thu Nov 5 12:03:09.079000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK db=43.3ms queue=0.6ms idle=507.1ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "close", ~U[2026-11-05 12:03:09Z], "ba63e363-af19-43a7-aa42-5c68fd1b6d93", 53, 200, 410, %{"amount" => "850", "captures" => [%{"amount" => "850", "created_at" => "2026-11-05T12:03:06Z", "discount_amount" => "0", "id" => "b5601ae5-9632-4c46-b96f-2057acc2275e", "items" => nil, "reference_id" => "capture-DEMO-04A518F0", "shipping_amount" => "0", "tax_amount" => "0"}], "closed_at" => "2026-11-05T12:03:06Z", "created_at" => "2026-11-05T12:02:29Z", "currency" => "AED", "expires_at" => "2026-11-05T12:14:29Z", "id" => "ba63e363-af19-43a7-aa42-5c68fd1b6d93", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-04A518F0"}, "refunds" => [], "status" => "closed", "token" => nil}, ~N[2026-11-05 12:03:09], ~N[2026-11-05 12:03:09]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 12:03:09.080000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook attempt=1 success event=close payment=ba63e363-af19-43a7-aa42-5c68fd1b6d93 url=http://demo.ctrmv.com:4030/tabby/webhooks (410 ms) [Thu Nov 5 12:03:09.171000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.8ms idle=443.9ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [35] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 12:03:09.172000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.7ms queue=0.2ms idle=359.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["ba63e363-af19-43a7-aa42-5c68fd1b6d93"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:03:09.173000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=240.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e08868d7-f1ed-44fa-8494-fa47a06ff5ce"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:03:09.209000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=34.1ms idle=201.5ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 12:03:09Z], 35] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 12:03:09.209000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2594513] [client -] [Tabby] webhook job: event=35 payment=ba63e363-af19-43a7-aa42-5c68fd1b6d93 processed (already_final) [Thu Nov 5 12:03:34.525000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] GET /tabby/demo [Thu Nov 5 12:03:34.527000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] Sent 200 in 2ms [Thu Nov 5 12:03:34.967000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] POST /tabby/demo/summary [Thu Nov 5 12:03:34.967000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] Sent 200 in 674µs [Thu Nov 5 12:03:35.802000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] POST /tabby/demo/eligibility [Thu Nov 5 12:03:36.081000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:42358] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:03:36.081000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:42358] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:03:36.083000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:42358] QUERY OK source="tabby_sim_faults" db=1.9ms idle=1328.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:03:36.139000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:42358] QUERY OK db=54.7ms queue=0.3ms idle=1330.7ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`is_test`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["f5fcac99-17f6-4428-a397-bb9519593974", "CREATED", "AED", "603366cb-db2f-4fb2-aa08-8d36458df42d", "demostore", ~U[2026-11-05 12:15:36Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "created", %{"cancel" => nil, "failure" => nil, "success" => nil}, ~U[2026-11-05 12:13:36Z], false, Decimal.new("850.00"), [], [], true, ~N[2026-11-05 12:03:36], ~N[2026-11-05 12:03:36]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:03:36.140000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:42358] [TabbySim] checkout payment=f5fcac99-17f6-4428-a397-bb9519593974 session=603366cb-db2f-4fb2-aa08-8d36458df42d decision=created reason=nil amount=850.00 AED [Thu Nov 5 12:03:36.141000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:42358] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1386.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:03:36.143000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:42358] Sent 200 in 61ms [Thu Nov 5 12:03:36.143000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:50484] [Tabby] checkout post /api/v2/checkout -> 200 (341 ms, attempt 1) [Thu Nov 5 12:03:36.143000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:50484] [Tabby] session created payment=f5fcac99-17f6-4428-a397-bb9519593974 [Thu Nov 5 12:03:36.144000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2594513] [client 115.99.167.137:50484] [Tabby] eligibility: show (amount=850.00 AED) [Thu Nov 5 12:03:36.144000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] Sent 200 in 342ms [Thu Nov 5 12:03:40.113000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] POST /tabby/demo/summary [Thu Nov 5 12:03:40.113000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] Sent 200 in 559µs [Thu Nov 5 12:03:40.945000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] POST /tabby/demo/eligibility [Thu Nov 5 12:03:41.181000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:42358] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:03:41.182000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:42358] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:03:41.183000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:42358] QUERY OK source="tabby_sim_faults" db=0.8ms queue=0.1ms idle=1429.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:03:41.210000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:42358] QUERY OK db=25.6ms queue=0.5ms idle=1430.7ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`is_test`,`rejection_reason`,`rejection_reason_code`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["37bcec9c-e137-4faf-adab-fe3366bbfa0b", "CREATED", "AED", "c1ef3000-ecba-4065-96a0-ea406197ff28", "demostore", ~U[2026-11-05 12:15:41Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "5095.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "rejected", %{"cancel" => nil, "failure" => nil, "success" => nil}, ~U[2026-11-05 12:13:41Z], false, Decimal.new("5095.00"), [], [], true, "order_amount_too_high", "not_enough_limit", ~N[2026-11-05 12:03:41], ~N[2026-11-05 12:03:41]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:03:41.211000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:42358] [TabbySim] checkout payment=37bcec9c-e137-4faf-adab-fe3366bbfa0b session=c1ef3000-ecba-4065-96a0-ea406197ff28 decision=rejected reason="order_amount_too_high" amount=5095.00 AED [Thu Nov 5 12:03:41.213000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:42358] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1458.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:03:41.215000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:42358] Sent 200 in 33ms [Thu Nov 5 12:03:41.216000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:50484] [Tabby] checkout post /api/v2/checkout -> 200 (270 ms, attempt 1) [Thu Nov 5 12:03:41.216000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:50484] [Tabby] session rejected by pre-scoring (business outcome) reason=order_amount_too_high [Thu Nov 5 12:03:41.216000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2594513] [client 115.99.167.137:50484] [Tabby] eligibility: hide reason=order_amount_too_high (amount=5095.00 AED) [Thu Nov 5 12:03:41.217000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] Sent 200 in 271ms [Thu Nov 5 12:03:43.055000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] POST /tabby/demo/summary [Thu Nov 5 12:03:43.055000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] Sent 200 in 557µs [Thu Nov 5 12:03:43.884000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] POST /tabby/demo/eligibility [Thu Nov 5 12:03:44.160000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:42358] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:03:44.160000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:42358] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:03:44.162000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:42358] QUERY OK source="tabby_sim_faults" db=1.3ms idle=1407.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:03:44.195000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:42358] QUERY OK db=32.6ms queue=0.3ms idle=1409.1ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`is_test`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["86d6bf13-6d33-48a8-8468-f5aafd0b1a88", "CREATED", "AED", "0b6cf906-f904-49d8-b954-27cbd9c424f5", "demostore", ~U[2026-11-05 12:15:44Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "created", %{"cancel" => nil, "failure" => nil, "success" => nil}, ~U[2026-11-05 12:13:44Z], false, Decimal.new("5000.00"), [], [], true, ~N[2026-11-05 12:03:44], ~N[2026-11-05 12:03:44]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:03:44.196000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:42358] [TabbySim] checkout payment=86d6bf13-6d33-48a8-8468-f5aafd0b1a88 session=0b6cf906-f904-49d8-b954-27cbd9c424f5 decision=created reason=nil amount=5000.00 AED [Thu Nov 5 12:03:44.196000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:42358] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1442.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:03:44.198000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:42358] Sent 200 in 38ms [Thu Nov 5 12:03:44.199000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:50484] [Tabby] checkout post /api/v2/checkout -> 200 (315 ms, attempt 1) [Thu Nov 5 12:03:44.199000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:50484] [Tabby] session created payment=86d6bf13-6d33-48a8-8468-f5aafd0b1a88 [Thu Nov 5 12:03:44.200000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2594513] [client 115.99.167.137:50484] [Tabby] eligibility: show (amount=5000.00 AED) [Thu Nov 5 12:03:44.200000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] Sent 200 in 316ms [Thu Nov 5 12:03:44.775000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] POST /tabby/demo/summary [Thu Nov 5 12:03:44.775000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] Sent 200 in 702µs [Thu Nov 5 12:03:50.943000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] POST /tabby/demo/place [Thu Nov 5 12:03:50.983000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:50484] QUERY OK db=39.4ms queue=0.3ms idle=1190.6ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`amount`,`order_reference`,`needs_attention`,`success_url`,`cancel_url`,`failure_url`,`captured_amount`,`refunded_amount`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["e0012cdf-0a1c-4b3f-91b8-c8dc5e1bc22f", "new", "AED", "demostore", Decimal.new("5000.00"), "DEMO-E615C5F5", false, "http://demo.ctrmv.com:4030/tabby/demo/result/success?lang=en&order=DEMO-E615C5F5", "http://demo.ctrmv.com:4030/tabby/demo/result/cancel?lang=en&order=DEMO-E615C5F5", "http://demo.ctrmv.com:4030/tabby/demo/result/failure?lang=en&order=DEMO-E615C5F5", Decimal.new("0"), Decimal.new("0"), ~N[2026-11-05 12:03:50], ~N[2026-11-05 12:03:50]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Thu Nov 5 12:03:51.281000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:59238] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:03:51.281000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:59238] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/e0012cdf-0a1c-4b3f-91b8-c8dc5e1bc22f/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/e0012cdf-0a1c-4b3f-91b8-c8dc5e1bc22f/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/e0012cdf-0a1c-4b3f-91b8-c8dc5e1bc22f/success"}, "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 4, "title" => "Demo camera", "unit_price" => "1250.00"}], "reference_id" => "DEMO-E615C5F5"}, "shipping_address" => %{"address" => "Demo Tower 4, Office 302, DIFC", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:03:51.282000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59238] QUERY OK source="tabby_sim_faults" db=0.5ms idle=1528.6ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:03:51.326000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59238] QUERY OK db=41.6ms queue=0.8ms idle=1529.6ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`buyer_history`,`is_test`,`lang`,`shipping_address`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["b2cea828-4d35-4545-94b6-ab7d93be10ec", "CREATED", "AED", "f3fdae2c-624a-481e-bb35-c3ce1b017e6b", "demostore", ~U[2026-11-05 12:15:51Z], %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/e0012cdf-0a1c-4b3f-91b8-c8dc5e1bc22f/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/e0012cdf-0a1c-4b3f-91b8-c8dc5e1bc22f/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/e0012cdf-0a1c-4b3f-91b8-c8dc5e1bc22f/success"}, "payment" => %{"amount" => "5000.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 4, "title" => "Demo camera", "unit_price" => "1250.00"}], "reference_id" => "DEMO-E615C5F5"}, "shipping_address" => %{"address" => "Demo Tower 4, Office 302, DIFC", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "0", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 4, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo camera", "unit_price" => "1250"}], "reference_id" => "DEMO-E615C5F5", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "created", %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/e0012cdf-0a1c-4b3f-91b8-c8dc5e1bc22f/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/e0012cdf-0a1c-4b3f-91b8-c8dc5e1bc22f/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/e0012cdf-0a1c-4b3f-91b8-c8dc5e1bc22f/success"}, ~U[2026-11-05 12:13:51Z], false, Decimal.new("5000.00"), [], [], %{"registered_since" => "2023-02-01T10:00:00Z"}, true, "en", %{"address" => "Demo Tower 4, Office 302, DIFC", "city" => "Dubai", "zip" => "00000"}, ~N[2026-11-05 12:03:51], ~N[2026-11-05 12:03:51]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:03:51.326000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:59238] [TabbySim] checkout payment=b2cea828-4d35-4545-94b6-ab7d93be10ec session=f3fdae2c-624a-481e-bb35-c3ce1b017e6b decision=created reason=nil amount=5000.00 AED [Thu Nov 5 12:03:51.327000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59238] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1572.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:03:51.328000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:59238] Sent 200 in 47ms [Thu Nov 5 12:03:51.329000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:50484] [Tabby] checkout post /api/v2/checkout -> 200 (345 ms, attempt 1) [Thu Nov 5 12:03:51.329000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:50484] [Tabby] session created payment=b2cea828-4d35-4545-94b6-ab7d93be10ec [Thu Nov 5 12:03:51.331000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:50484] QUERY OK source="tabby_payments" db=0.8ms idle=667.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e0012cdf-0a1c-4b3f-91b8-c8dc5e1bc22f"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Thu Nov 5 12:03:51.407000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:50484] QUERY OK source="tabby_payments" db=75.3ms queue=0.5ms idle=624.6ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-05 12:23:51Z], "b2cea828-4d35-4545-94b6-ab7d93be10ec", "f3fdae2c-624a-481e-bb35-c3ce1b017e6b", ~N[2026-11-05 12:03:51], "e0012cdf-0a1c-4b3f-91b8-c8dc5e1bc22f"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Thu Nov 5 12:03:51.407000 2026] [DaProductApp.Tabby.Sessions:info] [pid 2594513] [client 115.99.167.137:50484] [Tabby] session created attempt=e0012cdf-0a1c-4b3f-91b8-c8dc5e1bc22f payment=b2cea828-4d35-4545-94b6-ab7d93be10ec [Thu Nov 5 12:03:51.450000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] Sent 200 in 507ms [Thu Nov 5 12:03:51.889000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] GET /tabby-sim/hpp/f3fdae2c-624a-481e-bb35-c3ce1b017e6b [Thu Nov 5 12:03:51.889000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:50484] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "f3fdae2c-624a-481e-bb35-c3ce1b017e6b"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:03:51.890000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:50484] QUERY OK source="tabby_sim_payments" db=0.7ms idle=563.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["f3fdae2c-624a-481e-bb35-c3ce1b017e6b"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:03:51.891000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] Sent 200 in 2ms [Thu Nov 5 12:03:59.836000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.5ms idle=1081.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:03:59Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:03:59.837000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:03:59.838000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1084.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:03:59Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:03:59.838000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1085.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:03:59.884000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403249 scheduled in 60s (5 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:04:11.389000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] POST /tabby-sim/hpp/f3fdae2c-624a-481e-bb35-c3ce1b017e6b [Thu Nov 5 12:04:11.389000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:50484] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "approve", "otp" => "8888", "plan" => "8", "session_id" => "f3fdae2c-624a-481e-bb35-c3ce1b017e6b", "ui" => "1"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:04:11.391000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:50484] QUERY OK source="tabby_sim_payments" db=1.5ms idle=1635.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["f3fdae2c-624a-481e-bb35-c3ce1b017e6b"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:04:11.427000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:50484] QUERY OK source="tabby_sim_payments" db=34.9ms idle=1637.5ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["AUTHORIZED", ~N[2026-11-05 12:04:11], "b2cea828-4d35-4545-94b6-ab7d93be10ec", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:04:11.427000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client 115.99.167.137:50484] [TabbySim] payment=b2cea828-4d35-4545-94b6-ab7d93be10ec CREATED -> AUTHORIZED [Thu Nov 5 12:04:11.428000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:50484] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.2ms idle=1673.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["b2cea828-4d35-4545-94b6-ab7d93be10ec"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:04:11.429000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:50484] QUERY OK source="tabby_sim_webhooks" db=0.5ms idle=1674.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 12:04:11.478000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client 115.99.167.137:50484] [TabbySim] webhook queued job=403252 event=authorize payment=b2cea828-4d35-4545-94b6-ab7d93be10ec webhook=53 [Thu Nov 5 12:04:11.478000 2026] [DaProductApp.TabbySim.Hpp:info] [pid 2594513] [client 115.99.167.137:50484] [TabbySim] hpp payment=b2cea828-4d35-4545-94b6-ab7d93be10ec action=approve status=AUTHORIZED [Thu Nov 5 12:04:11.479000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:50484] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1723.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["f3fdae2c-624a-481e-bb35-c3ce1b017e6b"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:04:11.480000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] Sent 200 in 90ms [Thu Nov 5 12:04:11.549000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_webhooks" db=0.5ms idle=751.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 12:04:11.821000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:44262] POST /tabby/webhooks [Thu Nov 5 12:04:11.822000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:44262] QUERY OK source="tabby_payments" db=1.0ms idle=394.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["b2cea828-4d35-4545-94b6-ab7d93be10ec"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:04:11.972000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:44262] QUERY OK db=149.3ms queue=0.1ms idle=394.4ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["authorized", false, "b2cea828-4d35-4545-94b6-ab7d93be10ec", "{\"amount\":\"5000\",\"captures\":[],\"closed_at\":null,\"created_at\":\"2026-11-05T12:03:51Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T12:15:51Z\",\"id\":\"b2cea828-4d35-4545-94b6-ab7d93be10ec\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-E615C5F5\"},\"refunds\":[],\"status\":\"authorized\",\"token\":null}", ~U[2026-11-05 12:04:11Z], ~N[2026-11-05 12:04:11], ~N[2026-11-05 12:04:11]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 12:04:12.028000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2594513] [client 78.47.213.209:44262] [Tabby] webhook 200: event=36 payment=b2cea828-4d35-4545-94b6-ab7d93be10ec saved and queued [Thu Nov 5 12:04:12.028000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:44262] Sent 200 in 207ms [Thu Nov 5 12:04:12.091000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK db=60.5ms queue=0.4ms idle=551.0ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "authorize", ~U[2026-11-05 12:04:12Z], "b2cea828-4d35-4545-94b6-ab7d93be10ec", 53, 200, 480, %{"amount" => "5000", "captures" => [], "closed_at" => nil, "created_at" => "2026-11-05T12:03:51Z", "currency" => "AED", "expires_at" => "2026-11-05T12:15:51Z", "id" => "b2cea828-4d35-4545-94b6-ab7d93be10ec", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-E615C5F5"}, "refunds" => [], "status" => "authorized", "token" => nil}, ~N[2026-11-05 12:04:12], ~N[2026-11-05 12:04:12]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 12:04:12.092000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook attempt=1 success event=authorize payment=b2cea828-4d35-4545-94b6-ab7d93be10ec url=http://demo.ctrmv.com:4030/tabby/webhooks (480 ms) [Thu Nov 5 12:04:12.185000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.6ms idle=568.2ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [36] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 12:04:12.187000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.5ms idle=485.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["b2cea828-4d35-4545-94b6-ab7d93be10ec"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:04:12.188000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=388.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e0012cdf-0a1c-4b3f-91b8-c8dc5e1bc22f"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:04:12.484000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:59238] GET /tabby-sim/api/v2/payments/b2cea828-4d35-4545-94b6-ab7d93be10ec [Thu Nov 5 12:04:12.484000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:59238] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "b2cea828-4d35-4545-94b6-ab7d93be10ec"} Pipelines: [:tabby_sim_api] [Thu Nov 5 12:04:12.485000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59238] QUERY OK source="tabby_sim_faults" db=0.8ms idle=457.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "b2cea828-4d35-4545-94b6-ab7d93be10ec"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 12:04:12.486000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59238] QUERY OK source="tabby_sim_faults" db=0.3ms queue=0.1ms idle=394.2ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:04:12.487000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59238] QUERY OK source="tabby_sim_payments" db=0.7ms idle=302.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["b2cea828-4d35-4545-94b6-ab7d93be10ec"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Thu Nov 5 12:04:12.488000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:59238] Sent 200 in 3ms [Thu Nov 5 12:04:12.488000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client -] [Tabby] retrieve get /api/v2/payments/b2cea828-4d35-4545-94b6-ab7d93be10ec -> 200 (300 ms, attempt 1) [Thu Nov 5 12:04:12.525000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=36.3ms idle=303.4ms UPDATE `tabby_payments` AS t0 SET t0.`authorized_at` = ?, t0.`winner_key` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [~U[2026-11-05 12:04:12Z], "b53a89df58386836baf47aa0802098ca72c281239b1c5017cf7d702f3692d04c", "authorized", ~N[2026-11-05 12:04:12], "e0012cdf-0a1c-4b3f-91b8-c8dc5e1bc22f", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 12:04:12.527000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.9ms queue=0.3ms idle=338.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e0012cdf-0a1c-4b3f-91b8-c8dc5e1bc22f"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:04:12.527000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2594513] [client -] [Tabby] verify: attempt=e0012cdf-0a1c-4b3f-91b8-c8dc5e1bc22f payment=b2cea828-4d35-4545-94b6-ab7d93be10ec created -> authorized [Thu Nov 5 12:04:12.600000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=20.2ms idle=330.1ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 12:04:12Z], 36] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 12:04:12.600000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2594513] [client -] [Tabby] webhook job: event=36 payment=b2cea828-4d35-4545-94b6-ab7d93be10ec processed (recorded authorized) [Thu Nov 5 12:04:12.681000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=194.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e0012cdf-0a1c-4b3f-91b8-c8dc5e1bc22f"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:04:12.721000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=39.8ms idle=195.1ms UPDATE `tabby_payments` AS t0 SET t0.`capture_reference_id` = ?, t0.`claimed_at` = ?, t0.`claimed_by` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["capture-DEMO-E615C5F5", ~U[2026-11-05 12:04:12Z], "nonode@nohost", "capturing", ~N[2026-11-05 12:04:12], "e0012cdf-0a1c-4b3f-91b8-c8dc5e1bc22f", "authorized"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 12:04:12.723000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.5ms idle=196.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e0012cdf-0a1c-4b3f-91b8-c8dc5e1bc22f"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:04:12.724000 2026] [DaProductApp.Tabby.Capture:info] [pid 2594513] [client -] [Tabby] capture: attempt=e0012cdf-0a1c-4b3f-91b8-c8dc5e1bc22f payment=b2cea828-4d35-4545-94b6-ab7d93be10ec claimed (authorized -> capturing) [Thu Nov 5 12:04:12.996000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:59238] POST /tabby-sim/api/v2/payments/b2cea828-4d35-4545-94b6-ab7d93be10ec/captures [Thu Nov 5 12:04:12.996000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:59238] Processing with DaProductAppWeb.TabbySim.PaymentsController.capture/2 Parameters: %{"amount" => "5000.00", "id" => "b2cea828-4d35-4545-94b6-ab7d93be10ec", "reference_id" => "capture-DEMO-E615C5F5"} Pipelines: [:tabby_sim_api] [Thu Nov 5 12:04:12.998000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59238] QUERY OK source="tabby_sim_faults" db=1.4ms idle=396.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["capture", "b2cea828-4d35-4545-94b6-ab7d93be10ec"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 12:04:12.999000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59238] QUERY OK source="tabby_sim_faults" db=0.6ms idle=364.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["capture"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:04:13.000000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59238] QUERY OK source="tabby_sim_payments" db=0.5ms idle=319.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["b2cea828-4d35-4545-94b6-ab7d93be10ec"] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:227 [Thu Nov 5 12:04:13.000000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59238] QUERY OK db=0.1ms idle=319.2ms begin [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Thu Nov 5 12:04:13.001000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59238] QUERY OK source="tabby_sim_payments" db=0.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) FOR UPDATE ["b2cea828-4d35-4545-94b6-ab7d93be10ec"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:231 [Thu Nov 5 12:04:13.003000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59238] QUERY OK source="tabby_sim_payments" db=0.9ms UPDATE `tabby_sim_payments` SET `status` = ?, `closed_at` = ?, `captures` = ?, `updated_at` = ? WHERE `id` = ? ["CLOSED", ~U[2026-11-05 12:04:13Z], [%{"amount" => "5000", "created_at" => "2026-11-05T12:04:13Z", "discount_amount" => "0", "id" => "d06ea6b6-1a19-440a-ac21-7b6a95b141d7", "items" => nil, "reference_id" => "capture-DEMO-E615C5F5", "shipping_amount" => "0", "tax_amount" => "0"}], ~N[2026-11-05 12:04:13], "b2cea828-4d35-4545-94b6-ab7d93be10ec"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:244 [Thu Nov 5 12:04:13.003000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client 127.0.0.1:59238] [TabbySim] capture payment=b2cea828-4d35-4545-94b6-ab7d93be10ec status=CLOSED [Thu Nov 5 12:04:13.108000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59238] QUERY OK db=104.2ms commit [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Thu Nov 5 12:04:13.109000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59238] QUERY OK source="tabby_sim_webhooks" db=1.0ms idle=386.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 12:04:13.210000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client 127.0.0.1:59238] [TabbySim] webhook queued job=403255 event=capture payment=b2cea828-4d35-4545-94b6-ab7d93be10ec webhook=53 [Thu Nov 5 12:04:13.211000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59238] QUERY OK source="tabby_sim_webhooks" db=0.7ms idle=482.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 12:04:13.286000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client 127.0.0.1:59238] [TabbySim] webhook queued job=403256 event=close payment=b2cea828-4d35-4545-94b6-ab7d93be10ec webhook=53 [Thu Nov 5 12:04:13.286000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:59238] Sent 200 in 290ms [Thu Nov 5 12:04:13.287000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client -] [Tabby] capture post /api/v2/payments/b2cea828-4d35-4545-94b6-ab7d93be10ec/captures -> 200 (563 ms, attempt 1) [Thu Nov 5 12:04:13.316000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_webhooks" db=1.2ms idle=316.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 12:04:13.355000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=68.0ms idle=420.6ms UPDATE `tabby_payments` AS t0 SET t0.`captured_amount` = ?, t0.`captured_at` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [Decimal.new("5000"), ~U[2026-11-05 12:04:13Z], "captured", ~N[2026-11-05 12:04:13], "e0012cdf-0a1c-4b3f-91b8-c8dc5e1bc22f", "capturing"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 12:04:13.356000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=356.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e0012cdf-0a1c-4b3f-91b8-c8dc5e1bc22f"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:04:13.356000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2594513] [client -] [Tabby] verify: attempt=e0012cdf-0a1c-4b3f-91b8-c8dc5e1bc22f payment=b2cea828-4d35-4545-94b6-ab7d93be10ec capturing -> captured [Thu Nov 5 12:04:13.356000 2026] [DaProductApp.Tabby.Capture:info] [pid 2594513] [client -] [Tabby] capture: attempt=e0012cdf-0a1c-4b3f-91b8-c8dc5e1bc22f payment=b2cea828-4d35-4545-94b6-ab7d93be10ec is captured [Thu Nov 5 12:04:13.610000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:44262] POST /tabby/webhooks [Thu Nov 5 12:04:13.611000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:44262] QUERY OK source="tabby_payments" db=0.4ms idle=398.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["b2cea828-4d35-4545-94b6-ab7d93be10ec"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:04:13.635000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:44262] QUERY OK db=23.3ms queue=0.3ms idle=325.5ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["authorized", false, "b2cea828-4d35-4545-94b6-ab7d93be10ec", "{\"amount\":\"5000\",\"captures\":[{\"amount\":\"5000\",\"created_at\":\"2026-11-05T12:04:13Z\",\"discount_amount\":\"0\",\"id\":\"d06ea6b6-1a19-440a-ac21-7b6a95b141d7\",\"items\":null,\"reference_id\":\"capture-DEMO-E615C5F5\",\"shipping_amount\":\"0\",\"tax_amount\":\"0\"}],\"closed_at\":null,\"created_at\":\"2026-11-05T12:03:51Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T12:15:51Z\",\"id\":\"b2cea828-4d35-4545-94b6-ab7d93be10ec\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-E615C5F5\"},\"refunds\":[],\"status\":\"authorized\",\"token\":null}", ~U[2026-11-05 12:04:13Z], ~N[2026-11-05 12:04:13], ~N[2026-11-05 12:04:13]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 12:04:13.700000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2594513] [client 78.47.213.209:44262] [Tabby] webhook 200: event=37 payment=b2cea828-4d35-4545-94b6-ab7d93be10ec saved and queued [Thu Nov 5 12:04:13.701000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:44262] Sent 200 in 91ms [Thu Nov 5 12:04:13.751000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK db=49.5ms queue=0.5ms idle=346.0ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "capture", ~U[2026-11-05 12:04:13Z], "b2cea828-4d35-4545-94b6-ab7d93be10ec", 53, 200, 385, %{"amount" => "5000", "captures" => [%{"amount" => "5000", "created_at" => "2026-11-05T12:04:13Z", "discount_amount" => "0", "id" => "d06ea6b6-1a19-440a-ac21-7b6a95b141d7", "items" => nil, "reference_id" => "capture-DEMO-E615C5F5", "shipping_amount" => "0", "tax_amount" => "0"}], "closed_at" => nil, "created_at" => "2026-11-05T12:03:51Z", "currency" => "AED", "expires_at" => "2026-11-05T12:15:51Z", "id" => "b2cea828-4d35-4545-94b6-ab7d93be10ec", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-E615C5F5"}, "refunds" => [], "status" => "authorized", "token" => nil}, ~N[2026-11-05 12:04:13], ~N[2026-11-05 12:04:13]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 12:04:13.752000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook attempt=1 success event=capture payment=b2cea828-4d35-4545-94b6-ab7d93be10ec url=http://demo.ctrmv.com:4030/tabby/webhooks (385 ms) [Thu Nov 5 12:04:13.802000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=1.1ms idle=384.3ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [37] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 12:04:13.803000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.9ms idle=366.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["b2cea828-4d35-4545-94b6-ab7d93be10ec"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:04:13.804000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.4ms queue=0.2ms idle=192.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e0012cdf-0a1c-4b3f-91b8-c8dc5e1bc22f"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:04:13.861000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=56.9ms idle=169.6ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 12:04:13Z], 37] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 12:04:13.862000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2594513] [client -] [Tabby] webhook job: event=37 payment=b2cea828-4d35-4545-94b6-ab7d93be10ec processed (already_final) [Thu Nov 5 12:04:14.160000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] GET /tabby/return/e0012cdf-0a1c-4b3f-91b8-c8dc5e1bc22f/success [Thu Nov 5 12:04:14.161000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:50484] QUERY OK source="tabby_payments" db=0.8ms queue=0.1ms idle=356.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e0012cdf-0a1c-4b3f-91b8-c8dc5e1bc22f"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:04:14.230000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] Sent 302 in 70ms [Thu Nov 5 12:04:14.330000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=468.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e0012cdf-0a1c-4b3f-91b8-c8dc5e1bc22f"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:04:14.639000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] GET /tabby/demo/result/success [Thu Nov 5 12:04:14.639000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] Sent 200 in 479µs [Thu Nov 5 12:04:14.904000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_webhooks" db=0.9ms idle=673.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 12:04:15.105000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] GET /tabby/demo/status/e0012cdf-0a1c-4b3f-91b8-c8dc5e1bc22f [Thu Nov 5 12:04:15.106000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:50484] QUERY OK source="tabby_payments" db=0.9ms idle=680.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e0012cdf-0a1c-4b3f-91b8-c8dc5e1bc22f"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:04:15.106000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50484] Sent 200 in 1ms [Thu Nov 5 12:04:15.162000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:44262] POST /tabby/webhooks [Thu Nov 5 12:04:15.164000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:44262] QUERY OK source="tabby_payments" db=0.8ms idle=715.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["b2cea828-4d35-4545-94b6-ab7d93be10ec"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:04:15.189000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:44262] QUERY OK db=24.7ms idle=632.7ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["closed", false, "b2cea828-4d35-4545-94b6-ab7d93be10ec", "{\"amount\":\"5000\",\"captures\":[{\"amount\":\"5000\",\"created_at\":\"2026-11-05T12:04:13Z\",\"discount_amount\":\"0\",\"id\":\"d06ea6b6-1a19-440a-ac21-7b6a95b141d7\",\"items\":null,\"reference_id\":\"capture-DEMO-E615C5F5\",\"shipping_amount\":\"0\",\"tax_amount\":\"0\"}],\"closed_at\":\"2026-11-05T12:04:13Z\",\"created_at\":\"2026-11-05T12:03:51Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T12:15:51Z\",\"id\":\"b2cea828-4d35-4545-94b6-ab7d93be10ec\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-E615C5F5\"},\"refunds\":[],\"status\":\"closed\",\"token\":null}", ~U[2026-11-05 12:04:15Z], ~N[2026-11-05 12:04:15], ~N[2026-11-05 12:04:15]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 12:04:15.234000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2594513] [client 78.47.213.209:44262] [Tabby] webhook 200: event=38 payment=b2cea828-4d35-4545-94b6-ab7d93be10ec saved and queued [Thu Nov 5 12:04:15.234000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:44262] Sent 200 in 71ms [Thu Nov 5 12:04:15.295000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK db=59.8ms queue=0.7ms idle=330.6ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "close", ~U[2026-11-05 12:04:15Z], "b2cea828-4d35-4545-94b6-ab7d93be10ec", 53, 200, 330, %{"amount" => "5000", "captures" => [%{"amount" => "5000", "created_at" => "2026-11-05T12:04:13Z", "discount_amount" => "0", "id" => "d06ea6b6-1a19-440a-ac21-7b6a95b141d7", "items" => nil, "reference_id" => "capture-DEMO-E615C5F5", "shipping_amount" => "0", "tax_amount" => "0"}], "closed_at" => "2026-11-05T12:04:13Z", "created_at" => "2026-11-05T12:03:51Z", "currency" => "AED", "expires_at" => "2026-11-05T12:15:51Z", "id" => "b2cea828-4d35-4545-94b6-ab7d93be10ec", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-E615C5F5"}, "refunds" => [], "status" => "closed", "token" => nil}, ~N[2026-11-05 12:04:15], ~N[2026-11-05 12:04:15]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 12:04:15.296000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook attempt=1 success event=close payment=b2cea828-4d35-4545-94b6-ab7d93be10ec url=http://demo.ctrmv.com:4030/tabby/webhooks (330 ms) [Thu Nov 5 12:04:15.347000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.7ms idle=354.3ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [38] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 12:04:15.348000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=308.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["b2cea828-4d35-4545-94b6-ab7d93be10ec"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:04:15.349000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=242.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e0012cdf-0a1c-4b3f-91b8-c8dc5e1bc22f"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:04:15.388000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=38.1ms idle=185.7ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 12:04:15Z], 38] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 12:04:15.388000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2594513] [client -] [Tabby] webhook job: event=38 payment=b2cea828-4d35-4545-94b6-ab7d93be10ec processed (already_final) [Thu Nov 5 12:05:01.146000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=390.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:05:01Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:05:01.146000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:05:01.147000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=392.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:05:01Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:05:01.148000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=393.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:05:01.200000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403262 scheduled in 60s (4 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:05:52.452000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.1ms idle=1694.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["demostore", ~U[2026-10-18 12:05:52Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:05:52.454000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.5ms idle=1696.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["demostore", ~N[2026-11-05 12:03:52], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:05:52.455000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.0ms idle=1698.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:05:52.456000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.6ms queue=0.1ms idle=1699.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", ~N[2026-11-05 12:03:52], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:05:52.457000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=1700.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["demostore", ~U[2026-11-05 12:00:52Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:05:52.458000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.6ms idle=1701.2ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-05 12:03:52Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Thu Nov 5 12:05:52.462000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_refunds" db=3.1ms idle=1702.2ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["demostore", ~N[2026-11-05 12:03:52], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Thu Nov 5 12:05:52.464000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.4ms idle=1129.9ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 12:05:52.467000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.7ms queue=0.6ms idle=128.1ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["demostore", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 12:05:52.473000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=5.7ms idle=17.0ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Thu Nov 5 12:05:52.475000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_refunds" db=1.9ms idle=21.6ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Thu Nov 5 12:05:52.475000 2026] [DaProductApp.Tabby.Poller:debug] [pid 2594513] [client -] [Tabby] poll: nothing to do; 0 attempt(s) still watched [Thu Nov 5 12:06:02.528000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1679.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:06:02Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:06:02.528000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:06:02.534000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=3.3ms idle=1084.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:06:02Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:06:02.536000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.6ms queue=0.3ms idle=779.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:06:02.581000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403266 scheduled in 60s (4 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:06:24.090000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] GET /tabby/demo [Thu Nov 5 12:06:24.092000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] Sent 200 in 2ms [Thu Nov 5 12:06:24.575000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] POST /tabby/demo/summary [Thu Nov 5 12:06:24.575000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] Sent 200 in 734µs [Thu Nov 5 12:06:25.415000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] POST /tabby/demo/eligibility [Thu Nov 5 12:06:25.669000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:60976] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:06:25.669000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:60976] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:06:25.670000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:60976] QUERY OK source="tabby_sim_faults" db=0.7ms idle=1686.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:06:25.708000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:60976] QUERY OK db=37.1ms idle=1315.6ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`is_test`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["c35b3063-ac9b-4d9d-a268-522b781e409d", "CREATED", "AED", "64503ba5-8eb5-4be9-9e9c-5e044e32bf84", "demostore", ~U[2026-11-05 12:18:25Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "created", %{"cancel" => nil, "failure" => nil, "success" => nil}, ~U[2026-11-05 12:16:25Z], false, Decimal.new("850.00"), [], [], true, ~N[2026-11-05 12:06:25], ~N[2026-11-05 12:06:25]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:06:25.708000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:60976] [TabbySim] checkout payment=c35b3063-ac9b-4d9d-a268-522b781e409d session=64503ba5-8eb5-4be9-9e9c-5e044e32bf84 decision=created reason=nil amount=850.00 AED [Thu Nov 5 12:06:25.710000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:60976] QUERY OK source="tabby_sim_payments" db=1.4ms idle=1269.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:06:25.712000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:60976] Sent 200 in 42ms [Thu Nov 5 12:06:25.712000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:52819] [Tabby] checkout post /api/v2/checkout -> 200 (296 ms, attempt 1) [Thu Nov 5 12:06:25.712000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:52819] [Tabby] session created payment=c35b3063-ac9b-4d9d-a268-522b781e409d [Thu Nov 5 12:06:25.713000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2594513] [client 115.99.167.137:52819] [Tabby] eligibility: show (amount=850.00 AED) [Thu Nov 5 12:06:25.713000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] Sent 200 in 297ms [Thu Nov 5 12:06:36.397000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] POST /tabby/demo/place [Thu Nov 5 12:06:36.459000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:52819] QUERY OK db=60.3ms queue=0.5ms idle=1642.5ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`amount`,`order_reference`,`needs_attention`,`success_url`,`cancel_url`,`failure_url`,`captured_amount`,`refunded_amount`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["dfb89f86-f499-4ddd-8c67-658c90b2c5ab", "new", "AED", "demostore", Decimal.new("850.00"), "DEMO-DFF53DB1", false, "http://demo.ctrmv.com:4030/tabby/demo/result/success?lang=en&order=DEMO-DFF53DB1", "http://demo.ctrmv.com:4030/tabby/demo/result/cancel?lang=en&order=DEMO-DFF53DB1", "http://demo.ctrmv.com:4030/tabby/demo/result/failure?lang=en&order=DEMO-DFF53DB1", Decimal.new("0"), Decimal.new("0"), ~N[2026-11-05 12:06:36], ~N[2026-11-05 12:06:36]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Thu Nov 5 12:06:36.703000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:56144] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:06:36.703000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:56144] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/dfb89f86-f499-4ddd-8c67-658c90b2c5ab/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/dfb89f86-f499-4ddd-8c67-658c90b2c5ab/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/dfb89f86-f499-4ddd-8c67-658c90b2c5ab/success"}, "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-DFF53DB1"}, "shipping_address" => %{"address" => "Demo Tower 4, Office 302, DIFC", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:06:36.704000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_faults" db=0.5ms idle=1948.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:06:36.759000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK db=53.1ms queue=0.5ms idle=1949.3ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`buyer_history`,`is_test`,`lang`,`shipping_address`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["44c1c2ea-8988-4f50-b03d-3c7063f6c4d2", "CREATED", "AED", "e9011ca4-979f-4771-8871-81bbd767c62c", "demostore", ~U[2026-11-05 12:18:36Z], %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/dfb89f86-f499-4ddd-8c67-658c90b2c5ab/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/dfb89f86-f499-4ddd-8c67-658c90b2c5ab/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/dfb89f86-f499-4ddd-8c67-658c90b2c5ab/success"}, "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-DFF53DB1"}, "shipping_address" => %{"address" => "Demo Tower 4, Office 302, DIFC", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "0", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo headphones", "unit_price" => "650"}, %{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo smartwatch", "unit_price" => "200"}], "reference_id" => "DEMO-DFF53DB1", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "created", %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/dfb89f86-f499-4ddd-8c67-658c90b2c5ab/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/dfb89f86-f499-4ddd-8c67-658c90b2c5ab/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/dfb89f86-f499-4ddd-8c67-658c90b2c5ab/success"}, ~U[2026-11-05 12:16:36Z], false, Decimal.new("850.00"), [], [], %{"registered_since" => "2023-02-01T10:00:00Z"}, true, "en", %{"address" => "Demo Tower 4, Office 302, DIFC", "city" => "Dubai", "zip" => "00000"}, ~N[2026-11-05 12:06:36], ~N[2026-11-05 12:06:36]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:06:36.759000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:56144] [TabbySim] checkout payment=44c1c2ea-8988-4f50-b03d-3c7063f6c4d2 session=e9011ca4-979f-4771-8871-81bbd767c62c decision=created reason=nil amount=850.00 AED [Thu Nov 5 12:06:36.760000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_payments" db=0.9ms idle=574.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:06:36.763000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:56144] Sent 200 in 59ms [Thu Nov 5 12:06:36.763000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:52819] [Tabby] checkout post /api/v2/checkout -> 200 (304 ms, attempt 1) [Thu Nov 5 12:06:36.764000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:52819] [Tabby] session created payment=44c1c2ea-8988-4f50-b03d-3c7063f6c4d2 [Thu Nov 5 12:06:36.765000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:52819] QUERY OK source="tabby_payments" db=0.7ms idle=305.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["dfb89f86-f499-4ddd-8c67-658c90b2c5ab"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Thu Nov 5 12:06:36.845000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:52819] QUERY OK source="tabby_payments" db=78.7ms queue=0.7ms idle=266.3ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-05 12:26:36Z], "44c1c2ea-8988-4f50-b03d-3c7063f6c4d2", "e9011ca4-979f-4771-8871-81bbd767c62c", ~N[2026-11-05 12:06:36], "dfb89f86-f499-4ddd-8c67-658c90b2c5ab"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Thu Nov 5 12:06:36.845000 2026] [DaProductApp.Tabby.Sessions:info] [pid 2594513] [client 115.99.167.137:52819] [Tabby] session created attempt=dfb89f86-f499-4ddd-8c67-658c90b2c5ab payment=44c1c2ea-8988-4f50-b03d-3c7063f6c4d2 [Thu Nov 5 12:06:36.883000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] Sent 200 in 486ms [Thu Nov 5 12:06:37.379000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] GET /tabby-sim/hpp/e9011ca4-979f-4771-8871-81bbd767c62c [Thu Nov 5 12:06:37.379000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:52819] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "e9011ca4-979f-4771-8871-81bbd767c62c"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:06:37.381000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:52819] QUERY OK source="tabby_sim_payments" db=1.1ms idle=623.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["e9011ca4-979f-4771-8871-81bbd767c62c"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:06:37.381000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] Sent 200 in 2ms [Thu Nov 5 12:06:57.130000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] POST /tabby-sim/hpp/e9011ca4-979f-4771-8871-81bbd767c62c [Thu Nov 5 12:06:57.130000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:52819] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "approve", "otp" => "8888", "plan" => "8", "session_id" => "e9011ca4-979f-4771-8871-81bbd767c62c", "ui" => "1"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:06:57.131000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:52819] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.1ms idle=509.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["e9011ca4-979f-4771-8871-81bbd767c62c"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:06:57.156000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:52819] QUERY OK source="tabby_sim_payments" db=23.2ms idle=377.4ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["AUTHORIZED", ~N[2026-11-05 12:06:57], "44c1c2ea-8988-4f50-b03d-3c7063f6c4d2", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:06:57.156000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client 115.99.167.137:52819] [TabbySim] payment=44c1c2ea-8988-4f50-b03d-3c7063f6c4d2 CREATED -> AUTHORIZED [Thu Nov 5 12:06:57.157000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:52819] QUERY OK source="tabby_sim_payments" db=0.8ms idle=401.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["44c1c2ea-8988-4f50-b03d-3c7063f6c4d2"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:06:57.158000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:52819] QUERY OK source="tabby_sim_webhooks" db=0.5ms idle=402.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 12:06:57.216000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client 115.99.167.137:52819] [TabbySim] webhook queued job=403269 event=authorize payment=44c1c2ea-8988-4f50-b03d-3c7063f6c4d2 webhook=53 [Thu Nov 5 12:06:57.216000 2026] [DaProductApp.TabbySim.Hpp:info] [pid 2594513] [client 115.99.167.137:52819] [TabbySim] hpp payment=44c1c2ea-8988-4f50-b03d-3c7063f6c4d2 action=approve status=AUTHORIZED [Thu Nov 5 12:06:57.218000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:52819] QUERY OK source="tabby_sim_payments" db=0.8ms idle=461.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["e9011ca4-979f-4771-8871-81bbd767c62c"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:06:57.218000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] Sent 200 in 88ms [Thu Nov 5 12:06:57.288000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_webhooks" db=0.7ms idle=531.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 12:06:57.580000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:57096] POST /tabby/webhooks [Thu Nov 5 12:06:57.581000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:57096] QUERY OK source="tabby_payments" db=0.6ms idle=424.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["44c1c2ea-8988-4f50-b03d-3c7063f6c4d2"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:06:57.628000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:57096] QUERY OK db=46.4ms queue=0.2ms idle=424.4ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["authorized", false, "44c1c2ea-8988-4f50-b03d-3c7063f6c4d2", "{\"amount\":\"850\",\"captures\":[],\"closed_at\":null,\"created_at\":\"2026-11-05T12:06:36Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T12:18:36Z\",\"id\":\"44c1c2ea-8988-4f50-b03d-3c7063f6c4d2\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-DFF53DB1\"},\"refunds\":[],\"status\":\"authorized\",\"token\":null}", ~U[2026-11-05 12:06:57Z], ~N[2026-11-05 12:06:57], ~N[2026-11-05 12:06:57]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 12:06:57.659000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2594513] [client 78.47.213.209:57096] [Tabby] webhook 200: event=39 payment=44c1c2ea-8988-4f50-b03d-3c7063f6c4d2 saved and queued [Thu Nov 5 12:06:57.659000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:57096] Sent 200 in 79ms [Thu Nov 5 12:06:57.715000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK db=53.6ms queue=0.5ms idle=373.6ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "authorize", ~U[2026-11-05 12:06:57Z], "44c1c2ea-8988-4f50-b03d-3c7063f6c4d2", 53, 200, 372, %{"amount" => "850", "captures" => [], "closed_at" => nil, "created_at" => "2026-11-05T12:06:36Z", "currency" => "AED", "expires_at" => "2026-11-05T12:18:36Z", "id" => "44c1c2ea-8988-4f50-b03d-3c7063f6c4d2", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-DFF53DB1"}, "refunds" => [], "status" => "authorized", "token" => nil}, ~N[2026-11-05 12:06:57], ~N[2026-11-05 12:06:57]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 12:06:57.715000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook attempt=1 success event=authorize payment=44c1c2ea-8988-4f50-b03d-3c7063f6c4d2 url=http://demo.ctrmv.com:4030/tabby/webhooks (372 ms) [Thu Nov 5 12:06:57.775000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.3ms idle=334.2ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [39] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 12:06:57.776000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms queue=0.1ms idle=324.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["44c1c2ea-8988-4f50-b03d-3c7063f6c4d2"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:06:57.777000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms queue=0.1ms idle=195.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["dfb89f86-f499-4ddd-8c67-658c90b2c5ab"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:06:58.116000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:56144] GET /tabby-sim/api/v2/payments/44c1c2ea-8988-4f50-b03d-3c7063f6c4d2 [Thu Nov 5 12:06:58.116000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:56144] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "44c1c2ea-8988-4f50-b03d-3c7063f6c4d2"} Pipelines: [:tabby_sim_api] [Thu Nov 5 12:06:58.117000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_faults" db=0.4ms idle=457.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "44c1c2ea-8988-4f50-b03d-3c7063f6c4d2"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 12:06:58.118000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_faults" db=0.4ms queue=0.1ms idle=402.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:06:58.119000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_payments" db=1.1ms idle=344.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["44c1c2ea-8988-4f50-b03d-3c7063f6c4d2"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Thu Nov 5 12:06:58.120000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:56144] Sent 200 in 4ms [Thu Nov 5 12:06:58.121000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client -] [Tabby] retrieve get /api/v2/payments/44c1c2ea-8988-4f50-b03d-3c7063f6c4d2 -> 200 (344 ms, attempt 1) [Thu Nov 5 12:06:58.157000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=35.5ms idle=346.2ms UPDATE `tabby_payments` AS t0 SET t0.`authorized_at` = ?, t0.`winner_key` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [~U[2026-11-05 12:06:58Z], "dd38c0e486711c52683c6b29dd2c219fcb31230bbf300ac0b9a895a577d47bd1", "authorized", ~N[2026-11-05 12:06:58], "dfb89f86-f499-4ddd-8c67-658c90b2c5ab", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 12:06:58.158000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=381.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["dfb89f86-f499-4ddd-8c67-658c90b2c5ab"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:06:58.158000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2594513] [client -] [Tabby] verify: attempt=dfb89f86-f499-4ddd-8c67-658c90b2c5ab payment=44c1c2ea-8988-4f50-b03d-3c7063f6c4d2 created -> authorized [Thu Nov 5 12:06:58.244000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=51.8ms idle=365.1ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 12:06:58Z], 39] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 12:06:58.244000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2594513] [client -] [Tabby] webhook job: event=39 payment=44c1c2ea-8988-4f50-b03d-3c7063f6c4d2 processed (recorded authorized) [Thu Nov 5 12:06:58.285000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=167.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["dfb89f86-f499-4ddd-8c67-658c90b2c5ab"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:06:58.377000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=91.7ms idle=167.4ms UPDATE `tabby_payments` AS t0 SET t0.`capture_reference_id` = ?, t0.`claimed_at` = ?, t0.`claimed_by` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["capture-DEMO-DFF53DB1", ~U[2026-11-05 12:06:58Z], "nonode@nohost", "capturing", ~N[2026-11-05 12:06:58], "dfb89f86-f499-4ddd-8c67-658c90b2c5ab", "authorized"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 12:06:58.378000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=220.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["dfb89f86-f499-4ddd-8c67-658c90b2c5ab"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:06:58.379000 2026] [DaProductApp.Tabby.Capture:info] [pid 2594513] [client -] [Tabby] capture: attempt=dfb89f86-f499-4ddd-8c67-658c90b2c5ab payment=44c1c2ea-8988-4f50-b03d-3c7063f6c4d2 claimed (authorized -> capturing) [Thu Nov 5 12:06:58.640000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:56144] POST /tabby-sim/api/v2/payments/44c1c2ea-8988-4f50-b03d-3c7063f6c4d2/captures [Thu Nov 5 12:06:58.640000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:56144] Processing with DaProductAppWeb.TabbySim.PaymentsController.capture/2 Parameters: %{"amount" => "850.00", "id" => "44c1c2ea-8988-4f50-b03d-3c7063f6c4d2", "reference_id" => "capture-DEMO-DFF53DB1"} Pipelines: [:tabby_sim_api] [Thu Nov 5 12:06:58.642000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_faults" db=0.6ms idle=396.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["capture", "44c1c2ea-8988-4f50-b03d-3c7063f6c4d2"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 12:06:58.642000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_faults" db=0.3ms idle=358.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["capture"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:06:58.643000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_payments" db=0.4ms idle=357.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["44c1c2ea-8988-4f50-b03d-3c7063f6c4d2"] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:227 [Thu Nov 5 12:06:58.644000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK db=0.2ms idle=314.3ms begin [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Thu Nov 5 12:06:58.645000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_payments" db=0.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) FOR UPDATE ["44c1c2ea-8988-4f50-b03d-3c7063f6c4d2"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:231 [Thu Nov 5 12:06:58.646000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_payments" db=0.5ms UPDATE `tabby_sim_payments` SET `status` = ?, `closed_at` = ?, `captures` = ?, `updated_at` = ? WHERE `id` = ? ["CLOSED", ~U[2026-11-05 12:06:58Z], [%{"amount" => "850", "created_at" => "2026-11-05T12:06:58Z", "discount_amount" => "0", "id" => "48067185-27c8-4789-8f39-841105553ee3", "items" => nil, "reference_id" => "capture-DEMO-DFF53DB1", "shipping_amount" => "0", "tax_amount" => "0"}], ~N[2026-11-05 12:06:58], "44c1c2ea-8988-4f50-b03d-3c7063f6c4d2"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:244 [Thu Nov 5 12:06:58.647000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client 127.0.0.1:56144] [TabbySim] capture payment=44c1c2ea-8988-4f50-b03d-3c7063f6c4d2 status=CLOSED [Thu Nov 5 12:06:58.687000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK db=39.8ms commit [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Thu Nov 5 12:06:58.688000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_webhooks" db=1.3ms idle=309.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 12:06:58.733000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client 127.0.0.1:56144] [TabbySim] webhook queued job=403272 event=capture payment=44c1c2ea-8988-4f50-b03d-3c7063f6c4d2 webhook=53 [Thu Nov 5 12:06:58.734000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_webhooks" db=0.7ms idle=354.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 12:06:58.847000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client 127.0.0.1:56144] [TabbySim] webhook queued job=403273 event=close payment=44c1c2ea-8988-4f50-b03d-3c7063f6c4d2 webhook=53 [Thu Nov 5 12:06:58.847000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:56144] Sent 200 in 207ms [Thu Nov 5 12:06:58.848000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client -] [Tabby] capture post /api/v2/payments/44c1c2ea-8988-4f50-b03d-3c7063f6c4d2/captures -> 200 (469 ms, attempt 1) [Thu Nov 5 12:06:59.007000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_webhooks" db=0.5ms queue=0.2ms idle=364.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 12:06:59.041000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=192.2ms idle=220.9ms UPDATE `tabby_payments` AS t0 SET t0.`captured_amount` = ?, t0.`captured_at` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [Decimal.new("850"), ~U[2026-11-05 12:06:58Z], "captured", ~N[2026-11-05 12:06:58], "dfb89f86-f499-4ddd-8c67-658c90b2c5ab", "capturing"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 12:06:59.043000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.5ms queue=0.1ms idle=398.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["dfb89f86-f499-4ddd-8c67-658c90b2c5ab"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:06:59.043000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2594513] [client -] [Tabby] verify: attempt=dfb89f86-f499-4ddd-8c67-658c90b2c5ab payment=44c1c2ea-8988-4f50-b03d-3c7063f6c4d2 capturing -> captured [Thu Nov 5 12:06:59.043000 2026] [DaProductApp.Tabby.Capture:info] [pid 2594513] [client -] [Tabby] capture: attempt=dfb89f86-f499-4ddd-8c67-658c90b2c5ab payment=44c1c2ea-8988-4f50-b03d-3c7063f6c4d2 is captured [Thu Nov 5 12:06:59.333000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:57096] POST /tabby/webhooks [Thu Nov 5 12:06:59.336000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:57096] QUERY OK source="tabby_payments" db=1.4ms queue=0.1ms idle=600.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["44c1c2ea-8988-4f50-b03d-3c7063f6c4d2"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:06:59.417000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:57096] QUERY OK db=80.0ms queue=0.3ms idle=489.1ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["authorized", false, "44c1c2ea-8988-4f50-b03d-3c7063f6c4d2", "{\"amount\":\"850\",\"captures\":[{\"amount\":\"850\",\"created_at\":\"2026-11-05T12:06:58Z\",\"discount_amount\":\"0\",\"id\":\"48067185-27c8-4789-8f39-841105553ee3\",\"items\":null,\"reference_id\":\"capture-DEMO-DFF53DB1\",\"shipping_amount\":\"0\",\"tax_amount\":\"0\"}],\"closed_at\":null,\"created_at\":\"2026-11-05T12:06:36Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T12:18:36Z\",\"id\":\"44c1c2ea-8988-4f50-b03d-3c7063f6c4d2\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-DFF53DB1\"},\"refunds\":[],\"status\":\"authorized\",\"token\":null}", ~U[2026-11-05 12:06:59Z], ~N[2026-11-05 12:06:59], ~N[2026-11-05 12:06:59]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 12:06:59.455000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2594513] [client 78.47.213.209:57096] [Tabby] webhook 200: event=40 payment=44c1c2ea-8988-4f50-b03d-3c7063f6c4d2 saved and queued [Thu Nov 5 12:06:59.455000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:57096] Sent 200 in 121ms [Thu Nov 5 12:06:59.521000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK db=64.0ms queue=0.7ms idle=415.3ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "capture", ~U[2026-11-05 12:06:59Z], "44c1c2ea-8988-4f50-b03d-3c7063f6c4d2", 53, 200, 448, %{"amount" => "850", "captures" => [%{"amount" => "850", "created_at" => "2026-11-05T12:06:58Z", "discount_amount" => "0", "id" => "48067185-27c8-4789-8f39-841105553ee3", "items" => nil, "reference_id" => "capture-DEMO-DFF53DB1", "shipping_amount" => "0", "tax_amount" => "0"}], "closed_at" => nil, "created_at" => "2026-11-05T12:06:36Z", "currency" => "AED", "expires_at" => "2026-11-05T12:18:36Z", "id" => "44c1c2ea-8988-4f50-b03d-3c7063f6c4d2", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-DFF53DB1"}, "refunds" => [], "status" => "authorized", "token" => nil}, ~N[2026-11-05 12:06:59], ~N[2026-11-05 12:06:59]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 12:06:59.521000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook attempt=1 success event=capture payment=44c1c2ea-8988-4f50-b03d-3c7063f6c4d2 url=http://demo.ctrmv.com:4030/tabby/webhooks (448 ms) [Thu Nov 5 12:06:59.552000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.3ms idle=421.6ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [40] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 12:06:59.553000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.2ms idle=387.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["44c1c2ea-8988-4f50-b03d-3c7063f6c4d2"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:06:59.554000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=339.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["dfb89f86-f499-4ddd-8c67-658c90b2c5ab"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:06:59.625000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=70.0ms idle=219.1ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 12:06:59Z], 40] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 12:06:59.625000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2594513] [client -] [Tabby] webhook job: event=40 payment=44c1c2ea-8988-4f50-b03d-3c7063f6c4d2 processed (already_final) [Thu Nov 5 12:06:59.908000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] GET /tabby/return/dfb89f86-f499-4ddd-8c67-658c90b2c5ab/success [Thu Nov 5 12:06:59.909000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:52819] QUERY OK source="tabby_payments" db=0.5ms idle=355.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["dfb89f86-f499-4ddd-8c67-658c90b2c5ab"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:06:59.974000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] Sent 302 in 66ms [Thu Nov 5 12:07:00.117000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.3ms idle=486.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["dfb89f86-f499-4ddd-8c67-658c90b2c5ab"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:07:00.409000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] GET /tabby/demo/result/success [Thu Nov 5 12:07:00.409000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] Sent 200 in 533µs [Thu Nov 5 12:07:00.713000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_webhooks" db=0.8ms idle=595.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 12:07:00.846000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] GET /tabby/demo/status/dfb89f86-f499-4ddd-8c67-658c90b2c5ab [Thu Nov 5 12:07:00.847000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:52819] QUERY OK source="tabby_payments" db=0.5ms idle=636.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["dfb89f86-f499-4ddd-8c67-658c90b2c5ab"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:07:00.847000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] Sent 200 in 1ms [Thu Nov 5 12:07:01.050000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:57096] POST /tabby/webhooks [Thu Nov 5 12:07:01.051000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:57096] QUERY OK source="tabby_payments" db=1.1ms queue=0.1ms idle=748.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["44c1c2ea-8988-4f50-b03d-3c7063f6c4d2"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:07:01.097000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:57096] QUERY OK db=44.9ms idle=419.9ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["closed", false, "44c1c2ea-8988-4f50-b03d-3c7063f6c4d2", "{\"amount\":\"850\",\"captures\":[{\"amount\":\"850\",\"created_at\":\"2026-11-05T12:06:58Z\",\"discount_amount\":\"0\",\"id\":\"48067185-27c8-4789-8f39-841105553ee3\",\"items\":null,\"reference_id\":\"capture-DEMO-DFF53DB1\",\"shipping_amount\":\"0\",\"tax_amount\":\"0\"}],\"closed_at\":\"2026-11-05T12:06:58Z\",\"created_at\":\"2026-11-05T12:06:36Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T12:18:36Z\",\"id\":\"44c1c2ea-8988-4f50-b03d-3c7063f6c4d2\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-DFF53DB1\"},\"refunds\":[],\"status\":\"closed\",\"token\":null}", ~U[2026-11-05 12:07:01Z], ~N[2026-11-05 12:07:01], ~N[2026-11-05 12:07:01]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 12:07:01.154000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2594513] [client 78.47.213.209:57096] [Tabby] webhook 200: event=41 payment=44c1c2ea-8988-4f50-b03d-3c7063f6c4d2 saved and queued [Thu Nov 5 12:07:01.154000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:57096] Sent 200 in 104ms [Thu Nov 5 12:07:01.214000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK db=58.8ms idle=442.1ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "close", ~U[2026-11-05 12:07:01Z], "44c1c2ea-8988-4f50-b03d-3c7063f6c4d2", 53, 200, 442, %{"amount" => "850", "captures" => [%{"amount" => "850", "created_at" => "2026-11-05T12:06:58Z", "discount_amount" => "0", "id" => "48067185-27c8-4789-8f39-841105553ee3", "items" => nil, "reference_id" => "capture-DEMO-DFF53DB1", "shipping_amount" => "0", "tax_amount" => "0"}], "closed_at" => "2026-11-05T12:06:58Z", "created_at" => "2026-11-05T12:06:36Z", "currency" => "AED", "expires_at" => "2026-11-05T12:18:36Z", "id" => "44c1c2ea-8988-4f50-b03d-3c7063f6c4d2", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-DFF53DB1"}, "refunds" => [], "status" => "closed", "token" => nil}, ~N[2026-11-05 12:07:01], ~N[2026-11-05 12:07:01]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 12:07:01.214000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook attempt=1 success event=close payment=44c1c2ea-8988-4f50-b03d-3c7063f6c4d2 url=http://demo.ctrmv.com:4030/tabby/webhooks (442 ms) [Thu Nov 5 12:07:01.243000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=2.2ms idle=393.7ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [41] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 12:07:01.244000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=394.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["44c1c2ea-8988-4f50-b03d-3c7063f6c4d2"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:07:01.246000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=326.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["dfb89f86-f499-4ddd-8c67-658c90b2c5ab"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:07:01.288000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=39.9ms idle=194.4ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 12:07:01Z], 41] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 12:07:01.288000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2594513] [client -] [Tabby] webhook job: event=41 payment=44c1c2ea-8988-4f50-b03d-3c7063f6c4d2 processed (already_final) [Thu Nov 5 12:07:03.859000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1100.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:07:03Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:07:03.859000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:07:03.861000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.9ms idle=1102.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:07:03Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:07:03.862000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1103.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:07:03.905000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403279 scheduled in 60s (5 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:07:04.717000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] GET /tabby/demo [Thu Nov 5 12:07:04.720000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] Sent 200 in 3ms [Thu Nov 5 12:07:05.562000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] POST /tabby/demo/summary [Thu Nov 5 12:07:05.563000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] Sent 200 in 866µs [Thu Nov 5 12:07:06.398000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] POST /tabby/demo/eligibility [Thu Nov 5 12:07:06.665000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:60976] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:07:06.666000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:60976] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:07:06.667000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:60976] QUERY OK source="tabby_sim_faults" db=0.6ms idle=911.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:07:06.705000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:60976] QUERY OK db=36.7ms queue=0.3ms idle=912.2ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`is_test`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["b760ce9d-c736-491f-a48f-84d7117a09d1", "CREATED", "AED", "8c9b92a0-c16c-4384-bc8c-1de4a2320ed8", "demostore", ~U[2026-11-05 12:19:06Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "created", %{"cancel" => nil, "failure" => nil, "success" => nil}, ~U[2026-11-05 12:17:06Z], false, Decimal.new("850.00"), [], [], true, ~N[2026-11-05 12:07:06], ~N[2026-11-05 12:07:06]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:07:06.705000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:60976] [TabbySim] checkout payment=b760ce9d-c736-491f-a48f-84d7117a09d1 session=8c9b92a0-c16c-4384-bc8c-1de4a2320ed8 decision=created reason=nil amount=850.00 AED [Thu Nov 5 12:07:06.707000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:60976] QUERY OK source="tabby_sim_payments" db=1.5ms queue=0.2ms idle=950.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:07:06.709000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:60976] Sent 200 in 43ms [Thu Nov 5 12:07:06.710000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:52819] [Tabby] checkout post /api/v2/checkout -> 200 (312 ms, attempt 1) [Thu Nov 5 12:07:06.710000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:52819] [Tabby] session created payment=b760ce9d-c736-491f-a48f-84d7117a09d1 [Thu Nov 5 12:07:06.711000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2594513] [client 115.99.167.137:52819] [Tabby] eligibility: show (amount=850.00 AED) [Thu Nov 5 12:07:06.711000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] Sent 200 in 313ms [Thu Nov 5 12:07:11.698000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] POST /tabby/demo/place [Thu Nov 5 12:07:11.737000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:52819] QUERY OK db=37.3ms queue=0.3ms idle=1943.8ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`amount`,`order_reference`,`needs_attention`,`success_url`,`cancel_url`,`failure_url`,`captured_amount`,`refunded_amount`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["a494f60d-2087-4693-a4b2-138174f8db29", "new", "AED", "demostore", Decimal.new("850.00"), "DEMO-0B1E5669", false, "http://demo.ctrmv.com:4030/tabby/demo/result/success?lang=en&order=DEMO-0B1E5669", "http://demo.ctrmv.com:4030/tabby/demo/result/cancel?lang=en&order=DEMO-0B1E5669", "http://demo.ctrmv.com:4030/tabby/demo/result/failure?lang=en&order=DEMO-0B1E5669", Decimal.new("0"), Decimal.new("0"), ~N[2026-11-05 12:07:11], ~N[2026-11-05 12:07:11]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Thu Nov 5 12:07:11.984000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:56144] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:07:11.984000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:56144] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/a494f60d-2087-4693-a4b2-138174f8db29/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/a494f60d-2087-4693-a4b2-138174f8db29/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/a494f60d-2087-4693-a4b2-138174f8db29/success"}, "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-0B1E5669"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:07:11.986000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_faults" db=1.3ms idle=248.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:07:12.038000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK db=49.6ms queue=1.2ms idle=231.7ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`buyer_history`,`is_test`,`lang`,`shipping_address`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["4d0b8460-9309-4957-8a2b-dcbf7f66524b", "CREATED", "AED", "41a8588c-ca02-4c3b-8287-c259b4842efd", "demostore", ~U[2026-11-05 12:19:11Z], %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/a494f60d-2087-4693-a4b2-138174f8db29/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/a494f60d-2087-4693-a4b2-138174f8db29/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/a494f60d-2087-4693-a4b2-138174f8db29/success"}, "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-0B1E5669"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "0", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo headphones", "unit_price" => "650"}, %{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo smartwatch", "unit_price" => "200"}], "reference_id" => "DEMO-0B1E5669", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "created", %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/a494f60d-2087-4693-a4b2-138174f8db29/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/a494f60d-2087-4693-a4b2-138174f8db29/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/a494f60d-2087-4693-a4b2-138174f8db29/success"}, ~U[2026-11-05 12:17:11Z], false, Decimal.new("850.00"), [], [], %{"registered_since" => "2023-02-01T10:00:00Z"}, true, "en", %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}, ~N[2026-11-05 12:07:11], ~N[2026-11-05 12:07:11]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:07:12.038000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:56144] [TabbySim] checkout payment=4d0b8460-9309-4957-8a2b-dcbf7f66524b session=41a8588c-ca02-4c3b-8287-c259b4842efd decision=created reason=nil amount=850.00 AED [Thu Nov 5 12:07:12.040000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_payments" db=0.8ms idle=283.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:07:12.041000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:56144] Sent 200 in 57ms [Thu Nov 5 12:07:12.042000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:52819] [Tabby] checkout post /api/v2/checkout -> 200 (305 ms, attempt 1) [Thu Nov 5 12:07:12.042000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:52819] [Tabby] session created payment=4d0b8460-9309-4957-8a2b-dcbf7f66524b [Thu Nov 5 12:07:12.043000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:52819] QUERY OK source="tabby_payments" db=0.8ms idle=287.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["a494f60d-2087-4693-a4b2-138174f8db29"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Thu Nov 5 12:07:12.087000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:52819] QUERY OK source="tabby_payments" db=39.6ms queue=2.8ms idle=289.2ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-05 12:27:12Z], "4d0b8460-9309-4957-8a2b-dcbf7f66524b", "41a8588c-ca02-4c3b-8287-c259b4842efd", ~N[2026-11-05 12:07:12], "a494f60d-2087-4693-a4b2-138174f8db29"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Thu Nov 5 12:07:12.087000 2026] [DaProductApp.Tabby.Sessions:info] [pid 2594513] [client 115.99.167.137:52819] [Tabby] session created attempt=a494f60d-2087-4693-a4b2-138174f8db29 payment=4d0b8460-9309-4957-8a2b-dcbf7f66524b [Thu Nov 5 12:07:12.089000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] Sent 200 in 391ms [Thu Nov 5 12:07:12.560000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] GET /tabby-sim/hpp/41a8588c-ca02-4c3b-8287-c259b4842efd [Thu Nov 5 12:07:12.560000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:52819] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "41a8588c-ca02-4c3b-8287-c259b4842efd"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:07:12.562000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:52819] QUERY OK source="tabby_sim_payments" db=1.5ms idle=692.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["41a8588c-ca02-4c3b-8287-c259b4842efd"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:07:12.563000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] Sent 200 in 2ms [Thu Nov 5 12:07:42.790000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] POST /tabby-sim/hpp/41a8588c-ca02-4c3b-8287-c259b4842efd [Thu Nov 5 12:07:42.790000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:52819] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "approve", "otp" => "8888", "plan" => "6", "session_id" => "41a8588c-ca02-4c3b-8287-c259b4842efd", "ui" => "1"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:07:42.791000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:52819] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1035.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["41a8588c-ca02-4c3b-8287-c259b4842efd"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:07:42.835000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:52819] QUERY OK source="tabby_sim_payments" db=42.8ms idle=1036.6ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["AUTHORIZED", ~N[2026-11-05 12:07:42], "4d0b8460-9309-4957-8a2b-dcbf7f66524b", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:07:42.835000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client 115.99.167.137:52819] [TabbySim] payment=4d0b8460-9309-4957-8a2b-dcbf7f66524b CREATED -> AUTHORIZED [Thu Nov 5 12:07:42.836000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:52819] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1080.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["4d0b8460-9309-4957-8a2b-dcbf7f66524b"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:07:42.837000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:52819] QUERY OK source="tabby_sim_webhooks" db=1.0ms idle=1080.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 12:07:42.879000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client 115.99.167.137:52819] [TabbySim] webhook queued job=403280 event=authorize payment=4d0b8460-9309-4957-8a2b-dcbf7f66524b webhook=53 [Thu Nov 5 12:07:42.879000 2026] [DaProductApp.TabbySim.Hpp:info] [pid 2594513] [client 115.99.167.137:52819] [TabbySim] hpp payment=4d0b8460-9309-4957-8a2b-dcbf7f66524b action=approve status=AUTHORIZED [Thu Nov 5 12:07:42.881000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:52819] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1124.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["41a8588c-ca02-4c3b-8287-c259b4842efd"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:07:42.881000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] Sent 200 in 91ms [Thu Nov 5 12:07:42.989000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_webhooks" db=0.4ms idle=403.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 12:07:43.251000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:57096] POST /tabby/webhooks [Thu Nov 5 12:07:43.252000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:57096] QUERY OK source="tabby_payments" db=0.6ms idle=416.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["4d0b8460-9309-4957-8a2b-dcbf7f66524b"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:07:43.277000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:57096] QUERY OK db=23.9ms queue=0.3ms idle=416.7ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["authorized", false, "4d0b8460-9309-4957-8a2b-dcbf7f66524b", "{\"amount\":\"850\",\"captures\":[],\"closed_at\":null,\"created_at\":\"2026-11-05T12:07:11Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T12:19:11Z\",\"id\":\"4d0b8460-9309-4957-8a2b-dcbf7f66524b\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-0B1E5669\"},\"refunds\":[],\"status\":\"authorized\",\"token\":null}", ~U[2026-11-05 12:07:43Z], ~N[2026-11-05 12:07:43], ~N[2026-11-05 12:07:43]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 12:07:43.301000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2594513] [client 78.47.213.209:57096] [Tabby] webhook 200: event=42 payment=4d0b8460-9309-4957-8a2b-dcbf7f66524b saved and queued [Thu Nov 5 12:07:43.302000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:57096] Sent 200 in 50ms [Thu Nov 5 12:07:43.338000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK db=34.9ms idle=423.4ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "authorize", ~U[2026-11-05 12:07:43Z], "4d0b8460-9309-4957-8a2b-dcbf7f66524b", 53, 200, 313, %{"amount" => "850", "captures" => [], "closed_at" => nil, "created_at" => "2026-11-05T12:07:11Z", "currency" => "AED", "expires_at" => "2026-11-05T12:19:11Z", "id" => "4d0b8460-9309-4957-8a2b-dcbf7f66524b", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-0B1E5669"}, "refunds" => [], "status" => "authorized", "token" => nil}, ~N[2026-11-05 12:07:43], ~N[2026-11-05 12:07:43]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 12:07:43.338000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook attempt=1 success event=authorize payment=4d0b8460-9309-4957-8a2b-dcbf7f66524b url=http://demo.ctrmv.com:4030/tabby/webhooks (313 ms) [Thu Nov 5 12:07:43.443000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.8ms idle=398.3ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [42] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 12:07:43.446000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.9ms idle=316.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["4d0b8460-9309-4957-8a2b-dcbf7f66524b"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:07:43.446000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=193.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["a494f60d-2087-4693-a4b2-138174f8db29"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:07:43.717000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:56144] GET /tabby-sim/api/v2/payments/4d0b8460-9309-4957-8a2b-dcbf7f66524b [Thu Nov 5 12:07:43.717000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:56144] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "4d0b8460-9309-4957-8a2b-dcbf7f66524b"} Pipelines: [:tabby_sim_api] [Thu Nov 5 12:07:43.718000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_faults" db=0.6ms idle=416.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "4d0b8460-9309-4957-8a2b-dcbf7f66524b"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 12:07:43.719000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_faults" db=0.3ms idle=380.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:07:43.720000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_payments" db=0.8ms idle=288.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["4d0b8460-9309-4957-8a2b-dcbf7f66524b"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Thu Nov 5 12:07:43.720000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:56144] Sent 200 in 3ms [Thu Nov 5 12:07:43.720000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client -] [Tabby] retrieve get /api/v2/payments/4d0b8460-9309-4957-8a2b-dcbf7f66524b -> 200 (274 ms, attempt 1) [Thu Nov 5 12:07:43.743000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=22.6ms idle=278.3ms UPDATE `tabby_payments` AS t0 SET t0.`authorized_at` = ?, t0.`winner_key` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [~U[2026-11-05 12:07:43Z], "7cc09a994724b96de9bf3022c02b82edc597ba26d1ae039e76c5c44d9435ef83", "authorized", ~N[2026-11-05 12:07:43], "a494f60d-2087-4693-a4b2-138174f8db29", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 12:07:43.744000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=300.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["a494f60d-2087-4693-a4b2-138174f8db29"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:07:43.745000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2594513] [client -] [Tabby] verify: attempt=a494f60d-2087-4693-a4b2-138174f8db29 payment=4d0b8460-9309-4957-8a2b-dcbf7f66524b created -> authorized [Thu Nov 5 12:07:43.835000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=33.1ms idle=323.4ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 12:07:43Z], 42] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 12:07:43.835000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2594513] [client -] [Tabby] webhook job: event=42 payment=4d0b8460-9309-4957-8a2b-dcbf7f66524b processed (recorded authorized) [Thu Nov 5 12:07:43.887000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=167.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["a494f60d-2087-4693-a4b2-138174f8db29"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:07:43.938000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=50.7ms queue=0.1ms idle=167.4ms UPDATE `tabby_payments` AS t0 SET t0.`capture_reference_id` = ?, t0.`claimed_at` = ?, t0.`claimed_by` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["capture-DEMO-0B1E5669", ~U[2026-11-05 12:07:43Z], "nonode@nohost", "capturing", ~N[2026-11-05 12:07:43], "a494f60d-2087-4693-a4b2-138174f8db29", "authorized"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 12:07:43.940000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.2ms idle=194.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["a494f60d-2087-4693-a4b2-138174f8db29"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:07:43.940000 2026] [DaProductApp.Tabby.Capture:info] [pid 2594513] [client -] [Tabby] capture: attempt=a494f60d-2087-4693-a4b2-138174f8db29 payment=4d0b8460-9309-4957-8a2b-dcbf7f66524b claimed (authorized -> capturing) [Thu Nov 5 12:07:44.192000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:56144] POST /tabby-sim/api/v2/payments/4d0b8460-9309-4957-8a2b-dcbf7f66524b/captures [Thu Nov 5 12:07:44.192000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:56144] Processing with DaProductAppWeb.TabbySim.PaymentsController.capture/2 Parameters: %{"amount" => "850.00", "id" => "4d0b8460-9309-4957-8a2b-dcbf7f66524b", "reference_id" => "capture-DEMO-0B1E5669"} Pipelines: [:tabby_sim_api] [Thu Nov 5 12:07:44.193000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_faults" db=0.5ms idle=357.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["capture", "4d0b8460-9309-4957-8a2b-dcbf7f66524b"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 12:07:44.194000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_faults" db=0.8ms idle=341.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["capture"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:07:44.196000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_payments" db=0.6ms idle=329.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["4d0b8460-9309-4957-8a2b-dcbf7f66524b"] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:227 [Thu Nov 5 12:07:44.197000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK db=0.4ms idle=310.2ms begin [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Thu Nov 5 12:07:44.198000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_payments" db=1.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) FOR UPDATE ["4d0b8460-9309-4957-8a2b-dcbf7f66524b"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:231 [Thu Nov 5 12:07:44.200000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_payments" db=0.7ms UPDATE `tabby_sim_payments` SET `status` = ?, `closed_at` = ?, `captures` = ?, `updated_at` = ? WHERE `id` = ? ["CLOSED", ~U[2026-11-05 12:07:44Z], [%{"amount" => "850", "created_at" => "2026-11-05T12:07:44Z", "discount_amount" => "0", "id" => "48a3df54-30d9-45ef-8dc6-0714df7fe994", "items" => nil, "reference_id" => "capture-DEMO-0B1E5669", "shipping_amount" => "0", "tax_amount" => "0"}], ~N[2026-11-05 12:07:44], "4d0b8460-9309-4957-8a2b-dcbf7f66524b"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:244 [Thu Nov 5 12:07:44.200000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client 127.0.0.1:56144] [TabbySim] capture payment=4d0b8460-9309-4957-8a2b-dcbf7f66524b status=CLOSED [Thu Nov 5 12:07:44.232000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK db=32.1ms commit [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Thu Nov 5 12:07:44.233000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_webhooks" db=0.4ms idle=346.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 12:07:44.274000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client 127.0.0.1:56144] [TabbySim] webhook queued job=403283 event=capture payment=4d0b8460-9309-4957-8a2b-dcbf7f66524b webhook=53 [Thu Nov 5 12:07:44.274000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_webhooks" db=0.5ms idle=335.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 12:07:44.308000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client 127.0.0.1:56144] [TabbySim] webhook queued job=403284 event=close payment=4d0b8460-9309-4957-8a2b-dcbf7f66524b webhook=53 [Thu Nov 5 12:07:44.308000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:56144] Sent 200 in 116ms [Thu Nov 5 12:07:44.309000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client -] [Tabby] capture post /api/v2/payments/4d0b8460-9309-4957-8a2b-dcbf7f66524b/captures -> 200 (369 ms, attempt 1) [Thu Nov 5 12:07:44.374000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=64.2ms queue=0.1ms idle=221.6ms UPDATE `tabby_payments` AS t0 SET t0.`captured_amount` = ?, t0.`captured_at` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [Decimal.new("850"), ~U[2026-11-05 12:07:44Z], "captured", ~N[2026-11-05 12:07:44], "a494f60d-2087-4693-a4b2-138174f8db29", "capturing"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 12:07:44.375000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=180.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["a494f60d-2087-4693-a4b2-138174f8db29"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:07:44.375000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2594513] [client -] [Tabby] verify: attempt=a494f60d-2087-4693-a4b2-138174f8db29 payment=4d0b8460-9309-4957-8a2b-dcbf7f66524b capturing -> captured [Thu Nov 5 12:07:44.375000 2026] [DaProductApp.Tabby.Capture:info] [pid 2594513] [client -] [Tabby] capture: attempt=a494f60d-2087-4693-a4b2-138174f8db29 payment=4d0b8460-9309-4957-8a2b-dcbf7f66524b is captured [Thu Nov 5 12:07:44.375000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_webhooks" db=0.3ms idle=181.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 12:07:44.704000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:57096] POST /tabby/webhooks [Thu Nov 5 12:07:44.705000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:57096] QUERY OK source="tabby_payments" db=0.6ms idle=429.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["4d0b8460-9309-4957-8a2b-dcbf7f66524b"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:07:44.728000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:57096] QUERY OK db=22.2ms idle=397.3ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["authorized", false, "4d0b8460-9309-4957-8a2b-dcbf7f66524b", "{\"amount\":\"850\",\"captures\":[{\"amount\":\"850\",\"created_at\":\"2026-11-05T12:07:44Z\",\"discount_amount\":\"0\",\"id\":\"48a3df54-30d9-45ef-8dc6-0714df7fe994\",\"items\":null,\"reference_id\":\"capture-DEMO-0B1E5669\",\"shipping_amount\":\"0\",\"tax_amount\":\"0\"}],\"closed_at\":null,\"created_at\":\"2026-11-05T12:07:11Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T12:19:11Z\",\"id\":\"4d0b8460-9309-4957-8a2b-dcbf7f66524b\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-0B1E5669\"},\"refunds\":[],\"status\":\"authorized\",\"token\":null}", ~U[2026-11-05 12:07:44Z], ~N[2026-11-05 12:07:44], ~N[2026-11-05 12:07:44]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 12:07:44.777000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2594513] [client 78.47.213.209:57096] [Tabby] webhook 200: event=43 payment=4d0b8460-9309-4957-8a2b-dcbf7f66524b saved and queued [Thu Nov 5 12:07:44.778000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:57096] Sent 200 in 74ms [Thu Nov 5 12:07:44.823000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK db=43.9ms queue=0.3ms idle=403.2ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "capture", ~U[2026-11-05 12:07:44Z], "4d0b8460-9309-4957-8a2b-dcbf7f66524b", 53, 200, 402, %{"amount" => "850", "captures" => [%{"amount" => "850", "created_at" => "2026-11-05T12:07:44Z", "discount_amount" => "0", "id" => "48a3df54-30d9-45ef-8dc6-0714df7fe994", "items" => nil, "reference_id" => "capture-DEMO-0B1E5669", "shipping_amount" => "0", "tax_amount" => "0"}], "closed_at" => nil, "created_at" => "2026-11-05T12:07:11Z", "currency" => "AED", "expires_at" => "2026-11-05T12:19:11Z", "id" => "4d0b8460-9309-4957-8a2b-dcbf7f66524b", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-0B1E5669"}, "refunds" => [], "status" => "authorized", "token" => nil}, ~N[2026-11-05 12:07:44], ~N[2026-11-05 12:07:44]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 12:07:44.823000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook attempt=1 success event=capture payment=4d0b8460-9309-4957-8a2b-dcbf7f66524b url=http://demo.ctrmv.com:4030/tabby/webhooks (402 ms) [Thu Nov 5 12:07:44.889000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.3ms idle=335.3ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [43] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 12:07:44.890000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=184.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["4d0b8460-9309-4957-8a2b-dcbf7f66524b"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:07:44.891000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.3ms idle=162.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["a494f60d-2087-4693-a4b2-138174f8db29"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:07:44.944000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=52.6ms idle=161.2ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 12:07:44Z], 43] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 12:07:44.944000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2594513] [client -] [Tabby] webhook job: event=43 payment=4d0b8460-9309-4957-8a2b-dcbf7f66524b processed (already_final) [Thu Nov 5 12:07:45.574000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] GET /tabby/return/a494f60d-2087-4693-a4b2-138174f8db29/success [Thu Nov 5 12:07:45.575000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:52819] QUERY OK source="tabby_payments" db=0.4ms queue=0.1ms idle=685.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["a494f60d-2087-4693-a4b2-138174f8db29"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:07:45.626000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] Sent 302 in 51ms [Thu Nov 5 12:07:45.730000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=792.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["a494f60d-2087-4693-a4b2-138174f8db29"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:07:46.240000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] GET /tabby/demo/result/success [Thu Nov 5 12:07:46.241000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] Sent 200 in 1ms [Thu Nov 5 12:07:46.697000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] GET /tabby/demo/status/a494f60d-2087-4693-a4b2-138174f8db29 [Thu Nov 5 12:07:46.699000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:52819] QUERY OK source="tabby_payments" db=0.7ms idle=1072.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["a494f60d-2087-4693-a4b2-138174f8db29"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:07:46.699000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] Sent 200 in 2ms [Thu Nov 5 12:07:47.041000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_webhooks" db=0.7ms idle=1052.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 12:07:47.298000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:57096] POST /tabby/webhooks [Thu Nov 5 12:07:47.299000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:57096] QUERY OK source="tabby_payments" db=0.4ms idle=708.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["4d0b8460-9309-4957-8a2b-dcbf7f66524b"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:07:47.337000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:57096] QUERY OK db=37.7ms idle=600.4ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["closed", false, "4d0b8460-9309-4957-8a2b-dcbf7f66524b", "{\"amount\":\"850\",\"captures\":[{\"amount\":\"850\",\"created_at\":\"2026-11-05T12:07:44Z\",\"discount_amount\":\"0\",\"id\":\"48a3df54-30d9-45ef-8dc6-0714df7fe994\",\"items\":null,\"reference_id\":\"capture-DEMO-0B1E5669\",\"shipping_amount\":\"0\",\"tax_amount\":\"0\"}],\"closed_at\":\"2026-11-05T12:07:44Z\",\"created_at\":\"2026-11-05T12:07:11Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T12:19:11Z\",\"id\":\"4d0b8460-9309-4957-8a2b-dcbf7f66524b\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-0B1E5669\"},\"refunds\":[],\"status\":\"closed\",\"token\":null}", ~U[2026-11-05 12:07:47Z], ~N[2026-11-05 12:07:47], ~N[2026-11-05 12:07:47]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 12:07:47.373000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2594513] [client 78.47.213.209:57096] [Tabby] webhook 200: event=44 payment=4d0b8460-9309-4957-8a2b-dcbf7f66524b saved and queued [Thu Nov 5 12:07:47.374000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:57096] Sent 200 in 75ms [Thu Nov 5 12:07:47.417000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK db=41.4ms queue=0.7ms idle=619.3ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "close", ~U[2026-11-05 12:07:47Z], "4d0b8460-9309-4957-8a2b-dcbf7f66524b", 53, 200, 333, %{"amount" => "850", "captures" => [%{"amount" => "850", "created_at" => "2026-11-05T12:07:44Z", "discount_amount" => "0", "id" => "48a3df54-30d9-45ef-8dc6-0714df7fe994", "items" => nil, "reference_id" => "capture-DEMO-0B1E5669", "shipping_amount" => "0", "tax_amount" => "0"}], "closed_at" => "2026-11-05T12:07:44Z", "created_at" => "2026-11-05T12:07:11Z", "currency" => "AED", "expires_at" => "2026-11-05T12:19:11Z", "id" => "4d0b8460-9309-4957-8a2b-dcbf7f66524b", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-0B1E5669"}, "refunds" => [], "status" => "closed", "token" => nil}, ~N[2026-11-05 12:07:47], ~N[2026-11-05 12:07:47]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 12:07:47.417000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook attempt=1 success event=close payment=4d0b8460-9309-4957-8a2b-dcbf7f66524b url=http://demo.ctrmv.com:4030/tabby/webhooks (333 ms) [Thu Nov 5 12:07:47.518000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.3ms idle=409.3ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [44] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 12:07:47.519000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=325.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["4d0b8460-9309-4957-8a2b-dcbf7f66524b"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:07:47.520000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.3ms idle=220.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["a494f60d-2087-4693-a4b2-138174f8db29"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:07:47.582000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=61.9ms idle=182.9ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 12:07:47Z], 44] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 12:07:47.582000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2594513] [client -] [Tabby] webhook job: event=44 payment=4d0b8460-9309-4957-8a2b-dcbf7f66524b processed (already_final) [Thu Nov 5 12:08:05.180000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=422.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:08:05Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:08:05.180000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:08:05.181000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=423.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:08:05Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:08:05.183000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=425.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:08:05.209000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403290 scheduled in 60s (6 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:08:34.859000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] GET /tabby/demo [Thu Nov 5 12:08:34.860000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] Sent 200 in 1ms [Thu Nov 5 12:08:35.264000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] POST /tabby/demo/summary [Thu Nov 5 12:08:35.265000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] Sent 200 in 702µs [Thu Nov 5 12:08:36.083000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] POST /tabby/demo/eligibility [Thu Nov 5 12:08:36.311000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:58706] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:08:36.311000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:58706] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:08:36.313000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:58706] QUERY OK source="tabby_sim_faults" db=0.7ms idle=1153.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:08:36.330000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:58706] QUERY OK db=15.6ms queue=1.0ms idle=1114.6ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`is_test`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["99710cd8-658b-49ae-b977-f0f8aab3f507", "CREATED", "AED", "3012c20e-81f0-4dfe-a3bb-517c3f4205ea", "demostore", ~U[2026-11-05 12:20:36Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "created", %{"cancel" => nil, "failure" => nil, "success" => nil}, ~U[2026-11-05 12:18:36Z], false, Decimal.new("850.00"), [], [], true, ~N[2026-11-05 12:08:36], ~N[2026-11-05 12:08:36]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:08:36.331000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:58706] [TabbySim] checkout payment=99710cd8-658b-49ae-b977-f0f8aab3f507 session=3012c20e-81f0-4dfe-a3bb-517c3f4205ea decision=created reason=nil amount=850.00 AED [Thu Nov 5 12:08:36.332000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:58706] QUERY OK source="tabby_sim_payments" db=0.5ms idle=575.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:08:36.334000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:58706] Sent 200 in 23ms [Thu Nov 5 12:08:36.335000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:52819] [Tabby] checkout post /api/v2/checkout -> 200 (252 ms, attempt 1) [Thu Nov 5 12:08:36.335000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:52819] [Tabby] session created payment=99710cd8-658b-49ae-b977-f0f8aab3f507 [Thu Nov 5 12:08:36.336000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2594513] [client 115.99.167.137:52819] [Tabby] eligibility: show (amount=850.00 AED) [Thu Nov 5 12:08:36.336000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] Sent 200 in 253ms [Thu Nov 5 12:08:36.870000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] POST /tabby/demo/summary [Thu Nov 5 12:08:36.870000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] Sent 200 in 550µs [Thu Nov 5 12:08:37.674000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] POST /tabby/demo/eligibility [Thu Nov 5 12:08:37.927000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:58706] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:08:37.927000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:58706] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:08:37.928000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:58706] QUERY OK source="tabby_sim_faults" db=0.9ms queue=0.1ms idle=651.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:08:37.952000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:58706] QUERY OK db=23.3ms idle=451.3ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`is_test`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["0591db23-be7b-4d8e-acd6-b475c6330226", "CREATED", "AED", "c086a91b-185b-4bce-a0d7-17e202d3c0f8", "demostore", ~U[2026-11-05 12:20:37Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "created", %{"cancel" => nil, "failure" => nil, "success" => nil}, ~U[2026-11-05 12:18:37Z], false, Decimal.new("1050.00"), [], [], true, ~N[2026-11-05 12:08:37], ~N[2026-11-05 12:08:37]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:08:37.953000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:58706] [TabbySim] checkout payment=0591db23-be7b-4d8e-acd6-b475c6330226 session=c086a91b-185b-4bce-a0d7-17e202d3c0f8 decision=created reason=nil amount=1050.00 AED [Thu Nov 5 12:08:37.954000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:58706] QUERY OK source="tabby_sim_payments" db=0.9ms idle=390.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:08:37.956000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:58706] Sent 200 in 29ms [Thu Nov 5 12:08:37.957000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:52819] [Tabby] checkout post /api/v2/checkout -> 200 (283 ms, attempt 1) [Thu Nov 5 12:08:37.957000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:52819] [Tabby] session created payment=0591db23-be7b-4d8e-acd6-b475c6330226 [Thu Nov 5 12:08:37.957000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2594513] [client 115.99.167.137:52819] [Tabby] eligibility: show (amount=1050.00 AED) [Thu Nov 5 12:08:37.957000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] Sent 200 in 283ms [Thu Nov 5 12:08:38.400000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=643.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["demostore", ~U[2026-10-18 12:08:38Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:08:38.401000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.2ms idle=644.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["demostore", ~N[2026-11-05 12:06:38], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:08:38.403000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.0ms idle=645.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:08:38.404000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.0ms idle=599.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", ~N[2026-11-05 12:06:38], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:08:38.406000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.2ms queue=0.1ms idle=476.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["demostore", ~U[2026-11-05 12:03:38Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:08:38.407000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.8ms idle=454.0ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-05 12:06:38Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Thu Nov 5 12:08:38.408000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_refunds" db=0.9ms idle=453.5ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["demostore", ~N[2026-11-05 12:06:38], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Thu Nov 5 12:08:38.410000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.0ms idle=452.3ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 12:08:38.411000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=131.4ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["demostore", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 12:08:38.412000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=1.0ms idle=12.7ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Thu Nov 5 12:08:38.413000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_refunds" db=0.5ms idle=12.9ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Thu Nov 5 12:08:38.413000 2026] [DaProductApp.Tabby.Poller:debug] [pid 2594513] [client -] [Tabby] poll: nothing to do; 0 attempt(s) still watched [Thu Nov 5 12:08:43.083000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] POST /tabby/demo/place [Thu Nov 5 12:08:43.107000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:52819] QUERY OK db=23.2ms idle=1327.6ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`amount`,`order_reference`,`needs_attention`,`success_url`,`cancel_url`,`failure_url`,`captured_amount`,`refunded_amount`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["f3177b2b-beab-4ce7-8c10-f0b5d8a8c646", "new", "AED", "demostore", Decimal.new("1050.00"), "DEMO-D952A4DF", false, "http://demo.ctrmv.com:4030/tabby/demo/result/success?lang=en&order=DEMO-D952A4DF", "http://demo.ctrmv.com:4030/tabby/demo/result/cancel?lang=en&order=DEMO-D952A4DF", "http://demo.ctrmv.com:4030/tabby/demo/result/failure?lang=en&order=DEMO-D952A4DF", Decimal.new("0"), Decimal.new("0"), ~N[2026-11-05 12:08:43], ~N[2026-11-05 12:08:43]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Thu Nov 5 12:08:43.362000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:56144] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:08:43.362000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:56144] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/f3177b2b-beab-4ce7-8c10-f0b5d8a8c646/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/f3177b2b-beab-4ce7-8c10-f0b5d8a8c646/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/f3177b2b-beab-4ce7-8c10-f0b5d8a8c646/success"}, "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 2, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-D952A4DF"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:08:43.363000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_faults" db=0.4ms idle=1606.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:08:43.426000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK db=61.8ms queue=0.4ms idle=1607.2ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`buyer_history`,`is_test`,`lang`,`shipping_address`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["896c2478-2d31-4657-957f-040f92d62218", "CREATED", "AED", "6f53bfd0-27fc-432e-8548-33ed628b7ee9", "demostore", ~U[2026-11-05 12:20:43Z], %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/f3177b2b-beab-4ce7-8c10-f0b5d8a8c646/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/f3177b2b-beab-4ce7-8c10-f0b5d8a8c646/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/f3177b2b-beab-4ce7-8c10-f0b5d8a8c646/success"}, "payment" => %{"amount" => "1050.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 2, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-D952A4DF"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "0", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo headphones", "unit_price" => "650"}, %{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 2, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo smartwatch", "unit_price" => "200"}], "reference_id" => "DEMO-D952A4DF", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "name" => "Sara Ali", "phone" => "+971500000001"}, "created", %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/f3177b2b-beab-4ce7-8c10-f0b5d8a8c646/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/f3177b2b-beab-4ce7-8c10-f0b5d8a8c646/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/f3177b2b-beab-4ce7-8c10-f0b5d8a8c646/success"}, ~U[2026-11-05 12:18:43Z], false, Decimal.new("1050.00"), [], [], %{"registered_since" => "2023-02-01T10:00:00Z"}, true, "en", %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}, ~N[2026-11-05 12:08:43], ~N[2026-11-05 12:08:43]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:08:43.426000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:56144] [TabbySim] checkout payment=896c2478-2d31-4657-957f-040f92d62218 session=6f53bfd0-27fc-432e-8548-33ed628b7ee9 decision=created reason=nil amount=1050.00 AED [Thu Nov 5 12:08:43.428000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1670.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:08:43.429000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:56144] Sent 200 in 67ms [Thu Nov 5 12:08:43.431000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:52819] [Tabby] checkout post /api/v2/checkout -> 200 (323 ms, attempt 1) [Thu Nov 5 12:08:43.431000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:52819] [Tabby] session created payment=896c2478-2d31-4657-957f-040f92d62218 [Thu Nov 5 12:08:43.432000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:52819] QUERY OK source="tabby_payments" db=0.5ms idle=545.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["f3177b2b-beab-4ce7-8c10-f0b5d8a8c646"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Thu Nov 5 12:08:43.504000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:52819] QUERY OK source="tabby_payments" db=71.1ms queue=0.3ms idle=462.9ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-05 12:28:43Z], "896c2478-2d31-4657-957f-040f92d62218", "6f53bfd0-27fc-432e-8548-33ed628b7ee9", ~N[2026-11-05 12:08:43], "f3177b2b-beab-4ce7-8c10-f0b5d8a8c646"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Thu Nov 5 12:08:43.504000 2026] [DaProductApp.Tabby.Sessions:info] [pid 2594513] [client 115.99.167.137:52819] [Tabby] session created attempt=f3177b2b-beab-4ce7-8c10-f0b5d8a8c646 payment=896c2478-2d31-4657-957f-040f92d62218 [Thu Nov 5 12:08:43.555000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] Sent 200 in 472ms [Thu Nov 5 12:08:44.007000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] GET /tabby-sim/hpp/6f53bfd0-27fc-432e-8548-33ed628b7ee9 [Thu Nov 5 12:08:44.007000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:52819] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "6f53bfd0-27fc-432e-8548-33ed628b7ee9"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:08:44.008000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:52819] QUERY OK source="tabby_sim_payments" db=0.7ms idle=644.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["6f53bfd0-27fc-432e-8548-33ed628b7ee9"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:08:44.009000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] Sent 200 in 2ms [Thu Nov 5 12:08:51.683000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] POST /tabby-sim/hpp/6f53bfd0-27fc-432e-8548-33ed628b7ee9 [Thu Nov 5 12:08:51.684000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:52819] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "approve", "otp" => "8888", "plan" => "6", "session_id" => "6f53bfd0-27fc-432e-8548-33ed628b7ee9", "ui" => "1"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:08:51.685000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:52819] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1523.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["6f53bfd0-27fc-432e-8548-33ed628b7ee9"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:08:51.709000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:52819] QUERY OK source="tabby_sim_payments" db=23.7ms queue=0.1ms idle=1365.0ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["AUTHORIZED", ~N[2026-11-05 12:08:51], "896c2478-2d31-4657-957f-040f92d62218", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:08:51.709000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client 115.99.167.137:52819] [TabbySim] payment=896c2478-2d31-4657-957f-040f92d62218 CREATED -> AUTHORIZED [Thu Nov 5 12:08:51.710000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:52819] QUERY OK source="tabby_sim_payments" db=0.5ms idle=953.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["896c2478-2d31-4657-957f-040f92d62218"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:08:51.711000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:52819] QUERY OK source="tabby_sim_webhooks" db=0.7ms idle=954.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 12:08:51.759000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client 115.99.167.137:52819] [TabbySim] webhook queued job=403292 event=authorize payment=896c2478-2d31-4657-957f-040f92d62218 webhook=53 [Thu Nov 5 12:08:51.759000 2026] [DaProductApp.TabbySim.Hpp:info] [pid 2594513] [client 115.99.167.137:52819] [TabbySim] hpp payment=896c2478-2d31-4657-957f-040f92d62218 action=approve status=AUTHORIZED [Thu Nov 5 12:08:51.760000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:52819] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.1ms idle=1003.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["6f53bfd0-27fc-432e-8548-33ed628b7ee9"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:08:51.760000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] Sent 200 in 77ms [Thu Nov 5 12:08:51.827000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_webhooks" db=0.4ms idle=503.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 12:08:52.065000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:34968] POST /tabby/webhooks [Thu Nov 5 12:08:52.066000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:34968] QUERY OK source="tabby_payments" db=0.5ms idle=380.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["896c2478-2d31-4657-957f-040f92d62218"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:08:52.104000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:34968] QUERY OK db=36.5ms decode=0.8ms idle=357.7ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["authorized", false, "896c2478-2d31-4657-957f-040f92d62218", "{\"amount\":\"1050\",\"captures\":[],\"closed_at\":null,\"created_at\":\"2026-11-05T12:08:43Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T12:20:43Z\",\"id\":\"896c2478-2d31-4657-957f-040f92d62218\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-D952A4DF\"},\"refunds\":[],\"status\":\"authorized\",\"token\":null}", ~U[2026-11-05 12:08:52Z], ~N[2026-11-05 12:08:52], ~N[2026-11-05 12:08:52]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 12:08:52.160000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2594513] [client 78.47.213.209:34968] [Tabby] webhook 200: event=45 payment=896c2478-2d31-4657-957f-040f92d62218 saved and queued [Thu Nov 5 12:08:52.160000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:34968] Sent 200 in 95ms [Thu Nov 5 12:08:52.221000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK db=57.4ms idle=404.8ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "authorize", ~U[2026-11-05 12:08:52Z], "896c2478-2d31-4657-957f-040f92d62218", 53, 200, 335, %{"amount" => "1050", "captures" => [], "closed_at" => nil, "created_at" => "2026-11-05T12:08:43Z", "currency" => "AED", "expires_at" => "2026-11-05T12:20:43Z", "id" => "896c2478-2d31-4657-957f-040f92d62218", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-D952A4DF"}, "refunds" => [], "status" => "authorized", "token" => nil}, ~N[2026-11-05 12:08:52], ~N[2026-11-05 12:08:52]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 12:08:52.222000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook attempt=1 success event=authorize payment=896c2478-2d31-4657-957f-040f92d62218 url=http://demo.ctrmv.com:4030/tabby/webhooks (335 ms) [Thu Nov 5 12:08:52.244000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=1.1ms idle=415.7ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [45] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 12:08:52.247000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=2.5ms idle=371.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["896c2478-2d31-4657-957f-040f92d62218"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:08:52.249000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.5ms queue=0.1ms idle=290.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["f3177b2b-beab-4ce7-8c10-f0b5d8a8c646"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:08:52.573000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:56144] GET /tabby-sim/api/v2/payments/896c2478-2d31-4657-957f-040f92d62218 [Thu Nov 5 12:08:52.573000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:56144] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "896c2478-2d31-4657-957f-040f92d62218"} Pipelines: [:tabby_sim_api] [Thu Nov 5 12:08:52.574000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_faults" db=0.6ms idle=352.6ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "896c2478-2d31-4657-957f-040f92d62218"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 12:08:52.575000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_faults" db=0.5ms idle=331.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:08:52.576000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_payments" db=0.5ms idle=331.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["896c2478-2d31-4657-957f-040f92d62218"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Thu Nov 5 12:08:52.576000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:56144] Sent 200 in 3ms [Thu Nov 5 12:08:52.577000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client -] [Tabby] retrieve get /api/v2/payments/896c2478-2d31-4657-957f-040f92d62218 -> 200 (327 ms, attempt 1) [Thu Nov 5 12:08:52.652000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=74.7ms queue=0.1ms idle=329.8ms UPDATE `tabby_payments` AS t0 SET t0.`authorized_at` = ?, t0.`winner_key` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [~U[2026-11-05 12:08:52Z], "c523285455bf7cb148f0aa96743fd9f50d230ea769cc0bfa6042b9be35407307", "authorized", ~N[2026-11-05 12:08:52], "f3177b2b-beab-4ce7-8c10-f0b5d8a8c646", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 12:08:52.653000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=403.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["f3177b2b-beab-4ce7-8c10-f0b5d8a8c646"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:08:52.653000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2594513] [client -] [Tabby] verify: attempt=f3177b2b-beab-4ce7-8c10-f0b5d8a8c646 payment=896c2478-2d31-4657-957f-040f92d62218 created -> authorized [Thu Nov 5 12:08:52.781000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=70.1ms queue=0.1ms idle=384.4ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 12:08:52Z], 45] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 12:08:52.782000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2594513] [client -] [Tabby] webhook job: event=45 payment=896c2478-2d31-4657-957f-040f92d62218 processed (recorded authorized) [Thu Nov 5 12:08:52.852000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.9ms idle=276.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["f3177b2b-beab-4ce7-8c10-f0b5d8a8c646"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:08:52.915000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=62.5ms queue=0.2ms idle=277.4ms UPDATE `tabby_payments` AS t0 SET t0.`capture_reference_id` = ?, t0.`claimed_at` = ?, t0.`claimed_by` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["capture-DEMO-D952A4DF", ~U[2026-11-05 12:08:52Z], "nonode@nohost", "capturing", ~N[2026-11-05 12:08:52], "f3177b2b-beab-4ce7-8c10-f0b5d8a8c646", "authorized"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 12:08:52.917000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.6ms queue=0.3ms idle=339.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["f3177b2b-beab-4ce7-8c10-f0b5d8a8c646"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:08:52.917000 2026] [DaProductApp.Tabby.Capture:info] [pid 2594513] [client -] [Tabby] capture: attempt=f3177b2b-beab-4ce7-8c10-f0b5d8a8c646 payment=896c2478-2d31-4657-957f-040f92d62218 claimed (authorized -> capturing) [Thu Nov 5 12:08:53.610000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:56144] POST /tabby-sim/api/v2/payments/896c2478-2d31-4657-957f-040f92d62218/captures [Thu Nov 5 12:08:53.610000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:56144] Processing with DaProductAppWeb.TabbySim.PaymentsController.capture/2 Parameters: %{"amount" => "1050.00", "id" => "896c2478-2d31-4657-957f-040f92d62218", "reference_id" => "capture-DEMO-D952A4DF"} Pipelines: [:tabby_sim_api] [Thu Nov 5 12:08:53.611000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_faults" db=0.8ms idle=829.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["capture", "896c2478-2d31-4657-957f-040f92d62218"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 12:08:53.612000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_faults" db=0.6ms idle=761.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["capture"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:08:53.613000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_payments" db=0.5ms idle=760.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["896c2478-2d31-4657-957f-040f92d62218"] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:227 [Thu Nov 5 12:08:53.614000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK db=0.2ms idle=698.3ms begin [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Thu Nov 5 12:08:53.615000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_payments" db=1.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) FOR UPDATE ["896c2478-2d31-4657-957f-040f92d62218"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:231 [Thu Nov 5 12:08:53.617000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_payments" db=0.6ms UPDATE `tabby_sim_payments` SET `status` = ?, `closed_at` = ?, `captures` = ?, `updated_at` = ? WHERE `id` = ? ["CLOSED", ~U[2026-11-05 12:08:53Z], [%{"amount" => "1050", "created_at" => "2026-11-05T12:08:53Z", "discount_amount" => "0", "id" => "80b73392-7f45-45b8-8bf9-a09826845a9d", "items" => nil, "reference_id" => "capture-DEMO-D952A4DF", "shipping_amount" => "0", "tax_amount" => "0"}], ~N[2026-11-05 12:08:53], "896c2478-2d31-4657-957f-040f92d62218"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:244 [Thu Nov 5 12:08:53.617000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client 127.0.0.1:56144] [TabbySim] capture payment=896c2478-2d31-4657-957f-040f92d62218 status=CLOSED [Thu Nov 5 12:08:53.711000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK db=94.3ms commit [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Thu Nov 5 12:08:53.712000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_webhooks" db=0.5ms idle=795.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 12:08:53.809000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client 127.0.0.1:56144] [TabbySim] webhook queued job=403295 event=capture payment=896c2478-2d31-4657-957f-040f92d62218 webhook=53 [Thu Nov 5 12:08:53.811000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:56144] QUERY OK source="tabby_sim_webhooks" db=0.6ms queue=1.3ms idle=811.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 12:08:53.854000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client 127.0.0.1:56144] [TabbySim] webhook queued job=403296 event=close payment=896c2478-2d31-4657-957f-040f92d62218 webhook=53 [Thu Nov 5 12:08:53.854000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:56144] Sent 200 in 244ms [Thu Nov 5 12:08:53.856000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client -] [Tabby] capture post /api/v2/payments/896c2478-2d31-4657-957f-040f92d62218/captures -> 200 (939 ms, attempt 1) [Thu Nov 5 12:08:53.914000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_webhooks" db=0.5ms idle=301.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 12:08:53.919000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=61.2ms queue=0.1ms idle=416.7ms UPDATE `tabby_payments` AS t0 SET t0.`captured_amount` = ?, t0.`captured_at` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [Decimal.new("1050"), ~U[2026-11-05 12:08:53Z], "captured", ~N[2026-11-05 12:08:53], "f3177b2b-beab-4ce7-8c10-f0b5d8a8c646", "capturing"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 12:08:53.921000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.9ms idle=306.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["f3177b2b-beab-4ce7-8c10-f0b5d8a8c646"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:08:53.921000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2594513] [client -] [Tabby] verify: attempt=f3177b2b-beab-4ce7-8c10-f0b5d8a8c646 payment=896c2478-2d31-4657-957f-040f92d62218 capturing -> captured [Thu Nov 5 12:08:53.922000 2026] [DaProductApp.Tabby.Capture:info] [pid 2594513] [client -] [Tabby] capture: attempt=f3177b2b-beab-4ce7-8c10-f0b5d8a8c646 payment=896c2478-2d31-4657-957f-040f92d62218 is captured [Thu Nov 5 12:08:54.236000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:34968] POST /tabby/webhooks [Thu Nov 5 12:08:54.238000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:34968] QUERY OK source="tabby_payments" db=0.8ms idle=324.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["896c2478-2d31-4657-957f-040f92d62218"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:08:54.265000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:34968] QUERY OK db=25.8ms queue=0.2ms idle=324.6ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["authorized", false, "896c2478-2d31-4657-957f-040f92d62218", "{\"amount\":\"1050\",\"captures\":[{\"amount\":\"1050\",\"created_at\":\"2026-11-05T12:08:53Z\",\"discount_amount\":\"0\",\"id\":\"80b73392-7f45-45b8-8bf9-a09826845a9d\",\"items\":null,\"reference_id\":\"capture-DEMO-D952A4DF\",\"shipping_amount\":\"0\",\"tax_amount\":\"0\"}],\"closed_at\":null,\"created_at\":\"2026-11-05T12:08:43Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T12:20:43Z\",\"id\":\"896c2478-2d31-4657-957f-040f92d62218\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-D952A4DF\"},\"refunds\":[],\"status\":\"authorized\",\"token\":null}", ~U[2026-11-05 12:08:54Z], ~N[2026-11-05 12:08:54], ~N[2026-11-05 12:08:54]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 12:08:54.327000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2594513] [client 78.47.213.209:34968] [Tabby] webhook 200: event=46 payment=896c2478-2d31-4657-957f-040f92d62218 saved and queued [Thu Nov 5 12:08:54.327000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:34968] Sent 200 in 90ms [Thu Nov 5 12:08:54.406000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK db=76.7ms idle=354.3ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "capture", ~U[2026-11-05 12:08:54Z], "896c2478-2d31-4657-957f-040f92d62218", 53, 200, 415, %{"amount" => "1050", "captures" => [%{"amount" => "1050", "created_at" => "2026-11-05T12:08:53Z", "discount_amount" => "0", "id" => "80b73392-7f45-45b8-8bf9-a09826845a9d", "items" => nil, "reference_id" => "capture-DEMO-D952A4DF", "shipping_amount" => "0", "tax_amount" => "0"}], "closed_at" => nil, "created_at" => "2026-11-05T12:08:43Z", "currency" => "AED", "expires_at" => "2026-11-05T12:20:43Z", "id" => "896c2478-2d31-4657-957f-040f92d62218", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-D952A4DF"}, "refunds" => [], "status" => "authorized", "token" => nil}, ~N[2026-11-05 12:08:54], ~N[2026-11-05 12:08:54]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 12:08:54.406000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook attempt=1 success event=capture payment=896c2478-2d31-4657-957f-040f92d62218 url=http://demo.ctrmv.com:4030/tabby/webhooks (415 ms) [Thu Nov 5 12:08:54.430000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] GET /tabby/return/f3177b2b-beab-4ce7-8c10-f0b5d8a8c646/success [Thu Nov 5 12:08:54.432000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:52819] QUERY OK source="tabby_payments" db=0.5ms idle=247.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["f3177b2b-beab-4ce7-8c10-f0b5d8a8c646"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:08:54.453000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.3ms idle=186.1ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [46] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 12:08:54.454000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=186.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["896c2478-2d31-4657-957f-040f92d62218"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:08:54.456000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.5ms queue=0.1ms idle=127.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["f3177b2b-beab-4ce7-8c10-f0b5d8a8c646"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:08:54.505000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] Sent 302 in 74ms [Thu Nov 5 12:08:54.523000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=66.3ms idle=124.8ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 12:08:54Z], 46] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 12:08:54.523000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2594513] [client -] [Tabby] webhook job: event=46 payment=896c2478-2d31-4657-957f-040f92d62218 processed (already_final) [Thu Nov 5 12:08:54.622000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=168.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["f3177b2b-beab-4ce7-8c10-f0b5d8a8c646"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:08:54.893000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] GET /tabby/demo/result/success [Thu Nov 5 12:08:54.893000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] Sent 200 in 449µs [Thu Nov 5 12:08:55.340000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] GET /tabby/demo/status/f3177b2b-beab-4ce7-8c10-f0b5d8a8c646 [Thu Nov 5 12:08:55.342000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:52819] QUERY OK source="tabby_payments" db=0.7ms queue=0.3ms idle=719.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["f3177b2b-beab-4ce7-8c10-f0b5d8a8c646"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:08:55.342000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52819] Sent 200 in 2ms [Thu Nov 5 12:08:56.522000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_webhooks" db=1.0ms idle=1289.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 12:08:56.769000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:34968] POST /tabby/webhooks [Thu Nov 5 12:08:56.771000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:34968] QUERY OK source="tabby_payments" db=0.5ms idle=1014.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["896c2478-2d31-4657-957f-040f92d62218"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:08:56.827000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:34968] QUERY OK db=55.0ms idle=1015.4ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["closed", false, "896c2478-2d31-4657-957f-040f92d62218", "{\"amount\":\"1050\",\"captures\":[{\"amount\":\"1050\",\"created_at\":\"2026-11-05T12:08:53Z\",\"discount_amount\":\"0\",\"id\":\"80b73392-7f45-45b8-8bf9-a09826845a9d\",\"items\":null,\"reference_id\":\"capture-DEMO-D952A4DF\",\"shipping_amount\":\"0\",\"tax_amount\":\"0\"}],\"closed_at\":\"2026-11-05T12:08:53Z\",\"created_at\":\"2026-11-05T12:08:43Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T12:20:43Z\",\"id\":\"896c2478-2d31-4657-957f-040f92d62218\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-D952A4DF\"},\"refunds\":[],\"status\":\"closed\",\"token\":null}", ~U[2026-11-05 12:08:56Z], ~N[2026-11-05 12:08:56], ~N[2026-11-05 12:08:56]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 12:08:56.852000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2594513] [client 78.47.213.209:34968] [Tabby] webhook 200: event=47 payment=896c2478-2d31-4657-957f-040f92d62218 saved and queued [Thu Nov 5 12:08:56.852000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:34968] Sent 200 in 82ms [Thu Nov 5 12:08:56.911000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK db=57.1ms queue=0.1ms idle=1097.1ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "close", ~U[2026-11-05 12:08:56Z], "896c2478-2d31-4657-957f-040f92d62218", 53, 200, 330, %{"amount" => "1050", "captures" => [%{"amount" => "1050", "created_at" => "2026-11-05T12:08:53Z", "discount_amount" => "0", "id" => "80b73392-7f45-45b8-8bf9-a09826845a9d", "items" => nil, "reference_id" => "capture-DEMO-D952A4DF", "shipping_amount" => "0", "tax_amount" => "0"}], "closed_at" => "2026-11-05T12:08:53Z", "created_at" => "2026-11-05T12:08:43Z", "currency" => "AED", "expires_at" => "2026-11-05T12:20:43Z", "id" => "896c2478-2d31-4657-957f-040f92d62218", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-D952A4DF"}, "refunds" => [], "status" => "closed", "token" => nil}, ~N[2026-11-05 12:08:56], ~N[2026-11-05 12:08:56]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 12:08:56.911000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook attempt=1 success event=close payment=896c2478-2d31-4657-957f-040f92d62218 url=http://demo.ctrmv.com:4030/tabby/webhooks (330 ms) [Thu Nov 5 12:08:56.934000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.8ms idle=410.9ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [47] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 12:08:56.935000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=372.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["896c2478-2d31-4657-957f-040f92d62218"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:08:56.936000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=288.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["f3177b2b-beab-4ce7-8c10-f0b5d8a8c646"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:08:57.017000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=80.1ms idle=165.9ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 12:08:56Z], 47] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 12:08:57.017000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2594513] [client -] [Tabby] webhook job: event=47 payment=896c2478-2d31-4657-957f-040f92d62218 processed (already_final) [Thu Nov 5 12:09:06.745000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1986.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:09:06Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:09:06.745000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:09:06.746000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.2ms idle=1987.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:09:06Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:09:06.747000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1988.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:09:06.871000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403300 scheduled in 60s (8 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:10:08.012000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1248.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:10:08Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:10:08.013000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:10:08.014000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.2ms idle=1250.2ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:10:08Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:10:08.015000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1111.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:10:08.091000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403307 scheduled in 60s (8 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:10:44.286000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.0ms idle=522.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["demostore", ~U[2026-10-18 12:10:44Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:10:44.288000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=523.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["demostore", ~N[2026-11-05 12:08:44], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:10:44.289000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.9ms queue=0.1ms idle=524.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:10:44.291000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.0ms queue=0.1ms idle=526.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", ~N[2026-11-05 12:08:44], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:10:44.292000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.9ms queue=0.1ms idle=527.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["demostore", ~U[2026-11-05 12:05:44Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:10:44.293000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=1.0ms idle=529.2ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-05 12:08:44Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Thu Nov 5 12:10:44.295000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_refunds" db=0.9ms idle=530.5ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["demostore", ~N[2026-11-05 12:08:44], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Thu Nov 5 12:10:44.296000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=531.6ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 12:10:44.297000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=82.0ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["demostore", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 12:10:44.297000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.5ms idle=11.9ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Thu Nov 5 12:10:44.298000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_refunds" db=0.5ms idle=11.2ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Thu Nov 5 12:10:44.298000 2026] [DaProductApp.Tabby.Poller:debug] [pid 2594513] [client -] [Tabby] poll: nothing to do; 0 attempt(s) still watched [Thu Nov 5 12:11:08.389000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1084.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:11:08Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:11:08.389000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:11:08.390000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms queue=0.1ms idle=626.2ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:11:08Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:11:08.391000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=627.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:11:08.445000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403308 scheduled in 60s (8 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:11:26.891000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="global_table" db=0.8ms idle=1119.9ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 12:12:04.212000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Thu Nov 5 12:12:04.215000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Thu Nov 5 12:12:04.215000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Thu Nov 5 12:12:06.028000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Thu Nov 5 12:12:06.028000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Thu Nov 5 12:12:06.027000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Thu Nov 5 12:12:07.331000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:61270] GET /tabby-sim/admin [Thu Nov 5 12:12:07.352000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:61270] Processing with DaProductAppWeb.TabbySim.AdminController.index/2 Parameters: %{} Pipelines: [:tabby_sim_admin] [Thu Nov 5 12:12:07.354000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:61270] QUERY OK source="tabby_sim_faults" db=0.8ms queue=0.7ms idle=1584.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (t0.`remaining` > 0) ORDER BY t0.`id` [] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:18 [Thu Nov 5 12:12:07.375000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:61270] QUERY OK source="tabby_sim_payments" db=20.6ms idle=1586.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 ORDER BY t0.`inserted_at` DESC, t0.`id` DESC LIMIT ? [30] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:19 [Thu Nov 5 12:12:07.402000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:61270] QUERY OK source="tabby_sim_webhook_deliveries" db=10.5ms queue=13.3ms idle=1610.3ms SELECT t0.`id`, t0.`payment_id`, t0.`webhook_id`, t0.`event`, t0.`attempt`, t0.`state`, t0.`url`, t0.`http_status`, t0.`request_body`, t0.`response_body`, t0.`error`, t0.`duration_ms`, t0.`attempted_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhook_deliveries` AS t0 ORDER BY t0.`id` DESC LIMIT ? [40] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:20 [Thu Nov 5 12:12:07.404000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:61270] QUERY OK source="tabby_sim_webhooks" db=1.2ms queue=0.1ms idle=1634.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 ORDER BY t0.`id` LIMIT 100 [] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:21 [Thu Nov 5 12:12:07.408000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:61270] Sent 200 in 76ms [Thu Nov 5 12:12:07.654000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Thu Nov 5 12:12:07.655000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Thu Nov 5 12:12:08.755000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=1331.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:12:08Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:12:08.756000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:12:08.764000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.6ms queue=0.1ms idle=1184.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:12:08Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:12:08.766000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms queue=0.1ms idle=998.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:12:08.820000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Thu Nov 5 12:12:08.820000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Thu Nov 5 12:12:08.840000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403313 scheduled in 60s (8 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:12:09.112000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52160] GET /tabby/demo/result/success [Thu Nov 5 12:12:09.148000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:49290] GET /tabby-sim/hpp/819afd8d-3904-430b-92e8-be76d68ecf96 [Thu Nov 5 12:12:09.149000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:49290] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "819afd8d-3904-430b-92e8-be76d68ecf96"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:12:09.154000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:49290] QUERY OK source="tabby_sim_payments" db=0.8ms idle=417.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["819afd8d-3904-430b-92e8-be76d68ecf96"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:12:09.155000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:49290] Sent 410 in 7ms [Thu Nov 5 12:12:09.392000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:52160] Sent 500 in 280ms [Thu Nov 5 12:12:09.411000 2026] [Bandit.Pipeline:error] [pid 2594513] [client 115.99.167.137:52160] ** (UndefinedFunctionError) function DaProductAppWeb.Tabby.DemoPage.result/2 is undefined (module DaProductAppWeb.Tabby.DemoPage is not available) (da_product_app 0.1.0) DaProductAppWeb.Tabby.DemoPage.result("success", %{order: "DEMO-D952A4DF", lang: "en", attempt_id: "f3177b2b-beab-4ce7-8c10-f0b5d8a8c646"}) (da_product_app 0.1.0) lib/da_product_app_web/controllers/tabby/demo_controller.ex:71: DaProductAppWeb.Tabby.DemoController.result/2 (da_product_app 0.1.0) lib/da_product_app_web/controllers/tabby/demo_controller.ex:1: DaProductAppWeb.Tabby.DemoController.action/2 (da_product_app 0.1.0) lib/da_product_app_web/controllers/tabby/demo_controller.ex:1: DaProductAppWeb.Tabby.DemoController.phoenix_controller_pipeline/2 (phoenix 1.7.19) lib/phoenix/router.ex:484: Phoenix.Router.__call__/5 (da_product_app 0.1.0) lib/da_product_app_web/endpoint.ex:1: DaProductAppWeb.Endpoint.plug_builder_call/2 (da_product_app 0.1.0) /home/prem/canarabank/saaskit/da_product_app_changed/deps/plug/lib/plug/debugger.ex:136: DaProductAppWeb.Endpoint."call (overridable 3)"/2 (da_product_app 0.1.0) lib/da_product_app_web/endpoint.ex:1: DaProductAppWeb.Endpoint.call/2 (phoenix 1.7.19) lib/phoenix/endpoint/sync_code_reload_plug.ex:22: Phoenix.Endpoint.SyncCodeReloadPlug.do_call/4 (bandit 1.6.7) lib/bandit/pipeline.ex:129: Bandit.Pipeline.call_plug!/2 (bandit 1.6.7) lib/bandit/pipeline.ex:40: Bandit.Pipeline.run/4 (bandit 1.6.7) lib/bandit/http1/handler.ex:12: Bandit.HTTP1.Handler.handle_data/3 (bandit 1.6.7) lib/bandit/delegating_handler.ex:18: Bandit.DelegatingHandler.handle_data/3 (bandit 1.6.7) lib/bandit/delegating_handler.ex:8: Bandit.DelegatingHandler.handle_continue/2 (stdlib 5.2.3.2) gen_server.erl:1085: :gen_server.try_handle_continue/3 (stdlib 5.2.3.2) gen_server.erl:995: :gen_server.loop/7 (stdlib 5.2.3.2) proc_lib.erl:241: :proc_lib.init_p_do_apply/3 [Thu Nov 5 12:12:21.303000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Thu Nov 5 12:12:21.304000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Thu Nov 5 12:12:21.305000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Thu Nov 5 12:12:23.321000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: priv/static/assets/app.css [Thu Nov 5 12:12:23.322000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: priv/static/assets/app.css [Thu Nov 5 12:12:23.322000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: priv/static/assets/app.css [Thu Nov 5 12:12:23.323000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: priv/static/assets/app.css [Thu Nov 5 12:12:23.324000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: priv/static/assets/app.css [Thu Nov 5 12:12:23.324000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: priv/static/assets/app.css [Thu Nov 5 12:12:23.328000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: priv/static/assets/app.css [Thu Nov 5 12:12:23.328000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: priv/static/assets/app.css [Thu Nov 5 12:12:23.328000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: priv/static/assets/app.css [Thu Nov 5 12:12:23.477000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:49290] GET /tabby/demo/result/success [Thu Nov 5 12:12:23.478000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:49290] Sent 200 in 529µs [Thu Nov 5 12:12:23.586000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:61270] GET /tabby-sim/hpp/819afd8d-3904-430b-92e8-be76d68ecf96 [Thu Nov 5 12:12:23.586000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:61270] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "819afd8d-3904-430b-92e8-be76d68ecf96"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:12:23.588000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:61270] QUERY OK source="tabby_sim_payments" db=0.7ms idle=815.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["819afd8d-3904-430b-92e8-be76d68ecf96"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:12:23.588000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:61270] Sent 410 in 1ms [Thu Nov 5 12:12:23.630000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:55611] GET /tabby-sim/admin [Thu Nov 5 12:12:23.632000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:55611] Processing with DaProductAppWeb.TabbySim.AdminController.index/2 Parameters: %{} Pipelines: [:tabby_sim_admin] [Thu Nov 5 12:12:23.635000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:55611] QUERY OK source="tabby_sim_faults" db=1.8ms queue=0.1ms idle=859.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (t0.`remaining` > 0) ORDER BY t0.`id` [] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:18 [Thu Nov 5 12:12:23.646000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:55611] QUERY OK source="tabby_sim_payments" db=7.3ms queue=1.1ms idle=863.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 ORDER BY t0.`inserted_at` DESC, t0.`id` DESC LIMIT ? [30] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:19 [Thu Nov 5 12:12:23.659000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:55611] QUERY OK source="tabby_sim_webhook_deliveries" db=7.1ms idle=877.3ms SELECT t0.`id`, t0.`payment_id`, t0.`webhook_id`, t0.`event`, t0.`attempt`, t0.`state`, t0.`url`, t0.`http_status`, t0.`request_body`, t0.`response_body`, t0.`error`, t0.`duration_ms`, t0.`attempted_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhook_deliveries` AS t0 ORDER BY t0.`id` DESC LIMIT ? [40] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:20 [Thu Nov 5 12:12:23.663000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:55611] QUERY OK source="tabby_sim_webhooks" db=1.9ms queue=0.7ms idle=405.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 ORDER BY t0.`id` LIMIT 100 [] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:21 [Thu Nov 5 12:12:23.668000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:55611] Sent 200 in 37ms [Thu Nov 5 12:12:24.053000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:49290] GET /tabby/demo/status/f3177b2b-beab-4ce7-8c10-f0b5d8a8c646 [Thu Nov 5 12:12:24.057000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:49290] QUERY OK source="tabby_payments" db=3.5ms idle=642.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["f3177b2b-beab-4ce7-8c10-f0b5d8a8c646"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:12:24.059000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:49290] Sent 200 in 5ms [Thu Nov 5 12:12:31.527000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:59792] GET /tabby/demo [Thu Nov 5 12:12:31.548000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:59792] Sent 200 in 20ms [Thu Nov 5 12:12:32.057000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:59792] POST /tabby/demo/summary [Thu Nov 5 12:12:32.057000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:59792] Sent 200 in 723µs [Thu Nov 5 12:12:32.920000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:59792] POST /tabby/demo/eligibility [Thu Nov 5 12:12:33.199000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:40938] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:12:33.199000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:40938] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:12:33.200000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:40938] QUERY OK source="tabby_sim_faults" db=0.5ms queue=0.1ms idle=487.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:12:33.235000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:40938] QUERY OK db=32.6ms queue=0.3ms idle=430.5ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`is_test`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["507be796-62aa-4c7b-839b-f1050e6c7fd2", "CREATED", "AED", "377dba02-25e5-4657-935e-9cb492cc0ccc", "demostore", ~U[2026-11-05 12:24:33Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "created", %{"cancel" => nil, "failure" => nil, "success" => nil}, ~U[2026-11-05 12:22:33Z], false, Decimal.new("850.00"), [], [], true, ~N[2026-11-05 12:12:33], ~N[2026-11-05 12:12:33]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:12:33.236000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:40938] [TabbySim] checkout payment=507be796-62aa-4c7b-839b-f1050e6c7fd2 session=377dba02-25e5-4657-935e-9cb492cc0ccc decision=created reason=nil amount=850.00 AED [Thu Nov 5 12:12:33.237000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:40938] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.2ms idle=464.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:12:33.239000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:40938] Sent 200 in 40ms [Thu Nov 5 12:12:33.240000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:59792] [Tabby] checkout post /api/v2/checkout -> 200 (320 ms, attempt 1) [Thu Nov 5 12:12:33.240000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:59792] [Tabby] session created payment=507be796-62aa-4c7b-839b-f1050e6c7fd2 [Thu Nov 5 12:12:33.240000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2594513] [client 115.99.167.137:59792] [Tabby] eligibility: show (amount=850.00 AED) [Thu Nov 5 12:12:33.240000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:59792] Sent 200 in 320ms [Thu Nov 5 12:13:09.140000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1362.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:13:09Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:13:09.141000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:13:09.142000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.1ms idle=1106.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:13:09Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:13:09.144000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=445.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:13:09.195000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403314 scheduled in 60s (9 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:13:59.592000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Thu Nov 5 12:13:59.593000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Thu Nov 5 12:13:59.593000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Thu Nov 5 12:14:02.533000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57577] GET /tabby/demo [Thu Nov 5 12:14:02.553000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57577] Sent 200 in 19ms [Thu Nov 5 12:14:03.315000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:49732] GET /tabby-sim/admin [Thu Nov 5 12:14:03.328000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:49732] Processing with DaProductAppWeb.TabbySim.AdminController.index/2 Parameters: %{} Pipelines: [:tabby_sim_admin] [Thu Nov 5 12:14:03.334000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:49732] QUERY OK source="tabby_sim_faults" db=5.8ms idle=1308.2ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (t0.`remaining` > 0) ORDER BY t0.`id` [] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:18 [Thu Nov 5 12:14:03.346000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:49732] QUERY OK source="tabby_sim_payments" db=7.0ms idle=1214.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 ORDER BY t0.`inserted_at` DESC, t0.`id` DESC LIMIT ? [30] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:19 [Thu Nov 5 12:14:03.354000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:49732] QUERY OK source="tabby_sim_webhook_deliveries" db=7.1ms idle=1110.2ms SELECT t0.`id`, t0.`payment_id`, t0.`webhook_id`, t0.`event`, t0.`attempt`, t0.`state`, t0.`url`, t0.`http_status`, t0.`request_body`, t0.`response_body`, t0.`error`, t0.`duration_ms`, t0.`attempted_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhook_deliveries` AS t0 ORDER BY t0.`id` DESC LIMIT ? [40] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:20 [Thu Nov 5 12:14:03.358000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57419] GET /tabby-sim/hpp/819afd8d-3904-430b-92e8-be76d68ecf96 [Thu Nov 5 12:14:03.359000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:57419] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "819afd8d-3904-430b-92e8-be76d68ecf96"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:14:03.379000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:57419] QUERY OK source="tabby_sim_payments" db=12.8ms queue=2.1ms idle=794.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["819afd8d-3904-430b-92e8-be76d68ecf96"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:14:03.380000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57419] Sent 410 in 21ms [Thu Nov 5 12:14:03.376000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:49732] QUERY OK source="tabby_sim_webhooks" db=9.7ms queue=6.4ms idle=801.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 ORDER BY t0.`id` LIMIT 100 [] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:21 [Thu Nov 5 12:14:03.385000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:49732] Sent 200 in 70ms [Thu Nov 5 12:14:03.890000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57577] POST /tabby/demo/summary [Thu Nov 5 12:14:03.891000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57577] Sent 200 in 530µs [Thu Nov 5 12:14:05.549000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57577] POST /tabby/demo/eligibility [Thu Nov 5 12:14:05.841000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:55526] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:14:05.841000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:55526] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:14:05.843000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:55526] QUERY OK source="tabby_sim_faults" db=1.1ms queue=0.2ms idle=1048.0ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:14:05.875000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:55526] QUERY OK db=29.9ms queue=0.4ms idle=1027.3ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`is_test`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["e9151e8f-c383-4cb4-bcda-ceabc6dbe05d", "CREATED", "AED", "c8ec8f2d-602f-417a-90ad-23f6d5fbe984", "demostore", ~U[2026-11-05 12:26:05Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "created", %{"cancel" => nil, "failure" => nil, "success" => nil}, ~U[2026-11-05 12:24:05Z], false, Decimal.new("850.00"), [], [], true, ~N[2026-11-05 12:14:05], ~N[2026-11-05 12:14:05]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:14:05.876000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:55526] [TabbySim] checkout payment=e9151e8f-c383-4cb4-bcda-ceabc6dbe05d session=c8ec8f2d-602f-417a-90ad-23f6d5fbe984 decision=created reason=nil amount=850.00 AED [Thu Nov 5 12:14:05.877000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:55526] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1047.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:14:05.880000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:55526] Sent 200 in 39ms [Thu Nov 5 12:14:05.881000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:57577] [Tabby] checkout post /api/v2/checkout -> 200 (331 ms, attempt 1) [Thu Nov 5 12:14:05.882000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:57577] [Tabby] session created payment=e9151e8f-c383-4cb4-bcda-ceabc6dbe05d [Thu Nov 5 12:14:05.884000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2594513] [client 115.99.167.137:57577] [Tabby] eligibility: show (amount=850.00 AED) [Thu Nov 5 12:14:05.885000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57577] Sent 200 in 335ms [Thu Nov 5 12:14:09.425000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1634.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:14:09Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:14:09.425000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:14:09.429000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=2.9ms queue=0.2ms idle=1636.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:14:09Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:14:09.431000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.2ms idle=1107.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:14:09.498000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403317 scheduled in 12s (10 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:14:22.618000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1823.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:14:22Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:14:22.655000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=36.2ms idle=1824.9ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 12:14:22], true, "4b581d05-8a68-4ba3-ada6-d0ed6ea5df7b", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:14:22.655000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=4b581d05-8a68-4ba3-ada6-d0ed6ea5df7b CREATED -> EXPIRED [Thu Nov 5 12:14:22.657000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.4ms idle=1861.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["4b581d05-8a68-4ba3-ada6-d0ed6ea5df7b"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:14:22.657000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook not sent: event=expire payment=4b581d05-8a68-4ba3-ada6-d0ed6ea5df7b [Thu Nov 5 12:14:22.657000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=4b581d05-8a68-4ba3-ada6-d0ed6ea5df7b expired (expires_at 2026-11-05 12:14:21Z, session_status=created) [Thu Nov 5 12:14:22.659000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.2ms idle=1865.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:14:22Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:14:22.660000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 1 payment(s) were due [Thu Nov 5 12:14:22.662000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.6ms queue=0.2ms idle=1866.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:14:22Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:14:22.663000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1868.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:14:22.720000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403318 scheduled in 60s (9 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:14:23.009000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57577] GET /tabby/demo [Thu Nov 5 12:14:23.012000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57577] Sent 200 in 3ms [Thu Nov 5 12:14:23.498000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57577] POST /tabby/demo/summary [Thu Nov 5 12:14:23.500000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57577] Sent 200 in 1ms [Thu Nov 5 12:14:24.344000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57577] POST /tabby/demo/eligibility [Thu Nov 5 12:14:24.597000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:55526] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:14:24.597000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:55526] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:14:24.598000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:55526] QUERY OK source="tabby_sim_faults" db=0.9ms idle=1066.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:14:24.625000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:55526] QUERY OK db=24.6ms queue=0.8ms idle=805.6ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`is_test`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["c4e226ae-eaa2-47a6-a774-f4f5381fe99f", "CREATED", "AED", "373c1fb2-b6f0-46d5-bfd7-1559ba45434e", "demostore", ~U[2026-11-05 12:26:24Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "created", %{"cancel" => nil, "failure" => nil, "success" => nil}, ~U[2026-11-05 12:24:24Z], false, Decimal.new("850.00"), [], [], true, ~N[2026-11-05 12:14:24], ~N[2026-11-05 12:14:24]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:14:24.625000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:55526] [TabbySim] checkout payment=c4e226ae-eaa2-47a6-a774-f4f5381fe99f session=373c1fb2-b6f0-46d5-bfd7-1559ba45434e decision=created reason=nil amount=850.00 AED [Thu Nov 5 12:14:24.626000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:55526] QUERY OK source="tabby_sim_payments" db=0.9ms idle=832.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:14:24.628000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:55526] Sent 200 in 31ms [Thu Nov 5 12:14:24.629000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:57577] [Tabby] checkout post /api/v2/checkout -> 200 (284 ms, attempt 1) [Thu Nov 5 12:14:24.629000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:57577] [Tabby] session created payment=c4e226ae-eaa2-47a6-a774-f4f5381fe99f [Thu Nov 5 12:14:24.629000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2594513] [client 115.99.167.137:57577] [Tabby] eligibility: show (amount=850.00 AED) [Thu Nov 5 12:14:24.630000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57577] Sent 200 in 285ms [Thu Nov 5 12:14:32.503000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57577] POST /tabby/demo/place [Thu Nov 5 12:14:32.545000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:57577] QUERY OK db=41.1ms queue=0.3ms idle=710.8ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`amount`,`order_reference`,`needs_attention`,`success_url`,`cancel_url`,`failure_url`,`captured_amount`,`refunded_amount`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["56f11905-eff5-4f02-99ff-2200a45ef564", "new", "AED", "demostore", Decimal.new("850.00"), "DEMO-79B59DA3", false, "http://demo.ctrmv.com:4030/tabby/demo/result/success?lang=en&order=DEMO-79B59DA3", "http://demo.ctrmv.com:4030/tabby/demo/result/cancel?lang=en&order=DEMO-79B59DA3", "http://demo.ctrmv.com:4030/tabby/demo/result/failure?lang=en&order=DEMO-79B59DA3", Decimal.new("0"), Decimal.new("0"), ~N[2026-11-05 12:14:32], ~N[2026-11-05 12:14:32]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Thu Nov 5 12:14:32.834000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:43482] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:14:32.834000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:43482] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/56f11905-eff5-4f02-99ff-2200a45ef564/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/56f11905-eff5-4f02-99ff-2200a45ef564/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/56f11905-eff5-4f02-99ff-2200a45ef564/success"}, "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Anya Forger", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-79B59DA3"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:14:32.835000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:43482] QUERY OK source="tabby_sim_faults" db=0.9ms idle=1041.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:14:32.894000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:43482] QUERY OK db=57.3ms queue=0.5ms idle=1042.7ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`buyer_history`,`is_test`,`lang`,`shipping_address`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["ecb10e2f-3b00-4459-8b81-a1f9b947b94f", "CREATED", "AED", "4b24e37d-cf83-47bc-9928-a171e0df9765", "demostore", ~U[2026-11-05 12:26:32Z], %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/56f11905-eff5-4f02-99ff-2200a45ef564/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/56f11905-eff5-4f02-99ff-2200a45ef564/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/56f11905-eff5-4f02-99ff-2200a45ef564/success"}, "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Anya Forger", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-79B59DA3"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "0", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo headphones", "unit_price" => "650"}, %{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo smartwatch", "unit_price" => "200"}], "reference_id" => "DEMO-79B59DA3", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "name" => "Anya Forger", "phone" => "+971500000001"}, "created", %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/56f11905-eff5-4f02-99ff-2200a45ef564/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/56f11905-eff5-4f02-99ff-2200a45ef564/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/56f11905-eff5-4f02-99ff-2200a45ef564/success"}, ~U[2026-11-05 12:24:32Z], false, Decimal.new("850.00"), [], [], %{"registered_since" => "2023-02-01T10:00:00Z"}, true, "en", %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}, ~N[2026-11-05 12:14:32], ~N[2026-11-05 12:14:32]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:14:32.895000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:43482] [TabbySim] checkout payment=ecb10e2f-3b00-4459-8b81-a1f9b947b94f session=4b24e37d-cf83-47bc-9928-a171e0df9765 decision=created reason=nil amount=850.00 AED [Thu Nov 5 12:14:32.896000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:43482] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1101.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:14:32.900000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:43482] Sent 200 in 66ms [Thu Nov 5 12:14:32.901000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:57577] [Tabby] checkout post /api/v2/checkout -> 200 (355 ms, attempt 1) [Thu Nov 5 12:14:32.901000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:57577] [Tabby] session created payment=ecb10e2f-3b00-4459-8b81-a1f9b947b94f [Thu Nov 5 12:14:32.903000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:57577] QUERY OK source="tabby_payments" db=0.9ms queue=0.1ms idle=658.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["56f11905-eff5-4f02-99ff-2200a45ef564"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Thu Nov 5 12:14:32.939000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:57577] QUERY OK source="tabby_payments" db=35.4ms idle=572.3ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-05 12:34:32Z], "ecb10e2f-3b00-4459-8b81-a1f9b947b94f", "4b24e37d-cf83-47bc-9928-a171e0df9765", ~N[2026-11-05 12:14:32], "56f11905-eff5-4f02-99ff-2200a45ef564"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Thu Nov 5 12:14:32.939000 2026] [DaProductApp.Tabby.Sessions:info] [pid 2594513] [client 115.99.167.137:57577] [Tabby] session created attempt=56f11905-eff5-4f02-99ff-2200a45ef564 payment=ecb10e2f-3b00-4459-8b81-a1f9b947b94f [Thu Nov 5 12:14:33.043000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57577] Sent 200 in 540ms [Thu Nov 5 12:14:33.476000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57577] GET /tabby-sim/hpp/4b24e37d-cf83-47bc-9928-a171e0df9765 [Thu Nov 5 12:14:33.476000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:57577] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "4b24e37d-cf83-47bc-9928-a171e0df9765"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:14:33.478000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:57577] QUERY OK source="tabby_sim_payments" db=0.8ms queue=0.4ms idle=582.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["4b24e37d-cf83-47bc-9928-a171e0df9765"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:14:33.478000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57577] Sent 200 in 2ms [Thu Nov 5 12:15:16.720000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57577] POST /tabby-sim/hpp/4b24e37d-cf83-47bc-9928-a171e0df9765 [Thu Nov 5 12:15:16.720000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:57577] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "approve", "otp" => "8888", "plan" => "8", "session_id" => "4b24e37d-cf83-47bc-9928-a171e0df9765", "ui" => "1"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:15:16.722000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:57577] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1927.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["4b24e37d-cf83-47bc-9928-a171e0df9765"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:15:16.786000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:57577] QUERY OK source="tabby_sim_payments" db=63.4ms queue=0.3ms idle=1929.0ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["AUTHORIZED", ~N[2026-11-05 12:15:16], "ecb10e2f-3b00-4459-8b81-a1f9b947b94f", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:15:16.786000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client 115.99.167.137:57577] [TabbySim] payment=ecb10e2f-3b00-4459-8b81-a1f9b947b94f CREATED -> AUTHORIZED [Thu Nov 5 12:15:16.788000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:57577] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.7ms idle=1993.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["ecb10e2f-3b00-4459-8b81-a1f9b947b94f"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:15:16.789000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:57577] QUERY OK source="tabby_sim_webhooks" db=0.4ms idle=1994.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 12:15:16.840000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client 115.99.167.137:57577] [TabbySim] webhook queued job=403324 event=authorize payment=ecb10e2f-3b00-4459-8b81-a1f9b947b94f webhook=53 [Thu Nov 5 12:15:16.840000 2026] [DaProductApp.TabbySim.Hpp:info] [pid 2594513] [client 115.99.167.137:57577] [TabbySim] hpp payment=ecb10e2f-3b00-4459-8b81-a1f9b947b94f action=approve status=AUTHORIZED [Thu Nov 5 12:15:16.841000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:57577] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1040.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["4b24e37d-cf83-47bc-9928-a171e0df9765"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:15:16.841000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57577] Sent 200 in 121ms [Thu Nov 5 12:15:16.937000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_webhooks" db=0.4ms idle=328.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 12:15:17.271000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:53362] POST /tabby/webhooks [Thu Nov 5 12:15:17.272000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:53362] QUERY OK source="tabby_payments" db=0.6ms idle=482.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["ecb10e2f-3b00-4459-8b81-a1f9b947b94f"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:15:17.351000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:53362] QUERY OK db=78.7ms idle=479.6ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["authorized", false, "ecb10e2f-3b00-4459-8b81-a1f9b947b94f", "{\"amount\":\"850\",\"captures\":[],\"closed_at\":null,\"created_at\":\"2026-11-05T12:14:32Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T12:26:32Z\",\"id\":\"ecb10e2f-3b00-4459-8b81-a1f9b947b94f\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-79B59DA3\"},\"refunds\":[],\"status\":\"authorized\",\"token\":null}", ~U[2026-11-05 12:15:17Z], ~N[2026-11-05 12:15:17], ~N[2026-11-05 12:15:17]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 12:15:17.422000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2594513] [client 78.47.213.209:53362] [Tabby] webhook 200: event=48 payment=ecb10e2f-3b00-4459-8b81-a1f9b947b94f saved and queued [Thu Nov 5 12:15:17.424000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:53362] Sent 200 in 153ms [Thu Nov 5 12:15:17.476000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK db=50.1ms queue=0.1ms idle=584.8ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "authorize", ~U[2026-11-05 12:15:17Z], "ecb10e2f-3b00-4459-8b81-a1f9b947b94f", 53, 200, 489, %{"amount" => "850", "captures" => [], "closed_at" => nil, "created_at" => "2026-11-05T12:14:32Z", "currency" => "AED", "expires_at" => "2026-11-05T12:26:32Z", "id" => "ecb10e2f-3b00-4459-8b81-a1f9b947b94f", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-79B59DA3"}, "refunds" => [], "status" => "authorized", "token" => nil}, ~N[2026-11-05 12:15:17], ~N[2026-11-05 12:15:17]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 12:15:17.477000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook attempt=1 success event=authorize payment=ecb10e2f-3b00-4459-8b81-a1f9b947b94f url=http://demo.ctrmv.com:4030/tabby/webhooks (489 ms) [Thu Nov 5 12:15:17.567000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=1.0ms idle=502.5ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [48] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 12:15:17.569000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.2ms idle=418.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["ecb10e2f-3b00-4459-8b81-a1f9b947b94f"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:15:17.569000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=296.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["56f11905-eff5-4f02-99ff-2200a45ef564"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:15:17.943000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:43482] GET /tabby-sim/api/v2/payments/ecb10e2f-3b00-4459-8b81-a1f9b947b94f [Thu Nov 5 12:15:17.943000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:43482] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "ecb10e2f-3b00-4459-8b81-a1f9b947b94f"} Pipelines: [:tabby_sim_api] [Thu Nov 5 12:15:17.944000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:43482] QUERY OK source="tabby_sim_faults" db=0.5ms idle=467.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "ecb10e2f-3b00-4459-8b81-a1f9b947b94f"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 12:15:17.945000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:43482] QUERY OK source="tabby_sim_faults" db=0.6ms idle=379.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:15:17.947000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:43482] QUERY OK source="tabby_sim_payments" db=1.0ms idle=378.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["ecb10e2f-3b00-4459-8b81-a1f9b947b94f"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Thu Nov 5 12:15:17.947000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:43482] Sent 200 in 4ms [Thu Nov 5 12:15:17.948000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client -] [Tabby] retrieve get /api/v2/payments/ecb10e2f-3b00-4459-8b81-a1f9b947b94f -> 200 (378 ms, attempt 1) [Thu Nov 5 12:15:18.025000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=76.1ms idle=379.7ms UPDATE `tabby_payments` AS t0 SET t0.`authorized_at` = ?, t0.`winner_key` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [~U[2026-11-05 12:15:17Z], "49be7ed9a273f28f8668dab389449889e0c0d8c20e553510b30921f53ab44ab6", "authorized", ~N[2026-11-05 12:15:17], "56f11905-eff5-4f02-99ff-2200a45ef564", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 12:15:18.026000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=455.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["56f11905-eff5-4f02-99ff-2200a45ef564"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:15:18.026000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2594513] [client -] [Tabby] verify: attempt=56f11905-eff5-4f02-99ff-2200a45ef564 payment=ecb10e2f-3b00-4459-8b81-a1f9b947b94f created -> authorized [Thu Nov 5 12:15:18.200000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=101.6ms decode=0.6ms queue=0.2ms idle=400.4ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 12:15:18Z], 48] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 12:15:18.200000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2594513] [client -] [Tabby] webhook job: event=48 payment=ecb10e2f-3b00-4459-8b81-a1f9b947b94f processed (recorded authorized) [Thu Nov 5 12:15:18.227000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.0ms idle=281.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["56f11905-eff5-4f02-99ff-2200a45ef564"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:15:18.339000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=110.2ms idle=282.4ms UPDATE `tabby_payments` AS t0 SET t0.`capture_reference_id` = ?, t0.`claimed_at` = ?, t0.`claimed_by` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["capture-DEMO-79B59DA3", ~U[2026-11-05 12:15:18Z], "nonode@nohost", "capturing", ~N[2026-11-05 12:15:18], "56f11905-eff5-4f02-99ff-2200a45ef564", "authorized"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 12:15:18.341000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.5ms idle=314.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["56f11905-eff5-4f02-99ff-2200a45ef564"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:15:18.341000 2026] [DaProductApp.Tabby.Capture:info] [pid 2594513] [client -] [Tabby] capture: attempt=56f11905-eff5-4f02-99ff-2200a45ef564 payment=ecb10e2f-3b00-4459-8b81-a1f9b947b94f claimed (authorized -> capturing) [Thu Nov 5 12:15:18.641000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:43482] POST /tabby-sim/api/v2/payments/ecb10e2f-3b00-4459-8b81-a1f9b947b94f/captures [Thu Nov 5 12:15:18.641000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:43482] Processing with DaProductAppWeb.TabbySim.PaymentsController.capture/2 Parameters: %{"amount" => "850.00", "id" => "ecb10e2f-3b00-4459-8b81-a1f9b947b94f", "reference_id" => "capture-DEMO-79B59DA3"} Pipelines: [:tabby_sim_api] [Thu Nov 5 12:15:18.642000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:43482] QUERY OK source="tabby_sim_faults" db=0.8ms idle=544.2ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["capture", "ecb10e2f-3b00-4459-8b81-a1f9b947b94f"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 12:15:18.643000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:43482] QUERY OK source="tabby_sim_faults" db=0.6ms queue=0.1ms idle=443.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["capture"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:15:18.644000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:43482] QUERY OK source="tabby_sim_payments" db=0.8ms idle=417.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["ecb10e2f-3b00-4459-8b81-a1f9b947b94f"] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:227 [Thu Nov 5 12:15:18.646000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:43482] QUERY OK db=0.5ms idle=417.8ms begin [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Thu Nov 5 12:15:18.648000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:43482] QUERY OK source="tabby_sim_payments" db=1.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) FOR UPDATE ["ecb10e2f-3b00-4459-8b81-a1f9b947b94f"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:231 [Thu Nov 5 12:15:18.649000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:43482] QUERY OK source="tabby_sim_payments" db=0.5ms UPDATE `tabby_sim_payments` SET `status` = ?, `closed_at` = ?, `captures` = ?, `updated_at` = ? WHERE `id` = ? ["CLOSED", ~U[2026-11-05 12:15:18Z], [%{"amount" => "850", "created_at" => "2026-11-05T12:15:18Z", "discount_amount" => "0", "id" => "e6dde9bf-a02c-46d0-9806-32f2367c481d", "items" => nil, "reference_id" => "capture-DEMO-79B59DA3", "shipping_amount" => "0", "tax_amount" => "0"}], ~N[2026-11-05 12:15:18], "ecb10e2f-3b00-4459-8b81-a1f9b947b94f"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:244 [Thu Nov 5 12:15:18.650000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client 127.0.0.1:43482] [TabbySim] capture payment=ecb10e2f-3b00-4459-8b81-a1f9b947b94f status=CLOSED [Thu Nov 5 12:15:18.705000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:43482] QUERY OK db=55.3ms commit [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Thu Nov 5 12:15:18.706000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:43482] QUERY OK source="tabby_sim_webhooks" db=0.8ms idle=390.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 12:15:18.756000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client 127.0.0.1:43482] [TabbySim] webhook queued job=403327 event=capture payment=ecb10e2f-3b00-4459-8b81-a1f9b947b94f webhook=53 [Thu Nov 5 12:15:18.757000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:43482] QUERY OK source="tabby_sim_webhooks" db=0.9ms idle=415.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 12:15:18.845000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client 127.0.0.1:43482] [TabbySim] webhook queued job=403328 event=close payment=ecb10e2f-3b00-4459-8b81-a1f9b947b94f webhook=53 [Thu Nov 5 12:15:18.845000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:43482] Sent 200 in 204ms [Thu Nov 5 12:15:18.847000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client -] [Tabby] capture post /api/v2/payments/ecb10e2f-3b00-4459-8b81-a1f9b947b94f/captures -> 200 (506 ms, attempt 1) [Thu Nov 5 12:15:18.880000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_webhooks" db=0.6ms idle=235.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 12:15:18.919000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=71.0ms idle=205.3ms UPDATE `tabby_payments` AS t0 SET t0.`captured_amount` = ?, t0.`captured_at` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [Decimal.new("850"), ~U[2026-11-05 12:15:18Z], "captured", ~N[2026-11-05 12:15:18], "56f11905-eff5-4f02-99ff-2200a45ef564", "capturing"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 12:15:18.920000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=214.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["56f11905-eff5-4f02-99ff-2200a45ef564"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:15:18.920000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2594513] [client -] [Tabby] verify: attempt=56f11905-eff5-4f02-99ff-2200a45ef564 payment=ecb10e2f-3b00-4459-8b81-a1f9b947b94f capturing -> captured [Thu Nov 5 12:15:18.921000 2026] [DaProductApp.Tabby.Capture:info] [pid 2594513] [client -] [Tabby] capture: attempt=56f11905-eff5-4f02-99ff-2200a45ef564 payment=ecb10e2f-3b00-4459-8b81-a1f9b947b94f is captured [Thu Nov 5 12:15:19.202000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:53362] POST /tabby/webhooks [Thu Nov 5 12:15:19.204000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:53362] QUERY OK source="tabby_payments" db=0.9ms idle=357.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["ecb10e2f-3b00-4459-8b81-a1f9b947b94f"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:15:19.239000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:53362] QUERY OK db=34.5ms idle=325.6ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["authorized", false, "ecb10e2f-3b00-4459-8b81-a1f9b947b94f", "{\"amount\":\"850\",\"captures\":[{\"amount\":\"850\",\"created_at\":\"2026-11-05T12:15:18Z\",\"discount_amount\":\"0\",\"id\":\"e6dde9bf-a02c-46d0-9806-32f2367c481d\",\"items\":null,\"reference_id\":\"capture-DEMO-79B59DA3\",\"shipping_amount\":\"0\",\"tax_amount\":\"0\"}],\"closed_at\":null,\"created_at\":\"2026-11-05T12:14:32Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T12:26:32Z\",\"id\":\"ecb10e2f-3b00-4459-8b81-a1f9b947b94f\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-79B59DA3\"},\"refunds\":[],\"status\":\"authorized\",\"token\":null}", ~U[2026-11-05 12:15:19Z], ~N[2026-11-05 12:15:19], ~N[2026-11-05 12:15:19]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 12:15:19.286000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2594513] [client 78.47.213.209:53362] [Tabby] webhook 200: event=49 payment=ecb10e2f-3b00-4459-8b81-a1f9b947b94f saved and queued [Thu Nov 5 12:15:19.287000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:53362] Sent 200 in 84ms [Thu Nov 5 12:15:19.332000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK db=43.9ms idle=366.9ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "capture", ~U[2026-11-05 12:15:19Z], "ecb10e2f-3b00-4459-8b81-a1f9b947b94f", 53, 200, 407, %{"amount" => "850", "captures" => [%{"amount" => "850", "created_at" => "2026-11-05T12:15:18Z", "discount_amount" => "0", "id" => "e6dde9bf-a02c-46d0-9806-32f2367c481d", "items" => nil, "reference_id" => "capture-DEMO-79B59DA3", "shipping_amount" => "0", "tax_amount" => "0"}], "closed_at" => nil, "created_at" => "2026-11-05T12:14:32Z", "currency" => "AED", "expires_at" => "2026-11-05T12:26:32Z", "id" => "ecb10e2f-3b00-4459-8b81-a1f9b947b94f", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-79B59DA3"}, "refunds" => [], "status" => "authorized", "token" => nil}, ~N[2026-11-05 12:15:19], ~N[2026-11-05 12:15:19]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 12:15:19.332000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook attempt=1 success event=capture payment=ecb10e2f-3b00-4459-8b81-a1f9b947b94f url=http://demo.ctrmv.com:4030/tabby/webhooks (407 ms) [Thu Nov 5 12:15:19.400000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.4ms idle=195.6ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [49] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 12:15:19.401000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.7ms queue=0.3ms idle=161.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["ecb10e2f-3b00-4459-8b81-a1f9b947b94f"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:15:19.402000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=160.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["56f11905-eff5-4f02-99ff-2200a45ef564"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:15:19.459000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=56.2ms idle=116.5ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 12:15:19Z], 49] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 12:15:19.459000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2594513] [client -] [Tabby] webhook job: event=49 payment=ecb10e2f-3b00-4459-8b81-a1f9b947b94f processed (already_final) [Thu Nov 5 12:15:19.570000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57577] GET /tabby/return/56f11905-eff5-4f02-99ff-2200a45ef564/success [Thu Nov 5 12:15:19.572000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:57577] QUERY OK source="tabby_payments" db=0.5ms idle=191.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["56f11905-eff5-4f02-99ff-2200a45ef564"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:15:19.647000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57577] Sent 302 in 76ms [Thu Nov 5 12:15:19.734000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=331.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["56f11905-eff5-4f02-99ff-2200a45ef564"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:15:20.119000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57577] GET /tabby/demo/result/success [Thu Nov 5 12:15:20.119000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57577] Sent 200 in 639µs [Thu Nov 5 12:15:20.582000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57577] GET /tabby/demo/status/56f11905-eff5-4f02-99ff-2200a45ef564 [Thu Nov 5 12:15:20.583000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:57577] QUERY OK source="tabby_payments" db=0.5ms queue=0.3ms idle=849.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["56f11905-eff5-4f02-99ff-2200a45ef564"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:15:20.584000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57577] Sent 200 in 1ms [Thu Nov 5 12:15:20.995000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_webhooks" db=0.4ms idle=1104.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 12:15:21.306000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:53362] POST /tabby/webhooks [Thu Nov 5 12:15:21.308000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:53362] QUERY OK source="tabby_payments" db=0.7ms idle=1321.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["ecb10e2f-3b00-4459-8b81-a1f9b947b94f"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:15:21.398000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:53362] QUERY OK db=88.4ms queue=0.4ms idle=918.8ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["closed", false, "ecb10e2f-3b00-4459-8b81-a1f9b947b94f", "{\"amount\":\"850\",\"captures\":[{\"amount\":\"850\",\"created_at\":\"2026-11-05T12:15:18Z\",\"discount_amount\":\"0\",\"id\":\"e6dde9bf-a02c-46d0-9806-32f2367c481d\",\"items\":null,\"reference_id\":\"capture-DEMO-79B59DA3\",\"shipping_amount\":\"0\",\"tax_amount\":\"0\"}],\"closed_at\":\"2026-11-05T12:15:18Z\",\"created_at\":\"2026-11-05T12:14:32Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T12:26:32Z\",\"id\":\"ecb10e2f-3b00-4459-8b81-a1f9b947b94f\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-79B59DA3\"},\"refunds\":[],\"status\":\"closed\",\"token\":null}", ~U[2026-11-05 12:15:21Z], ~N[2026-11-05 12:15:21], ~N[2026-11-05 12:15:21]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 12:15:21.440000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2594513] [client 78.47.213.209:53362] [Tabby] webhook 200: event=50 payment=ecb10e2f-3b00-4459-8b81-a1f9b947b94f saved and queued [Thu Nov 5 12:15:21.440000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:53362] Sent 200 in 133ms [Thu Nov 5 12:15:21.520000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK db=78.9ms idle=648.2ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "close", ~U[2026-11-05 12:15:21Z], "ecb10e2f-3b00-4459-8b81-a1f9b947b94f", 53, 200, 446, %{"amount" => "850", "captures" => [%{"amount" => "850", "created_at" => "2026-11-05T12:15:18Z", "discount_amount" => "0", "id" => "e6dde9bf-a02c-46d0-9806-32f2367c481d", "items" => nil, "reference_id" => "capture-DEMO-79B59DA3", "shipping_amount" => "0", "tax_amount" => "0"}], "closed_at" => "2026-11-05T12:15:18Z", "created_at" => "2026-11-05T12:14:32Z", "currency" => "AED", "expires_at" => "2026-11-05T12:26:32Z", "id" => "ecb10e2f-3b00-4459-8b81-a1f9b947b94f", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-79B59DA3"}, "refunds" => [], "status" => "closed", "token" => nil}, ~N[2026-11-05 12:15:21], ~N[2026-11-05 12:15:21]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 12:15:21.520000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook attempt=1 success event=close payment=ecb10e2f-3b00-4459-8b81-a1f9b947b94f url=http://demo.ctrmv.com:4030/tabby/webhooks (446 ms) [Thu Nov 5 12:15:21.538000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.4ms idle=542.2ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [50] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 12:15:21.539000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=452.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["ecb10e2f-3b00-4459-8b81-a1f9b947b94f"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:15:21.539000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.3ms idle=368.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["56f11905-eff5-4f02-99ff-2200a45ef564"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:15:21.632000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=91.9ms idle=231.9ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 12:15:21Z], 50] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 12:15:21.632000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2594513] [client -] [Tabby] webhook job: event=50 payment=ecb10e2f-3b00-4459-8b81-a1f9b947b94f processed (already_final) [Thu Nov 5 12:15:22.979000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=184.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:15:22Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:15:22.979000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:15:22.980000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=186.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:15:22Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:15:22.981000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.1ms idle=187.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:15:23.037000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403332 scheduled in 14s (10 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:15:38.028000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1233.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:15:38Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:15:38.093000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=65.0ms idle=1234.8ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 12:15:38], true, "f5fcac99-17f6-4428-a397-bb9519593974", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:15:38.094000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=f5fcac99-17f6-4428-a397-bb9519593974 CREATED -> EXPIRED [Thu Nov 5 12:15:38.095000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1300.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["f5fcac99-17f6-4428-a397-bb9519593974"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:15:38.096000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook not sent: event=expire payment=f5fcac99-17f6-4428-a397-bb9519593974 [Thu Nov 5 12:15:38.096000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=f5fcac99-17f6-4428-a397-bb9519593974 expired (expires_at 2026-11-05 12:15:36Z, session_status=created) [Thu Nov 5 12:15:38.097000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1303.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:15:38Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:15:38.098000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 1 payment(s) were due [Thu Nov 5 12:15:38.098000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.1ms idle=1304.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:15:38Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:15:38.099000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1305.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:15:38.143000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403333 scheduled in 3s (9 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:15:42.062000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.5ms idle=267.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:15:42Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:15:42.151000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=87.8ms queue=0.1ms idle=269.2ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 12:15:42], true, "37bcec9c-e137-4faf-adab-fe3366bbfa0b", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:15:42.151000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=37bcec9c-e137-4faf-adab-fe3366bbfa0b CREATED -> EXPIRED [Thu Nov 5 12:15:42.152000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=357.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["37bcec9c-e137-4faf-adab-fe3366bbfa0b"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:15:42.152000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=37bcec9c-e137-4faf-adab-fe3366bbfa0b expired (expires_at 2026-11-05 12:15:41Z, session_status=rejected) [Thu Nov 5 12:15:42.153000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=358.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:15:42Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:15:42.154000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 1 payment(s) were due [Thu Nov 5 12:15:42.155000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=360.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:15:42Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:15:42.155000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=361.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:15:42.196000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403334 scheduled in 2s (8 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:15:45.044000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1250.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:15:45Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:15:45.162000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=117.2ms idle=1251.3ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 12:15:45], true, "86d6bf13-6d33-48a8-8468-f5aafd0b1a88", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:15:45.162000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=86d6bf13-6d33-48a8-8468-f5aafd0b1a88 CREATED -> EXPIRED [Thu Nov 5 12:15:45.163000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1369.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["86d6bf13-6d33-48a8-8468-f5aafd0b1a88"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:15:45.163000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook not sent: event=expire payment=86d6bf13-6d33-48a8-8468-f5aafd0b1a88 [Thu Nov 5 12:15:45.163000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=86d6bf13-6d33-48a8-8468-f5aafd0b1a88 expired (expires_at 2026-11-05 12:15:44Z, session_status=created) [Thu Nov 5 12:15:45.164000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1370.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:15:45Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:15:45.165000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 1 payment(s) were due [Thu Nov 5 12:15:45.165000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1371.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:15:45Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:15:45.166000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.1ms idle=1372.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:15:45.244000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403335 scheduled in 60s (7 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:16:34.496000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.1ms idle=1702.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["demostore", ~U[2026-10-18 12:16:34Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:16:34.498000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.4ms idle=1703.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["demostore", ~N[2026-11-05 12:14:34], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:16:34.500000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=1115.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:16:34.501000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.0ms idle=707.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", ~N[2026-11-05 12:14:34], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:16:34.503000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=708.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["demostore", ~U[2026-11-05 12:11:34Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:16:34.504000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.5ms idle=710.0ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-05 12:14:34Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Thu Nov 5 12:16:34.505000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_refunds" db=1.2ms idle=710.8ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["demostore", ~N[2026-11-05 12:14:34], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Thu Nov 5 12:16:34.506000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.0ms idle=712.2ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 12:16:34.508000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.0ms idle=119.6ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["demostore", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 12:16:34.509000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=1.3ms idle=13.1ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Thu Nov 5 12:16:34.511000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_refunds" db=1.3ms idle=13.3ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Thu Nov 5 12:16:34.511000 2026] [DaProductApp.Tabby.Poller:debug] [pid 2594513] [client -] [Tabby] poll: nothing to do; 0 attempt(s) still watched [Thu Nov 5 12:16:46.634000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=840.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:16:46Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:16:46.634000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:16:46.635000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=841.2ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:16:46Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:16:46.636000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=841.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:16:46.700000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403338 scheduled in 60s (7 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:17:27.634000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Thu Nov 5 12:17:27.634000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Thu Nov 5 12:17:27.635000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Thu Nov 5 12:17:30.570000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:61955] GET /tabby-sim/admin [Thu Nov 5 12:17:30.571000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:61955] Processing with DaProductAppWeb.TabbySim.AdminController.index/2 Parameters: %{} Pipelines: [:tabby_sim_admin] [Thu Nov 5 12:17:30.580000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:61955] QUERY OK source="tabby_sim_faults" db=3.9ms idle=776.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (t0.`remaining` > 0) ORDER BY t0.`id` [] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:18 [Thu Nov 5 12:17:30.589000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:61955] QUERY OK source="tabby_sim_payments" db=8.8ms queue=0.1ms idle=781.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 ORDER BY t0.`inserted_at` DESC, t0.`id` DESC LIMIT ? [30] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:19 [Thu Nov 5 12:17:30.607000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:61955] QUERY OK source="tabby_sim_webhook_deliveries" db=3.2ms decode=1.9ms queue=0.2ms idle=799.7ms SELECT t0.`id`, t0.`payment_id`, t0.`webhook_id`, t0.`event`, t0.`attempt`, t0.`state`, t0.`url`, t0.`http_status`, t0.`request_body`, t0.`response_body`, t0.`error`, t0.`duration_ms`, t0.`attempted_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhook_deliveries` AS t0 ORDER BY t0.`id` DESC LIMIT ? [40] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:20 [Thu Nov 5 12:17:30.612000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:61955] QUERY OK source="tabby_sim_webhooks" db=1.6ms idle=808.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 ORDER BY t0.`id` LIMIT 100 [] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:21 [Thu Nov 5 12:17:30.615000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:61955] Sent 200 in 44ms [Thu Nov 5 12:17:30.761000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:54266] GET /tabby/demo/result/success [Thu Nov 5 12:17:30.761000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:54266] Sent 200 in 517µs [Thu Nov 5 12:17:30.812000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:55399] GET /tabby-sim/hpp/819afd8d-3904-430b-92e8-be76d68ecf96 [Thu Nov 5 12:17:30.813000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:55399] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "819afd8d-3904-430b-92e8-be76d68ecf96"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:17:30.820000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:55399] QUERY OK source="tabby_sim_payments" db=3.0ms queue=0.9ms idle=452.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["819afd8d-3904-430b-92e8-be76d68ecf96"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:17:30.821000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:55399] Sent 410 in 8ms [Thu Nov 5 12:17:31.616000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:61955] GET /tabby/demo/status/56f11905-eff5-4f02-99ff-2200a45ef564 [Thu Nov 5 12:17:31.623000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:61955] QUERY OK source="tabby_payments" db=2.9ms idle=1111.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["56f11905-eff5-4f02-99ff-2200a45ef564"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:17:31.628000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:61955] Sent 200 in 11ms [Thu Nov 5 12:17:47.026000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=2.1ms queue=0.2ms idle=1213.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:17:47Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:17:47.027000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:17:47.033000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=3.1ms queue=0.2ms idle=1219.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:17:47Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:17:47.036000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=2.8ms idle=1223.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:17:47.098000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403341 scheduled in 38s (7 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:18:13.405000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:61955] GET /tabby/demo [Thu Nov 5 12:18:13.410000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:61955] Sent 200 in 4ms [Thu Nov 5 12:18:13.920000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:61955] POST /tabby/demo/summary [Thu Nov 5 12:18:13.921000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:61955] Sent 200 in 524µs [Thu Nov 5 12:18:14.810000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:61955] POST /tabby/demo/eligibility [Thu Nov 5 12:18:15.125000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:39412] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:18:15.126000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:39412] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:18:15.127000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:39412] QUERY OK source="tabby_sim_faults" db=0.6ms queue=0.1ms idle=447.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:18:15.213000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:39412] QUERY OK db=84.9ms idle=298.7ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`is_test`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["f5083d47-4cc5-4e16-9a76-bcbf5ac2f029", "CREATED", "AED", "aa601f84-0a94-4324-94a4-b632bc03c9cc", "demostore", ~U[2026-11-05 12:30:15Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "created", %{"cancel" => nil, "failure" => nil, "success" => nil}, ~U[2026-11-05 12:28:15Z], false, Decimal.new("850.00"), [], [], true, ~N[2026-11-05 12:18:15], ~N[2026-11-05 12:18:15]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:18:15.213000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:39412] [TabbySim] checkout payment=f5083d47-4cc5-4e16-9a76-bcbf5ac2f029 session=aa601f84-0a94-4324-94a4-b632bc03c9cc decision=created reason=nil amount=850.00 AED [Thu Nov 5 12:18:15.215000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:39412] QUERY OK source="tabby_sim_payments" db=1.6ms queue=0.2ms idle=384.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:18:15.219000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:39412] Sent 200 in 93ms [Thu Nov 5 12:18:15.220000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:61955] [Tabby] checkout post /api/v2/checkout -> 200 (409 ms, attempt 1) [Thu Nov 5 12:18:15.220000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:61955] [Tabby] session created payment=f5083d47-4cc5-4e16-9a76-bcbf5ac2f029 [Thu Nov 5 12:18:15.220000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2594513] [client 115.99.167.137:61955] [Tabby] eligibility: show (amount=850.00 AED) [Thu Nov 5 12:18:15.221000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:61955] Sent 200 in 411ms [Thu Nov 5 12:18:25.297000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=466.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:18:25Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:18:25.330000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=31.5ms queue=0.1ms idle=468.2ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 12:18:25], true, "c35b3063-ac9b-4d9d-a268-522b781e409d", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:18:25.330000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=c35b3063-ac9b-4d9d-a268-522b781e409d CREATED -> EXPIRED [Thu Nov 5 12:18:25.331000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=500.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["c35b3063-ac9b-4d9d-a268-522b781e409d"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:18:25.331000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook not sent: event=expire payment=c35b3063-ac9b-4d9d-a268-522b781e409d [Thu Nov 5 12:18:25.331000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=c35b3063-ac9b-4d9d-a268-522b781e409d expired (expires_at 2026-11-05 12:18:25Z, session_status=created) [Thu Nov 5 12:18:25.333000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.4ms idle=501.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:18:25Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:18:25.333000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 1 payment(s) were due [Thu Nov 5 12:18:25.341000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=4.7ms idle=505.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:18:25Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:18:25.345000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=514.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:18:25.383000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403344 scheduled in 41s (7 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:18:27.513000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:61955] POST /tabby/demo/place [Thu Nov 5 12:18:27.553000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:61955] QUERY OK db=35.4ms queue=3.5ms idle=684.1ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`amount`,`order_reference`,`needs_attention`,`success_url`,`cancel_url`,`failure_url`,`captured_amount`,`refunded_amount`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["8f704c54-8cd9-4ce4-bd4a-512888165e3f", "new", "AED", "demostore", Decimal.new("850.00"), "DEMO-8897618B", false, "http://demo.ctrmv.com:4030/tabby/demo/result/success?lang=en&order=DEMO-8897618B", "http://demo.ctrmv.com:4030/tabby/demo/result/cancel?lang=en&order=DEMO-8897618B", "http://demo.ctrmv.com:4030/tabby/demo/result/failure?lang=en&order=DEMO-8897618B", Decimal.new("0"), Decimal.new("0"), ~N[2026-11-05 12:18:27], ~N[2026-11-05 12:18:27]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Thu Nov 5 12:18:27.855000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:59264] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:18:27.856000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:59264] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/8f704c54-8cd9-4ce4-bd4a-512888165e3f/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/8f704c54-8cd9-4ce4-bd4a-512888165e3f/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/8f704c54-8cd9-4ce4-bd4a-512888165e3f/success"}, "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Anya Forger", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-8897618B"}, "shipping_address" => %{"address" => "Demo Tower 4, Office 302, DIFC", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:18:27.856000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59264] QUERY OK source="tabby_sim_faults" db=0.5ms idle=1026.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:18:27.903000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59264] QUERY OK db=45.2ms idle=1027.7ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`buyer_history`,`is_test`,`lang`,`shipping_address`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["9d901750-ac8f-4902-b253-6a1e1f4100bd", "CREATED", "AED", "b74c7360-ed02-4789-9692-6c27e91921b6", "demostore", ~U[2026-11-05 12:30:27Z], %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/8f704c54-8cd9-4ce4-bd4a-512888165e3f/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/8f704c54-8cd9-4ce4-bd4a-512888165e3f/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/8f704c54-8cd9-4ce4-bd4a-512888165e3f/success"}, "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Anya Forger", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-8897618B"}, "shipping_address" => %{"address" => "Demo Tower 4, Office 302, DIFC", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "0", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo headphones", "unit_price" => "650"}, %{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo smartwatch", "unit_price" => "200"}], "reference_id" => "DEMO-8897618B", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "name" => "Anya Forger", "phone" => "+971500000001"}, "created", %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/8f704c54-8cd9-4ce4-bd4a-512888165e3f/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/8f704c54-8cd9-4ce4-bd4a-512888165e3f/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/8f704c54-8cd9-4ce4-bd4a-512888165e3f/success"}, ~U[2026-11-05 12:28:27Z], false, Decimal.new("850.00"), [], [], %{"registered_since" => "2023-02-01T10:00:00Z"}, true, "en", %{"address" => "Demo Tower 4, Office 302, DIFC", "city" => "Dubai", "zip" => "00000"}, ~N[2026-11-05 12:18:27], ~N[2026-11-05 12:18:27]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:18:27.904000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:59264] [TabbySim] checkout payment=9d901750-ac8f-4902-b253-6a1e1f4100bd session=b74c7360-ed02-4789-9692-6c27e91921b6 decision=created reason=nil amount=850.00 AED [Thu Nov 5 12:18:27.906000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59264] QUERY OK source="tabby_sim_payments" db=1.8ms idle=1074.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:18:27.908000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:59264] Sent 200 in 53ms [Thu Nov 5 12:18:27.909000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:61955] [Tabby] checkout post /api/v2/checkout -> 200 (356 ms, attempt 1) [Thu Nov 5 12:18:27.909000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:61955] [Tabby] session created payment=9d901750-ac8f-4902-b253-6a1e1f4100bd [Thu Nov 5 12:18:27.911000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:61955] QUERY OK source="tabby_payments" db=0.8ms queue=0.1ms idle=693.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["8f704c54-8cd9-4ce4-bd4a-512888165e3f"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Thu Nov 5 12:18:27.950000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:61955] QUERY OK source="tabby_payments" db=38.5ms queue=0.5ms idle=601.9ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-05 12:38:27Z], "9d901750-ac8f-4902-b253-6a1e1f4100bd", "b74c7360-ed02-4789-9692-6c27e91921b6", ~N[2026-11-05 12:18:27], "8f704c54-8cd9-4ce4-bd4a-512888165e3f"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Thu Nov 5 12:18:27.951000 2026] [DaProductApp.Tabby.Sessions:info] [pid 2594513] [client 115.99.167.137:61955] [Tabby] session created attempt=8f704c54-8cd9-4ce4-bd4a-512888165e3f payment=9d901750-ac8f-4902-b253-6a1e1f4100bd [Thu Nov 5 12:18:28.062000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:61955] Sent 200 in 549ms [Thu Nov 5 12:18:28.562000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:61955] GET /tabby-sim/hpp/b74c7360-ed02-4789-9692-6c27e91921b6 [Thu Nov 5 12:18:28.562000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:61955] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "b74c7360-ed02-4789-9692-6c27e91921b6"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:18:28.563000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:61955] QUERY OK source="tabby_sim_payments" db=0.9ms idle=660.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["b74c7360-ed02-4789-9692-6c27e91921b6"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:18:28.564000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:61955] Sent 200 in 2ms [Thu Nov 5 12:18:38.080000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:56516] POST /tabby-sim/hpp/b74c7360-ed02-4789-9692-6c27e91921b6 [Thu Nov 5 12:18:38.081000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:56516] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "approve", "otp" => "8888", "plan" => "6", "session_id" => "b74c7360-ed02-4789-9692-6c27e91921b6", "ui" => "1"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:18:38.083000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:56516] QUERY OK source="tabby_sim_payments" db=1.1ms queue=0.1ms idle=1252.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["b74c7360-ed02-4789-9692-6c27e91921b6"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:18:38.148000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:56516] QUERY OK source="tabby_sim_payments" db=64.9ms queue=0.1ms idle=825.7ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["AUTHORIZED", ~N[2026-11-05 12:18:38], "9d901750-ac8f-4902-b253-6a1e1f4100bd", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:18:38.148000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client 115.99.167.137:56516] [TabbySim] payment=9d901750-ac8f-4902-b253-6a1e1f4100bd CREATED -> AUTHORIZED [Thu Nov 5 12:18:38.150000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:56516] QUERY OK source="tabby_sim_payments" db=1.3ms idle=319.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["9d901750-ac8f-4902-b253-6a1e1f4100bd"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:18:38.152000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:56516] QUERY OK source="tabby_sim_webhooks" db=0.9ms idle=322.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 12:18:38.209000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client 115.99.167.137:56516] [TabbySim] webhook queued job=403346 event=authorize payment=9d901750-ac8f-4902-b253-6a1e1f4100bd webhook=53 [Thu Nov 5 12:18:38.209000 2026] [DaProductApp.TabbySim.Hpp:info] [pid 2594513] [client 115.99.167.137:56516] [TabbySim] hpp payment=9d901750-ac8f-4902-b253-6a1e1f4100bd action=approve status=AUTHORIZED [Thu Nov 5 12:18:38.211000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:56516] QUERY OK source="tabby_sim_payments" db=0.5ms idle=381.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["b74c7360-ed02-4789-9692-6c27e91921b6"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:18:38.211000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:56516] Sent 200 in 130ms [Thu Nov 5 12:18:38.283000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_webhooks" db=0.7ms idle=414.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 12:18:38.555000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:52470] POST /tabby/webhooks [Thu Nov 5 12:18:38.557000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:52470] QUERY OK source="tabby_payments" db=0.5ms idle=405.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["9d901750-ac8f-4902-b253-6a1e1f4100bd"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:18:38.618000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:52470] QUERY OK db=60.4ms idle=405.0ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["authorized", false, "9d901750-ac8f-4902-b253-6a1e1f4100bd", "{\"amount\":\"850\",\"captures\":[],\"closed_at\":null,\"created_at\":\"2026-11-05T12:18:27Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T12:30:27Z\",\"id\":\"9d901750-ac8f-4902-b253-6a1e1f4100bd\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-8897618B\"},\"refunds\":[],\"status\":\"authorized\",\"token\":null}", ~U[2026-11-05 12:18:38Z], ~N[2026-11-05 12:18:38], ~N[2026-11-05 12:18:38]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 12:18:38.673000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2594513] [client 78.47.213.209:52470] [Tabby] webhook 200: event=51 payment=9d901750-ac8f-4902-b253-6a1e1f4100bd saved and queued [Thu Nov 5 12:18:38.673000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:52470] Sent 200 in 117ms [Thu Nov 5 12:18:38.763000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK db=88.7ms idle=412.0ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "authorize", ~U[2026-11-05 12:18:38Z], "9d901750-ac8f-4902-b253-6a1e1f4100bd", 53, 200, 390, %{"amount" => "850", "captures" => [], "closed_at" => nil, "created_at" => "2026-11-05T12:18:27Z", "currency" => "AED", "expires_at" => "2026-11-05T12:30:27Z", "id" => "9d901750-ac8f-4902-b253-6a1e1f4100bd", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-8897618B"}, "refunds" => [], "status" => "authorized", "token" => nil}, ~N[2026-11-05 12:18:38], ~N[2026-11-05 12:18:38]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 12:18:38.763000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook attempt=1 success event=authorize payment=9d901750-ac8f-4902-b253-6a1e1f4100bd url=http://demo.ctrmv.com:4030/tabby/webhooks (390 ms) [Thu Nov 5 12:18:38.795000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.7ms idle=463.1ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [51] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 12:18:38.796000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=445.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["9d901750-ac8f-4902-b253-6a1e1f4100bd"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:18:38.797000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=363.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["8f704c54-8cd9-4ce4-bd4a-512888165e3f"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:18:39.079000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:59264] GET /tabby-sim/api/v2/payments/9d901750-ac8f-4902-b253-6a1e1f4100bd [Thu Nov 5 12:18:39.080000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:59264] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "9d901750-ac8f-4902-b253-6a1e1f4100bd"} Pipelines: [:tabby_sim_api] [Thu Nov 5 12:18:39.081000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59264] QUERY OK source="tabby_sim_faults" db=1.1ms queue=0.1ms idle=407.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "9d901750-ac8f-4902-b253-6a1e1f4100bd"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 12:18:39.087000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59264] QUERY OK source="tabby_sim_faults" db=4.9ms decode=0.2ms queue=0.1ms idle=319.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:18:39.090000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59264] QUERY OK source="tabby_sim_payments" db=2.0ms idle=293.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["9d901750-ac8f-4902-b253-6a1e1f4100bd"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Thu Nov 5 12:18:39.090000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:59264] Sent 200 in 11ms [Thu Nov 5 12:18:39.095000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client -] [Tabby] retrieve get /api/v2/payments/9d901750-ac8f-4902-b253-6a1e1f4100bd -> 200 (297 ms, attempt 1) [Thu Nov 5 12:18:39.115000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=17.9ms idle=300.8ms UPDATE `tabby_payments` AS t0 SET t0.`authorized_at` = ?, t0.`winner_key` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [~U[2026-11-05 12:18:39Z], "db64d101151bdf828c5571dbf12dc86f51d0a77f443bbd5e6831e818097e44e7", "authorized", ~N[2026-11-05 12:18:39], "8f704c54-8cd9-4ce4-bd4a-512888165e3f", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 12:18:39.118000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.8ms queue=0.4ms idle=320.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["8f704c54-8cd9-4ce4-bd4a-512888165e3f"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:18:39.118000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2594513] [client -] [Tabby] verify: attempt=8f704c54-8cd9-4ce4-bd4a-512888165e3f payment=9d901750-ac8f-4902-b253-6a1e1f4100bd created -> authorized [Thu Nov 5 12:18:39.195000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=42.3ms idle=281.5ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 12:18:39Z], 51] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 12:18:39.195000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2594513] [client -] [Tabby] webhook job: event=51 payment=9d901750-ac8f-4902-b253-6a1e1f4100bd processed (recorded authorized) [Thu Nov 5 12:18:39.258000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.2ms idle=175.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["8f704c54-8cd9-4ce4-bd4a-512888165e3f"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:18:39.288000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=28.4ms queue=0.6ms idle=171.9ms UPDATE `tabby_payments` AS t0 SET t0.`capture_reference_id` = ?, t0.`claimed_at` = ?, t0.`claimed_by` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["capture-DEMO-8897618B", ~U[2026-11-05 12:18:39Z], "nonode@nohost", "capturing", ~N[2026-11-05 12:18:39], "8f704c54-8cd9-4ce4-bd4a-512888165e3f", "authorized"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 12:18:39.290000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.7ms queue=0.5ms idle=170.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["8f704c54-8cd9-4ce4-bd4a-512888165e3f"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:18:39.290000 2026] [DaProductApp.Tabby.Capture:info] [pid 2594513] [client -] [Tabby] capture: attempt=8f704c54-8cd9-4ce4-bd4a-512888165e3f payment=9d901750-ac8f-4902-b253-6a1e1f4100bd claimed (authorized -> capturing) [Thu Nov 5 12:18:39.591000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:59264] POST /tabby-sim/api/v2/payments/9d901750-ac8f-4902-b253-6a1e1f4100bd/captures [Thu Nov 5 12:18:39.592000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:59264] Processing with DaProductAppWeb.TabbySim.PaymentsController.capture/2 Parameters: %{"amount" => "850.00", "id" => "9d901750-ac8f-4902-b253-6a1e1f4100bd", "reference_id" => "capture-DEMO-8897618B"} Pipelines: [:tabby_sim_api] [Thu Nov 5 12:18:39.594000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59264] QUERY OK source="tabby_sim_faults" db=1.5ms queue=0.1ms idle=397.2ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["capture", "9d901750-ac8f-4902-b253-6a1e1f4100bd"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 12:18:39.595000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59264] QUERY OK source="tabby_sim_faults" db=0.6ms idle=363.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["capture"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:18:39.598000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59264] QUERY OK source="tabby_sim_payments" db=0.5ms queue=1.7ms idle=338.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["9d901750-ac8f-4902-b253-6a1e1f4100bd"] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:227 [Thu Nov 5 12:18:39.601000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59264] QUERY OK db=0.2ms queue=0.7ms idle=342.0ms begin [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Thu Nov 5 12:18:39.603000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59264] QUERY OK source="tabby_sim_payments" db=0.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) FOR UPDATE ["9d901750-ac8f-4902-b253-6a1e1f4100bd"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:231 [Thu Nov 5 12:18:39.609000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59264] QUERY OK source="tabby_sim_payments" db=2.0ms UPDATE `tabby_sim_payments` SET `status` = ?, `closed_at` = ?, `captures` = ?, `updated_at` = ? WHERE `id` = ? ["CLOSED", ~U[2026-11-05 12:18:39Z], [%{"amount" => "850", "created_at" => "2026-11-05T12:18:39Z", "discount_amount" => "0", "id" => "39910164-2dc3-4be9-ac10-626280ed8619", "items" => nil, "reference_id" => "capture-DEMO-8897618B", "shipping_amount" => "0", "tax_amount" => "0"}], ~N[2026-11-05 12:18:39], "9d901750-ac8f-4902-b253-6a1e1f4100bd"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:244 [Thu Nov 5 12:18:39.610000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client 127.0.0.1:59264] [TabbySim] capture payment=9d901750-ac8f-4902-b253-6a1e1f4100bd status=CLOSED [Thu Nov 5 12:18:39.663000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59264] QUERY OK db=53.2ms commit [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Thu Nov 5 12:18:39.666000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59264] QUERY OK source="tabby_sim_webhooks" db=1.1ms queue=0.2ms idle=396.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 12:18:39.705000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client 127.0.0.1:59264] [TabbySim] webhook queued job=403349 event=capture payment=9d901750-ac8f-4902-b253-6a1e1f4100bd webhook=53 [Thu Nov 5 12:18:39.709000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59264] QUERY OK source="tabby_sim_webhooks" db=0.5ms decode=0.6ms queue=1.9ms idle=416.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 12:18:39.761000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client 127.0.0.1:59264] [TabbySim] webhook queued job=403350 event=close payment=9d901750-ac8f-4902-b253-6a1e1f4100bd webhook=53 [Thu Nov 5 12:18:39.761000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:59264] Sent 200 in 170ms [Thu Nov 5 12:18:39.765000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client -] [Tabby] capture post /api/v2/payments/9d901750-ac8f-4902-b253-6a1e1f4100bd/captures -> 200 (475 ms, attempt 1) [Thu Nov 5 12:18:39.808000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_webhooks" db=0.5ms idle=213.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 12:18:39.815000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=49.4ms queue=0.1ms idle=301.0ms UPDATE `tabby_payments` AS t0 SET t0.`captured_amount` = ?, t0.`captured_at` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [Decimal.new("850"), ~U[2026-11-05 12:18:39Z], "captured", ~N[2026-11-05 12:18:39], "8f704c54-8cd9-4ce4-bd4a-512888165e3f", "capturing"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 12:18:39.818000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=2.0ms queue=0.1ms idle=220.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["8f704c54-8cd9-4ce4-bd4a-512888165e3f"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:18:39.818000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2594513] [client -] [Tabby] verify: attempt=8f704c54-8cd9-4ce4-bd4a-512888165e3f payment=9d901750-ac8f-4902-b253-6a1e1f4100bd capturing -> captured [Thu Nov 5 12:18:39.818000 2026] [DaProductApp.Tabby.Capture:info] [pid 2594513] [client -] [Tabby] capture: attempt=8f704c54-8cd9-4ce4-bd4a-512888165e3f payment=9d901750-ac8f-4902-b253-6a1e1f4100bd is captured [Thu Nov 5 12:18:40.144000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:52470] POST /tabby/webhooks [Thu Nov 5 12:18:40.146000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:52470] QUERY OK source="tabby_payments" db=0.9ms idle=436.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["9d901750-ac8f-4902-b253-6a1e1f4100bd"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:18:40.180000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:52470] QUERY OK db=31.0ms queue=1.6ms idle=386.4ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["authorized", false, "9d901750-ac8f-4902-b253-6a1e1f4100bd", "{\"amount\":\"850\",\"captures\":[{\"amount\":\"850\",\"created_at\":\"2026-11-05T12:18:39Z\",\"discount_amount\":\"0\",\"id\":\"39910164-2dc3-4be9-ac10-626280ed8619\",\"items\":null,\"reference_id\":\"capture-DEMO-8897618B\",\"shipping_amount\":\"0\",\"tax_amount\":\"0\"}],\"closed_at\":null,\"created_at\":\"2026-11-05T12:18:27Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T12:30:27Z\",\"id\":\"9d901750-ac8f-4902-b253-6a1e1f4100bd\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-8897618B\"},\"refunds\":[],\"status\":\"authorized\",\"token\":null}", ~U[2026-11-05 12:18:40Z], ~N[2026-11-05 12:18:40], ~N[2026-11-05 12:18:40]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 12:18:40.229000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2594513] [client 78.47.213.209:52470] [Tabby] webhook 200: event=52 payment=9d901750-ac8f-4902-b253-6a1e1f4100bd saved and queued [Thu Nov 5 12:18:40.230000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:52470] Sent 200 in 85ms [Thu Nov 5 12:18:40.312000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK db=81.2ms idle=415.4ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "capture", ~U[2026-11-05 12:18:40Z], "9d901750-ac8f-4902-b253-6a1e1f4100bd", 53, 200, 422, %{"amount" => "850", "captures" => [%{"amount" => "850", "created_at" => "2026-11-05T12:18:39Z", "discount_amount" => "0", "id" => "39910164-2dc3-4be9-ac10-626280ed8619", "items" => nil, "reference_id" => "capture-DEMO-8897618B", "shipping_amount" => "0", "tax_amount" => "0"}], "closed_at" => nil, "created_at" => "2026-11-05T12:18:27Z", "currency" => "AED", "expires_at" => "2026-11-05T12:30:27Z", "id" => "9d901750-ac8f-4902-b253-6a1e1f4100bd", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-8897618B"}, "refunds" => [], "status" => "authorized", "token" => nil}, ~N[2026-11-05 12:18:40], ~N[2026-11-05 12:18:40]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 12:18:40.313000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook attempt=1 success event=capture payment=9d901750-ac8f-4902-b253-6a1e1f4100bd url=http://demo.ctrmv.com:4030/tabby/webhooks (422 ms) [Thu Nov 5 12:18:40.360000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=2.1ms idle=439.4ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [52] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 12:18:40.361000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.8ms queue=0.1ms idle=357.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["9d901750-ac8f-4902-b253-6a1e1f4100bd"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:18:40.366000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=4.5ms idle=215.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["8f704c54-8cd9-4ce4-bd4a-512888165e3f"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:18:40.421000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=49.3ms idle=187.3ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 12:18:40Z], 52] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 12:18:40.421000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2594513] [client -] [Tabby] webhook job: event=52 payment=9d901750-ac8f-4902-b253-6a1e1f4100bd processed (already_final) [Thu Nov 5 12:18:40.935000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:56516] GET /tabby/return/8f704c54-8cd9-4ce4-bd4a-512888165e3f/success [Thu Nov 5 12:18:40.936000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:56516] QUERY OK source="tabby_payments" db=0.7ms idle=573.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["8f704c54-8cd9-4ce4-bd4a-512888165e3f"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:18:40.974000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:56516] Sent 302 in 39ms [Thu Nov 5 12:18:41.119000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=698.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["8f704c54-8cd9-4ce4-bd4a-512888165e3f"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:18:41.371000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_webhooks" db=0.4ms queue=0.3ms idle=432.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 12:18:41.512000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:56516] GET /tabby/demo/result/success [Thu Nov 5 12:18:41.512000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:56516] Sent 200 in 512µs [Thu Nov 5 12:18:41.712000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:52470] POST /tabby/webhooks [Thu Nov 5 12:18:41.718000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:52470] QUERY OK source="tabby_payments" db=1.6ms queue=2.3ms idle=594.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["9d901750-ac8f-4902-b253-6a1e1f4100bd"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:18:41.825000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:52470] QUERY OK db=107.0ms idle=530.1ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["closed", false, "9d901750-ac8f-4902-b253-6a1e1f4100bd", "{\"amount\":\"850\",\"captures\":[{\"amount\":\"850\",\"created_at\":\"2026-11-05T12:18:39Z\",\"discount_amount\":\"0\",\"id\":\"39910164-2dc3-4be9-ac10-626280ed8619\",\"items\":null,\"reference_id\":\"capture-DEMO-8897618B\",\"shipping_amount\":\"0\",\"tax_amount\":\"0\"}],\"closed_at\":\"2026-11-05T12:18:39Z\",\"created_at\":\"2026-11-05T12:18:27Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T12:30:27Z\",\"id\":\"9d901750-ac8f-4902-b253-6a1e1f4100bd\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-8897618B\"},\"refunds\":[],\"status\":\"closed\",\"token\":null}", ~U[2026-11-05 12:18:41Z], ~N[2026-11-05 12:18:41], ~N[2026-11-05 12:18:41]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 12:18:41.909000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2594513] [client 78.47.213.209:52470] [Tabby] webhook 200: event=53 payment=9d901750-ac8f-4902-b253-6a1e1f4100bd saved and queued [Thu Nov 5 12:18:41.909000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:52470] Sent 200 in 197ms [Thu Nov 5 12:18:41.979000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK db=67.6ms idle=573.7ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "close", ~U[2026-11-05 12:18:41Z], "9d901750-ac8f-4902-b253-6a1e1f4100bd", 53, 200, 539, %{"amount" => "850", "captures" => [%{"amount" => "850", "created_at" => "2026-11-05T12:18:39Z", "discount_amount" => "0", "id" => "39910164-2dc3-4be9-ac10-626280ed8619", "items" => nil, "reference_id" => "capture-DEMO-8897618B", "shipping_amount" => "0", "tax_amount" => "0"}], "closed_at" => "2026-11-05T12:18:39Z", "created_at" => "2026-11-05T12:18:27Z", "currency" => "AED", "expires_at" => "2026-11-05T12:30:27Z", "id" => "9d901750-ac8f-4902-b253-6a1e1f4100bd", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-8897618B"}, "refunds" => [], "status" => "closed", "token" => nil}, ~N[2026-11-05 12:18:41], ~N[2026-11-05 12:18:41]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 12:18:41.979000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook attempt=1 success event=close payment=9d901750-ac8f-4902-b253-6a1e1f4100bd url=http://demo.ctrmv.com:4030/tabby/webhooks (539 ms) [Thu Nov 5 12:18:41.993000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.3ms queue=0.2ms idle=415.8ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 12:18:41.994000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=276.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["9d901750-ac8f-4902-b253-6a1e1f4100bd"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:18:41.995000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.3ms idle=169.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["8f704c54-8cd9-4ce4-bd4a-512888165e3f"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:18:42.049000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=53.0ms idle=167.6ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 12:18:41Z], 53] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 12:18:42.050000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2594513] [client -] [Tabby] webhook job: event=53 payment=9d901750-ac8f-4902-b253-6a1e1f4100bd processed (already_final) [Thu Nov 5 12:18:42.147000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:56516] GET /tabby/demo/status/8f704c54-8cd9-4ce4-bd4a-512888165e3f [Thu Nov 5 12:18:42.151000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:56516] QUERY OK source="tabby_payments" db=2.5ms idle=156.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["8f704c54-8cd9-4ce4-bd4a-512888165e3f"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:18:42.152000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:56516] Sent 200 in 4ms [Thu Nov 5 12:19:07.613000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1715.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:19:07Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:19:07.667000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=52.9ms queue=0.1ms idle=1717.4ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 12:19:07], true, "b760ce9d-c736-491f-a48f-84d7117a09d1", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:19:07.667000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=b760ce9d-c736-491f-a48f-84d7117a09d1 CREATED -> EXPIRED [Thu Nov 5 12:19:07.670000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1771.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["b760ce9d-c736-491f-a48f-84d7117a09d1"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:19:07.671000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook not sent: event=expire payment=b760ce9d-c736-491f-a48f-84d7117a09d1 [Thu Nov 5 12:19:07.672000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=b760ce9d-c736-491f-a48f-84d7117a09d1 expired (expires_at 2026-11-05 12:19:06Z, session_status=created) [Thu Nov 5 12:19:07.677000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.7ms idle=1174.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:19:07Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:19:07.680000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 1 payment(s) were due [Thu Nov 5 12:19:07.683000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.7ms idle=784.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:19:07Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:19:07.688000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=4.7ms idle=786.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:19:07.738000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403354 scheduled in 60s (6 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:19:49.016000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:60485] GET /tabby/demo [Thu Nov 5 12:19:49.019000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:60485] Sent 200 in 2ms [Thu Nov 5 12:19:49.518000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:60485] POST /tabby/demo/summary [Thu Nov 5 12:19:49.518000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:60485] Sent 200 in 686µs [Thu Nov 5 12:19:50.346000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:60485] POST /tabby/demo/eligibility [Thu Nov 5 12:19:50.591000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:35822] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:19:50.591000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:35822] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:19:50.592000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:35822] QUERY OK source="tabby_sim_faults" db=0.4ms idle=1691.2ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:19:50.616000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:35822] QUERY OK db=22.8ms queue=0.9ms idle=1306.6ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`is_test`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["65eff571-2b01-4550-87db-ed2094a2f49b", "CREATED", "AED", "6a7c8b3b-73d8-4c1f-83dd-f4fd36b057cc", "demostore", ~U[2026-11-05 12:31:50Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "created", %{"cancel" => nil, "failure" => nil, "success" => nil}, ~U[2026-11-05 12:29:50Z], false, Decimal.new("850.00"), [], [], true, ~N[2026-11-05 12:19:50], ~N[2026-11-05 12:19:50]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:19:50.617000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:35822] [TabbySim] checkout payment=65eff571-2b01-4550-87db-ed2094a2f49b session=6a7c8b3b-73d8-4c1f-83dd-f4fd36b057cc decision=created reason=nil amount=850.00 AED [Thu Nov 5 12:19:50.618000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:35822] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1245.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:19:50.620000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:35822] Sent 200 in 28ms [Thu Nov 5 12:19:50.620000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:60485] [Tabby] checkout post /api/v2/checkout -> 200 (274 ms, attempt 1) [Thu Nov 5 12:19:50.621000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:60485] [Tabby] session created payment=65eff571-2b01-4550-87db-ed2094a2f49b [Thu Nov 5 12:19:50.621000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2594513] [client 115.99.167.137:60485] [Tabby] eligibility: show (amount=850.00 AED) [Thu Nov 5 12:19:50.621000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:60485] Sent 200 in 275ms [Thu Nov 5 12:20:08.945000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1039.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:20:08Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:20:08.945000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:20:08.949000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.4ms idle=1042.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:20:08Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:20:08.950000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1044.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:20:09.045000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403361 scheduled in 28s (7 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:20:22.742000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Thu Nov 5 12:20:22.745000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Thu Nov 5 12:20:22.746000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Thu Nov 5 12:20:24.990000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:60485] GET /tabby-sim/hpp/819afd8d-3904-430b-92e8-be76d68ecf96 [Thu Nov 5 12:20:24.991000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:60485] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "819afd8d-3904-430b-92e8-be76d68ecf96"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:20:24.992000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:60485] QUERY OK source="tabby_sim_payments" db=1.0ms idle=1076.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["819afd8d-3904-430b-92e8-be76d68ecf96"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:20:24.993000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:60485] Sent 410 in 2ms [Thu Nov 5 12:20:25.182000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:62015] GET /tabby-sim/admin [Thu Nov 5 12:20:25.182000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:62015] Processing with DaProductAppWeb.TabbySim.AdminController.index/2 Parameters: %{} Pipelines: [:tabby_sim_admin] [Thu Nov 5 12:20:25.181000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50959] GET /tabby/demo [Thu Nov 5 12:20:25.185000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:62015] QUERY OK source="tabby_sim_faults" db=2.8ms idle=1266.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (t0.`remaining` > 0) ORDER BY t0.`id` [] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:18 [Thu Nov 5 12:20:25.192000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:62015] QUERY OK source="tabby_sim_payments" db=5.9ms queue=0.1ms idle=1077.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 ORDER BY t0.`inserted_at` DESC, t0.`id` DESC LIMIT ? [30] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:19 [Thu Nov 5 12:20:25.201000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:62015] QUERY OK source="tabby_sim_webhook_deliveries" db=5.2ms idle=541.2ms SELECT t0.`id`, t0.`payment_id`, t0.`webhook_id`, t0.`event`, t0.`attempt`, t0.`state`, t0.`url`, t0.`http_status`, t0.`request_body`, t0.`response_body`, t0.`error`, t0.`duration_ms`, t0.`attempted_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhook_deliveries` AS t0 ORDER BY t0.`id` DESC LIMIT ? [40] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:20 [Thu Nov 5 12:20:25.210000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:62015] QUERY OK source="tabby_sim_webhooks" db=6.0ms idle=454.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 ORDER BY t0.`id` LIMIT 100 [] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:21 [Thu Nov 5 12:20:25.219000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:62015] Sent 200 in 36ms [Thu Nov 5 12:20:25.233000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50959] Sent 200 in 52ms [Thu Nov 5 12:20:26.139000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50959] POST /tabby/demo/summary [Thu Nov 5 12:20:26.140000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50959] Sent 200 in 1ms [Thu Nov 5 12:20:27.728000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50959] POST /tabby/demo/eligibility [Thu Nov 5 12:20:28.115000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:35822] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:20:28.117000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:35822] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:20:28.118000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:35822] QUERY OK source="tabby_sim_faults" db=0.7ms idle=1198.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:20:28.172000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:35822] QUERY OK db=52.2ms queue=0.2ms idle=1.2e3ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`is_test`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["037b2337-c919-453a-8d2c-51e724a21177", "CREATED", "AED", "04a87a54-c543-47dc-896c-f050734e7034", "demostore", ~U[2026-11-05 12:32:28Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "created", %{"cancel" => nil, "failure" => nil, "success" => nil}, ~U[2026-11-05 12:30:28Z], false, Decimal.new("850.00"), [], [], true, ~N[2026-11-05 12:20:28], ~N[2026-11-05 12:20:28]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:20:28.173000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:35822] [TabbySim] checkout payment=037b2337-c919-453a-8d2c-51e724a21177 session=04a87a54-c543-47dc-896c-f050734e7034 decision=created reason=nil amount=850.00 AED [Thu Nov 5 12:20:28.176000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:35822] QUERY OK source="tabby_sim_payments" db=1.6ms idle=1254.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:20:28.179000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:35822] Sent 200 in 64ms [Thu Nov 5 12:20:28.181000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:50959] [Tabby] checkout post /api/v2/checkout -> 200 (452 ms, attempt 1) [Thu Nov 5 12:20:28.181000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:50959] [Tabby] session created payment=037b2337-c919-453a-8d2c-51e724a21177 [Thu Nov 5 12:20:28.182000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2594513] [client 115.99.167.137:50959] [Tabby] eligibility: show (amount=850.00 AED) [Thu Nov 5 12:20:28.183000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50959] Sent 200 in 454ms [Thu Nov 5 12:20:29.278000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.8ms idle=1100.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["demostore", ~U[2026-10-18 12:20:29Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:20:29.281000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=2.2ms idle=1100.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["demostore", ~N[2026-11-05 12:18:29], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:20:29.283000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.2ms queue=0.2ms idle=1102.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:20:29.285000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.3ms idle=743.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", ~N[2026-11-05 12:18:29], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:20:29.288000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.8ms queue=0.1ms idle=368.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["demostore", ~U[2026-11-05 12:15:29Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:20:29.291000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=2.6ms idle=371.5ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-05 12:18:29Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Thu Nov 5 12:20:29.293000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_refunds" db=0.8ms idle=374.6ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["demostore", ~N[2026-11-05 12:18:29], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Thu Nov 5 12:20:29.294000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.4ms queue=0.1ms idle=108.6ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 12:20:29.296000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.6ms idle=58.5ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["demostore", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 12:20:29.298000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=1.9ms idle=20.4ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Thu Nov 5 12:20:29.301000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_refunds" db=2.3ms idle=20.5ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Thu Nov 5 12:20:29.303000 2026] [DaProductApp.Tabby.Poller:debug] [pid 2594513] [client -] [Tabby] poll: nothing to do; 0 attempt(s) still watched [Thu Nov 5 12:20:38.409000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.7ms idle=1486.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:20:38Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:20:38.463000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=52.9ms idle=1488.8ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 12:20:38], true, "99710cd8-658b-49ae-b977-f0f8aab3f507", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:20:38.463000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=99710cd8-658b-49ae-b977-f0f8aab3f507 CREATED -> EXPIRED [Thu Nov 5 12:20:38.465000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1542.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["99710cd8-658b-49ae-b977-f0f8aab3f507"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:20:38.465000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook not sent: event=expire payment=99710cd8-658b-49ae-b977-f0f8aab3f507 [Thu Nov 5 12:20:38.466000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=99710cd8-658b-49ae-b977-f0f8aab3f507 expired (expires_at 2026-11-05 12:20:36Z, session_status=created) [Thu Nov 5 12:20:38.521000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=54.5ms idle=1545.5ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 12:20:38], true, "0591db23-be7b-4d8e-acd6-b475c6330226", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:20:38.522000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=0591db23-be7b-4d8e-acd6-b475c6330226 CREATED -> EXPIRED [Thu Nov 5 12:20:38.523000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1598.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["0591db23-be7b-4d8e-acd6-b475c6330226"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:20:38.523000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook not sent: event=expire payment=0591db23-be7b-4d8e-acd6-b475c6330226 [Thu Nov 5 12:20:38.523000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=0591db23-be7b-4d8e-acd6-b475c6330226 expired (expires_at 2026-11-05 12:20:37Z, session_status=created) [Thu Nov 5 12:20:38.525000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.8ms idle=1.6e3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:20:38Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:20:38.526000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 2 payment(s) were due [Thu Nov 5 12:20:38.527000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.1ms idle=1602.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:20:38Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:20:38.529000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms queue=0.1ms idle=1209.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:20:38.556000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403362 scheduled in 60s (6 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:21:13.500000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Thu Nov 5 12:21:13.501000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Thu Nov 5 12:21:13.501000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Thu Nov 5 12:21:15.428000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:60485] GET /tabby-sim/hpp/819afd8d-3904-430b-92e8-be76d68ecf96 [Thu Nov 5 12:21:15.428000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:60485] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "819afd8d-3904-430b-92e8-be76d68ecf96"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:21:15.430000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:60485] QUERY OK source="tabby_sim_payments" db=0.9ms queue=0.1ms idle=1505.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["819afd8d-3904-430b-92e8-be76d68ecf96"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:21:15.430000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:60485] Sent 410 in 2ms [Thu Nov 5 12:21:15.534000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:62015] GET /tabby-sim/admin [Thu Nov 5 12:21:15.535000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:62015] Processing with DaProductAppWeb.TabbySim.AdminController.index/2 Parameters: %{} Pipelines: [:tabby_sim_admin] [Thu Nov 5 12:21:15.537000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:62015] QUERY OK source="tabby_sim_faults" db=0.6ms idle=1612.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (t0.`remaining` > 0) ORDER BY t0.`id` [] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:18 [Thu Nov 5 12:21:15.545000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:62015] QUERY OK source="tabby_sim_payments" db=7.5ms idle=977.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 ORDER BY t0.`inserted_at` DESC, t0.`id` DESC LIMIT ? [30] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:19 [Thu Nov 5 12:21:15.548000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:62015] QUERY OK source="tabby_sim_webhook_deliveries" db=2.0ms idle=623.2ms SELECT t0.`id`, t0.`payment_id`, t0.`webhook_id`, t0.`event`, t0.`attempt`, t0.`state`, t0.`url`, t0.`http_status`, t0.`request_body`, t0.`response_body`, t0.`error`, t0.`duration_ms`, t0.`attempted_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhook_deliveries` AS t0 ORDER BY t0.`id` DESC LIMIT ? [40] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:20 [Thu Nov 5 12:21:15.550000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:62015] QUERY OK source="tabby_sim_webhooks" db=0.7ms queue=0.1ms idle=352.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 ORDER BY t0.`id` LIMIT 100 [] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:21 [Thu Nov 5 12:21:15.551000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:62015] Sent 200 in 16ms [Thu Nov 5 12:21:15.574000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50959] GET /tabby/demo [Thu Nov 5 12:21:15.578000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50959] Sent 200 in 3ms [Thu Nov 5 12:21:16.066000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50959] POST /tabby/demo/summary [Thu Nov 5 12:21:16.066000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50959] Sent 200 in 562µs [Thu Nov 5 12:21:17.464000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50959] POST /tabby/demo/eligibility [Thu Nov 5 12:21:17.766000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:35822] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:21:17.767000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:35822] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:21:17.769000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:35822] QUERY OK source="tabby_sim_faults" db=0.5ms queue=0.2ms idle=844.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:21:17.807000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:35822] QUERY OK db=34.1ms queue=3.7ms idle=845.7ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`is_test`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["9b0abe70-ddac-4ecf-9460-70447f2a53bc", "CREATED", "AED", "cf245344-8c7b-4ce1-b774-4a5c550d9ab0", "demostore", ~U[2026-11-05 12:33:17Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "created", %{"cancel" => nil, "failure" => nil, "success" => nil}, ~U[2026-11-05 12:31:17Z], false, Decimal.new("850.00"), [], [], true, ~N[2026-11-05 12:21:17], ~N[2026-11-05 12:21:17]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:21:17.807000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:35822] [TabbySim] checkout payment=9b0abe70-ddac-4ecf-9460-70447f2a53bc session=cf245344-8c7b-4ce1-b774-4a5c550d9ab0 decision=created reason=nil amount=850.00 AED [Thu Nov 5 12:21:17.810000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:35822] QUERY OK source="tabby_sim_payments" db=2.1ms queue=0.2ms idle=884.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:21:17.813000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:35822] Sent 200 in 46ms [Thu Nov 5 12:21:17.814000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:50959] [Tabby] checkout post /api/v2/checkout -> 200 (349 ms, attempt 1) [Thu Nov 5 12:21:17.814000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:50959] [Tabby] session created payment=9b0abe70-ddac-4ecf-9460-70447f2a53bc [Thu Nov 5 12:21:17.814000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2594513] [client 115.99.167.137:50959] [Tabby] eligibility: show (amount=850.00 AED) [Thu Nov 5 12:21:17.814000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50959] Sent 200 in 350ms [Thu Nov 5 12:21:26.890000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="global_table" db=0.5ms idle=1020.8ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 12:21:39.959000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1033.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:21:39Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:21:39.960000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:21:39.961000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1035.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:21:39Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:21:39.962000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.1ms idle=1035.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:21:40.030000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403363 scheduled in 60s (7 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:21:47.784000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Thu Nov 5 12:21:47.784000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Thu Nov 5 12:21:47.784000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Thu Nov 5 12:21:49.642000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50959] GET /tabby-sim/hpp/819afd8d-3904-430b-92e8-be76d68ecf96 [Thu Nov 5 12:21:49.642000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:50959] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "819afd8d-3904-430b-92e8-be76d68ecf96"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:21:49.643000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:50959] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1718.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["819afd8d-3904-430b-92e8-be76d68ecf96"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:21:49.643000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50959] Sent 410 in 1ms [Thu Nov 5 12:21:49.703000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:62015] GET /tabby/demo [Thu Nov 5 12:21:49.706000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:62015] Sent 200 in 2ms [Thu Nov 5 12:21:49.745000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:60485] GET /tabby-sim/admin [Thu Nov 5 12:21:49.746000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:60485] Processing with DaProductAppWeb.TabbySim.AdminController.index/2 Parameters: %{} Pipelines: [:tabby_sim_admin] [Thu Nov 5 12:21:49.749000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:60485] QUERY OK source="tabby_sim_faults" db=2.5ms idle=1821.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (t0.`remaining` > 0) ORDER BY t0.`id` [] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:18 [Thu Nov 5 12:21:49.754000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:60485] QUERY OK source="tabby_sim_payments" db=4.5ms idle=1824.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 ORDER BY t0.`inserted_at` DESC, t0.`id` DESC LIMIT ? [30] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:19 [Thu Nov 5 12:21:49.757000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:60485] QUERY OK source="tabby_sim_webhook_deliveries" db=1.7ms idle=827.2ms SELECT t0.`id`, t0.`payment_id`, t0.`webhook_id`, t0.`event`, t0.`attempt`, t0.`state`, t0.`url`, t0.`http_status`, t0.`request_body`, t0.`response_body`, t0.`error`, t0.`duration_ms`, t0.`attempted_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhook_deliveries` AS t0 ORDER BY t0.`id` DESC LIMIT ? [40] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:20 [Thu Nov 5 12:21:49.760000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:60485] QUERY OK source="tabby_sim_webhooks" db=0.8ms idle=391.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 ORDER BY t0.`id` LIMIT 100 [] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:21 [Thu Nov 5 12:21:49.761000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:60485] Sent 200 in 16ms [Thu Nov 5 12:21:50.437000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:62015] POST /tabby/demo/summary [Thu Nov 5 12:21:50.437000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:62015] Sent 200 in 722µs [Thu Nov 5 12:21:52.871000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50959] POST /tabby/demo/eligibility [Thu Nov 5 12:21:53.236000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:35822] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:21:53.241000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:35822] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:21:53.244000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:35822] QUERY OK source="tabby_sim_faults" db=1.1ms idle=631.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:21:53.300000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:35822] QUERY OK db=55.0ms idle=548.1ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`is_test`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["90caba59-8e99-4a62-900f-909076ed4254", "CREATED", "AED", "e097e33d-fac4-47c9-9d24-aed306be90d6", "demostore", ~U[2026-11-05 12:33:53Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "created", %{"cancel" => nil, "failure" => nil, "success" => nil}, ~U[2026-11-05 12:31:53Z], false, Decimal.new("850.00"), [], [], true, ~N[2026-11-05 12:21:53], ~N[2026-11-05 12:21:53]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:21:53.300000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:35822] [TabbySim] checkout payment=90caba59-8e99-4a62-900f-909076ed4254 session=e097e33d-fac4-47c9-9d24-aed306be90d6 decision=created reason=nil amount=850.00 AED [Thu Nov 5 12:21:53.301000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:35822] QUERY OK source="tabby_sim_payments" db=0.8ms idle=368.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:21:53.305000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:35822] Sent 200 in 68ms [Thu Nov 5 12:21:53.306000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:50959] [Tabby] checkout post /api/v2/checkout -> 200 (434 ms, attempt 1) [Thu Nov 5 12:21:53.307000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:50959] [Tabby] session created payment=90caba59-8e99-4a62-900f-909076ed4254 [Thu Nov 5 12:21:53.307000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2594513] [client 115.99.167.137:50959] [Tabby] eligibility: show (amount=850.00 AED) [Thu Nov 5 12:21:53.307000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50959] Sent 200 in 436ms [Thu Nov 5 12:22:06.442000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50959] GET /tabby/demo [Thu Nov 5 12:22:06.445000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50959] Sent 200 in 2ms [Thu Nov 5 12:22:07.076000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50959] POST /tabby/demo/summary [Thu Nov 5 12:22:07.079000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50959] Sent 200 in 2ms [Thu Nov 5 12:22:07.981000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50959] POST /tabby/demo/eligibility [Thu Nov 5 12:22:08.290000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:35822] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:22:08.291000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:35822] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:22:08.292000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:35822] QUERY OK source="tabby_sim_faults" db=0.5ms queue=0.1ms idle=1356.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:22:08.400000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:35822] QUERY OK db=106.4ms idle=1358.5ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`is_test`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["61ccb944-8086-453b-a4fe-c8737605667b", "CREATED", "AED", "49898448-aff0-4503-b55e-4c18b4b4dc41", "demostore", ~U[2026-11-05 12:34:08Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "created", %{"cancel" => nil, "failure" => nil, "success" => nil}, ~U[2026-11-05 12:32:08Z], false, Decimal.new("850.00"), [], [], true, ~N[2026-11-05 12:22:08], ~N[2026-11-05 12:22:08]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:22:08.400000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:35822] [TabbySim] checkout payment=61ccb944-8086-453b-a4fe-c8737605667b session=49898448-aff0-4503-b55e-4c18b4b4dc41 decision=created reason=nil amount=850.00 AED [Thu Nov 5 12:22:08.402000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:35822] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1460.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:22:08.404000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:35822] Sent 200 in 113ms [Thu Nov 5 12:22:08.404000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:50959] [Tabby] checkout post /api/v2/checkout -> 200 (422 ms, attempt 1) [Thu Nov 5 12:22:08.405000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:50959] [Tabby] session created payment=61ccb944-8086-453b-a4fe-c8737605667b [Thu Nov 5 12:22:08.405000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2594513] [client 115.99.167.137:50959] [Tabby] eligibility: show (amount=850.00 AED) [Thu Nov 5 12:22:08.405000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50959] Sent 200 in 423ms [Thu Nov 5 12:22:33.381000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Thu Nov 5 12:22:35.570000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50959] GET /tabby/demo [Thu Nov 5 12:22:35.574000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50959] Sent 200 in 3ms [Thu Nov 5 12:22:36.039000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50959] POST /tabby/demo/summary [Thu Nov 5 12:22:36.039000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50959] Sent 200 in 602µs [Thu Nov 5 12:22:37.465000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50959] POST /tabby/demo/eligibility [Thu Nov 5 12:22:37.770000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:35822] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:22:37.770000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:35822] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:22:37.772000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:35822] QUERY OK source="tabby_sim_faults" db=0.5ms queue=1.1ms idle=832.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:22:37.810000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:35822] QUERY OK db=37.1ms idle=834.5ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`is_test`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["8bfad71e-b3f7-4f24-90c2-96969018e4c2", "CREATED", "AED", "8abaeadc-5460-46fc-a1ea-14db20d6796b", "demostore", ~U[2026-11-05 12:34:37Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "created", %{"cancel" => nil, "failure" => nil, "success" => nil}, ~U[2026-11-05 12:32:37Z], false, Decimal.new("850.00"), [], [], true, ~N[2026-11-05 12:22:37], ~N[2026-11-05 12:22:37]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:22:37.811000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:35822] [TabbySim] checkout payment=8bfad71e-b3f7-4f24-90c2-96969018e4c2 session=8abaeadc-5460-46fc-a1ea-14db20d6796b decision=created reason=nil amount=850.00 AED [Thu Nov 5 12:22:37.813000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:35822] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.7ms idle=873.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:22:37.815000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:35822] Sent 200 in 45ms [Thu Nov 5 12:22:37.816000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:50959] [Tabby] checkout post /api/v2/checkout -> 200 (350 ms, attempt 1) [Thu Nov 5 12:22:37.816000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:50959] [Tabby] session created payment=8bfad71e-b3f7-4f24-90c2-96969018e4c2 [Thu Nov 5 12:22:37.816000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2594513] [client 115.99.167.137:50959] [Tabby] eligibility: show (amount=850.00 AED) [Thu Nov 5 12:22:37.817000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:50959] Sent 200 in 351ms [Thu Nov 5 12:22:40.438000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1499.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:22:40Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:22:40.439000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:22:40.439000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1500.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:22:40Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:22:40.440000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1501.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:22:40.494000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403368 scheduled in 60s (10 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:23:40.682000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.4ms queue=0.2ms idle=1737.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:23:40Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:23:40.682000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:23:40.684000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1740.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:23:40Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:23:40.685000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.1ms idle=1741.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:23:40.721000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403369 scheduled in 53s (10 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:23:55.610000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Thu Nov 5 12:23:56.916000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Thu Nov 5 12:23:57.367000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:58785] GET /tabby/demo [Thu Nov 5 12:23:57.369000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:58785] Sent 200 in 2ms [Thu Nov 5 12:23:59.014000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:58785] POST /tabby/demo/summary [Thu Nov 5 12:23:59.015000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:58785] Sent 200 in 767µs [Thu Nov 5 12:23:59.323000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Thu Nov 5 12:24:00.910000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:58785] POST /tabby/demo/eligibility [Thu Nov 5 12:24:00.949000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57567] GET /tabby/demo [Thu Nov 5 12:24:00.953000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57567] Sent 200 in 4ms [Thu Nov 5 12:24:01.210000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:59538] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:24:01.211000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:59538] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:24:01.212000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59538] QUERY OK source="tabby_sim_faults" db=0.7ms queue=0.1ms idle=1264.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:24:01.250000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59538] QUERY OK db=37.4ms queue=0.3ms idle=1265.1ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`is_test`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["1db6b999-1cbd-4837-9727-4e9e7bef0f46", "CREATED", "AED", "85125e7d-b4f5-4bc3-aeb5-6f760b85f900", "demostore", ~U[2026-11-05 12:36:01Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "created", %{"cancel" => nil, "failure" => nil, "success" => nil}, ~U[2026-11-05 12:34:01Z], false, Decimal.new("850.00"), [], [], true, ~N[2026-11-05 12:24:01], ~N[2026-11-05 12:24:01]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:24:01.251000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:59538] [TabbySim] checkout payment=1db6b999-1cbd-4837-9727-4e9e7bef0f46 session=85125e7d-b4f5-4bc3-aeb5-6f760b85f900 decision=created reason=nil amount=850.00 AED [Thu Nov 5 12:24:01.251000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59538] QUERY OK source="tabby_sim_payments" db=0.6ms idle=585.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:24:01.254000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:59538] Sent 200 in 44ms [Thu Nov 5 12:24:01.255000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:58785] [Tabby] checkout post /api/v2/checkout -> 200 (343 ms, attempt 1) [Thu Nov 5 12:24:01.255000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:58785] [Tabby] session created payment=1db6b999-1cbd-4837-9727-4e9e7bef0f46 [Thu Nov 5 12:24:01.256000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2594513] [client 115.99.167.137:58785] [Tabby] eligibility: show (amount=850.00 AED) [Thu Nov 5 12:24:01.256000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:58785] Sent 200 in 345ms [Thu Nov 5 12:24:01.560000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57567] POST /tabby/demo/summary [Thu Nov 5 12:24:01.560000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57567] Sent 200 in 612µs [Thu Nov 5 12:24:02.750000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] POST /tabby/demo/eligibility [Thu Nov 5 12:24:03.240000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:59538] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:24:03.240000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:59538] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:24:03.243000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59538] QUERY OK source="tabby_sim_faults" db=2.2ms queue=0.1ms idle=762.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:24:03.269000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59538] QUERY OK db=24.7ms idle=461.0ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`is_test`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["e9d9d9ad-0cc4-4b01-8d9e-55fce39d3382", "CREATED", "AED", "6f37f183-44f4-4860-b04b-d8a52e73f6a0", "demostore", ~U[2026-11-05 12:36:03Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "created", %{"cancel" => nil, "failure" => nil, "success" => nil}, ~U[2026-11-05 12:34:03Z], false, Decimal.new("850.00"), [], [], true, ~N[2026-11-05 12:24:03], ~N[2026-11-05 12:24:03]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:24:03.269000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:59538] [TabbySim] checkout payment=e9d9d9ad-0cc4-4b01-8d9e-55fce39d3382 session=6f37f183-44f4-4860-b04b-d8a52e73f6a0 decision=created reason=nil amount=850.00 AED [Thu Nov 5 12:24:03.275000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59538] QUERY OK source="tabby_sim_payments" db=4.2ms queue=1.2ms idle=321.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:24:03.281000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:59538] Sent 200 in 41ms [Thu Nov 5 12:24:03.288000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:64666] [Tabby] checkout post /api/v2/checkout -> 200 (534 ms, attempt 1) [Thu Nov 5 12:24:03.289000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:64666] [Tabby] session created payment=e9d9d9ad-0cc4-4b01-8d9e-55fce39d3382 [Thu Nov 5 12:24:03.289000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2594513] [client 115.99.167.137:64666] [Tabby] eligibility: show (amount=850.00 AED) [Thu Nov 5 12:24:03.289000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] Sent 200 in 539ms [Thu Nov 5 12:24:35.075000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=125.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:24:35Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:24:35.121000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=45.4ms idle=127.4ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 12:24:35], true, "507be796-62aa-4c7b-839b-f1050e6c7fd2", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:24:35.122000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=507be796-62aa-4c7b-839b-f1050e6c7fd2 CREATED -> EXPIRED [Thu Nov 5 12:24:35.123000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.2ms idle=173.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["507be796-62aa-4c7b-839b-f1050e6c7fd2"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:24:35.123000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook not sent: event=expire payment=507be796-62aa-4c7b-839b-f1050e6c7fd2 [Thu Nov 5 12:24:35.123000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=507be796-62aa-4c7b-839b-f1050e6c7fd2 expired (expires_at 2026-11-05 12:24:33Z, session_status=created) [Thu Nov 5 12:24:35.124000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=174.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:24:35Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:24:35.124000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 1 payment(s) were due [Thu Nov 5 12:24:35.125000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=175.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:24:35Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:24:35.125000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=176.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:24:35.184000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403373 scheduled in 60s (11 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:24:45.060000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] GET /tabby/demo [Thu Nov 5 12:24:45.063000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] Sent 200 in 3ms [Thu Nov 5 12:24:45.654000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] POST /tabby/demo/summary [Thu Nov 5 12:24:45.655000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] Sent 200 in 1ms [Thu Nov 5 12:24:46.492000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] POST /tabby/demo/eligibility [Thu Nov 5 12:24:46.756000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:59538] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:24:46.756000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:59538] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:24:46.757000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59538] QUERY OK source="tabby_sim_faults" db=0.6ms idle=1808.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:24:46.808000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59538] QUERY OK db=49.6ms queue=0.2ms idle=1807.2ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`is_test`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["565a271e-e0d7-4a66-a474-ef29de6b1c82", "CREATED", "AED", "b818b0a3-3d2c-4224-bba7-14c12acac4e6", "demostore", ~U[2026-11-05 12:36:46Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "created", %{"cancel" => nil, "failure" => nil, "success" => nil}, ~U[2026-11-05 12:34:46Z], false, Decimal.new("850.00"), [], [], true, ~N[2026-11-05 12:24:46], ~N[2026-11-05 12:24:46]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:24:46.808000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:59538] [TabbySim] checkout payment=565a271e-e0d7-4a66-a474-ef29de6b1c82 session=b818b0a3-3d2c-4224-bba7-14c12acac4e6 decision=created reason=nil amount=850.00 AED [Thu Nov 5 12:24:46.810000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59538] QUERY OK source="tabby_sim_payments" db=0.8ms queue=0.2ms idle=1793.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:24:46.811000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:59538] Sent 200 in 55ms [Thu Nov 5 12:24:46.812000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:64666] [Tabby] checkout post /api/v2/checkout -> 200 (320 ms, attempt 1) [Thu Nov 5 12:24:46.812000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:64666] [Tabby] session created payment=565a271e-e0d7-4a66-a474-ef29de6b1c82 [Thu Nov 5 12:24:46.813000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2594513] [client 115.99.167.137:64666] [Tabby] eligibility: show (amount=850.00 AED) [Thu Nov 5 12:24:46.813000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] Sent 200 in 321ms [Thu Nov 5 12:25:05.113000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] POST /tabby/demo/place [Thu Nov 5 12:25:05.153000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:64666] QUERY OK db=37.6ms queue=0.6ms idle=1165.0ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`amount`,`order_reference`,`needs_attention`,`success_url`,`cancel_url`,`failure_url`,`captured_amount`,`refunded_amount`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["51e74d4a-eaa8-4ac6-ac92-8670ecee36fe", "new", "AED", "demostore", Decimal.new("850.00"), "DEMO-05E57D77", false, "http://demo.ctrmv.com:4030/tabby/demo/result/success?lang=en&order=DEMO-05E57D77", "http://demo.ctrmv.com:4030/tabby/demo/result/cancel?lang=en&order=DEMO-05E57D77", "http://demo.ctrmv.com:4030/tabby/demo/result/failure?lang=en&order=DEMO-05E57D77", Decimal.new("0"), Decimal.new("0"), ~N[2026-11-05 12:25:05], ~N[2026-11-05 12:25:05]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Thu Nov 5 12:25:05.471000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:49956] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:25:05.472000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:49956] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/51e74d4a-eaa8-4ac6-ac92-8670ecee36fe/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/51e74d4a-eaa8-4ac6-ac92-8670ecee36fe/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/51e74d4a-eaa8-4ac6-ac92-8670ecee36fe/success"}, "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Anya Forger", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-05E57D77"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:25:05.473000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:49956] QUERY OK source="tabby_sim_faults" db=0.7ms queue=0.1ms idle=1521.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:25:05.533000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:49956] QUERY OK db=58.2ms queue=0.3ms idle=1522.7ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`buyer_history`,`is_test`,`lang`,`shipping_address`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["11b77e5d-5536-4be3-8c51-9b2a0806ee09", "CREATED", "AED", "fbd2b259-4444-4a3d-b950-c9d72e3df8f2", "demostore", ~U[2026-11-05 12:37:05Z], %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/51e74d4a-eaa8-4ac6-ac92-8670ecee36fe/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/51e74d4a-eaa8-4ac6-ac92-8670ecee36fe/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/51e74d4a-eaa8-4ac6-ac92-8670ecee36fe/success"}, "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Anya Forger", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-05E57D77"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "0", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo headphones", "unit_price" => "650"}, %{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo smartwatch", "unit_price" => "200"}], "reference_id" => "DEMO-05E57D77", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "name" => "Anya Forger", "phone" => "+971500000001"}, "created", %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/51e74d4a-eaa8-4ac6-ac92-8670ecee36fe/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/51e74d4a-eaa8-4ac6-ac92-8670ecee36fe/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/51e74d4a-eaa8-4ac6-ac92-8670ecee36fe/success"}, ~U[2026-11-05 12:35:05Z], false, Decimal.new("850.00"), [], [], %{"registered_since" => "2023-02-01T10:00:00Z"}, true, "en", %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}, ~N[2026-11-05 12:25:05], ~N[2026-11-05 12:25:05]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:25:05.533000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:49956] [TabbySim] checkout payment=11b77e5d-5536-4be3-8c51-9b2a0806ee09 session=fbd2b259-4444-4a3d-b950-c9d72e3df8f2 decision=created reason=nil amount=850.00 AED [Thu Nov 5 12:25:05.534000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:49956] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1448.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:25:05.536000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:49956] Sent 200 in 65ms [Thu Nov 5 12:25:05.537000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:64666] [Tabby] checkout post /api/v2/checkout -> 200 (384 ms, attempt 1) [Thu Nov 5 12:25:05.538000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:64666] [Tabby] session created payment=11b77e5d-5536-4be3-8c51-9b2a0806ee09 [Thu Nov 5 12:25:05.539000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:64666] QUERY OK source="tabby_payments" db=0.5ms idle=652.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["51e74d4a-eaa8-4ac6-ac92-8670ecee36fe"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Thu Nov 5 12:25:05.580000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:64666] QUERY OK source="tabby_payments" db=39.4ms queue=0.7ms idle=568.9ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-05 12:45:05Z], "11b77e5d-5536-4be3-8c51-9b2a0806ee09", "fbd2b259-4444-4a3d-b950-c9d72e3df8f2", ~N[2026-11-05 12:25:05], "51e74d4a-eaa8-4ac6-ac92-8670ecee36fe"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Thu Nov 5 12:25:05.580000 2026] [DaProductApp.Tabby.Sessions:info] [pid 2594513] [client 115.99.167.137:64666] [Tabby] session created attempt=51e74d4a-eaa8-4ac6-ac92-8670ecee36fe payment=11b77e5d-5536-4be3-8c51-9b2a0806ee09 [Thu Nov 5 12:25:05.639000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] Sent 200 in 525ms [Thu Nov 5 12:25:06.124000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] GET /tabby-sim/hpp/fbd2b259-4444-4a3d-b950-c9d72e3df8f2 [Thu Nov 5 12:25:06.125000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:64666] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "fbd2b259-4444-4a3d-b950-c9d72e3df8f2"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:25:06.131000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:64666] QUERY OK source="tabby_sim_payments" db=2.1ms queue=0.3ms idle=596.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["fbd2b259-4444-4a3d-b950-c9d72e3df8f2"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:25:06.132000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] Sent 200 in 7ms [Thu Nov 5 12:25:15.142000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] POST /tabby-sim/hpp/fbd2b259-4444-4a3d-b950-c9d72e3df8f2 [Thu Nov 5 12:25:15.142000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:64666] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "approve", "otp" => "8888", "plan" => "6", "session_id" => "fbd2b259-4444-4a3d-b950-c9d72e3df8f2", "ui" => "1"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:25:15.143000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:64666] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1194.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["fbd2b259-4444-4a3d-b950-c9d72e3df8f2"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:25:15.168000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:64666] QUERY OK source="tabby_sim_payments" db=23.9ms idle=1026.4ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["AUTHORIZED", ~N[2026-11-05 12:25:15], "11b77e5d-5536-4be3-8c51-9b2a0806ee09", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:25:15.168000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client 115.99.167.137:64666] [TabbySim] payment=11b77e5d-5536-4be3-8c51-9b2a0806ee09 CREATED -> AUTHORIZED [Thu Nov 5 12:25:15.169000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:64666] QUERY OK source="tabby_sim_payments" db=0.7ms idle=234.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["11b77e5d-5536-4be3-8c51-9b2a0806ee09"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:25:15.170000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:64666] QUERY OK source="tabby_sim_webhooks" db=0.7ms idle=221.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 12:25:15.224000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client 115.99.167.137:64666] [TabbySim] webhook queued job=403378 event=authorize payment=11b77e5d-5536-4be3-8c51-9b2a0806ee09 webhook=53 [Thu Nov 5 12:25:15.225000 2026] [DaProductApp.TabbySim.Hpp:info] [pid 2594513] [client 115.99.167.137:64666] [TabbySim] hpp payment=11b77e5d-5536-4be3-8c51-9b2a0806ee09 action=approve status=AUTHORIZED [Thu Nov 5 12:25:15.226000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:64666] QUERY OK source="tabby_sim_payments" db=0.5ms idle=277.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["fbd2b259-4444-4a3d-b950-c9d72e3df8f2"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:25:15.226000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] Sent 200 in 84ms [Thu Nov 5 12:25:15.313000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_webhooks" db=0.4ms idle=364.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 12:25:15.662000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:47466] POST /tabby/webhooks [Thu Nov 5 12:25:15.665000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:47466] QUERY OK source="tabby_payments" db=1.7ms queue=0.1ms idle=518.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["11b77e5d-5536-4be3-8c51-9b2a0806ee09"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:25:15.749000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:47466] QUERY OK db=83.5ms idle=497.2ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["authorized", false, "11b77e5d-5536-4be3-8c51-9b2a0806ee09", "{\"amount\":\"850\",\"captures\":[],\"closed_at\":null,\"created_at\":\"2026-11-05T12:25:05Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T12:37:05Z\",\"id\":\"11b77e5d-5536-4be3-8c51-9b2a0806ee09\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-05E57D77\"},\"refunds\":[],\"status\":\"authorized\",\"token\":null}", ~U[2026-11-05 12:25:15Z], ~N[2026-11-05 12:25:15], ~N[2026-11-05 12:25:15]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 12:25:15.814000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2594513] [client 78.47.213.209:47466] [Tabby] webhook 200: event=54 payment=11b77e5d-5536-4be3-8c51-9b2a0806ee09 saved and queued [Thu Nov 5 12:25:15.815000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:47466] Sent 200 in 153ms [Thu Nov 5 12:25:15.918000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK db=101.5ms queue=0.3ms idle=592.1ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "authorize", ~U[2026-11-05 12:25:15Z], "11b77e5d-5536-4be3-8c51-9b2a0806ee09", 53, 200, 503, %{"amount" => "850", "captures" => [], "closed_at" => nil, "created_at" => "2026-11-05T12:25:05Z", "currency" => "AED", "expires_at" => "2026-11-05T12:37:05Z", "id" => "11b77e5d-5536-4be3-8c51-9b2a0806ee09", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-05E57D77"}, "refunds" => [], "status" => "authorized", "token" => nil}, ~N[2026-11-05 12:25:15], ~N[2026-11-05 12:25:15]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 12:25:15.919000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook attempt=1 success event=authorize payment=11b77e5d-5536-4be3-8c51-9b2a0806ee09 url=http://demo.ctrmv.com:4030/tabby/webhooks (503 ms) [Thu Nov 5 12:25:15.954000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.4ms idle=641.2ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [54] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 12:25:15.956000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=504.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["11b77e5d-5536-4be3-8c51-9b2a0806ee09"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:25:15.956000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.3ms queue=0.1ms idle=419.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["51e74d4a-eaa8-4ac6-ac92-8670ecee36fe"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:25:16.282000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:49956] GET /tabby-sim/api/v2/payments/11b77e5d-5536-4be3-8c51-9b2a0806ee09 [Thu Nov 5 12:25:16.283000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:49956] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "11b77e5d-5536-4be3-8c51-9b2a0806ee09"} Pipelines: [:tabby_sim_api] [Thu Nov 5 12:25:16.284000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:49956] QUERY OK source="tabby_sim_faults" db=0.5ms idle=365.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "11b77e5d-5536-4be3-8c51-9b2a0806ee09"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 12:25:16.285000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:49956] QUERY OK source="tabby_sim_faults" db=0.4ms idle=331.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:25:16.286000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:49956] QUERY OK source="tabby_sim_payments" db=0.5ms idle=331.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["11b77e5d-5536-4be3-8c51-9b2a0806ee09"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Thu Nov 5 12:25:16.286000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:49956] Sent 200 in 4ms [Thu Nov 5 12:25:16.287000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client -] [Tabby] retrieve get /api/v2/payments/11b77e5d-5536-4be3-8c51-9b2a0806ee09 -> 200 (330 ms, attempt 1) [Thu Nov 5 12:25:16.337000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=48.3ms idle=332.7ms UPDATE `tabby_payments` AS t0 SET t0.`authorized_at` = ?, t0.`winner_key` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [~U[2026-11-05 12:25:16Z], "798d23dd18daa02fc3897389b6e8ad97a109485d9c93d1fa1ae5aff338fcea09", "authorized", ~N[2026-11-05 12:25:16], "51e74d4a-eaa8-4ac6-ac92-8670ecee36fe", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 12:25:16.338000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=380.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["51e74d4a-eaa8-4ac6-ac92-8670ecee36fe"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:25:16.338000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2594513] [client -] [Tabby] verify: attempt=51e74d4a-eaa8-4ac6-ac92-8670ecee36fe payment=11b77e5d-5536-4be3-8c51-9b2a0806ee09 created -> authorized [Thu Nov 5 12:25:16.482000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=71.6ms queue=0.1ms idle=360.9ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 12:25:16Z], 54] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 12:25:16.482000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2594513] [client -] [Tabby] webhook job: event=54 payment=11b77e5d-5536-4be3-8c51-9b2a0806ee09 processed (recorded authorized) [Thu Nov 5 12:25:16.567000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=281.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["51e74d4a-eaa8-4ac6-ac92-8670ecee36fe"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:25:16.646000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=78.9ms queue=0.1ms idle=282.1ms UPDATE `tabby_payments` AS t0 SET t0.`capture_reference_id` = ?, t0.`claimed_at` = ?, t0.`claimed_by` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["capture-DEMO-05E57D77", ~U[2026-11-05 12:25:16Z], "nonode@nohost", "capturing", ~N[2026-11-05 12:25:16], "51e74d4a-eaa8-4ac6-ac92-8670ecee36fe", "authorized"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 12:25:16.647000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=309.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["51e74d4a-eaa8-4ac6-ac92-8670ecee36fe"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:25:16.648000 2026] [DaProductApp.Tabby.Capture:info] [pid 2594513] [client -] [Tabby] capture: attempt=51e74d4a-eaa8-4ac6-ac92-8670ecee36fe payment=11b77e5d-5536-4be3-8c51-9b2a0806ee09 claimed (authorized -> capturing) [Thu Nov 5 12:25:16.989000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:49956] POST /tabby-sim/api/v2/payments/11b77e5d-5536-4be3-8c51-9b2a0806ee09/captures [Thu Nov 5 12:25:16.989000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:49956] Processing with DaProductAppWeb.TabbySim.PaymentsController.capture/2 Parameters: %{"amount" => "850.00", "id" => "11b77e5d-5536-4be3-8c51-9b2a0806ee09", "reference_id" => "capture-DEMO-05E57D77"} Pipelines: [:tabby_sim_api] [Thu Nov 5 12:25:16.991000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:49956] QUERY OK source="tabby_sim_faults" db=1.1ms idle=580.2ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["capture", "11b77e5d-5536-4be3-8c51-9b2a0806ee09"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 12:25:16.992000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:49956] QUERY OK source="tabby_sim_faults" db=0.8ms idle=509.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["capture"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:25:16.994000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:49956] QUERY OK source="tabby_sim_payments" db=1.2ms idle=426.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["11b77e5d-5536-4be3-8c51-9b2a0806ee09"] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:227 [Thu Nov 5 12:25:16.994000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:49956] QUERY OK db=0.2ms idle=427.1ms begin [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Thu Nov 5 12:25:16.996000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:49956] QUERY OK source="tabby_sim_payments" db=1.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) FOR UPDATE ["11b77e5d-5536-4be3-8c51-9b2a0806ee09"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:231 [Thu Nov 5 12:25:16.998000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:49956] QUERY OK source="tabby_sim_payments" db=0.9ms UPDATE `tabby_sim_payments` SET `status` = ?, `closed_at` = ?, `captures` = ?, `updated_at` = ? WHERE `id` = ? ["CLOSED", ~U[2026-11-05 12:25:16Z], [%{"amount" => "850", "created_at" => "2026-11-05T12:25:16Z", "discount_amount" => "0", "id" => "aada9445-02b2-4d00-834c-750af228b69d", "items" => nil, "reference_id" => "capture-DEMO-05E57D77", "shipping_amount" => "0", "tax_amount" => "0"}], ~N[2026-11-05 12:25:16], "11b77e5d-5536-4be3-8c51-9b2a0806ee09"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:244 [Thu Nov 5 12:25:16.999000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client 127.0.0.1:49956] [TabbySim] capture payment=11b77e5d-5536-4be3-8c51-9b2a0806ee09 status=CLOSED [Thu Nov 5 12:25:17.112000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:49956] QUERY OK db=112.6ms commit [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Thu Nov 5 12:25:17.114000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:49956] QUERY OK source="tabby_sim_webhooks" db=0.9ms idle=536.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 12:25:17.191000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client 127.0.0.1:49956] [TabbySim] webhook queued job=403381 event=capture payment=11b77e5d-5536-4be3-8c51-9b2a0806ee09 webhook=53 [Thu Nov 5 12:25:17.193000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:49956] QUERY OK source="tabby_sim_webhooks" db=0.7ms idle=544.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 12:25:17.277000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client 127.0.0.1:49956] [TabbySim] webhook queued job=403382 event=close payment=11b77e5d-5536-4be3-8c51-9b2a0806ee09 webhook=53 [Thu Nov 5 12:25:17.277000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:49956] Sent 200 in 288ms [Thu Nov 5 12:25:17.278000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client -] [Tabby] capture post /api/v2/payments/11b77e5d-5536-4be3-8c51-9b2a0806ee09/captures -> 200 (630 ms, attempt 1) [Thu Nov 5 12:25:17.294000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_webhooks" db=0.6ms idle=301.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 12:25:17.321000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=42.7ms idle=287.6ms UPDATE `tabby_payments` AS t0 SET t0.`captured_amount` = ?, t0.`captured_at` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [Decimal.new("850"), ~U[2026-11-05 12:25:16Z], "captured", ~N[2026-11-05 12:25:17], "51e74d4a-eaa8-4ac6-ac92-8670ecee36fe", "capturing"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 12:25:17.324000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.8ms idle=328.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["51e74d4a-eaa8-4ac6-ac92-8670ecee36fe"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:25:17.324000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2594513] [client -] [Tabby] verify: attempt=51e74d4a-eaa8-4ac6-ac92-8670ecee36fe payment=11b77e5d-5536-4be3-8c51-9b2a0806ee09 capturing -> captured [Thu Nov 5 12:25:17.325000 2026] [DaProductApp.Tabby.Capture:info] [pid 2594513] [client -] [Tabby] capture: attempt=51e74d4a-eaa8-4ac6-ac92-8670ecee36fe payment=11b77e5d-5536-4be3-8c51-9b2a0806ee09 is captured [Thu Nov 5 12:25:17.568000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:47466] POST /tabby/webhooks [Thu Nov 5 12:25:17.570000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:47466] QUERY OK source="tabby_payments" db=0.4ms idle=376.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["11b77e5d-5536-4be3-8c51-9b2a0806ee09"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:25:17.589000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:47466] QUERY OK db=18.3ms idle=293.1ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["authorized", false, "11b77e5d-5536-4be3-8c51-9b2a0806ee09", "{\"amount\":\"850\",\"captures\":[{\"amount\":\"850\",\"created_at\":\"2026-11-05T12:25:16Z\",\"discount_amount\":\"0\",\"id\":\"aada9445-02b2-4d00-834c-750af228b69d\",\"items\":null,\"reference_id\":\"capture-DEMO-05E57D77\",\"shipping_amount\":\"0\",\"tax_amount\":\"0\"}],\"closed_at\":null,\"created_at\":\"2026-11-05T12:25:05Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T12:37:05Z\",\"id\":\"11b77e5d-5536-4be3-8c51-9b2a0806ee09\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-05E57D77\"},\"refunds\":[],\"status\":\"authorized\",\"token\":null}", ~U[2026-11-05 12:25:17Z], ~N[2026-11-05 12:25:17], ~N[2026-11-05 12:25:17]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 12:25:17.662000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2594513] [client 78.47.213.209:47466] [Tabby] webhook 200: event=55 payment=11b77e5d-5536-4be3-8c51-9b2a0806ee09 saved and queued [Thu Nov 5 12:25:17.662000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:47466] Sent 200 in 93ms [Thu Nov 5 12:25:17.757000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK db=93.9ms idle=342.0ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "capture", ~U[2026-11-05 12:25:17Z], "11b77e5d-5536-4be3-8c51-9b2a0806ee09", 53, 200, 368, %{"amount" => "850", "captures" => [%{"amount" => "850", "created_at" => "2026-11-05T12:25:16Z", "discount_amount" => "0", "id" => "aada9445-02b2-4d00-834c-750af228b69d", "items" => nil, "reference_id" => "capture-DEMO-05E57D77", "shipping_amount" => "0", "tax_amount" => "0"}], "closed_at" => nil, "created_at" => "2026-11-05T12:25:05Z", "currency" => "AED", "expires_at" => "2026-11-05T12:37:05Z", "id" => "11b77e5d-5536-4be3-8c51-9b2a0806ee09", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-05E57D77"}, "refunds" => [], "status" => "authorized", "token" => nil}, ~N[2026-11-05 12:25:17], ~N[2026-11-05 12:25:17]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 12:25:17.757000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook attempt=1 success event=capture payment=11b77e5d-5536-4be3-8c51-9b2a0806ee09 url=http://demo.ctrmv.com:4030/tabby/webhooks (368 ms) [Thu Nov 5 12:25:17.763000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.3ms idle=299.7ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [55] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 12:25:17.764000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.4ms queue=0.1ms idle=194.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["11b77e5d-5536-4be3-8c51-9b2a0806ee09"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:25:17.765000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=176.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["51e74d4a-eaa8-4ac6-ac92-8670ecee36fe"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:25:17.848000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=83.2ms idle=174.3ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 12:25:17Z], 55] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 12:25:17.849000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2594513] [client -] [Tabby] webhook job: event=55 payment=11b77e5d-5536-4be3-8c51-9b2a0806ee09 processed (already_final) [Thu Nov 5 12:25:18.002000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] GET /tabby/return/51e74d4a-eaa8-4ac6-ac92-8670ecee36fe/success [Thu Nov 5 12:25:18.003000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:64666] QUERY OK source="tabby_payments" db=0.9ms idle=239.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["51e74d4a-eaa8-4ac6-ac92-8670ecee36fe"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:25:18.041000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] Sent 302 in 39ms [Thu Nov 5 12:25:18.140000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=291.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["51e74d4a-eaa8-4ac6-ac92-8670ecee36fe"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:25:18.506000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] GET /tabby/demo/result/success [Thu Nov 5 12:25:18.506000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] Sent 200 in 564µs [Thu Nov 5 12:25:18.989000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] GET /tabby/demo/status/51e74d4a-eaa8-4ac6-ac92-8670ecee36fe [Thu Nov 5 12:25:18.991000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:64666] QUERY OK source="tabby_payments" db=0.7ms idle=857.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["51e74d4a-eaa8-4ac6-ac92-8670ecee36fe"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:25:18.991000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] Sent 200 in 1ms [Thu Nov 5 12:25:19.212000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_webhooks" db=0.9ms idle=1036.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 12:25:19.555000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:47466] POST /tabby/webhooks [Thu Nov 5 12:25:19.556000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:47466] QUERY OK source="tabby_payments" db=0.5ms idle=1158.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["11b77e5d-5536-4be3-8c51-9b2a0806ee09"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:25:19.608000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:47466] QUERY OK db=50.8ms queue=0.5ms idle=795.4ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["closed", false, "11b77e5d-5536-4be3-8c51-9b2a0806ee09", "{\"amount\":\"850\",\"captures\":[{\"amount\":\"850\",\"created_at\":\"2026-11-05T12:25:16Z\",\"discount_amount\":\"0\",\"id\":\"aada9445-02b2-4d00-834c-750af228b69d\",\"items\":null,\"reference_id\":\"capture-DEMO-05E57D77\",\"shipping_amount\":\"0\",\"tax_amount\":\"0\"}],\"closed_at\":\"2026-11-05T12:25:16Z\",\"created_at\":\"2026-11-05T12:25:05Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T12:37:05Z\",\"id\":\"11b77e5d-5536-4be3-8c51-9b2a0806ee09\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-05E57D77\"},\"refunds\":[],\"status\":\"closed\",\"token\":null}", ~U[2026-11-05 12:25:19Z], ~N[2026-11-05 12:25:19], ~N[2026-11-05 12:25:19]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 12:25:19.702000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2594513] [client 78.47.213.209:47466] [Tabby] webhook 200: event=56 payment=11b77e5d-5536-4be3-8c51-9b2a0806ee09 saved and queued [Thu Nov 5 12:25:19.702000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:47466] Sent 200 in 147ms [Thu Nov 5 12:25:19.804000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK db=100.4ms idle=564.5ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "close", ~U[2026-11-05 12:25:19Z], "11b77e5d-5536-4be3-8c51-9b2a0806ee09", 53, 200, 490, %{"amount" => "850", "captures" => [%{"amount" => "850", "created_at" => "2026-11-05T12:25:16Z", "discount_amount" => "0", "id" => "aada9445-02b2-4d00-834c-750af228b69d", "items" => nil, "reference_id" => "capture-DEMO-05E57D77", "shipping_amount" => "0", "tax_amount" => "0"}], "closed_at" => "2026-11-05T12:25:16Z", "created_at" => "2026-11-05T12:25:05Z", "currency" => "AED", "expires_at" => "2026-11-05T12:37:05Z", "id" => "11b77e5d-5536-4be3-8c51-9b2a0806ee09", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-05E57D77"}, "refunds" => [], "status" => "closed", "token" => nil}, ~N[2026-11-05 12:25:19], ~N[2026-11-05 12:25:19]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 12:25:19.804000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook attempt=1 success event=close payment=11b77e5d-5536-4be3-8c51-9b2a0806ee09 url=http://demo.ctrmv.com:4030/tabby/webhooks (490 ms) [Thu Nov 5 12:25:19.826000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=1.0ms idle=537.5ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [56] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 12:25:19.827000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=454.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["11b77e5d-5536-4be3-8c51-9b2a0806ee09"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:25:19.828000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=410.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["51e74d4a-eaa8-4ac6-ac92-8670ecee36fe"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:25:19.893000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=64.9ms idle=271.9ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 12:25:19Z], 56] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 12:25:19.893000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2594513] [client -] [Tabby] webhook job: event=56 payment=11b77e5d-5536-4be3-8c51-9b2a0806ee09 processed (already_final) [Thu Nov 5 12:25:26.647000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] GET /tabby-sim/hpp/fbd2b259-4444-4a3d-b950-c9d72e3df8f2 [Thu Nov 5 12:25:26.647000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:64666] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "fbd2b259-4444-4a3d-b950-c9d72e3df8f2"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:25:26.649000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:64666] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1.7e3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["fbd2b259-4444-4a3d-b950-c9d72e3df8f2"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:25:26.650000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] Sent 200 in 2ms [Thu Nov 5 12:25:28.601000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] GET /tabby/demo [Thu Nov 5 12:25:28.602000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] Sent 200 in 1ms [Thu Nov 5 12:25:29.246000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] POST /tabby/demo/summary [Thu Nov 5 12:25:29.246000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] Sent 200 in 646µs [Thu Nov 5 12:25:30.501000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] POST /tabby/demo/eligibility [Thu Nov 5 12:25:30.772000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:59538] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:25:30.772000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:59538] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:25:30.773000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59538] QUERY OK source="tabby_sim_faults" db=0.5ms idle=976.2ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:25:30.802000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59538] QUERY OK db=28.6ms idle=825.7ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`is_test`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["1879e4d8-24bd-4525-ae49-8933e394179d", "CREATED", "AED", "f50b67e3-f0fd-4577-ab4d-a1db4dbcf37c", "demostore", ~U[2026-11-05 12:37:30Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "created", %{"cancel" => nil, "failure" => nil, "success" => nil}, ~U[2026-11-05 12:35:30Z], false, Decimal.new("850.00"), [], [], true, ~N[2026-11-05 12:25:30], ~N[2026-11-05 12:25:30]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:25:30.803000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:59538] [TabbySim] checkout payment=1879e4d8-24bd-4525-ae49-8933e394179d session=f50b67e3-f0fd-4577-ab4d-a1db4dbcf37c decision=created reason=nil amount=850.00 AED [Thu Nov 5 12:25:30.804000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59538] QUERY OK source="tabby_sim_payments" db=0.6ms idle=855.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:25:30.806000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:59538] Sent 200 in 34ms [Thu Nov 5 12:25:30.806000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:64666] [Tabby] checkout post /api/v2/checkout -> 200 (305 ms, attempt 1) [Thu Nov 5 12:25:30.806000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:64666] [Tabby] session created payment=1879e4d8-24bd-4525-ae49-8933e394179d [Thu Nov 5 12:25:30.807000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2594513] [client 115.99.167.137:64666] [Tabby] eligibility: show (amount=850.00 AED) [Thu Nov 5 12:25:30.807000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] Sent 200 in 306ms [Thu Nov 5 12:25:33.225000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] POST /tabby/demo/place [Thu Nov 5 12:25:33.280000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:64666] QUERY OK db=53.8ms queue=0.4ms idle=1277.5ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`amount`,`order_reference`,`needs_attention`,`success_url`,`cancel_url`,`failure_url`,`captured_amount`,`refunded_amount`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["b33baf0b-5d4e-4f98-bbb4-ca55cebf7b2b", "new", "AED", "demostore", Decimal.new("850.00"), "DEMO-2F8D4D52", false, "http://demo.ctrmv.com:4030/tabby/demo/result/success?lang=en&order=DEMO-2F8D4D52", "http://demo.ctrmv.com:4030/tabby/demo/result/cancel?lang=en&order=DEMO-2F8D4D52", "http://demo.ctrmv.com:4030/tabby/demo/result/failure?lang=en&order=DEMO-2F8D4D52", Decimal.new("0"), Decimal.new("0"), ~N[2026-11-05 12:25:33], ~N[2026-11-05 12:25:33]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Thu Nov 5 12:25:33.550000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:49956] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:25:33.550000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:49956] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/b33baf0b-5d4e-4f98-bbb4-ca55cebf7b2b/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/b33baf0b-5d4e-4f98-bbb4-ca55cebf7b2b/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/b33baf0b-5d4e-4f98-bbb4-ca55cebf7b2b/success"}, "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Anya Forger", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-2F8D4D52"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:25:33.552000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:49956] QUERY OK source="tabby_sim_faults" db=0.6ms queue=0.1ms idle=1602.6ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:25:33.597000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:49956] QUERY OK db=43.4ms queue=0.4ms idle=1604.1ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`buyer_history`,`is_test`,`lang`,`shipping_address`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["f3098b95-0b2f-4178-9811-538a317fd83a", "CREATED", "AED", "f190b454-1ffc-402c-aeb0-7a1b99bdf41c", "demostore", ~U[2026-11-05 12:37:33Z], %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/b33baf0b-5d4e-4f98-bbb4-ca55cebf7b2b/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/b33baf0b-5d4e-4f98-bbb4-ca55cebf7b2b/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/b33baf0b-5d4e-4f98-bbb4-ca55cebf7b2b/success"}, "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Anya Forger", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-2F8D4D52"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "0", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo headphones", "unit_price" => "650"}, %{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo smartwatch", "unit_price" => "200"}], "reference_id" => "DEMO-2F8D4D52", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "name" => "Anya Forger", "phone" => "+971500000001"}, "created", %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/b33baf0b-5d4e-4f98-bbb4-ca55cebf7b2b/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/b33baf0b-5d4e-4f98-bbb4-ca55cebf7b2b/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/b33baf0b-5d4e-4f98-bbb4-ca55cebf7b2b/success"}, ~U[2026-11-05 12:35:33Z], false, Decimal.new("850.00"), [], [], %{"registered_since" => "2023-02-01T10:00:00Z"}, true, "en", %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}, ~N[2026-11-05 12:25:33], ~N[2026-11-05 12:25:33]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:25:33.597000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:49956] [TabbySim] checkout payment=f3098b95-0b2f-4178-9811-538a317fd83a session=f190b454-1ffc-402c-aeb0-7a1b99bdf41c decision=created reason=nil amount=850.00 AED [Thu Nov 5 12:25:33.598000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:49956] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1648.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:25:33.601000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:49956] Sent 200 in 51ms [Thu Nov 5 12:25:33.602000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:64666] [Tabby] checkout post /api/v2/checkout -> 200 (322 ms, attempt 1) [Thu Nov 5 12:25:33.602000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:64666] [Tabby] session created payment=f3098b95-0b2f-4178-9811-538a317fd83a [Thu Nov 5 12:25:33.603000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:64666] QUERY OK source="tabby_payments" db=0.5ms idle=592.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["b33baf0b-5d4e-4f98-bbb4-ca55cebf7b2b"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Thu Nov 5 12:25:33.675000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:64666] QUERY OK source="tabby_payments" db=71.3ms idle=509.8ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-05 12:45:33Z], "f3098b95-0b2f-4178-9811-538a317fd83a", "f190b454-1ffc-402c-aeb0-7a1b99bdf41c", ~N[2026-11-05 12:25:33], "b33baf0b-5d4e-4f98-bbb4-ca55cebf7b2b"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Thu Nov 5 12:25:33.675000 2026] [DaProductApp.Tabby.Sessions:info] [pid 2594513] [client 115.99.167.137:64666] [Tabby] session created attempt=b33baf0b-5d4e-4f98-bbb4-ca55cebf7b2b payment=f3098b95-0b2f-4178-9811-538a317fd83a [Thu Nov 5 12:25:33.677000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] Sent 200 in 452ms [Thu Nov 5 12:25:34.150000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] GET /tabby-sim/hpp/f190b454-1ffc-402c-aeb0-7a1b99bdf41c [Thu Nov 5 12:25:34.150000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:64666] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "f190b454-1ffc-402c-aeb0-7a1b99bdf41c"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:25:34.152000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:64666] QUERY OK source="tabby_sim_payments" db=0.7ms idle=726.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["f190b454-1ffc-402c-aeb0-7a1b99bdf41c"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:25:34.153000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] Sent 200 in 3ms [Thu Nov 5 12:25:36.472000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1523.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:25:36Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:25:36.472000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:25:36.473000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1524.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:25:36Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:25:36.474000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1525.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:25:36.566000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403386 scheduled in 29s (14 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:25:41.445000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] POST /tabby-sim/hpp/f190b454-1ffc-402c-aeb0-7a1b99bdf41c [Thu Nov 5 12:25:41.445000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:64666] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "approve", "otp" => "8888", "plan" => "6", "session_id" => "f190b454-1ffc-402c-aeb0-7a1b99bdf41c", "ui" => "1"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:25:41.446000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:64666] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1497.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["f190b454-1ffc-402c-aeb0-7a1b99bdf41c"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:25:41.471000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:64666] QUERY OK source="tabby_sim_payments" db=23.6ms idle=1498.6ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["AUTHORIZED", ~N[2026-11-05 12:25:41], "f3098b95-0b2f-4178-9811-538a317fd83a", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:25:41.471000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client 115.99.167.137:64666] [TabbySim] payment=f3098b95-0b2f-4178-9811-538a317fd83a CREATED -> AUTHORIZED [Thu Nov 5 12:25:41.472000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:64666] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1522.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["f3098b95-0b2f-4178-9811-538a317fd83a"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:25:41.473000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:64666] QUERY OK source="tabby_sim_webhooks" db=0.4ms idle=1523.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 12:25:41.534000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client 115.99.167.137:64666] [TabbySim] webhook queued job=403387 event=authorize payment=f3098b95-0b2f-4178-9811-538a317fd83a webhook=53 [Thu Nov 5 12:25:41.534000 2026] [DaProductApp.TabbySim.Hpp:info] [pid 2594513] [client 115.99.167.137:64666] [TabbySim] hpp payment=f3098b95-0b2f-4178-9811-538a317fd83a action=approve status=AUTHORIZED [Thu Nov 5 12:25:41.535000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:64666] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1585.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["f190b454-1ffc-402c-aeb0-7a1b99bdf41c"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:25:41.536000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] Sent 200 in 90ms [Thu Nov 5 12:25:41.617000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_webhooks" db=0.4ms idle=375.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 12:25:41.883000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:47466] POST /tabby/webhooks [Thu Nov 5 12:25:41.884000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:47466] QUERY OK source="tabby_payments" db=0.6ms idle=436.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["f3098b95-0b2f-4178-9811-538a317fd83a"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:25:41.926000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:47466] QUERY OK db=41.7ms idle=413.3ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["authorized", false, "f3098b95-0b2f-4178-9811-538a317fd83a", "{\"amount\":\"850\",\"captures\":[],\"closed_at\":null,\"created_at\":\"2026-11-05T12:25:33Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T12:37:33Z\",\"id\":\"f3098b95-0b2f-4178-9811-538a317fd83a\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-2F8D4D52\"},\"refunds\":[],\"status\":\"authorized\",\"token\":null}", ~U[2026-11-05 12:25:41Z], ~N[2026-11-05 12:25:41], ~N[2026-11-05 12:25:41]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 12:25:41.985000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2594513] [client 78.47.213.209:47466] [Tabby] webhook 200: event=57 payment=f3098b95-0b2f-4178-9811-538a317fd83a saved and queued [Thu Nov 5 12:25:41.985000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:47466] Sent 200 in 102ms [Thu Nov 5 12:25:42.007000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK db=20.8ms idle=452.0ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "authorize", ~U[2026-11-05 12:25:41Z], "f3098b95-0b2f-4178-9811-538a317fd83a", 53, 200, 368, %{"amount" => "850", "captures" => [], "closed_at" => nil, "created_at" => "2026-11-05T12:25:33Z", "currency" => "AED", "expires_at" => "2026-11-05T12:37:33Z", "id" => "f3098b95-0b2f-4178-9811-538a317fd83a", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-2F8D4D52"}, "refunds" => [], "status" => "authorized", "token" => nil}, ~N[2026-11-05 12:25:41], ~N[2026-11-05 12:25:41]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 12:25:42.007000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook attempt=1 success event=authorize payment=f3098b95-0b2f-4178-9811-538a317fd83a url=http://demo.ctrmv.com:4030/tabby/webhooks (368 ms) [Thu Nov 5 12:25:42.086000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.4ms idle=414.7ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [57] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 12:25:42.087000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=332.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["f3098b95-0b2f-4178-9811-538a317fd83a"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:25:42.088000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=203.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["b33baf0b-5d4e-4f98-bbb4-ca55cebf7b2b"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:25:42.486000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:49956] GET /tabby-sim/api/v2/payments/f3098b95-0b2f-4178-9811-538a317fd83a [Thu Nov 5 12:25:42.486000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:49956] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "f3098b95-0b2f-4178-9811-538a317fd83a"} Pipelines: [:tabby_sim_api] [Thu Nov 5 12:25:42.487000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:49956] QUERY OK source="tabby_sim_faults" db=0.4ms idle=480.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "f3098b95-0b2f-4178-9811-538a317fd83a"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 12:25:42.489000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:49956] QUERY OK source="tabby_sim_faults" db=1.0ms queue=0.1ms idle=444.2ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:25:42.490000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:49956] QUERY OK source="tabby_sim_payments" db=0.7ms idle=403.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["f3098b95-0b2f-4178-9811-538a317fd83a"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Thu Nov 5 12:25:42.490000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:49956] Sent 200 in 4ms [Thu Nov 5 12:25:42.491000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client -] [Tabby] retrieve get /api/v2/payments/f3098b95-0b2f-4178-9811-538a317fd83a -> 200 (402 ms, attempt 1) [Thu Nov 5 12:25:42.575000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=83.6ms idle=405.1ms UPDATE `tabby_payments` AS t0 SET t0.`authorized_at` = ?, t0.`winner_key` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [~U[2026-11-05 12:25:42Z], "4f8804aa06249588fb9c6837b885d82b358d1c57928b0e6b4a6552e882443dba", "authorized", ~N[2026-11-05 12:25:42], "b33baf0b-5d4e-4f98-bbb4-ca55cebf7b2b", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 12:25:42.576000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=487.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["b33baf0b-5d4e-4f98-bbb4-ca55cebf7b2b"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:25:42.576000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2594513] [client -] [Tabby] verify: attempt=b33baf0b-5d4e-4f98-bbb4-ca55cebf7b2b payment=f3098b95-0b2f-4178-9811-538a317fd83a created -> authorized [Thu Nov 5 12:25:42.709000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=82.7ms idle=423.4ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 12:25:42Z], 57] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 12:25:42.710000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2594513] [client -] [Tabby] webhook job: event=57 payment=f3098b95-0b2f-4178-9811-538a317fd83a processed (recorded authorized) [Thu Nov 5 12:25:42.722000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=234.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["b33baf0b-5d4e-4f98-bbb4-ca55cebf7b2b"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:25:42.815000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=92.6ms idle=233.7ms UPDATE `tabby_payments` AS t0 SET t0.`capture_reference_id` = ?, t0.`claimed_at` = ?, t0.`claimed_by` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["capture-DEMO-2F8D4D52", ~U[2026-11-05 12:25:42Z], "nonode@nohost", "capturing", ~N[2026-11-05 12:25:42], "b33baf0b-5d4e-4f98-bbb4-ca55cebf7b2b", "authorized"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 12:25:42.816000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=240.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["b33baf0b-5d4e-4f98-bbb4-ca55cebf7b2b"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:25:42.817000 2026] [DaProductApp.Tabby.Capture:info] [pid 2594513] [client -] [Tabby] capture: attempt=b33baf0b-5d4e-4f98-bbb4-ca55cebf7b2b payment=f3098b95-0b2f-4178-9811-538a317fd83a claimed (authorized -> capturing) [Thu Nov 5 12:25:43.161000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:49956] POST /tabby-sim/api/v2/payments/f3098b95-0b2f-4178-9811-538a317fd83a/captures [Thu Nov 5 12:25:43.162000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:49956] Processing with DaProductAppWeb.TabbySim.PaymentsController.capture/2 Parameters: %{"amount" => "850.00", "id" => "f3098b95-0b2f-4178-9811-538a317fd83a", "reference_id" => "capture-DEMO-2F8D4D52"} Pipelines: [:tabby_sim_api] [Thu Nov 5 12:25:43.163000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:49956] QUERY OK source="tabby_sim_faults" db=0.5ms idle=535.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["capture", "f3098b95-0b2f-4178-9811-538a317fd83a"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 12:25:43.163000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:49956] QUERY OK source="tabby_sim_faults" db=0.3ms idle=453.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["capture"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:25:43.164000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:49956] QUERY OK source="tabby_sim_payments" db=0.5ms idle=442.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["f3098b95-0b2f-4178-9811-538a317fd83a"] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:227 [Thu Nov 5 12:25:43.165000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:49956] QUERY OK db=0.1ms idle=442.4ms begin [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Thu Nov 5 12:25:43.166000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:49956] QUERY OK source="tabby_sim_payments" db=0.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) FOR UPDATE ["f3098b95-0b2f-4178-9811-538a317fd83a"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:231 [Thu Nov 5 12:25:43.167000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:49956] QUERY OK source="tabby_sim_payments" db=0.6ms UPDATE `tabby_sim_payments` SET `status` = ?, `closed_at` = ?, `captures` = ?, `updated_at` = ? WHERE `id` = ? ["CLOSED", ~U[2026-11-05 12:25:43Z], [%{"amount" => "850", "created_at" => "2026-11-05T12:25:43Z", "discount_amount" => "0", "id" => "1731f376-dddf-4faf-b036-aa28f8d959c2", "items" => nil, "reference_id" => "capture-DEMO-2F8D4D52", "shipping_amount" => "0", "tax_amount" => "0"}], ~N[2026-11-05 12:25:43], "f3098b95-0b2f-4178-9811-538a317fd83a"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:244 [Thu Nov 5 12:25:43.167000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client 127.0.0.1:49956] [TabbySim] capture payment=f3098b95-0b2f-4178-9811-538a317fd83a status=CLOSED [Thu Nov 5 12:25:43.241000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:49956] QUERY OK db=73.4ms commit [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Thu Nov 5 12:25:43.242000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:49956] QUERY OK source="tabby_sim_webhooks" db=0.6ms queue=0.1ms idle=473.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 12:25:43.313000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client 127.0.0.1:49956] [TabbySim] webhook queued job=403390 event=capture payment=f3098b95-0b2f-4178-9811-538a317fd83a webhook=53 [Thu Nov 5 12:25:43.314000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:49956] QUERY OK source="tabby_sim_webhooks" db=0.4ms idle=496.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 12:25:43.360000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client 127.0.0.1:49956] [TabbySim] webhook queued job=403391 event=close payment=f3098b95-0b2f-4178-9811-538a317fd83a webhook=53 [Thu Nov 5 12:25:43.360000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:49956] Sent 200 in 199ms [Thu Nov 5 12:25:43.361000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client -] [Tabby] capture post /api/v2/payments/f3098b95-0b2f-4178-9811-538a317fd83a/captures -> 200 (544 ms, attempt 1) [Thu Nov 5 12:25:43.401000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_webhooks" db=0.5ms idle=237.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 12:25:43.421000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=59.1ms idle=336.4ms UPDATE `tabby_payments` AS t0 SET t0.`captured_amount` = ?, t0.`captured_at` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [Decimal.new("850"), ~U[2026-11-05 12:25:43Z], "captured", ~N[2026-11-05 12:25:43], "b33baf0b-5d4e-4f98-bbb4-ca55cebf7b2b", "capturing"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 12:25:43.425000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=2.5ms idle=259.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["b33baf0b-5d4e-4f98-bbb4-ca55cebf7b2b"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:25:43.426000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2594513] [client -] [Tabby] verify: attempt=b33baf0b-5d4e-4f98-bbb4-ca55cebf7b2b payment=f3098b95-0b2f-4178-9811-538a317fd83a capturing -> captured [Thu Nov 5 12:25:43.426000 2026] [DaProductApp.Tabby.Capture:info] [pid 2594513] [client -] [Tabby] capture: attempt=b33baf0b-5d4e-4f98-bbb4-ca55cebf7b2b payment=f3098b95-0b2f-4178-9811-538a317fd83a is captured [Thu Nov 5 12:25:43.745000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:47466] POST /tabby/webhooks [Thu Nov 5 12:25:43.746000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:47466] QUERY OK source="tabby_payments" db=0.9ms idle=384.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["f3098b95-0b2f-4178-9811-538a317fd83a"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:25:43.827000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:47466] QUERY OK db=80.5ms idle=346.3ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["authorized", false, "f3098b95-0b2f-4178-9811-538a317fd83a", "{\"amount\":\"850\",\"captures\":[{\"amount\":\"850\",\"created_at\":\"2026-11-05T12:25:43Z\",\"discount_amount\":\"0\",\"id\":\"1731f376-dddf-4faf-b036-aa28f8d959c2\",\"items\":null,\"reference_id\":\"capture-DEMO-2F8D4D52\",\"shipping_amount\":\"0\",\"tax_amount\":\"0\"}],\"closed_at\":null,\"created_at\":\"2026-11-05T12:25:33Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T12:37:33Z\",\"id\":\"f3098b95-0b2f-4178-9811-538a317fd83a\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-2F8D4D52\"},\"refunds\":[],\"status\":\"authorized\",\"token\":null}", ~U[2026-11-05 12:25:43Z], ~N[2026-11-05 12:25:43], ~N[2026-11-05 12:25:43]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 12:25:43.870000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2594513] [client 78.47.213.209:47466] [Tabby] webhook 200: event=58 payment=f3098b95-0b2f-4178-9811-538a317fd83a saved and queued [Thu Nov 5 12:25:43.870000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:47466] Sent 200 in 125ms [Thu Nov 5 12:25:43.895000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK db=24.2ms idle=396.1ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "capture", ~U[2026-11-05 12:25:43Z], "f3098b95-0b2f-4178-9811-538a317fd83a", 53, 200, 469, %{"amount" => "850", "captures" => [%{"amount" => "850", "created_at" => "2026-11-05T12:25:43Z", "discount_amount" => "0", "id" => "1731f376-dddf-4faf-b036-aa28f8d959c2", "items" => nil, "reference_id" => "capture-DEMO-2F8D4D52", "shipping_amount" => "0", "tax_amount" => "0"}], "closed_at" => nil, "created_at" => "2026-11-05T12:25:33Z", "currency" => "AED", "expires_at" => "2026-11-05T12:37:33Z", "id" => "f3098b95-0b2f-4178-9811-538a317fd83a", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-2F8D4D52"}, "refunds" => [], "status" => "authorized", "token" => nil}, ~N[2026-11-05 12:25:43], ~N[2026-11-05 12:25:43]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 12:25:43.896000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook attempt=1 success event=capture payment=f3098b95-0b2f-4178-9811-538a317fd83a url=http://demo.ctrmv.com:4030/tabby/webhooks (469 ms) [Thu Nov 5 12:25:43.977000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.4ms idle=230.3ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [58] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 12:25:43.978000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=150.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["f3098b95-0b2f-4178-9811-538a317fd83a"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:25:43.978000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.3ms idle=148.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["b33baf0b-5d4e-4f98-bbb4-ca55cebf7b2b"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:25:44.037000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=58.2ms queue=0.1ms idle=120.2ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 12:25:43Z], 58] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 12:25:44.037000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2594513] [client -] [Tabby] webhook job: event=58 payment=f3098b95-0b2f-4178-9811-538a317fd83a processed (already_final) [Thu Nov 5 12:25:44.060000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] GET /tabby/return/b33baf0b-5d4e-4f98-bbb4-ca55cebf7b2b/success [Thu Nov 5 12:25:44.061000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:64666] QUERY OK source="tabby_payments" db=0.6ms idle=165.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["b33baf0b-5d4e-4f98-bbb4-ca55cebf7b2b"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:25:44.135000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] Sent 302 in 74ms [Thu Nov 5 12:25:44.264000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=285.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["b33baf0b-5d4e-4f98-bbb4-ca55cebf7b2b"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:25:44.559000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] GET /tabby/demo/result/success [Thu Nov 5 12:25:44.560000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] Sent 200 in 791µs [Thu Nov 5 12:25:45.015000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] GET /tabby/demo/status/b33baf0b-5d4e-4f98-bbb4-ca55cebf7b2b [Thu Nov 5 12:25:45.016000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:64666] QUERY OK source="tabby_payments" db=0.4ms idle=855.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["b33baf0b-5d4e-4f98-bbb4-ca55cebf7b2b"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:25:45.016000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] Sent 200 in 1ms [Thu Nov 5 12:25:45.668000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_webhooks" db=0.6ms idle=1368.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 12:25:45.955000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:47466] POST /tabby/webhooks [Thu Nov 5 12:25:45.956000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:47466] QUERY OK source="tabby_payments" db=0.5ms idle=939.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["f3098b95-0b2f-4178-9811-538a317fd83a"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:25:46.007000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:47466] QUERY OK db=50.8ms idle=428.4ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["closed", false, "f3098b95-0b2f-4178-9811-538a317fd83a", "{\"amount\":\"850\",\"captures\":[{\"amount\":\"850\",\"created_at\":\"2026-11-05T12:25:43Z\",\"discount_amount\":\"0\",\"id\":\"1731f376-dddf-4faf-b036-aa28f8d959c2\",\"items\":null,\"reference_id\":\"capture-DEMO-2F8D4D52\",\"shipping_amount\":\"0\",\"tax_amount\":\"0\"}],\"closed_at\":\"2026-11-05T12:25:43Z\",\"created_at\":\"2026-11-05T12:25:33Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T12:37:33Z\",\"id\":\"f3098b95-0b2f-4178-9811-538a317fd83a\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-2F8D4D52\"},\"refunds\":[],\"status\":\"closed\",\"token\":null}", ~U[2026-11-05 12:25:45Z], ~N[2026-11-05 12:25:45], ~N[2026-11-05 12:25:45]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 12:25:46.048000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2594513] [client 78.47.213.209:47466] [Tabby] webhook 200: event=59 payment=f3098b95-0b2f-4178-9811-538a317fd83a saved and queued [Thu Nov 5 12:25:46.048000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:47466] Sent 200 in 93ms [Thu Nov 5 12:25:46.126000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK db=76.6ms idle=302.7ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "close", ~U[2026-11-05 12:25:46Z], "f3098b95-0b2f-4178-9811-538a317fd83a", 53, 200, 381, %{"amount" => "850", "captures" => [%{"amount" => "850", "created_at" => "2026-11-05T12:25:43Z", "discount_amount" => "0", "id" => "1731f376-dddf-4faf-b036-aa28f8d959c2", "items" => nil, "reference_id" => "capture-DEMO-2F8D4D52", "shipping_amount" => "0", "tax_amount" => "0"}], "closed_at" => "2026-11-05T12:25:43Z", "created_at" => "2026-11-05T12:25:33Z", "currency" => "AED", "expires_at" => "2026-11-05T12:37:33Z", "id" => "f3098b95-0b2f-4178-9811-538a317fd83a", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-2F8D4D52"}, "refunds" => [], "status" => "closed", "token" => nil}, ~N[2026-11-05 12:25:46], ~N[2026-11-05 12:25:46]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 12:25:46.126000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook attempt=1 success event=close payment=f3098b95-0b2f-4178-9811-538a317fd83a url=http://demo.ctrmv.com:4030/tabby/webhooks (381 ms) [Thu Nov 5 12:25:46.192000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.5ms idle=243.7ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [59] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 12:25:46.193000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=244.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["f3098b95-0b2f-4178-9811-538a317fd83a"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:25:46.195000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.4ms idle=245.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["b33baf0b-5d4e-4f98-bbb4-ca55cebf7b2b"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:25:46.292000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=96.2ms idle=240.0ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 12:25:46Z], 59] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 12:25:46.292000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2594513] [client -] [Tabby] webhook job: event=59 payment=f3098b95-0b2f-4178-9811-538a317fd83a processed (already_final) [Thu Nov 5 12:26:06.879000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1929.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:26:06Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:26:06.932000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=52.1ms idle=1177.8ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 12:26:06], true, "e9151e8f-c383-4cb4-bcda-ceabc6dbe05d", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:26:06.932000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=e9151e8f-c383-4cb4-bcda-ceabc6dbe05d CREATED -> EXPIRED [Thu Nov 5 12:26:06.933000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=984.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["e9151e8f-c383-4cb4-bcda-ceabc6dbe05d"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:26:06.934000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook not sent: event=expire payment=e9151e8f-c383-4cb4-bcda-ceabc6dbe05d [Thu Nov 5 12:26:06.934000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=e9151e8f-c383-4cb4-bcda-ceabc6dbe05d expired (expires_at 2026-11-05 12:26:05Z, session_status=created) [Thu Nov 5 12:26:06.935000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=985.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:26:06Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:26:06.935000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 1 payment(s) were due [Thu Nov 5 12:26:06.936000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.1ms idle=986.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:26:06Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:26:06.937000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=987.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:26:06.982000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403397 scheduled in 18s (12 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:26:25.973000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1023.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:26:25Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:26:26.003000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=29.2ms idle=1025.0ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 12:26:25], true, "c4e226ae-eaa2-47a6-a774-f4f5381fe99f", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:26:26.003000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=c4e226ae-eaa2-47a6-a774-f4f5381fe99f CREATED -> EXPIRED [Thu Nov 5 12:26:26.005000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=2.0ms idle=1054.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["c4e226ae-eaa2-47a6-a774-f4f5381fe99f"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:26:26.005000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook not sent: event=expire payment=c4e226ae-eaa2-47a6-a774-f4f5381fe99f [Thu Nov 5 12:26:26.006000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=c4e226ae-eaa2-47a6-a774-f4f5381fe99f expired (expires_at 2026-11-05 12:26:24Z, session_status=created) [Thu Nov 5 12:26:26.006000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1057.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:26:26Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:26:26.007000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 1 payment(s) were due [Thu Nov 5 12:26:26.007000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=114.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:26:26Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:26:26.008000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=59.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:26:26.054000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403398 scheduled in 60s (11 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:26:36.115000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] GET /tabby-sim/admin [Thu Nov 5 12:26:36.115000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:64666] Processing with DaProductAppWeb.TabbySim.AdminController.index/2 Parameters: %{} Pipelines: [:tabby_sim_admin] [Thu Nov 5 12:26:36.117000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:64666] QUERY OK source="tabby_sim_faults" db=0.5ms idle=1166.8ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (t0.`remaining` > 0) ORDER BY t0.`id` [] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:18 [Thu Nov 5 12:26:36.121000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:64666] QUERY OK source="tabby_sim_payments" db=3.8ms idle=1167.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 ORDER BY t0.`inserted_at` DESC, t0.`id` DESC LIMIT ? [30] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:19 [Thu Nov 5 12:26:36.124000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:64666] QUERY OK source="tabby_sim_webhook_deliveries" db=2.3ms idle=234.1ms SELECT t0.`id`, t0.`payment_id`, t0.`webhook_id`, t0.`event`, t0.`attempt`, t0.`state`, t0.`url`, t0.`http_status`, t0.`request_body`, t0.`response_body`, t0.`error`, t0.`duration_ms`, t0.`attempted_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhook_deliveries` AS t0 ORDER BY t0.`id` DESC LIMIT ? [40] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:20 [Thu Nov 5 12:26:36.126000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:64666] QUERY OK source="tabby_sim_webhooks" db=0.5ms idle=202.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 ORDER BY t0.`id` LIMIT 100 [] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:21 [Thu Nov 5 12:26:36.127000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] Sent 200 in 11ms [Thu Nov 5 12:26:54.330000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] GET /tabby/demo [Thu Nov 5 12:26:54.332000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] Sent 200 in 2ms [Thu Nov 5 12:26:54.920000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] POST /tabby/demo/summary [Thu Nov 5 12:26:54.921000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] Sent 200 in 612µs [Thu Nov 5 12:26:55.852000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] POST /tabby/demo/eligibility [Thu Nov 5 12:26:56.092000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:59094] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:26:56.092000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:59094] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:26:56.093000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59094] QUERY OK source="tabby_sim_faults" db=0.6ms idle=439.6ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:26:56.114000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59094] QUERY OK db=20.0ms idle=357.8ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`is_test`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["f477da17-91ce-4c99-a412-138dcee6d577", "CREATED", "AED", "5872bfde-8229-4ee4-93b5-8e5562d9c21e", "demostore", ~U[2026-11-05 12:38:56Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "created", %{"cancel" => nil, "failure" => nil, "success" => nil}, ~U[2026-11-05 12:36:56Z], false, Decimal.new("850.00"), [], [], true, ~N[2026-11-05 12:26:56], ~N[2026-11-05 12:26:56]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:26:56.115000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:59094] [TabbySim] checkout payment=f477da17-91ce-4c99-a412-138dcee6d577 session=5872bfde-8229-4ee4-93b5-8e5562d9c21e decision=created reason=nil amount=850.00 AED [Thu Nov 5 12:26:56.115000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:59094] QUERY OK source="tabby_sim_payments" db=0.5ms idle=221.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:26:56.117000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:59094] Sent 200 in 25ms [Thu Nov 5 12:26:56.118000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:64666] [Tabby] checkout post /api/v2/checkout -> 200 (265 ms, attempt 1) [Thu Nov 5 12:26:56.118000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:64666] [Tabby] session created payment=f477da17-91ce-4c99-a412-138dcee6d577 [Thu Nov 5 12:26:56.118000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2594513] [client 115.99.167.137:64666] [Tabby] eligibility: show (amount=850.00 AED) [Thu Nov 5 12:26:56.118000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:64666] Sent 200 in 266ms [Thu Nov 5 12:27:07.184000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=1233.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["demostore", ~U[2026-10-18 12:27:07Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:27:07.186000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=1235.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["demostore", ~N[2026-11-05 12:25:07], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:27:07.187000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=1236.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:27:07.189000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.0ms queue=0.1ms idle=1237.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", ~N[2026-11-05 12:25:07], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:27:07.191000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.3ms queue=0.5ms idle=1239.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["demostore", ~U[2026-11-05 12:22:07Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:27:07.192000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=1.1ms idle=1240.5ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-05 12:25:07Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Thu Nov 5 12:27:07.194000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_refunds" db=0.8ms idle=1107.1ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["demostore", ~N[2026-11-05 12:25:07], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Thu Nov 5 12:27:07.196000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.2ms idle=245.1ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 12:27:07.197000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.7ms queue=0.1ms idle=106.3ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["demostore", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 12:27:07.199000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=1.5ms idle=14.6ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Thu Nov 5 12:27:07.200000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_refunds" db=0.5ms queue=0.2ms idle=15.3ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Thu Nov 5 12:27:07.200000 2026] [DaProductApp.Tabby.Poller:debug] [pid 2594513] [client -] [Tabby] poll: nothing to do; 0 attempt(s) still watched [Thu Nov 5 12:27:27.319000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=365.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:27:27Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:27:27.319000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:27:27.320000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=366.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:27:27Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:27:27.321000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=367.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:27:27.342000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403401 scheduled in 60s (12 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:28:26.337000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Thu Nov 5 12:28:26.338000 2026] [Phoenix.LiveReloader.Channel:debug] [pid 2594513] [client -] Live reload: lib/da_product_app_web/controllers/tabby/demo_page.ex [Thu Nov 5 12:28:28.700000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.5ms queue=0.1ms idle=1743.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:28:28Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:28:28.700000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:28:28.702000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.4ms queue=0.2ms idle=1746.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:28:28Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:28:28.703000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms queue=0.1ms idle=1747.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:28:28.790000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403404 scheduled in 60s (12 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:28:28.961000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:56791] GET /tabby-sim/admin [Thu Nov 5 12:28:28.961000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:56791] Processing with DaProductAppWeb.TabbySim.AdminController.index/2 Parameters: %{} Pipelines: [:tabby_sim_admin] [Thu Nov 5 12:28:28.963000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:56791] QUERY OK source="tabby_sim_faults" db=0.8ms queue=0.1ms idle=262.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (t0.`remaining` > 0) ORDER BY t0.`id` [] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:18 [Thu Nov 5 12:28:28.968000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:56791] QUERY OK source="tabby_sim_payments" db=5.0ms idle=261.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 ORDER BY t0.`inserted_at` DESC, t0.`id` DESC LIMIT ? [30] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:19 [Thu Nov 5 12:28:28.973000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:56791] QUERY OK source="tabby_sim_webhook_deliveries" db=3.7ms idle=266.4ms SELECT t0.`id`, t0.`payment_id`, t0.`webhook_id`, t0.`event`, t0.`attempt`, t0.`state`, t0.`url`, t0.`http_status`, t0.`request_body`, t0.`response_body`, t0.`error`, t0.`duration_ms`, t0.`attempted_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhook_deliveries` AS t0 ORDER BY t0.`id` DESC LIMIT ? [40] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:20 [Thu Nov 5 12:28:28.976000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:56791] QUERY OK source="tabby_sim_webhooks" db=1.5ms queue=0.2ms idle=266.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 ORDER BY t0.`id` LIMIT 100 [] ↳ DaProductApp.TabbySim.Admin.dashboard/0, at: lib/da_product_app/tabby_sim/admin.ex:21 [Thu Nov 5 12:28:28.976000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:56791] Sent 200 in 15ms [Thu Nov 5 12:28:29.018000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57900] GET /tabby/demo [Thu Nov 5 12:28:29.023000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57900] Sent 200 in 4ms [Thu Nov 5 12:28:30.103000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57900] POST /tabby/demo/summary [Thu Nov 5 12:28:30.104000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57900] Sent 200 in 697µs [Thu Nov 5 12:28:31.450000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57900] POST /tabby/demo/eligibility [Thu Nov 5 12:28:31.752000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:41538] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:28:31.752000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:41538] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:28:31.754000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:41538] QUERY OK source="tabby_sim_faults" db=0.9ms queue=0.1ms idle=1148.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:28:31.794000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:41538] QUERY OK db=38.8ms queue=0.1ms idle=799.7ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`is_test`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["33efea8e-03dd-4bd7-9e9c-3b1850b5030e", "CREATED", "AED", "304c0ff9-e2ca-4916-ad75-e690739c1906", "demostore", ~U[2026-11-05 12:40:31Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "created", %{"cancel" => nil, "failure" => nil, "success" => nil}, ~U[2026-11-05 12:38:31Z], false, Decimal.new("850.00"), [], [], true, ~N[2026-11-05 12:28:31], ~N[2026-11-05 12:28:31]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:28:31.794000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:41538] [TabbySim] checkout payment=33efea8e-03dd-4bd7-9e9c-3b1850b5030e session=304c0ff9-e2ca-4916-ad75-e690739c1906 decision=created reason=nil amount=850.00 AED [Thu Nov 5 12:28:31.795000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:41538] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.1ms idle=839.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:28:31.797000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:41538] Sent 200 in 45ms [Thu Nov 5 12:28:31.798000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:57900] [Tabby] checkout post /api/v2/checkout -> 200 (349 ms, attempt 1) [Thu Nov 5 12:28:31.799000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:57900] [Tabby] session created payment=33efea8e-03dd-4bd7-9e9c-3b1850b5030e [Thu Nov 5 12:28:31.799000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2594513] [client 115.99.167.137:57900] [Tabby] eligibility: show (amount=850.00 AED) [Thu Nov 5 12:28:31.799000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57900] Sent 200 in 349ms [Thu Nov 5 12:28:49.047000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57900] GET /tabby/demo [Thu Nov 5 12:28:49.049000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57900] Sent 200 in 2ms [Thu Nov 5 12:28:49.626000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57900] POST /tabby/demo/summary [Thu Nov 5 12:28:49.627000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57900] Sent 200 in 731µs [Thu Nov 5 12:28:50.512000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57900] POST /tabby/demo/eligibility [Thu Nov 5 12:28:50.782000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:41538] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:28:50.782000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:41538] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:28:50.783000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:41538] QUERY OK source="tabby_sim_faults" db=0.5ms idle=1828.6ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:28:50.822000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:41538] QUERY OK db=38.1ms idle=1829.7ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`is_test`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["de9f7a7a-6ab6-44f3-8fbd-52d9d134cf12", "CREATED", "AED", "6850800e-253e-45e2-965e-1a29513cb600", "demostore", ~U[2026-11-05 12:40:50Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "created", %{"cancel" => nil, "failure" => nil, "success" => nil}, ~U[2026-11-05 12:38:50Z], false, Decimal.new("850.00"), [], [], true, ~N[2026-11-05 12:28:50], ~N[2026-11-05 12:28:50]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:28:50.823000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:41538] [TabbySim] checkout payment=de9f7a7a-6ab6-44f3-8fbd-52d9d134cf12 session=6850800e-253e-45e2-965e-1a29513cb600 decision=created reason=nil amount=850.00 AED [Thu Nov 5 12:28:50.824000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:41538] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1390.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:28:50.826000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:41538] Sent 200 in 44ms [Thu Nov 5 12:28:50.827000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:57900] [Tabby] checkout post /api/v2/checkout -> 200 (315 ms, attempt 1) [Thu Nov 5 12:28:50.827000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:57900] [Tabby] session created payment=de9f7a7a-6ab6-44f3-8fbd-52d9d134cf12 [Thu Nov 5 12:28:50.827000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2594513] [client 115.99.167.137:57900] [Tabby] eligibility: show (amount=850.00 AED) [Thu Nov 5 12:28:50.827000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:57900] Sent 200 in 315ms [Thu Nov 5 12:29:29.996000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=117.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:29:29Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:29:29.996000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:29:29.997000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=42.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:29:29Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:29:29.998000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=43.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:29:30.023000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403405 scheduled in 46s (14 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:30:01.012000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="report_requests" db=0.3ms queue=0.4ms idle=1056.3ms SELECT r0.`id`, r0.`report_id`, r0.`report_type`, r0.`requester_ref`, r0.`filters`, r0.`status`, r0.`progress_percentage`, r0.`row_count`, r0.`file_path`, r0.`file_size`, r0.`download_token`, r0.`download_count`, r0.`last_downloaded_at`, r0.`error_message`, r0.`expires_at`, r0.`completed_at`, r0.`inserted_at`, r0.`updated_at` FROM `report_requests` AS r0 WHERE (NOT (r0.`expires_at` IS NULL) AND (r0.`expires_at` < ?)) [~U[2026-11-05 12:30:01Z]] ↳ DaProductApp.Workers.ReportRetentionWorker.perform/1, at: lib/da_product_app/workers/report_retention_worker.ex:18 [Thu Nov 5 12:30:01.013000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="report_requests" db=1.0ms queue=0.6ms idle=1056.3ms SELECT r0.`id`, r0.`report_id`, r0.`report_type`, r0.`requester_ref`, r0.`filters`, r0.`status`, r0.`progress_percentage`, r0.`row_count`, r0.`file_path`, r0.`file_size`, r0.`download_token`, r0.`download_count`, r0.`last_downloaded_at`, r0.`error_message`, r0.`expires_at`, r0.`completed_at`, r0.`inserted_at`, r0.`updated_at` FROM `report_requests` AS r0 WHERE (NOT (r0.`expires_at` IS NULL) AND (r0.`expires_at` < ?)) [~U[2026-11-05 12:30:01Z]] ↳ DaProductApp.Workers.ReportRetentionWorker.perform/1, at: lib/da_product_app/workers/report_retention_worker.ex:18 [Thu Nov 5 12:30:01.013000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="report_requests" db=0.9ms queue=0.5ms idle=1056.3ms SELECT r0.`id`, r0.`report_id`, r0.`report_type`, r0.`requester_ref`, r0.`filters`, r0.`status`, r0.`progress_percentage`, r0.`row_count`, r0.`file_path`, r0.`file_size`, r0.`download_token`, r0.`download_count`, r0.`last_downloaded_at`, r0.`error_message`, r0.`expires_at`, r0.`completed_at`, r0.`inserted_at`, r0.`updated_at` FROM `report_requests` AS r0 WHERE (NOT (r0.`expires_at` IS NULL) AND (r0.`expires_at` < ?)) [~U[2026-11-05 12:30:01Z]] ↳ DaProductApp.Workers.ReportRetentionWorker.perform/1, at: lib/da_product_app/workers/report_retention_worker.ex:18 [Thu Nov 5 12:30:01.231000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="report_requests" db=0.9ms idle=247.1ms SELECT r0.`id`, r0.`report_id`, r0.`report_type`, r0.`requester_ref`, r0.`filters`, r0.`status`, r0.`progress_percentage`, r0.`row_count`, r0.`file_path`, r0.`file_size`, r0.`download_token`, r0.`download_count`, r0.`last_downloaded_at`, r0.`error_message`, r0.`expires_at`, r0.`completed_at`, r0.`inserted_at`, r0.`updated_at` FROM `report_requests` AS r0 WHERE (NOT (r0.`expires_at` IS NULL) AND (r0.`expires_at` < ?)) [~U[2026-11-05 12:30:01Z]] ↳ DaProductApp.Workers.ReportRetentionWorker.perform/1, at: lib/da_product_app/workers/report_retention_worker.ex:18 [Thu Nov 5 12:30:17.227000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=270.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:30:17Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:30:17.265000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=36.9ms queue=0.1ms idle=272.3ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 12:30:17], true, "f5083d47-4cc5-4e16-9a76-bcbf5ac2f029", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:30:17.265000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=f5083d47-4cc5-4e16-9a76-bcbf5ac2f029 CREATED -> EXPIRED [Thu Nov 5 12:30:17.266000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=310.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["f5083d47-4cc5-4e16-9a76-bcbf5ac2f029"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:30:17.266000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook not sent: event=expire payment=f5083d47-4cc5-4e16-9a76-bcbf5ac2f029 [Thu Nov 5 12:30:17.266000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=f5083d47-4cc5-4e16-9a76-bcbf5ac2f029 expired (expires_at 2026-11-05 12:30:15Z, session_status=created) [Thu Nov 5 12:30:17.267000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=311.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:30:17Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:30:17.267000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 1 payment(s) were due [Thu Nov 5 12:30:17.269000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms queue=0.2ms idle=312.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:30:17Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:30:17.270000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=313.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:30:17.321000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403420 scheduled in 60s (13 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:31:18.713000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1755.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:31:18Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:31:18.713000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:31:18.714000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1757.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:31:18Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:31:18.714000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms queue=0.1ms idle=1757.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:31:18.747000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403421 scheduled in 32s (13 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:31:26.890000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="global_table" db=0.6ms idle=1985.1ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 12:31:51.919000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1962.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:31:51Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:31:51.957000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=37.1ms idle=1963.6ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 12:31:51], true, "65eff571-2b01-4550-87db-ed2094a2f49b", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:31:51.957000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=65eff571-2b01-4550-87db-ed2094a2f49b CREATED -> EXPIRED [Thu Nov 5 12:31:51.958000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1001.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["65eff571-2b01-4550-87db-ed2094a2f49b"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:31:51.958000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook not sent: event=expire payment=65eff571-2b01-4550-87db-ed2094a2f49b [Thu Nov 5 12:31:51.958000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=65eff571-2b01-4550-87db-ed2094a2f49b expired (expires_at 2026-11-05 12:31:50Z, session_status=created) [Thu Nov 5 12:31:51.960000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.2ms idle=121.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:31:51Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:31:51.960000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 1 payment(s) were due [Thu Nov 5 12:31:51.960000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=41.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:31:51Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:31:51.961000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=41.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:31:52.011000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403422 scheduled in 37s (12 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:32:30.132000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=175.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:32:30Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:32:30.157000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=24.6ms queue=0.1ms idle=176.5ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 12:32:30], true, "037b2337-c919-453a-8d2c-51e724a21177", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:32:30.158000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=037b2337-c919-453a-8d2c-51e724a21177 CREATED -> EXPIRED [Thu Nov 5 12:32:30.158000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=201.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["037b2337-c919-453a-8d2c-51e724a21177"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:32:30.159000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook not sent: event=expire payment=037b2337-c919-453a-8d2c-51e724a21177 [Thu Nov 5 12:32:30.159000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=037b2337-c919-453a-8d2c-51e724a21177 expired (expires_at 2026-11-05 12:32:28Z, session_status=created) [Thu Nov 5 12:32:30.160000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=203.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:32:30Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:32:30.160000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 1 payment(s) were due [Thu Nov 5 12:32:30.162000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms queue=0.1ms idle=204.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:32:30Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:32:30.163000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.1ms idle=206.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:32:30.201000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403427 scheduled in 47s (11 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:33:03.360000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:54965] POST /tabby/demo/summary [Thu Nov 5 12:33:03.361000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:54965] Sent 200 in 600µs [Thu Nov 5 12:33:04.310000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:54965] POST /tabby/demo/eligibility [Thu Nov 5 12:33:04.609000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:51674] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:33:04.610000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:51674] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "765.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:33:04.611000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:51674] QUERY OK source="tabby_sim_faults" db=0.3ms idle=651.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:33:04.662000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:51674] QUERY OK db=50.5ms idle=652.4ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`is_test`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["194c98b5-8d73-4840-8fad-952d55c14ecb", "CREATED", "AED", "065fad57-6bc7-49f8-874d-90b65917fee5", "demostore", ~U[2026-11-05 12:45:04Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "765.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "created", %{"cancel" => nil, "failure" => nil, "success" => nil}, ~U[2026-11-05 12:43:04Z], false, Decimal.new("765.00"), [], [], true, ~N[2026-11-05 12:33:04], ~N[2026-11-05 12:33:04]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:33:04.662000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:51674] [TabbySim] checkout payment=194c98b5-8d73-4840-8fad-952d55c14ecb session=065fad57-6bc7-49f8-874d-90b65917fee5 decision=created reason=nil amount=765.00 AED [Thu Nov 5 12:33:04.663000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:51674] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.1ms idle=703.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:33:04.665000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:51674] Sent 200 in 55ms [Thu Nov 5 12:33:04.666000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:54965] [Tabby] checkout post /api/v2/checkout -> 200 (355 ms, attempt 1) [Thu Nov 5 12:33:04.666000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:54965] [Tabby] session created payment=194c98b5-8d73-4840-8fad-952d55c14ecb [Thu Nov 5 12:33:04.666000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2594513] [client 115.99.167.137:54965] [Tabby] eligibility: show (amount=765.00 AED) [Thu Nov 5 12:33:04.666000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:54965] Sent 200 in 356ms [Thu Nov 5 12:33:08.704000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:54965] POST /tabby/demo/place [Thu Nov 5 12:33:08.751000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:54965] QUERY OK db=46.3ms idle=745.6ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`amount`,`order_reference`,`needs_attention`,`success_url`,`cancel_url`,`failure_url`,`captured_amount`,`refunded_amount`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["e799cf6b-2225-445f-b4bf-d7dbdf21a8eb", "new", "AED", "demostore", Decimal.new("765.00"), "DEMO-87C2EC72", false, "http://demo.ctrmv.com:4030/tabby/demo/result/success?lang=en&order=DEMO-87C2EC72", "http://demo.ctrmv.com:4030/tabby/demo/result/cancel?lang=en&order=DEMO-87C2EC72", "http://demo.ctrmv.com:4030/tabby/demo/result/failure?lang=en&order=DEMO-87C2EC72", Decimal.new("0"), Decimal.new("0"), ~N[2026-11-05 12:33:08], ~N[2026-11-05 12:33:08]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Thu Nov 5 12:33:09.019000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:45992] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:33:09.020000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:45992] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/e799cf6b-2225-445f-b4bf-d7dbdf21a8eb/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/e799cf6b-2225-445f-b4bf-d7dbdf21a8eb/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/e799cf6b-2225-445f-b4bf-d7dbdf21a8eb/success"}, "payment" => %{"amount" => "765.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Anya Forger", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"discount_amount" => "85.00", "items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-87C2EC72"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:33:09.021000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:45992] QUERY OK source="tabby_sim_faults" db=0.5ms idle=1061.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:33:09.058000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:45992] QUERY OK db=34.3ms queue=0.3ms idle=1063.0ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`buyer_history`,`is_test`,`lang`,`shipping_address`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["bc07edc7-331d-4796-aa81-c400b519bc5f", "CREATED", "AED", "ed66f35d-14b2-4bbd-a198-bb3113c5eca7", "demostore", ~U[2026-11-05 12:45:09Z], %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/e799cf6b-2225-445f-b4bf-d7dbdf21a8eb/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/e799cf6b-2225-445f-b4bf-d7dbdf21a8eb/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/e799cf6b-2225-445f-b4bf-d7dbdf21a8eb/success"}, "payment" => %{"amount" => "765.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Anya Forger", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"discount_amount" => "85.00", "items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-87C2EC72"}, "shipping_address" => %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "85", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo headphones", "unit_price" => "650"}, %{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo smartwatch", "unit_price" => "200"}], "reference_id" => "DEMO-87C2EC72", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "name" => "Anya Forger", "phone" => "+971500000001"}, "created", %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/e799cf6b-2225-445f-b4bf-d7dbdf21a8eb/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/e799cf6b-2225-445f-b4bf-d7dbdf21a8eb/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/e799cf6b-2225-445f-b4bf-d7dbdf21a8eb/success"}, ~U[2026-11-05 12:43:09Z], false, Decimal.new("765.00"), [], [], %{"registered_since" => "2023-02-01T10:00:00Z"}, true, "en", %{"address" => "Demo Street 1, Downtown", "city" => "Dubai", "zip" => "00000"}, ~N[2026-11-05 12:33:09], ~N[2026-11-05 12:33:09]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:33:09.058000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:45992] [TabbySim] checkout payment=bc07edc7-331d-4796-aa81-c400b519bc5f session=ed66f35d-14b2-4bbd-a198-bb3113c5eca7 decision=created reason=nil amount=765.00 AED [Thu Nov 5 12:33:09.060000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:45992] QUERY OK source="tabby_sim_payments" db=1.6ms idle=1099.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:33:09.063000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:45992] Sent 200 in 44ms [Thu Nov 5 12:33:09.065000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:54965] [Tabby] checkout post /api/v2/checkout -> 200 (313 ms, attempt 1) [Thu Nov 5 12:33:09.066000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:54965] [Tabby] session created payment=bc07edc7-331d-4796-aa81-c400b519bc5f [Thu Nov 5 12:33:09.067000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:54965] QUERY OK source="tabby_payments" db=0.4ms idle=888.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e799cf6b-2225-445f-b4bf-d7dbdf21a8eb"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Thu Nov 5 12:33:09.119000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:54965] QUERY OK source="tabby_payments" db=50.2ms queue=1.0ms idle=564.9ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-05 12:53:09Z], "bc07edc7-331d-4796-aa81-c400b519bc5f", "ed66f35d-14b2-4bbd-a198-bb3113c5eca7", ~N[2026-11-05 12:33:09], "e799cf6b-2225-445f-b4bf-d7dbdf21a8eb"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Thu Nov 5 12:33:09.119000 2026] [DaProductApp.Tabby.Sessions:info] [pid 2594513] [client 115.99.167.137:54965] [Tabby] session created attempt=e799cf6b-2225-445f-b4bf-d7dbdf21a8eb payment=bc07edc7-331d-4796-aa81-c400b519bc5f [Thu Nov 5 12:33:09.174000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:54965] Sent 200 in 470ms [Thu Nov 5 12:33:09.614000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:54965] GET /tabby-sim/hpp/ed66f35d-14b2-4bbd-a198-bb3113c5eca7 [Thu Nov 5 12:33:09.614000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:54965] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "ed66f35d-14b2-4bbd-a198-bb3113c5eca7"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:33:09.615000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:54965] QUERY OK source="tabby_sim_payments" db=0.6ms idle=557.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["ed66f35d-14b2-4bbd-a198-bb3113c5eca7"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:33:09.616000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:54965] Sent 200 in 2ms [Thu Nov 5 12:33:17.370000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:54965] POST /tabby-sim/hpp/ed66f35d-14b2-4bbd-a198-bb3113c5eca7 [Thu Nov 5 12:33:17.370000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:54965] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "approve", "otp" => "8888", "plan" => "6", "session_id" => "ed66f35d-14b2-4bbd-a198-bb3113c5eca7", "ui" => "1"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:33:17.371000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:54965] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.1ms idle=411.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["ed66f35d-14b2-4bbd-a198-bb3113c5eca7"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:33:17.444000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:54965] QUERY OK source="tabby_sim_payments" db=72.5ms idle=412.6ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["AUTHORIZED", ~N[2026-11-05 12:33:17], "bc07edc7-331d-4796-aa81-c400b519bc5f", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:33:17.445000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client 115.99.167.137:54965] [TabbySim] payment=bc07edc7-331d-4796-aa81-c400b519bc5f CREATED -> AUTHORIZED [Thu Nov 5 12:33:17.446000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:54965] QUERY OK source="tabby_sim_payments" db=0.4ms idle=486.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["bc07edc7-331d-4796-aa81-c400b519bc5f"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:33:17.446000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:54965] QUERY OK source="tabby_sim_webhooks" db=0.3ms idle=486.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 12:33:17.467000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client 115.99.167.137:54965] [TabbySim] webhook queued job=403429 event=authorize payment=bc07edc7-331d-4796-aa81-c400b519bc5f webhook=53 [Thu Nov 5 12:33:17.468000 2026] [DaProductApp.TabbySim.Hpp:info] [pid 2594513] [client 115.99.167.137:54965] [TabbySim] hpp payment=bc07edc7-331d-4796-aa81-c400b519bc5f action=approve status=AUTHORIZED [Thu Nov 5 12:33:17.468000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:54965] QUERY OK source="tabby_sim_payments" db=0.6ms idle=508.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["ed66f35d-14b2-4bbd-a198-bb3113c5eca7"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:33:17.469000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:54965] Sent 200 in 99ms [Thu Nov 5 12:33:17.552000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=373.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:33:17Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:33:17.553000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_webhooks" db=0.7ms idle=208.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 12:33:17.594000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=41.6ms queue=0.1ms idle=289.9ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 12:33:17], true, "9b0abe70-ddac-4ecf-9460-70447f2a53bc", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:33:17.594000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=9b0abe70-ddac-4ecf-9460-70447f2a53bc CREATED -> EXPIRED [Thu Nov 5 12:33:17.596000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=223.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["9b0abe70-ddac-4ecf-9460-70447f2a53bc"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:33:17.596000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook not sent: event=expire payment=9b0abe70-ddac-4ecf-9460-70447f2a53bc [Thu Nov 5 12:33:17.596000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=9b0abe70-ddac-4ecf-9460-70447f2a53bc expired (expires_at 2026-11-05 12:33:17Z, session_status=created) [Thu Nov 5 12:33:17.597000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=152.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:33:17Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:33:17.598000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 1 payment(s) were due [Thu Nov 5 12:33:17.599000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=152.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:33:17Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:33:17.600000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=152.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:33:17.645000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403430 scheduled in 36s (11 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:33:17.847000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:46656] POST /tabby/webhooks [Thu Nov 5 12:33:17.848000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:46656] QUERY OK source="tabby_payments" db=0.7ms idle=251.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["bc07edc7-331d-4796-aa81-c400b519bc5f"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:33:17.903000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:46656] QUERY OK db=54.3ms idle=250.9ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["authorized", false, "bc07edc7-331d-4796-aa81-c400b519bc5f", "{\"amount\":\"765\",\"captures\":[],\"closed_at\":null,\"created_at\":\"2026-11-05T12:33:09Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T12:45:09Z\",\"id\":\"bc07edc7-331d-4796-aa81-c400b519bc5f\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-87C2EC72\"},\"refunds\":[],\"status\":\"authorized\",\"token\":null}", ~U[2026-11-05 12:33:17Z], ~N[2026-11-05 12:33:17], ~N[2026-11-05 12:33:17]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 12:33:17.964000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2594513] [client 78.47.213.209:46656] [Tabby] webhook 200: event=60 payment=bc07edc7-331d-4796-aa81-c400b519bc5f saved and queued [Thu Nov 5 12:33:17.964000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:46656] Sent 200 in 117ms [Thu Nov 5 12:33:18.012000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK db=47.2ms idle=362.6ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "authorize", ~U[2026-11-05 12:33:17Z], "bc07edc7-331d-4796-aa81-c400b519bc5f", 53, 200, 411, %{"amount" => "765", "captures" => [], "closed_at" => nil, "created_at" => "2026-11-05T12:33:09Z", "currency" => "AED", "expires_at" => "2026-11-05T12:45:09Z", "id" => "bc07edc7-331d-4796-aa81-c400b519bc5f", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-87C2EC72"}, "refunds" => [], "status" => "authorized", "token" => nil}, ~N[2026-11-05 12:33:17], ~N[2026-11-05 12:33:17]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 12:33:18.013000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook attempt=1 success event=authorize payment=bc07edc7-331d-4796-aa81-c400b519bc5f url=http://demo.ctrmv.com:4030/tabby/webhooks (411 ms) [Thu Nov 5 12:33:18.086000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.5ms queue=0.3ms idle=411.1ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [60] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 12:33:18.087000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.0ms idle=363.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["bc07edc7-331d-4796-aa81-c400b519bc5f"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:33:18.089000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=240.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e799cf6b-2225-445f-b4bf-d7dbdf21a8eb"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:33:18.389000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:45992] GET /tabby-sim/api/v2/payments/bc07edc7-331d-4796-aa81-c400b519bc5f [Thu Nov 5 12:33:18.389000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:45992] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "bc07edc7-331d-4796-aa81-c400b519bc5f"} Pipelines: [:tabby_sim_api] [Thu Nov 5 12:33:18.391000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:45992] QUERY OK source="tabby_sim_faults" db=0.7ms queue=0.1ms idle=377.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "bc07edc7-331d-4796-aa81-c400b519bc5f"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 12:33:18.392000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:45992] QUERY OK source="tabby_sim_faults" db=0.6ms idle=308.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:33:18.393000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:45992] QUERY OK source="tabby_sim_payments" db=0.7ms idle=307.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["bc07edc7-331d-4796-aa81-c400b519bc5f"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Thu Nov 5 12:33:18.393000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:45992] Sent 200 in 4ms [Thu Nov 5 12:33:18.394000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client -] [Tabby] retrieve get /api/v2/payments/bc07edc7-331d-4796-aa81-c400b519bc5f -> 200 (304 ms, attempt 1) [Thu Nov 5 12:33:18.454000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=59.8ms idle=308.4ms UPDATE `tabby_payments` AS t0 SET t0.`authorized_at` = ?, t0.`winner_key` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [~U[2026-11-05 12:33:18Z], "0102ea07cd9fc3c0999323014fe3493b21e075b13f9a8b5948080de94198d312", "authorized", ~N[2026-11-05 12:33:18], "e799cf6b-2225-445f-b4bf-d7dbdf21a8eb", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 12:33:18.455000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=367.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e799cf6b-2225-445f-b4bf-d7dbdf21a8eb"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:33:18.456000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2594513] [client -] [Tabby] verify: attempt=e799cf6b-2225-445f-b4bf-d7dbdf21a8eb payment=bc07edc7-331d-4796-aa81-c400b519bc5f created -> authorized [Thu Nov 5 12:33:18.545000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=17.3ms idle=362.6ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 12:33:18Z], 60] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 12:33:18.546000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2594513] [client -] [Tabby] webhook job: event=60 payment=bc07edc7-331d-4796-aa81-c400b519bc5f processed (recorded authorized) [Thu Nov 5 12:33:18.613000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=222.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e799cf6b-2225-445f-b4bf-d7dbdf21a8eb"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:33:18.664000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=49.5ms queue=0.1ms idle=221.9ms UPDATE `tabby_payments` AS t0 SET t0.`capture_reference_id` = ?, t0.`claimed_at` = ?, t0.`claimed_by` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["capture-DEMO-87C2EC72", ~U[2026-11-05 12:33:18Z], "nonode@nohost", "capturing", ~N[2026-11-05 12:33:18], "e799cf6b-2225-445f-b4bf-d7dbdf21a8eb", "authorized"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 12:33:18.665000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms queue=0.1ms idle=209.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e799cf6b-2225-445f-b4bf-d7dbdf21a8eb"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:33:18.665000 2026] [DaProductApp.Tabby.Capture:info] [pid 2594513] [client -] [Tabby] capture: attempt=e799cf6b-2225-445f-b4bf-d7dbdf21a8eb payment=bc07edc7-331d-4796-aa81-c400b519bc5f claimed (authorized -> capturing) [Thu Nov 5 12:33:18.936000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:45992] POST /tabby-sim/api/v2/payments/bc07edc7-331d-4796-aa81-c400b519bc5f/captures [Thu Nov 5 12:33:18.936000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:45992] Processing with DaProductAppWeb.TabbySim.PaymentsController.capture/2 Parameters: %{"amount" => "765.00", "id" => "bc07edc7-331d-4796-aa81-c400b519bc5f", "reference_id" => "capture-DEMO-87C2EC72"} Pipelines: [:tabby_sim_api] [Thu Nov 5 12:33:18.938000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:45992] QUERY OK source="tabby_sim_faults" db=0.9ms idle=409.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["capture", "bc07edc7-331d-4796-aa81-c400b519bc5f"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 12:33:18.938000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:45992] QUERY OK source="tabby_sim_faults" db=0.4ms idle=392.5ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["capture"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:33:18.939000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:45992] QUERY OK source="tabby_sim_payments" db=0.5ms idle=337.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["bc07edc7-331d-4796-aa81-c400b519bc5f"] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:227 [Thu Nov 5 12:33:18.940000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:45992] QUERY OK db=0.1ms idle=327.0ms begin [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Thu Nov 5 12:33:18.940000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:45992] QUERY OK source="tabby_sim_payments" db=0.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) FOR UPDATE ["bc07edc7-331d-4796-aa81-c400b519bc5f"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:231 [Thu Nov 5 12:33:18.941000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:45992] QUERY OK source="tabby_sim_payments" db=0.5ms UPDATE `tabby_sim_payments` SET `status` = ?, `closed_at` = ?, `captures` = ?, `updated_at` = ? WHERE `id` = ? ["CLOSED", ~U[2026-11-05 12:33:18Z], [%{"amount" => "765", "created_at" => "2026-11-05T12:33:18Z", "discount_amount" => "0", "id" => "f717fd93-271e-4599-aa6a-8488a9cde65a", "items" => nil, "reference_id" => "capture-DEMO-87C2EC72", "shipping_amount" => "0", "tax_amount" => "0"}], ~N[2026-11-05 12:33:18], "bc07edc7-331d-4796-aa81-c400b519bc5f"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:244 [Thu Nov 5 12:33:18.941000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client 127.0.0.1:45992] [TabbySim] capture payment=bc07edc7-331d-4796-aa81-c400b519bc5f status=CLOSED [Thu Nov 5 12:33:18.971000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:45992] QUERY OK db=29.2ms commit [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Thu Nov 5 12:33:18.972000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:45992] QUERY OK source="tabby_sim_webhooks" db=0.9ms idle=358.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 12:33:19.006000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client 127.0.0.1:45992] [TabbySim] webhook queued job=403433 event=capture payment=bc07edc7-331d-4796-aa81-c400b519bc5f webhook=53 [Thu Nov 5 12:33:19.007000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:45992] QUERY OK source="tabby_sim_webhooks" db=0.3ms idle=343.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 12:33:19.052000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client 127.0.0.1:45992] [TabbySim] webhook queued job=403434 event=close payment=bc07edc7-331d-4796-aa81-c400b519bc5f webhook=53 [Thu Nov 5 12:33:19.053000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:45992] Sent 200 in 116ms [Thu Nov 5 12:33:19.054000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client -] [Tabby] capture post /api/v2/payments/bc07edc7-331d-4796-aa81-c400b519bc5f/captures -> 200 (389 ms, attempt 1) [Thu Nov 5 12:33:19.083000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=29.1ms idle=225.4ms UPDATE `tabby_payments` AS t0 SET t0.`captured_amount` = ?, t0.`captured_at` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [Decimal.new("765"), ~U[2026-11-05 12:33:18Z], "captured", ~N[2026-11-05 12:33:19], "e799cf6b-2225-445f-b4bf-d7dbdf21a8eb", "capturing"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 12:33:19.085000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=146.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e799cf6b-2225-445f-b4bf-d7dbdf21a8eb"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:33:19.085000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2594513] [client -] [Tabby] verify: attempt=e799cf6b-2225-445f-b4bf-d7dbdf21a8eb payment=bc07edc7-331d-4796-aa81-c400b519bc5f capturing -> captured [Thu Nov 5 12:33:19.085000 2026] [DaProductApp.Tabby.Capture:info] [pid 2594513] [client -] [Tabby] capture: attempt=e799cf6b-2225-445f-b4bf-d7dbdf21a8eb payment=bc07edc7-331d-4796-aa81-c400b519bc5f is captured [Thu Nov 5 12:33:19.090000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_webhooks" db=0.4ms idle=150.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 12:33:19.401000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:46656] POST /tabby/webhooks [Thu Nov 5 12:33:19.402000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:46656] QUERY OK source="tabby_payments" db=0.5ms idle=348.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["bc07edc7-331d-4796-aa81-c400b519bc5f"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:33:19.450000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:46656] QUERY OK db=47.9ms idle=319.2ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["authorized", false, "bc07edc7-331d-4796-aa81-c400b519bc5f", "{\"amount\":\"765\",\"captures\":[{\"amount\":\"765\",\"created_at\":\"2026-11-05T12:33:18Z\",\"discount_amount\":\"0\",\"id\":\"f717fd93-271e-4599-aa6a-8488a9cde65a\",\"items\":null,\"reference_id\":\"capture-DEMO-87C2EC72\",\"shipping_amount\":\"0\",\"tax_amount\":\"0\"}],\"closed_at\":null,\"created_at\":\"2026-11-05T12:33:09Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T12:45:09Z\",\"id\":\"bc07edc7-331d-4796-aa81-c400b519bc5f\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-87C2EC72\"},\"refunds\":[],\"status\":\"authorized\",\"token\":null}", ~U[2026-11-05 12:33:19Z], ~N[2026-11-05 12:33:19], ~N[2026-11-05 12:33:19]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 12:33:19.478000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2594513] [client 78.47.213.209:46656] [Tabby] webhook 200: event=61 payment=bc07edc7-331d-4796-aa81-c400b519bc5f saved and queued [Thu Nov 5 12:33:19.478000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:46656] Sent 200 in 77ms [Thu Nov 5 12:33:19.528000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK db=48.8ms idle=389.2ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "capture", ~U[2026-11-05 12:33:19Z], "bc07edc7-331d-4796-aa81-c400b519bc5f", 53, 200, 389, %{"amount" => "765", "captures" => [%{"amount" => "765", "created_at" => "2026-11-05T12:33:18Z", "discount_amount" => "0", "id" => "f717fd93-271e-4599-aa6a-8488a9cde65a", "items" => nil, "reference_id" => "capture-DEMO-87C2EC72", "shipping_amount" => "0", "tax_amount" => "0"}], "closed_at" => nil, "created_at" => "2026-11-05T12:33:09Z", "currency" => "AED", "expires_at" => "2026-11-05T12:45:09Z", "id" => "bc07edc7-331d-4796-aa81-c400b519bc5f", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-87C2EC72"}, "refunds" => [], "status" => "authorized", "token" => nil}, ~N[2026-11-05 12:33:19], ~N[2026-11-05 12:33:19]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 12:33:19.529000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook attempt=1 success event=capture payment=bc07edc7-331d-4796-aa81-c400b519bc5f url=http://demo.ctrmv.com:4030/tabby/webhooks (389 ms) [Thu Nov 5 12:33:19.560000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.4ms idle=351.4ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [61] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 12:33:19.560000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.3ms idle=268.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["bc07edc7-331d-4796-aa81-c400b519bc5f"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:33:19.561000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=209.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e799cf6b-2225-445f-b4bf-d7dbdf21a8eb"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:33:19.604000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=42.0ms idle=159.7ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 12:33:19Z], 61] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 12:33:19.604000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2594513] [client -] [Tabby] webhook job: event=61 payment=bc07edc7-331d-4796-aa81-c400b519bc5f processed (already_final) [Thu Nov 5 12:33:20.216000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:54965] GET /tabby/return/e799cf6b-2225-445f-b4bf-d7dbdf21a8eb/success [Thu Nov 5 12:33:20.217000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:54965] QUERY OK source="tabby_payments" db=0.6ms idle=656.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e799cf6b-2225-445f-b4bf-d7dbdf21a8eb"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:33:20.258000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:54965] Sent 302 in 42ms [Thu Nov 5 12:33:20.347000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=743.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e799cf6b-2225-445f-b4bf-d7dbdf21a8eb"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:33:20.453000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_webhooks" db=0.4ms idle=350.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 12:33:20.714000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:54965] GET /tabby/demo/result/success [Thu Nov 5 12:33:20.714000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:54965] Sent 200 in 539µs [Thu Nov 5 12:33:20.780000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:46656] POST /tabby/webhooks [Thu Nov 5 12:33:20.781000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:46656] QUERY OK source="tabby_payments" db=0.5ms idle=432.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["bc07edc7-331d-4796-aa81-c400b519bc5f"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:33:20.815000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:46656] QUERY OK db=33.4ms queue=0.1ms idle=427.7ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["closed", false, "bc07edc7-331d-4796-aa81-c400b519bc5f", "{\"amount\":\"765\",\"captures\":[{\"amount\":\"765\",\"created_at\":\"2026-11-05T12:33:18Z\",\"discount_amount\":\"0\",\"id\":\"f717fd93-271e-4599-aa6a-8488a9cde65a\",\"items\":null,\"reference_id\":\"capture-DEMO-87C2EC72\",\"shipping_amount\":\"0\",\"tax_amount\":\"0\"}],\"closed_at\":\"2026-11-05T12:33:18Z\",\"created_at\":\"2026-11-05T12:33:09Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T12:45:09Z\",\"id\":\"bc07edc7-331d-4796-aa81-c400b519bc5f\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-87C2EC72\"},\"refunds\":[],\"status\":\"closed\",\"token\":null}", ~U[2026-11-05 12:33:20Z], ~N[2026-11-05 12:33:20], ~N[2026-11-05 12:33:20]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 12:33:20.883000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2594513] [client 78.47.213.209:46656] [Tabby] webhook 200: event=62 payment=bc07edc7-331d-4796-aa81-c400b519bc5f saved and queued [Thu Nov 5 12:33:20.883000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:46656] Sent 200 in 103ms [Thu Nov 5 12:33:20.918000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK db=33.9ms idle=431.7ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "close", ~U[2026-11-05 12:33:20Z], "bc07edc7-331d-4796-aa81-c400b519bc5f", 53, 200, 430, %{"amount" => "765", "captures" => [%{"amount" => "765", "created_at" => "2026-11-05T12:33:18Z", "discount_amount" => "0", "id" => "f717fd93-271e-4599-aa6a-8488a9cde65a", "items" => nil, "reference_id" => "capture-DEMO-87C2EC72", "shipping_amount" => "0", "tax_amount" => "0"}], "closed_at" => "2026-11-05T12:33:18Z", "created_at" => "2026-11-05T12:33:09Z", "currency" => "AED", "expires_at" => "2026-11-05T12:45:09Z", "id" => "bc07edc7-331d-4796-aa81-c400b519bc5f", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-87C2EC72"}, "refunds" => [], "status" => "closed", "token" => nil}, ~N[2026-11-05 12:33:20], ~N[2026-11-05 12:33:20]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 12:33:20.918000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook attempt=1 success event=close payment=bc07edc7-331d-4796-aa81-c400b519bc5f url=http://demo.ctrmv.com:4030/tabby/webhooks (430 ms) [Thu Nov 5 12:33:20.986000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.3ms idle=328.1ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [62] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 12:33:20.987000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=205.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["bc07edc7-331d-4796-aa81-c400b519bc5f"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:33:20.988000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.3ms idle=172.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e799cf6b-2225-445f-b4bf-d7dbdf21a8eb"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:33:21.035000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=46.7ms queue=0.1ms idle=169.2ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 12:33:20Z], 62] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 12:33:21.035000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2594513] [client -] [Tabby] webhook job: event=62 payment=bc07edc7-331d-4796-aa81-c400b519bc5f processed (already_final) [Thu Nov 5 12:33:21.228000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:54965] GET /tabby/demo/status/e799cf6b-2225-445f-b4bf-d7dbdf21a8eb [Thu Nov 5 12:33:21.229000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:54965] QUERY OK source="tabby_payments" db=0.5ms queue=0.1ms idle=243.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["e799cf6b-2225-445f-b4bf-d7dbdf21a8eb"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:33:21.229000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:54965] Sent 200 in 1ms [Thu Nov 5 12:33:54.558000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1598.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:33:54Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:33:54.600000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=40.8ms idle=1599.5ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 12:33:54], true, "90caba59-8e99-4a62-900f-909076ed4254", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:33:54.600000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=90caba59-8e99-4a62-900f-909076ed4254 CREATED -> EXPIRED [Thu Nov 5 12:33:54.601000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1641.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["90caba59-8e99-4a62-900f-909076ed4254"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:33:54.601000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook not sent: event=expire payment=90caba59-8e99-4a62-900f-909076ed4254 [Thu Nov 5 12:33:54.601000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=90caba59-8e99-4a62-900f-909076ed4254 expired (expires_at 2026-11-05 12:33:53Z, session_status=created) [Thu Nov 5 12:33:54.602000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1642.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:33:54Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:33:54.602000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 1 payment(s) were due [Thu Nov 5 12:33:54.603000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1643.2ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:33:54Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:33:54.604000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1643.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:33:54.652000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403438 scheduled in 14s (10 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:34:09.584000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1623.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:34:09Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:34:09.641000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=56.2ms idle=1624.9ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 12:34:09], true, "61ccb944-8086-453b-a4fe-c8737605667b", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:34:09.641000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=61ccb944-8086-453b-a4fe-c8737605667b CREATED -> EXPIRED [Thu Nov 5 12:34:09.642000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1681.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["61ccb944-8086-453b-a4fe-c8737605667b"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:34:09.642000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook not sent: event=expire payment=61ccb944-8086-453b-a4fe-c8737605667b [Thu Nov 5 12:34:09.642000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=61ccb944-8086-453b-a4fe-c8737605667b expired (expires_at 2026-11-05 12:34:08Z, session_status=created) [Thu Nov 5 12:34:09.643000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1682.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:34:09Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:34:09.643000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 1 payment(s) were due [Thu Nov 5 12:34:09.644000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms queue=0.1ms idle=1683.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:34:09Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:34:09.645000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1135.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:34:09.712000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403441 scheduled in 28s (9 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:34:38.701000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1741.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:34:38Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:34:38.783000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=80.4ms idle=1742.8ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 12:34:38], true, "8bfad71e-b3f7-4f24-90c2-96969018e4c2", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:34:38.783000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=8bfad71e-b3f7-4f24-90c2-96969018e4c2 CREATED -> EXPIRED [Thu Nov 5 12:34:38.785000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.5ms idle=1823.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["8bfad71e-b3f7-4f24-90c2-96969018e4c2"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:34:38.785000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook not sent: event=expire payment=8bfad71e-b3f7-4f24-90c2-96969018e4c2 [Thu Nov 5 12:34:38.785000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=8bfad71e-b3f7-4f24-90c2-96969018e4c2 expired (expires_at 2026-11-05 12:34:37Z, session_status=created) [Thu Nov 5 12:34:38.786000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=1826.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:34:38Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:34:38.787000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 1 payment(s) were due [Thu Nov 5 12:34:38.788000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1827.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:34:38Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:34:38.788000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1828.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:34:38.821000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403443 scheduled in 60s (8 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:35:09.847000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=1887.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["demostore", ~U[2026-10-18 12:35:09Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:35:09.850000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=2.4ms queue=0.1ms idle=1888.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["demostore", ~N[2026-11-05 12:33:09], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:35:09.851000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms queue=0.1ms idle=1891.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:35:09.852000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.8ms idle=1892.0ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", ~N[2026-11-05 12:33:09], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:35:09.854000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.9ms idle=1893.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["demostore", ~U[2026-11-05 12:30:09Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:35:09.854000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.3ms idle=1894.5ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-05 12:33:09Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Thu Nov 5 12:35:09.856000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_refunds" db=0.8ms idle=1100.4ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["demostore", ~N[2026-11-05 12:33:09], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Thu Nov 5 12:35:09.857000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms queue=0.2ms idle=897.0ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 12:35:09.858000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.8ms queue=0.1ms idle=100.2ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["demostore", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 12:35:09.859000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.3ms idle=12.1ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Thu Nov 5 12:35:09.859000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_refunds" db=0.4ms idle=11.6ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Thu Nov 5 12:35:09.859000 2026] [DaProductApp.Tabby.Poller:debug] [pid 2594513] [client -] [Tabby] poll: nothing to do; 0 attempt(s) still watched [Thu Nov 5 12:35:39.994000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1032.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:35:39Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:35:39.994000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:35:39.995000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1034.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:35:39Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:35:39.996000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1035.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:35:40.053000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403446 scheduled in 22s (8 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:36:03.259000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1296.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:36:03Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:36:03.302000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=42.7ms idle=1297.8ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 12:36:03], true, "1db6b999-1cbd-4837-9727-4e9e7bef0f46", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:36:03.302000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=1db6b999-1cbd-4837-9727-4e9e7bef0f46 CREATED -> EXPIRED [Thu Nov 5 12:36:03.304000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1339.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["1db6b999-1cbd-4837-9727-4e9e7bef0f46"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:36:03.304000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook not sent: event=expire payment=1db6b999-1cbd-4837-9727-4e9e7bef0f46 [Thu Nov 5 12:36:03.304000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=1db6b999-1cbd-4837-9727-4e9e7bef0f46 expired (expires_at 2026-11-05 12:36:01Z, session_status=created) [Thu Nov 5 12:36:03.385000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=79.8ms idle=1151.4ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 12:36:03], true, "e9d9d9ad-0cc4-4b01-8d9e-55fce39d3382", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:36:03.385000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=e9d9d9ad-0cc4-4b01-8d9e-55fce39d3382 CREATED -> EXPIRED [Thu Nov 5 12:36:03.386000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=425.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["e9d9d9ad-0cc4-4b01-8d9e-55fce39d3382"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:36:03.386000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook not sent: event=expire payment=e9d9d9ad-0cc4-4b01-8d9e-55fce39d3382 [Thu Nov 5 12:36:03.386000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=e9d9d9ad-0cc4-4b01-8d9e-55fce39d3382 expired (expires_at 2026-11-05 12:36:03Z, session_status=created) [Thu Nov 5 12:36:03.388000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=426.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:36:03Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:36:03.388000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 2 payment(s) were due [Thu Nov 5 12:36:03.389000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.1ms idle=427.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:36:03Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:36:03.390000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.1ms idle=428.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:36:03.430000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403449 scheduled in 43s (6 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:36:47.361000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:55959] GET /tabby-sim/hpp/819afd8d-3904-430b-92e8-be76d68ecf96 [Thu Nov 5 12:36:47.361000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:55959] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "819afd8d-3904-430b-92e8-be76d68ecf96"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:36:47.362000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:55959] QUERY OK source="tabby_sim_payments" db=0.6ms idle=401.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["819afd8d-3904-430b-92e8-be76d68ecf96"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:36:47.362000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:55959] Sent 410 in 1ms [Thu Nov 5 12:36:47.547000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=585.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:36:47Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:36:47.597000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=49.9ms idle=586.8ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 12:36:47], true, "565a271e-e0d7-4a66-a474-ef29de6b1c82", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:36:47.597000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=565a271e-e0d7-4a66-a474-ef29de6b1c82 CREATED -> EXPIRED [Thu Nov 5 12:36:47.599000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=637.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["565a271e-e0d7-4a66-a474-ef29de6b1c82"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:36:47.599000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook not sent: event=expire payment=565a271e-e0d7-4a66-a474-ef29de6b1c82 [Thu Nov 5 12:36:47.599000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=565a271e-e0d7-4a66-a474-ef29de6b1c82 expired (expires_at 2026-11-05 12:36:46Z, session_status=created) [Thu Nov 5 12:36:47.600000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=639.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:36:47Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:36:47.600000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 1 payment(s) were due [Thu Nov 5 12:36:47.601000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=515.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:36:47Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:36:47.602000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=431.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:36:47.651000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403450 scheduled in 43s (5 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:37:31.792000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=826.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:37:31Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:37:31.857000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=64.4ms idle=827.9ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 12:37:31], true, "1879e4d8-24bd-4525-ae49-8933e394179d", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:37:31.857000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=1879e4d8-24bd-4525-ae49-8933e394179d CREATED -> EXPIRED [Thu Nov 5 12:37:31.858000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=893.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["1879e4d8-24bd-4525-ae49-8933e394179d"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:37:31.858000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook not sent: event=expire payment=1879e4d8-24bd-4525-ae49-8933e394179d [Thu Nov 5 12:37:31.858000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=1879e4d8-24bd-4525-ae49-8933e394179d expired (expires_at 2026-11-05 12:37:30Z, session_status=created) [Thu Nov 5 12:37:31.859000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=894.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:37:31Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:37:31.859000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 1 payment(s) were due [Thu Nov 5 12:37:31.860000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=895.1ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:37:31Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:37:31.861000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=895.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:37:31.907000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403453 scheduled in 60s (4 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:38:33.077000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=112.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:38:33Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:38:33.078000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:38:33.078000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=113.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:38:33Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:38:33.080000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms queue=0.2ms idle=114.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:38:33.134000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403456 scheduled in 23s (4 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:38:57.393000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=428.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:38:57Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:38:57.466000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=72.2ms idle=429.6ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 12:38:57], true, "f477da17-91ce-4c99-a412-138dcee6d577", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:38:57.466000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=f477da17-91ce-4c99-a412-138dcee6d577 CREATED -> EXPIRED [Thu Nov 5 12:38:57.467000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=502.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["f477da17-91ce-4c99-a412-138dcee6d577"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:38:57.468000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook not sent: event=expire payment=f477da17-91ce-4c99-a412-138dcee6d577 [Thu Nov 5 12:38:57.468000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=f477da17-91ce-4c99-a412-138dcee6d577 expired (expires_at 2026-11-05 12:38:56Z, session_status=created) [Thu Nov 5 12:38:57.469000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=503.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:38:57Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:38:57.469000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 1 payment(s) were due [Thu Nov 5 12:38:57.470000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=504.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:38:57Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:38:57.470000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.1ms idle=505.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:38:57.513000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403457 scheduled in 60s (3 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:39:58.592000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1626.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:39:58Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:39:58.592000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:39:58.594000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1627.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:39:58Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:39:58.595000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.3ms idle=1628.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:39:58.644000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403459 scheduled in 33s (3 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:40:32.804000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=837.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:40:32Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:40:32.836000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=30.1ms queue=0.6ms idle=839.6ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 12:40:32], true, "33efea8e-03dd-4bd7-9e9c-3b1850b5030e", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:40:32.836000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=33efea8e-03dd-4bd7-9e9c-3b1850b5030e CREATED -> EXPIRED [Thu Nov 5 12:40:32.837000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=871.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["33efea8e-03dd-4bd7-9e9c-3b1850b5030e"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:40:32.837000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook not sent: event=expire payment=33efea8e-03dd-4bd7-9e9c-3b1850b5030e [Thu Nov 5 12:40:32.837000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=33efea8e-03dd-4bd7-9e9c-3b1850b5030e expired (expires_at 2026-11-05 12:40:31Z, session_status=created) [Thu Nov 5 12:40:32.838000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=872.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:40:32Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:40:32.838000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 1 payment(s) were due [Thu Nov 5 12:40:32.839000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=873.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:40:32Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:40:32.839000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=873.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:40:32.882000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403465 scheduled in 18s (2 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:40:52.052000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1084.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:40:52Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:40:52.079000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=26.3ms idle=1083.9ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 12:40:52], true, "de9f7a7a-6ab6-44f3-8fbd-52d9d134cf12", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:40:52.080000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=de9f7a7a-6ab6-44f3-8fbd-52d9d134cf12 CREATED -> EXPIRED [Thu Nov 5 12:40:52.082000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=115.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["de9f7a7a-6ab6-44f3-8fbd-52d9d134cf12"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:40:52.084000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook not sent: event=expire payment=de9f7a7a-6ab6-44f3-8fbd-52d9d134cf12 [Thu Nov 5 12:40:52.084000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=de9f7a7a-6ab6-44f3-8fbd-52d9d134cf12 expired (expires_at 2026-11-05 12:40:50Z, session_status=created) [Thu Nov 5 12:40:52.090000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=2.6ms queue=1.0ms idle=120.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:40:52Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:40:52.090000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 1 payment(s) were due [Thu Nov 5 12:40:52.093000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=2.0ms idle=124.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:40:52Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:40:52.095000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=127.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:40:52.154000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403466 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:41:26.891000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="global_table" db=0.7ms idle=1981.3ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 12:41:53.570000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1602.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:41:53Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:41:53.570000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:41:53.571000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1603.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:41:53Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:41:53.571000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1604.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:41:53.598000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403467 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:42:54.846000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.1ms idle=1879.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:42:54Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:42:54.846000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:42:54.848000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.5ms queue=0.2ms idle=1880.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:42:54Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:42:54.849000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1882.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:42:54.966000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403472 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:43:56.126000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1159.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:43:56Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:43:56.126000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:43:56.127000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1109.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:43:56Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:43:56.127000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=285.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:43:56.158000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403473 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:44:57.456000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.9ms idle=1484.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:44:57Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:44:57.457000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:44:57.458000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms queue=0.5ms idle=1486.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:44:57Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:44:57.460000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.4ms idle=1488.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:44:57.518000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403477 scheduled in 7s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:45:05.496000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.0ms idle=524.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:45:05Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:45:05.607000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=110.3ms idle=526.1ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 12:45:05], true, "194c98b5-8d73-4840-8fad-952d55c14ecb", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:45:05.607000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=194c98b5-8d73-4840-8fad-952d55c14ecb CREATED -> EXPIRED [Thu Nov 5 12:45:05.609000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=637.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["194c98b5-8d73-4840-8fad-952d55c14ecb"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:45:05.609000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook not sent: event=expire payment=194c98b5-8d73-4840-8fad-952d55c14ecb [Thu Nov 5 12:45:05.609000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=194c98b5-8d73-4840-8fad-952d55c14ecb expired (expires_at 2026-11-05 12:45:04Z, session_status=created) [Thu Nov 5 12:45:05.610000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms queue=0.1ms idle=638.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:45:05Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:45:05.610000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 1 payment(s) were due [Thu Nov 5 12:45:05.611000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=640.0ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:45:05Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:45:05.612000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=640.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:45:05.612000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job: no CREATED payment left, not rescheduling [Thu Nov 5 12:51:26.891000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="global_table" db=1.1ms idle=1972.6ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 12:54:03.045000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:63085] GET /tabby/demo [Thu Nov 5 12:54:03.050000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:63085] Sent 200 in 4ms [Thu Nov 5 12:54:03.853000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:63085] POST /tabby/demo/summary [Thu Nov 5 12:54:03.854000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:63085] Sent 200 in 542µs [Thu Nov 5 12:54:04.723000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:63085] POST /tabby/demo/eligibility [Thu Nov 5 12:54:04.971000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:51722] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:54:04.973000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:51722] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:54:04.974000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:51722] QUERY OK source="tabby_sim_faults" db=0.8ms queue=0.1ms idle=995.7ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:54:04.998000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:51722] QUERY OK db=23.2ms idle=997.2ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`is_test`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["1df22974-8146-4b6c-89f9-99c07cbafcb8", "CREATED", "AED", "8b43a52c-4a28-4800-8b1c-6a35d68fbe7e", "demostore", ~U[2026-11-05 13:06:04Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "created", %{"cancel" => nil, "failure" => nil, "success" => nil}, ~U[2026-11-05 13:04:04Z], false, Decimal.new("850.00"), [], [], true, ~N[2026-11-05 12:54:04], ~N[2026-11-05 12:54:04]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:54:04.998000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:51722] [TabbySim] checkout payment=1df22974-8146-4b6c-89f9-99c07cbafcb8 session=8b43a52c-4a28-4800-8b1c-6a35d68fbe7e decision=created reason=nil amount=850.00 AED [Thu Nov 5 12:54:04.999000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:51722] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1021.3ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:54:05.057000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client 127.0.0.1:51722] [TabbySim] expiry job 403499 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:54:05.057000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:51722] Sent 200 in 85ms [Thu Nov 5 12:54:05.058000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:63085] [Tabby] checkout post /api/v2/checkout -> 200 (334 ms, attempt 1) [Thu Nov 5 12:54:05.058000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:63085] [Tabby] session created payment=1df22974-8146-4b6c-89f9-99c07cbafcb8 [Thu Nov 5 12:54:05.059000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2594513] [client 115.99.167.137:63085] [Tabby] eligibility: show (amount=850.00 AED) [Thu Nov 5 12:54:05.060000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:63085] Sent 200 in 336ms [Thu Nov 5 12:54:23.217000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:63085] POST /tabby/demo/place [Thu Nov 5 12:54:23.270000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:63085] QUERY OK db=51.2ms idle=1242.1ms INSERT INTO `tabby_payments` (`id`,`status`,`currency`,`merchant_code`,`amount`,`order_reference`,`needs_attention`,`success_url`,`cancel_url`,`failure_url`,`captured_amount`,`refunded_amount`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["8ff1c5d0-2b56-4baf-bd4c-f36ed132e53e", "new", "AED", "demostore", Decimal.new("850.00"), "DEMO-D50BB07A", false, "http://demo.ctrmv.com:4030/tabby/demo/result/success?lang=en&order=DEMO-D50BB07A", "http://demo.ctrmv.com:4030/tabby/demo/result/cancel?lang=en&order=DEMO-D50BB07A", "http://demo.ctrmv.com:4030/tabby/demo/result/failure?lang=en&order=DEMO-D50BB07A", Decimal.new("0"), Decimal.new("0"), ~N[2026-11-05 12:54:23], ~N[2026-11-05 12:54:23]] ↳ DaProductApp.Tabby.PaymentStore.insert_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:21 [Thu Nov 5 12:54:23.521000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:51762] POST /tabby-sim/api/v2/checkout [Thu Nov 5 12:54:23.521000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:51762] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/8ff1c5d0-2b56-4baf-bd4c-f36ed132e53e/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/8ff1c5d0-2b56-4baf-bd4c-f36ed132e53e/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/8ff1c5d0-2b56-4baf-bd4c-f36ed132e53e/success"}, "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Anya Forger", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-D50BB07A"}, "shipping_address" => %{"address" => "Demo Tower 4, Office 302, DIFC", "city" => "Dubai", "zip" => "00000"}}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 12:54:23.522000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:51762] QUERY OK source="tabby_sim_faults" db=0.6ms idle=1071.1ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:54:23.570000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:51762] QUERY OK db=46.8ms idle=937.2ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`buyer_history`,`is_test`,`lang`,`shipping_address`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["aa9d486f-07c6-44e9-99c4-db82f293a553", "CREATED", "AED", "d3141126-c914-4313-84d0-47df87c9f69b", "demostore", ~U[2026-11-05 13:06:23Z], %{"lang" => "en", "merchant_code" => "demostore", "merchant_urls" => %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/8ff1c5d0-2b56-4baf-bd4c-f36ed132e53e/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/8ff1c5d0-2b56-4baf-bd4c-f36ed132e53e/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/8ff1c5d0-2b56-4baf-bd4c-f36ed132e53e/success"}, "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "name" => "Anya Forger", "phone" => "+971500000001"}, "buyer_history" => %{"registered_since" => "2023-02-01T10:00:00Z"}, "currency" => "AED", "order" => %{"items" => [%{"category" => "Demo", "quantity" => 1, "title" => "Demo headphones", "unit_price" => "650.00"}, %{"category" => "Demo", "quantity" => 1, "title" => "Demo smartwatch", "unit_price" => "200.00"}], "reference_id" => "DEMO-D50BB07A"}, "shipping_address" => %{"address" => "Demo Tower 4, Office 302, DIFC", "city" => "Dubai", "zip" => "00000"}}}, %{"discount_amount" => "0", "items" => [%{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo headphones", "unit_price" => "650"}, %{"brand" => "", "category" => "Demo", "color" => "", "description" => "", "discount_amount" => "0", "gender" => "", "image_url" => "", "is_refundable" => nil, "product_material" => "", "product_url" => "", "quantity" => 1, "reference_id" => "", "size" => "", "size_type" => "", "title" => "Demo smartwatch", "unit_price" => "200"}], "reference_id" => "DEMO-D50BB07A", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "name" => "Anya Forger", "phone" => "+971500000001"}, "created", %{"cancel" => "http://demo.ctrmv.com:4030/tabby/return/8ff1c5d0-2b56-4baf-bd4c-f36ed132e53e/cancel", "failure" => "http://demo.ctrmv.com:4030/tabby/return/8ff1c5d0-2b56-4baf-bd4c-f36ed132e53e/failure", "success" => "http://demo.ctrmv.com:4030/tabby/return/8ff1c5d0-2b56-4baf-bd4c-f36ed132e53e/success"}, ~U[2026-11-05 13:04:23Z], false, Decimal.new("850.00"), [], [], %{"registered_since" => "2023-02-01T10:00:00Z"}, true, "en", %{"address" => "Demo Tower 4, Office 302, DIFC", "city" => "Dubai", "zip" => "00000"}, ~N[2026-11-05 12:54:23], ~N[2026-11-05 12:54:23]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 12:54:23.570000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:51762] [TabbySim] checkout payment=aa9d486f-07c6-44e9-99c4-db82f293a553 session=d3141126-c914-4313-84d0-47df87c9f69b decision=created reason=nil amount=850.00 AED [Thu Nov 5 12:54:23.572000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:51762] QUERY OK source="tabby_sim_payments" db=0.7ms idle=594.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:54:23.573000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:51762] Sent 200 in 52ms [Thu Nov 5 12:54:23.574000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:63085] [Tabby] checkout post /api/v2/checkout -> 200 (304 ms, attempt 1) [Thu Nov 5 12:54:23.574000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:63085] [Tabby] session created payment=aa9d486f-07c6-44e9-99c4-db82f293a553 [Thu Nov 5 12:54:23.575000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:63085] QUERY OK source="tabby_payments" db=0.3ms idle=598.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["8ff1c5d0-2b56-4baf-bd4c-f36ed132e53e"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:28 [Thu Nov 5 12:54:23.646000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:63085] QUERY OK source="tabby_payments" db=70.5ms idle=553.4ms UPDATE `tabby_payments` SET `status` = ?, `expires_at` = ?, `tabby_payment_id` = ?, `tabby_session_id` = ?, `updated_at` = ? WHERE `id` = ? ["created", ~U[2026-11-05 13:14:23Z], "aa9d486f-07c6-44e9-99c4-db82f293a553", "d3141126-c914-4313-84d0-47df87c9f69b", ~N[2026-11-05 12:54:23], "8ff1c5d0-2b56-4baf-bd4c-f36ed132e53e"] ↳ DaProductApp.Tabby.PaymentStore.update_attempt/2, at: lib/da_product_app/tabby/payment_store.ex:30 [Thu Nov 5 12:54:23.646000 2026] [DaProductApp.Tabby.Sessions:info] [pid 2594513] [client 115.99.167.137:63085] [Tabby] session created attempt=8ff1c5d0-2b56-4baf-bd4c-f36ed132e53e payment=aa9d486f-07c6-44e9-99c4-db82f293a553 [Thu Nov 5 12:54:23.670000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:63085] Sent 200 in 453ms [Thu Nov 5 12:54:24.158000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:63085] GET /tabby-sim/hpp/d3141126-c914-4313-84d0-47df87c9f69b [Thu Nov 5 12:54:24.158000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:63085] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "d3141126-c914-4313-84d0-47df87c9f69b"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:54:24.159000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:63085] QUERY OK source="tabby_sim_payments" db=0.6ms idle=588.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["d3141126-c914-4313-84d0-47df87c9f69b"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:54:24.160000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:63085] Sent 200 in 2ms [Thu Nov 5 12:54:39.338000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:63085] POST /tabby-sim/hpp/d3141126-c914-4313-84d0-47df87c9f69b [Thu Nov 5 12:54:39.339000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:63085] Processing with DaProductAppWeb.TabbySim.HppController.submit/2 Parameters: %{"action" => "approve", "otp" => "8888", "plan" => "6", "session_id" => "d3141126-c914-4313-84d0-47df87c9f69b", "ui" => "1"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 12:54:39.340000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:63085] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1362.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["d3141126-c914-4313-84d0-47df87c9f69b"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:54:39.384000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:63085] QUERY OK source="tabby_sim_payments" db=43.9ms idle=1364.3ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["AUTHORIZED", ~N[2026-11-05 12:54:39], "aa9d486f-07c6-44e9-99c4-db82f293a553", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 12:54:39.385000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client 115.99.167.137:63085] [TabbySim] payment=aa9d486f-07c6-44e9-99c4-db82f293a553 CREATED -> AUTHORIZED [Thu Nov 5 12:54:39.386000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:63085] QUERY OK source="tabby_sim_payments" db=0.8ms idle=755.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["aa9d486f-07c6-44e9-99c4-db82f293a553"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 12:54:39.387000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:63085] QUERY OK source="tabby_sim_webhooks" db=0.5ms idle=410.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 12:54:39.432000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client 115.99.167.137:63085] [TabbySim] webhook queued job=403501 event=authorize payment=aa9d486f-07c6-44e9-99c4-db82f293a553 webhook=53 [Thu Nov 5 12:54:39.433000 2026] [DaProductApp.TabbySim.Hpp:info] [pid 2594513] [client 115.99.167.137:63085] [TabbySim] hpp payment=aa9d486f-07c6-44e9-99c4-db82f293a553 action=approve status=AUTHORIZED [Thu Nov 5 12:54:39.434000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:63085] QUERY OK source="tabby_sim_payments" db=0.7ms queue=0.1ms idle=457.0ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["d3141126-c914-4313-84d0-47df87c9f69b"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 12:54:39.434000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:63085] Sent 200 in 96ms [Thu Nov 5 12:54:39.520000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_webhooks" db=0.5ms idle=543.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 12:54:39.838000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:58598] POST /tabby/webhooks [Thu Nov 5 12:54:39.839000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:58598] QUERY OK source="tabby_payments" db=0.4ms idle=453.8ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["aa9d486f-07c6-44e9-99c4-db82f293a553"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:54:39.886000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:58598] QUERY OK db=46.6ms idle=453.2ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["authorized", false, "aa9d486f-07c6-44e9-99c4-db82f293a553", "{\"amount\":\"850\",\"captures\":[],\"closed_at\":null,\"created_at\":\"2026-11-05T12:54:23Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T13:06:23Z\",\"id\":\"aa9d486f-07c6-44e9-99c4-db82f293a553\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-D50BB07A\"},\"refunds\":[],\"status\":\"authorized\",\"token\":null}", ~U[2026-11-05 12:54:39Z], ~N[2026-11-05 12:54:39], ~N[2026-11-05 12:54:39]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 12:54:39.916000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2594513] [client 78.47.213.209:58598] [Tabby] webhook 200: event=63 payment=aa9d486f-07c6-44e9-99c4-db82f293a553 saved and queued [Thu Nov 5 12:54:39.916000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:58598] Sent 200 in 78ms [Thu Nov 5 12:54:39.984000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK db=66.7ms queue=0.1ms idle=483.3ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "authorize", ~U[2026-11-05 12:54:39Z], "aa9d486f-07c6-44e9-99c4-db82f293a553", 53, 200, 396, %{"amount" => "850", "captures" => [], "closed_at" => nil, "created_at" => "2026-11-05T12:54:23Z", "currency" => "AED", "expires_at" => "2026-11-05T13:06:23Z", "id" => "aa9d486f-07c6-44e9-99c4-db82f293a553", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-D50BB07A"}, "refunds" => [], "status" => "authorized", "token" => nil}, ~N[2026-11-05 12:54:39], ~N[2026-11-05 12:54:39]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 12:54:39.985000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook attempt=1 success event=authorize payment=aa9d486f-07c6-44e9-99c4-db82f293a553 url=http://demo.ctrmv.com:4030/tabby/webhooks (396 ms) [Thu Nov 5 12:54:39.996000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=1.1ms idle=404.5ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [63] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 12:54:39.997000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.7ms idle=365.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["aa9d486f-07c6-44e9-99c4-db82f293a553"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:54:39.998000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=322.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["8ff1c5d0-2b56-4baf-bd4c-f36ed132e53e"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:54:40.355000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:51762] GET /tabby-sim/api/v2/payments/aa9d486f-07c6-44e9-99c4-db82f293a553 [Thu Nov 5 12:54:40.356000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:51762] Processing with DaProductAppWeb.TabbySim.PaymentsController.show/2 Parameters: %{"id" => "aa9d486f-07c6-44e9-99c4-db82f293a553"} Pipelines: [:tabby_sim_api] [Thu Nov 5 12:54:40.357000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:51762] QUERY OK source="tabby_sim_faults" db=0.8ms idle=440.6ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["retrieve", "aa9d486f-07c6-44e9-99c4-db82f293a553"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 12:54:40.358000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:51762] QUERY OK source="tabby_sim_faults" db=0.4ms queue=0.2ms idle=373.4ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["retrieve"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:54:40.359000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:51762] QUERY OK source="tabby_sim_payments" db=0.5ms idle=363.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["aa9d486f-07c6-44e9-99c4-db82f293a553"] ↳ DaProductApp.TabbySim.Payments.get/1, at: lib/da_product_app/tabby_sim/payments.ex:24 [Thu Nov 5 12:54:40.359000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:51762] Sent 200 in 4ms [Thu Nov 5 12:54:40.361000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client -] [Tabby] retrieve get /api/v2/payments/aa9d486f-07c6-44e9-99c4-db82f293a553 -> 200 (362 ms, attempt 1) [Thu Nov 5 12:54:40.410000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=48.7ms idle=364.7ms UPDATE `tabby_payments` AS t0 SET t0.`authorized_at` = ?, t0.`winner_key` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [~U[2026-11-05 12:54:40Z], "da7ae880c52ed2381e7ad953fe081a4cd78e5b47d1805b9bca548081fe09ab2a", "authorized", ~N[2026-11-05 12:54:40], "8ff1c5d0-2b56-4baf-bd4c-f36ed132e53e", "created"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 12:54:40.411000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=412.9ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["8ff1c5d0-2b56-4baf-bd4c-f36ed132e53e"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:54:40.411000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2594513] [client -] [Tabby] verify: attempt=8ff1c5d0-2b56-4baf-bd4c-f36ed132e53e payment=aa9d486f-07c6-44e9-99c4-db82f293a553 created -> authorized [Thu Nov 5 12:54:40.515000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=46.0ms idle=368.4ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 12:54:40Z], 63] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 12:54:40.515000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2594513] [client -] [Tabby] webhook job: event=63 payment=aa9d486f-07c6-44e9-99c4-db82f293a553 processed (recorded authorized) [Thu Nov 5 12:54:40.589000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=231.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["8ff1c5d0-2b56-4baf-bd4c-f36ed132e53e"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:54:40.665000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=75.6ms idle=230.8ms UPDATE `tabby_payments` AS t0 SET t0.`capture_reference_id` = ?, t0.`claimed_at` = ?, t0.`claimed_by` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["capture-DEMO-D50BB07A", ~U[2026-11-05 12:54:40Z], "nonode@nohost", "capturing", ~N[2026-11-05 12:54:40], "8ff1c5d0-2b56-4baf-bd4c-f36ed132e53e", "authorized"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 12:54:40.666000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=254.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["8ff1c5d0-2b56-4baf-bd4c-f36ed132e53e"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:54:40.666000 2026] [DaProductApp.Tabby.Capture:info] [pid 2594513] [client -] [Tabby] capture: attempt=8ff1c5d0-2b56-4baf-bd4c-f36ed132e53e payment=aa9d486f-07c6-44e9-99c4-db82f293a553 claimed (authorized -> capturing) [Thu Nov 5 12:54:40.964000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:51762] POST /tabby-sim/api/v2/payments/aa9d486f-07c6-44e9-99c4-db82f293a553/captures [Thu Nov 5 12:54:40.964000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:51762] Processing with DaProductAppWeb.TabbySim.PaymentsController.capture/2 Parameters: %{"amount" => "850.00", "id" => "aa9d486f-07c6-44e9-99c4-db82f293a553", "reference_id" => "capture-DEMO-D50BB07A"} Pipelines: [:tabby_sim_api] [Thu Nov 5 12:54:40.965000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:51762] QUERY OK source="tabby_sim_faults" db=0.5ms idle=449.9ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` = ?)) ORDER BY t0.`id` LIMIT 1 ["capture", "aa9d486f-07c6-44e9-99c4-db82f293a553"] ↳ DaProductApp.TabbySim.Faults.candidate/2, at: lib/da_product_app/tabby_sim/faults.ex:73 [Thu Nov 5 12:54:40.966000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:51762] QUERY OK source="tabby_sim_faults" db=0.4ms queue=0.2ms idle=401.3ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["capture"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 12:54:40.967000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:51762] QUERY OK source="tabby_sim_payments" db=0.6ms idle=378.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["aa9d486f-07c6-44e9-99c4-db82f293a553"] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:227 [Thu Nov 5 12:54:40.969000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:51762] QUERY OK db=0.6ms idle=379.2ms begin [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Thu Nov 5 12:54:40.970000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:51762] QUERY OK source="tabby_sim_payments" db=0.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) FOR UPDATE ["aa9d486f-07c6-44e9-99c4-db82f293a553"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:231 [Thu Nov 5 12:54:41.079000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:51762] QUERY OK source="tabby_sim_payments" db=108.5ms UPDATE `tabby_sim_payments` SET `status` = ?, `closed_at` = ?, `captures` = ?, `updated_at` = ? WHERE `id` = ? ["CLOSED", ~U[2026-11-05 12:54:40Z], [%{"amount" => "850", "created_at" => "2026-11-05T12:54:40Z", "discount_amount" => "0", "id" => "0ba768a5-219a-423a-bbcf-aa8d88a7c89d", "items" => nil, "reference_id" => "capture-DEMO-D50BB07A", "shipping_amount" => "0", "tax_amount" => "0"}], ~N[2026-11-05 12:54:40], "aa9d486f-07c6-44e9-99c4-db82f293a553"] ↳ anonymous fn/3 in DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:244 [Thu Nov 5 12:54:41.079000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client 127.0.0.1:51762] [TabbySim] capture payment=aa9d486f-07c6-44e9-99c4-db82f293a553 status=CLOSED [Thu Nov 5 12:54:41.156000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:51762] QUERY OK db=76.2ms commit [] ↳ DaProductApp.TabbySim.Payments.mutate/3, at: lib/da_product_app/tabby_sim/payments.ex:230 [Thu Nov 5 12:54:41.177000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:51762] QUERY OK source="tabby_sim_webhooks" db=21.1ms idle=521.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 12:54:41.238000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client 127.0.0.1:51762] [TabbySim] webhook queued job=403505 event=capture payment=aa9d486f-07c6-44e9-99c4-db82f293a553 webhook=53 [Thu Nov 5 12:54:41.239000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:51762] QUERY OK source="tabby_sim_webhooks" db=0.4ms idle=573.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`merchant_code` = ?) ORDER BY t0.`id` ["demostore"] ↳ DaProductApp.TabbySim.Webhooks.queue/3, at: lib/da_product_app/tabby_sim/webhooks.ex:93 [Thu Nov 5 12:54:41.296000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client 127.0.0.1:51762] [TabbySim] webhook queued job=403506 event=close payment=aa9d486f-07c6-44e9-99c4-db82f293a553 webhook=53 [Thu Nov 5 12:54:41.297000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:51762] Sent 200 in 332ms [Thu Nov 5 12:54:41.297000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client -] [Tabby] capture post /api/v2/payments/aa9d486f-07c6-44e9-99c4-db82f293a553/captures -> 200 (632 ms, attempt 1) [Thu Nov 5 12:54:41.338000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_webhooks" db=0.4ms idle=372.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 12:54:41.365000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=67.4ms idle=469.6ms UPDATE `tabby_payments` AS t0 SET t0.`captured_amount` = ?, t0.`captured_at` = ?, t0.`status` = ?, t0.`updated_at` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) [Decimal.new("850"), ~U[2026-11-05 12:54:40Z], "captured", ~N[2026-11-05 12:54:41], "8ff1c5d0-2b56-4baf-bd4c-f36ed132e53e", "capturing"] ↳ DaProductApp.Tabby.PaymentStore.compare_and_set/4, at: lib/da_product_app/tabby/payment_store.ex:279 [Thu Nov 5 12:54:41.366000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=399.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["8ff1c5d0-2b56-4baf-bd4c-f36ed132e53e"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:54:41.367000 2026] [DaProductApp.Tabby.Verifier:info] [pid 2594513] [client -] [Tabby] verify: attempt=8ff1c5d0-2b56-4baf-bd4c-f36ed132e53e payment=aa9d486f-07c6-44e9-99c4-db82f293a553 capturing -> captured [Thu Nov 5 12:54:41.367000 2026] [DaProductApp.Tabby.Capture:info] [pid 2594513] [client -] [Tabby] capture: attempt=8ff1c5d0-2b56-4baf-bd4c-f36ed132e53e payment=aa9d486f-07c6-44e9-99c4-db82f293a553 is captured [Thu Nov 5 12:54:41.604000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:58598] POST /tabby/webhooks [Thu Nov 5 12:54:41.605000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:58598] QUERY OK source="tabby_payments" db=0.6ms idle=365.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["aa9d486f-07c6-44e9-99c4-db82f293a553"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:54:41.629000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:58598] QUERY OK db=23.0ms idle=309.3ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["authorized", false, "aa9d486f-07c6-44e9-99c4-db82f293a553", "{\"amount\":\"850\",\"captures\":[{\"amount\":\"850\",\"created_at\":\"2026-11-05T12:54:40Z\",\"discount_amount\":\"0\",\"id\":\"0ba768a5-219a-423a-bbcf-aa8d88a7c89d\",\"items\":null,\"reference_id\":\"capture-DEMO-D50BB07A\",\"shipping_amount\":\"0\",\"tax_amount\":\"0\"}],\"closed_at\":null,\"created_at\":\"2026-11-05T12:54:23Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T13:06:23Z\",\"id\":\"aa9d486f-07c6-44e9-99c4-db82f293a553\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-D50BB07A\"},\"refunds\":[],\"status\":\"authorized\",\"token\":null}", ~U[2026-11-05 12:54:41Z], ~N[2026-11-05 12:54:41], ~N[2026-11-05 12:54:41]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 12:54:41.687000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2594513] [client 78.47.213.209:58598] [Tabby] webhook 200: event=64 payment=aa9d486f-07c6-44e9-99c4-db82f293a553 saved and queued [Thu Nov 5 12:54:41.687000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:58598] Sent 200 in 83ms [Thu Nov 5 12:54:41.728000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK db=39.6ms idle=321.1ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "capture", ~U[2026-11-05 12:54:41Z], "aa9d486f-07c6-44e9-99c4-db82f293a553", 53, 200, 349, %{"amount" => "850", "captures" => [%{"amount" => "850", "created_at" => "2026-11-05T12:54:40Z", "discount_amount" => "0", "id" => "0ba768a5-219a-423a-bbcf-aa8d88a7c89d", "items" => nil, "reference_id" => "capture-DEMO-D50BB07A", "shipping_amount" => "0", "tax_amount" => "0"}], "closed_at" => nil, "created_at" => "2026-11-05T12:54:23Z", "currency" => "AED", "expires_at" => "2026-11-05T13:06:23Z", "id" => "aa9d486f-07c6-44e9-99c4-db82f293a553", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-D50BB07A"}, "refunds" => [], "status" => "authorized", "token" => nil}, ~N[2026-11-05 12:54:41], ~N[2026-11-05 12:54:41]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 12:54:41.728000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook attempt=1 success event=capture payment=aa9d486f-07c6-44e9-99c4-db82f293a553 url=http://demo.ctrmv.com:4030/tabby/webhooks (349 ms) [Thu Nov 5 12:54:41.810000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.5ms idle=313.0ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [64] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 12:54:41.811000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=205.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["aa9d486f-07c6-44e9-99c4-db82f293a553"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:54:41.812000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.3ms idle=182.6ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["8ff1c5d0-2b56-4baf-bd4c-f36ed132e53e"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:54:41.848000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=35.5ms idle=180.5ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 12:54:41Z], 64] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 12:54:41.848000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2594513] [client -] [Tabby] webhook job: event=64 payment=aa9d486f-07c6-44e9-99c4-db82f293a553 processed (already_final) [Thu Nov 5 12:54:42.179000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:63085] GET /tabby/return/8ff1c5d0-2b56-4baf-bd4c-f36ed132e53e/success [Thu Nov 5 12:54:42.180000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:63085] QUERY OK source="tabby_payments" db=0.9ms idle=370.3ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["8ff1c5d0-2b56-4baf-bd4c-f36ed132e53e"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:54:42.218000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:63085] Sent 302 in 39ms [Thu Nov 5 12:54:42.300000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms idle=470.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["8ff1c5d0-2b56-4baf-bd4c-f36ed132e53e"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:54:42.675000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:63085] GET /tabby/demo/result/success [Thu Nov 5 12:54:42.675000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:63085] Sent 200 in 541µs [Thu Nov 5 12:54:42.711000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_webhooks" db=0.4ms idle=526.5ms SELECT t0.`id`, t0.`merchant_code`, t0.`url`, t0.`header_title`, t0.`header_value`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_webhooks` AS t0 WHERE (t0.`id` = ?) [53] ↳ DaProductApp.TabbySim.WebhookWorker.perform/1, at: lib/da_product_app/tabby_sim/webhook_worker.ex:29 [Thu Nov 5 12:54:42.993000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:58598] POST /tabby/webhooks [Thu Nov 5 12:54:42.994000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:58598] QUERY OK source="tabby_payments" db=0.5ms idle=604.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["aa9d486f-07c6-44e9-99c4-db82f293a553"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:54:43.078000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 78.47.213.209:58598] QUERY OK db=83.1ms idle=542.4ms INSERT INTO `tabby_webhook_events` (`status`,`processed`,`tabby_payment_id`,`raw_body`,`received_at`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) ["closed", false, "aa9d486f-07c6-44e9-99c4-db82f293a553", "{\"amount\":\"850\",\"captures\":[{\"amount\":\"850\",\"created_at\":\"2026-11-05T12:54:40Z\",\"discount_amount\":\"0\",\"id\":\"0ba768a5-219a-423a-bbcf-aa8d88a7c89d\",\"items\":null,\"reference_id\":\"capture-DEMO-D50BB07A\",\"shipping_amount\":\"0\",\"tax_amount\":\"0\"}],\"closed_at\":\"2026-11-05T12:54:40Z\",\"created_at\":\"2026-11-05T12:54:23Z\",\"currency\":\"AED\",\"expires_at\":\"2026-11-05T13:06:23Z\",\"id\":\"aa9d486f-07c6-44e9-99c4-db82f293a553\",\"is_expired\":false,\"is_test\":true,\"meta\":null,\"order\":{\"reference_id\":\"DEMO-D50BB07A\"},\"refunds\":[],\"status\":\"closed\",\"token\":null}", ~U[2026-11-05 12:54:42Z], ~N[2026-11-05 12:54:42], ~N[2026-11-05 12:54:42]] ↳ DaProductApp.Tabby.PaymentStore.insert_event/1, at: lib/da_product_app/tabby/payment_store.ex:81 [Thu Nov 5 12:54:43.133000 2026] [DaProductApp.Tabby.Webhooks:info] [pid 2594513] [client 78.47.213.209:58598] [Tabby] webhook 200: event=65 payment=aa9d486f-07c6-44e9-99c4-db82f293a553 saved and queued [Thu Nov 5 12:54:43.133000 2026] [Phoenix.Logger:info] [pid 2594513] [client 78.47.213.209:58598] Sent 200 in 140ms [Thu Nov 5 12:54:43.150000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:63085] GET /tabby/demo/status/8ff1c5d0-2b56-4baf-bd4c-f36ed132e53e [Thu Nov 5 12:54:43.151000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:63085] QUERY OK source="tabby_payments" db=0.5ms idle=372.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["8ff1c5d0-2b56-4baf-bd4c-f36ed132e53e"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:54:43.151000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:63085] Sent 200 in 1ms [Thu Nov 5 12:54:43.181000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK db=47.5ms idle=423.1ms INSERT INTO `tabby_sim_webhook_deliveries` (`state`,`url`,`attempt`,`event`,`attempted_at`,`payment_id`,`webhook_id`,`http_status`,`duration_ms`,`request_body`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ["success", "http://demo.ctrmv.com:4030/tabby/webhooks", 1, "close", ~U[2026-11-05 12:54:43Z], "aa9d486f-07c6-44e9-99c4-db82f293a553", 53, 200, 422, %{"amount" => "850", "captures" => [%{"amount" => "850", "created_at" => "2026-11-05T12:54:40Z", "discount_amount" => "0", "id" => "0ba768a5-219a-423a-bbcf-aa8d88a7c89d", "items" => nil, "reference_id" => "capture-DEMO-D50BB07A", "shipping_amount" => "0", "tax_amount" => "0"}], "closed_at" => "2026-11-05T12:54:40Z", "created_at" => "2026-11-05T12:54:23Z", "currency" => "AED", "expires_at" => "2026-11-05T13:06:23Z", "id" => "aa9d486f-07c6-44e9-99c4-db82f293a553", "is_expired" => false, "is_test" => true, "meta" => nil, "order" => %{"reference_id" => "DEMO-D50BB07A"}, "refunds" => [], "status" => "closed", "token" => nil}, ~N[2026-11-05 12:54:43], ~N[2026-11-05 12:54:43]] ↳ DaProductApp.TabbySim.Webhooks.log/1, at: lib/da_product_app/tabby_sim/webhooks.ex:242 [Thu Nov 5 12:54:43.182000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook attempt=1 success event=close payment=aa9d486f-07c6-44e9-99c4-db82f293a553 url=http://demo.ctrmv.com:4030/tabby/webhooks (422 ms) [Thu Nov 5 12:54:43.214000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.5ms idle=279.5ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE (t0.`id` = ?) [65] ↳ DaProductApp.Tabby.PaymentStore.get_event/1, at: lib/da_product_app/tabby/payment_store.ex:88 [Thu Nov 5 12:54:43.215000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=220.4ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`tabby_payment_id` = ?) LIMIT 1 ["aa9d486f-07c6-44e9-99c4-db82f293a553"] ↳ DaProductApp.Tabby.PaymentStore.find_attempt_by_payment_id/1, at: lib/da_product_app/tabby/payment_store.ex:71 [Thu Nov 5 12:54:43.215000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.3ms idle=196.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (t0.`id` = ?) ["8ff1c5d0-2b56-4baf-bd4c-f36ed132e53e"] ↳ DaProductApp.Tabby.PaymentStore.get_attempt/1, at: lib/da_product_app/tabby/payment_store.ex:38 [Thu Nov 5 12:54:43.279000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=63.1ms idle=138.3ms UPDATE `tabby_webhook_events` AS t0 SET t0.`processed` = ?, t0.`processed_at` = ? WHERE ((t0.`id` = ?) AND (t0.`processed` = FALSE)) [true, ~U[2026-11-05 12:54:43Z], 65] ↳ DaProductApp.Tabby.PaymentStore.mark_event_processed/1, at: lib/da_product_app/tabby/payment_store.ex:100 [Thu Nov 5 12:54:43.279000 2026] [DaProductApp.Tabby.WebhookWorker:info] [pid 2594513] [client -] [Tabby] webhook job: event=65 payment=aa9d486f-07c6-44e9-99c4-db82f293a553 processed (already_final) [Thu Nov 5 12:55:05.870000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1469.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:55:05Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:55:05.870000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:55:05.871000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1144.4ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:55:05Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:55:05.873000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=894.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:55:05.953000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403512 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:56:07.181000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.2ms idle=1201.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:56:07Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:56:07.181000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:56:07.183000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms queue=0.4ms idle=1203.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:56:07Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:56:07.183000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1162.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:56:07.243000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403515 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:56:25.310000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.6ms idle=331.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('authorized','capturing') AND (t0.`authorized_at` <= ?)) ORDER BY t0.`authorized_at` LIMIT ? ["demostore", ~U[2026-10-18 12:56:25Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:56:25.311000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.4ms queue=0.1ms idle=332.2ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'created') AND (t0.`inserted_at` <= ?)) ORDER BY t0.`inserted_at` LIMIT ? ["demostore", ~N[2026-11-05 12:54:25], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:56:25.313000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.7ms idle=333.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", "another attempt for this order is already authorized", 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:56:25.315000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.5ms queue=0.8ms idle=335.1ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (((t0.`status` = 'authorized') AND NOT (t0.`winner_key` IS NULL)) AND (t0.`updated_at` <= ?)) ORDER BY t0.`updated_at` LIMIT ? ["demostore", ~N[2026-11-05 12:54:25], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:56:25.315000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.4ms idle=336.7ms SELECT t0.`id`, t0.`merchant_code`, t0.`order_reference`, t0.`winner_key`, t0.`tabby_session_id`, t0.`tabby_payment_id`, t0.`status`, t0.`rejection_reason`, t0.`amount`, t0.`currency`, t0.`captured_amount`, t0.`refunded_amount`, t0.`capture_reference_id`, t0.`claimed_at`, t0.`claimed_by`, t0.`success_url`, t0.`cancel_url`, t0.`failure_url`, t0.`expires_at`, t0.`authorized_at`, t0.`captured_at`, t0.`closed_at`, t0.`needs_attention`, t0.`attention_note`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND ((t0.`status` = 'capturing') AND (t0.`claimed_at` <= ?)) ORDER BY t0.`claimed_at` LIMIT ? ["demostore", ~U[2026-11-05 12:51:25Z], 50] ↳ anonymous fn/1 in DaProductApp.Tabby.PaymentStore.poll_candidates/2, at: lib/da_product_app/tabby/payment_store.ex:56 [Thu Nov 5 12:56:25.317000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.9ms idle=337.5ms SELECT t0.`id`, t0.`raw_body`, t0.`tabby_payment_id`, t0.`status`, t0.`received_at`, t0.`processed`, t0.`processed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_webhook_events` AS t0 WHERE ((t0.`processed` = FALSE) AND (t0.`received_at` <= ?)) ORDER BY t0.`id` LIMIT ? [~U[2026-11-05 12:54:25Z], 50] ↳ DaProductApp.Tabby.PaymentStore.unprocessed_events/2, at: lib/da_product_app/tabby/payment_store.ex:108 [Thu Nov 5 12:56:25.318000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_refunds" db=1.2ms idle=338.8ms SELECT t0.`id`, t0.`payment_id`, t0.`sequence`, t0.`reference_id`, t0.`amount`, t0.`reason`, t0.`request_id`, t0.`status`, t0.`tabby_refund_id`, t0.`error_kind`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) AND (t0.`inserted_at` <= ?) ORDER BY t0.`inserted_at`, t0.`sequence` LIMIT ? ["demostore", ~N[2026-11-05 12:54:25], 50] ↳ DaProductApp.Tabby.PaymentStore.pending_refunds/3, at: lib/da_product_app/tabby/payment_store.ex:195 [Thu Nov 5 12:56:25.320000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=1.2ms queue=0.2ms idle=340.3ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE ((t0.`merchant_code` = ?) AND (t0.`needs_attention` = FALSE)) AND (t0.`status` IN ('created','authorized','capturing')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 12:56:25.321000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_payments" db=0.9ms queue=0.1ms idle=174.6ms SELECT count(*) FROM `tabby_payments` AS t0 WHERE (((((t0.`merchant_code` = ?) AND (t0.`status` = 'authorized')) AND (t0.`winner_key` IS NULL)) AND (t0.`needs_attention` = TRUE)) AND (t0.`attention_note` = ?)) ["demostore", "another attempt for this order is already authorized"] ↳ DaProductApp.Tabby.PaymentStore.count_open/2, at: lib/da_product_app/tabby/payment_store.ex:64 [Thu Nov 5 12:56:25.322000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_webhook_events" db=0.6ms queue=0.1ms idle=12.6ms SELECT count(*) FROM `tabby_webhook_events` AS t0 WHERE (t0.`processed` = FALSE) [] ↳ DaProductApp.Tabby.PaymentStore.count_unprocessed_events/0, at: lib/da_product_app/tabby/payment_store.ex:115 [Thu Nov 5 12:56:25.323000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_refunds" db=0.7ms idle=12.7ms SELECT count(*) FROM `tabby_refunds` AS t0 INNER JOIN `tabby_payments` AS t1 ON t1.`id` = t0.`payment_id` WHERE ((t1.`merchant_code` = ?) AND (t0.`status` = 'pending')) ["demostore"] ↳ DaProductApp.Tabby.PaymentStore.count_pending_refunds/1, at: lib/da_product_app/tabby/payment_store.ex:202 [Thu Nov 5 12:56:25.324000 2026] [DaProductApp.Tabby.Poller:debug] [pid 2594513] [client -] [Tabby] poll: nothing to do; 0 attempt(s) still watched [Thu Nov 5 12:57:08.500000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1519.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:57:08Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:57:08.500000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:57:08.501000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1520.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:57:08Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:57:08.502000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1522.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:57:08.545000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403518 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:58:09.776000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1794.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:58:09Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:58:09.776000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:58:09.777000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms queue=0.1ms idle=1795.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:58:09Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:58:09.778000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.1ms idle=1796.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:58:09.855000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403521 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 12:59:11.253000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1136.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:59:11Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 12:59:11.254000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 12:59:11.255000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms queue=0.1ms idle=1088.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 12:59:11Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 12:59:11.256000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=271.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 12:59:11.312000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403522 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 13:00:12.641000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1657.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 13:00:12Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 13:00:12.642000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 13:00:12.643000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1658.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 13:00:12Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 13:00:12.644000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1659.9ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 13:00:12.899000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403548 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 13:01:14.234000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=250.7ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 13:01:14Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 13:01:14.235000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 13:01:14.235000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=251.8ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 13:01:14Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 13:01:14.236000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=252.8ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 13:01:14.302000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403549 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 13:01:26.891000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="global_table" db=1.2ms idle=1956.7ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 13:02:15.537000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms idle=1553.2ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 13:02:15Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 13:02:15.538000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 13:02:15.538000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1554.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 13:02:15Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 13:02:15.540000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.5ms idle=1555.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 13:02:15.624000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403554 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 13:03:16.869000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1885.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 13:03:16Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 13:03:16.869000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 13:03:16.870000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=1886.3ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 13:03:16Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 13:03:16.871000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1887.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 13:03:16.913000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403555 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 13:04:18.128000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1144.6ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 13:04:18Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 13:04:18.129000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 13:04:18.130000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms idle=1091.2ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 13:04:18Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 13:04:18.131000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=147.7ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 13:04:18.167000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403558 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 13:05:19.467000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1483.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 13:05:19Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 13:05:19.467000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 13:05:19.468000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1484.2ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 13:05:19Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 13:05:19.468000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1485.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 13:05:19.563000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403562 scheduled in 45s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 13:06:05.829000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1842.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 13:06:05Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 13:06:05.896000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=65.1ms queue=1.1ms idle=1083.9ms UPDATE `tabby_sim_payments` AS t0 SET t0.`status` = ?, t0.`updated_at` = ?, t0.`is_expired` = ? WHERE ((t0.`id` = ?) AND (t0.`status` = ?)) ["EXPIRED", ~N[2026-11-05 13:06:05], true, "1df22974-8146-4b6c-89f9-99c07cbafcb8", "CREATED"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:51 [Thu Nov 5 13:06:05.896000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=1df22974-8146-4b6c-89f9-99c07cbafcb8 CREATED -> EXPIRED [Thu Nov 5 13:06:05.897000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms idle=1047.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`id` = ?) ["1df22974-8146-4b6c-89f9-99c07cbafcb8"] ↳ DaProductApp.TabbySim.Payments.transition/5, at: lib/da_product_app/tabby_sim/payments.ex:55 [Thu Nov 5 13:06:05.897000 2026] [DaProductApp.TabbySim.Webhooks:info] [pid 2594513] [client -] [TabbySim] webhook not sent: event=expire payment=1df22974-8146-4b6c-89f9-99c07cbafcb8 [Thu Nov 5 13:06:05.898000 2026] [DaProductApp.TabbySim.Payments:info] [pid 2594513] [client -] [TabbySim] payment=1df22974-8146-4b6c-89f9-99c07cbafcb8 expired (expires_at 2026-11-05 13:06:04Z, session_status=created) [Thu Nov 5 13:06:05.899000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms queue=0.1ms idle=913.9ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 13:06:05Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 13:06:05.899000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 1 payment(s) were due [Thu Nov 5 13:06:05.900000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.3ms idle=914.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 13:06:05Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 13:06:05.901000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.4ms idle=916.5ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 13:06:05.901000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job: no CREATED payment left, not rescheduling [Thu Nov 5 13:11:26.891000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="global_table" db=1.0ms idle=1944.7ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 13:21:26.890000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="global_table" db=0.8ms idle=1939.7ms SELECT g0.`config_key`, g0.`config_value` FROM `global_table` AS g0 [] ↳ DaProductApp.GlobalSettings.load_once/1, at: lib/da_product_app/global_settings.ex:92 [Thu Nov 5 13:24:01.325000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:63865] GET /tabby/demo [Thu Nov 5 13:24:01.330000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:63865] Sent 200 in 5ms [Thu Nov 5 13:24:01.904000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:63865] POST /tabby/demo/summary [Thu Nov 5 13:24:01.905000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:63865] Sent 200 in 602µs [Thu Nov 5 13:24:02.809000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:63865] POST /tabby/demo/eligibility [Thu Nov 5 13:24:03.133000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:55998] POST /tabby-sim/api/v2/checkout [Thu Nov 5 13:24:03.134000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 127.0.0.1:55998] Processing with DaProductAppWeb.TabbySim.CheckoutController.create/2 Parameters: %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}} Pipelines: [:tabby_sim_checkout] [Thu Nov 5 13:24:03.135000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:55998] QUERY OK source="tabby_sim_faults" db=0.7ms queue=0.1ms idle=1127.6ms SELECT t0.`id`, t0.`endpoint`, t0.`kind`, t0.`payment_id`, t0.`remaining`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_faults` AS t0 WHERE (((t0.`endpoint` = ?) AND (t0.`remaining` > 0)) AND (t0.`payment_id` IS NULL)) ORDER BY t0.`id` LIMIT 1 ["checkout"] ↳ DaProductApp.TabbySim.Faults.attempt/3, at: lib/da_product_app/tabby_sim/faults.ex:52 [Thu Nov 5 13:24:03.175000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:55998] QUERY OK db=39.1ms idle=1128.0ms INSERT INTO `tabby_sim_payments` (`id`,`status`,`currency`,`session_id`,`merchant_code`,`expires_at`,`payload`,`order`,`buyer`,`session_status`,`merchant_urls`,`session_expires_at`,`is_expired`,`amount`,`captures`,`refunds`,`is_test`,`inserted_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ["fc099ae2-0abd-4b4e-95fe-8c7c8c46d263", "CREATED", "AED", "213139b3-2cc1-412e-a012-41117b664b1e", "demostore", ~U[2026-11-05 13:36:03Z], %{"merchant_code" => "demostore", "payment" => %{"amount" => "850.00", "buyer" => %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "currency" => "AED"}}, %{"discount_amount" => "0", "items" => [], "reference_id" => "", "shipping_amount" => "0", "tax_amount" => "0", "updated_at" => "0001-01-01T00:00:00Z"}, %{"email" => "otp.success@tabby.ai", "phone" => "+971500000001"}, "created", %{"cancel" => nil, "failure" => nil, "success" => nil}, ~U[2026-11-05 13:34:03Z], false, Decimal.new("850.00"), [], [], true, ~N[2026-11-05 13:24:03], ~N[2026-11-05 13:24:03]] ↳ DaProductApp.TabbySim.Checkout.create_session/1, at: lib/da_product_app/tabby_sim/checkout.ex:46 [Thu Nov 5 13:24:03.175000 2026] [DaProductApp.TabbySim.Checkout:info] [pid 2594513] [client 127.0.0.1:55998] [TabbySim] checkout payment=fc099ae2-0abd-4b4e-95fe-8c7c8c46d263 session=213139b3-2cc1-412e-a012-41117b664b1e decision=created reason=nil amount=850.00 AED [Thu Nov 5 13:24:03.179000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 127.0.0.1:55998] QUERY OK source="tabby_sim_payments" db=2.5ms queue=1.2ms idle=1167.4ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 13:24:03.226000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client 127.0.0.1:55998] [TabbySim] expiry job 403603 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 13:24:03.227000 2026] [Phoenix.Logger:info] [pid 2594513] [client 127.0.0.1:55998] Sent 200 in 93ms [Thu Nov 5 13:24:03.229000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:63865] [Tabby] checkout post /api/v2/checkout -> 200 (418 ms, attempt 1) [Thu Nov 5 13:24:03.230000 2026] [DaProductApp.Tabby.Client:info] [pid 2594513] [client 115.99.167.137:63865] [Tabby] session created payment=fc099ae2-0abd-4b4e-95fe-8c7c8c46d263 [Thu Nov 5 13:24:03.230000 2026] [DaProductApp.Tabby.Eligibility:info] [pid 2594513] [client 115.99.167.137:63865] [Tabby] eligibility: show (amount=850.00 AED) [Thu Nov 5 13:24:03.230000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:63865] Sent 200 in 420ms [Thu Nov 5 13:24:23.656000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:63865] GET /tabby-sim/hpp/819afd8d-3904-430b-92e8-be76d68ecf96 [Thu Nov 5 13:24:23.656000 2026] [Phoenix.Logger:debug] [pid 2594513] [client 115.99.167.137:63865] Processing with DaProductAppWeb.TabbySim.HppController.show/2 Parameters: %{"session_id" => "819afd8d-3904-430b-92e8-be76d68ecf96"} Pipelines: [:tabby_sim_hpp] [Thu Nov 5 13:24:23.657000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client 115.99.167.137:63865] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1650.5ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (t0.`session_id` = ?) ["819afd8d-3904-430b-92e8-be76d68ecf96"] ↳ DaProductApp.TabbySim.Payments.get_by_session_id/1, at: lib/da_product_app/tabby_sim/payments.ex:30 [Thu Nov 5 13:24:23.658000 2026] [Phoenix.Logger:info] [pid 2594513] [client 115.99.167.137:63865] Sent 410 in 1ms [Thu Nov 5 13:25:04.114000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.7ms idle=1103.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 13:25:04Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 13:25:04.114000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 13:25:04.115000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1101.6ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 13:25:04Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 13:25:04.118000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=2.0ms idle=1102.6ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 13:25:04.264000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403606 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 13:26:05.472000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1458.8ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 13:26:05Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 13:26:05.472000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 13:26:05.473000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.9ms queue=0.1ms idle=1459.9ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 13:26:05Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 13:26:05.474000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=1461.2ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 13:26:05.517000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403609 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 13:27:05.862000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=846.4ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 13:27:05Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 13:27:05.863000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 13:27:05.863000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=847.5ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 13:27:05Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 13:27:05.864000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.6ms idle=848.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 13:27:05.899000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403612 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 13:28:07.118000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.8ms queue=0.1ms idle=100.3ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 13:28:07Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 13:28:07.118000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 13:28:07.119000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=1.1ms queue=0.1ms idle=101.7ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 13:28:07Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 13:28:07.122000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=2.8ms idle=103.1ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 13:28:07.169000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403615 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck) [Thu Nov 5 13:29:08.618000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1601.1ms SELECT t0.`id`, t0.`session_id`, t0.`merchant_code`, t0.`session_status`, t0.`status`, t0.`rejection_reason`, t0.`rejection_reason_code`, t0.`is_test`, t0.`is_expired`, t0.`amount`, t0.`currency`, t0.`description`, t0.`buyer`, t0.`buyer_history`, t0.`shipping_address`, t0.`order`, t0.`order_history`, t0.`meta`, t0.`attachment`, t0.`merchant_urls`, t0.`lang`, t0.`captures`, t0.`refunds`, t0.`payload`, t0.`session_expires_at`, t0.`expires_at`, t0.`closed_at`, t0.`inserted_at`, t0.`updated_at` FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 13:29:08Z]] ↳ DaProductApp.TabbySim.Payments.expire_due/0, at: lib/da_product_app/tabby_sim/payments.ex:138 [Thu Nov 5 13:29:08.618000 2026] [DaProductApp.TabbySim.ExpiryWorker:info] [pid 2594513] [client -] [TabbySim] expiry job: 0 payment(s) were due [Thu Nov 5 13:29:08.619000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.5ms idle=1602.2ms SELECT count(t0.`id`) FROM `tabby_sim_payments` AS t0 WHERE (((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) AND (t0.`expires_at` <= ?)) [~U[2026-11-05 13:29:08Z]] ↳ DaProductApp.TabbySim.ExpiryWorker.perform/1, at: lib/da_product_app/tabby_sim/expiry_worker.ex:30 [Thu Nov 5 13:29:08.620000 2026] [Ecto.Adapters.SQL:debug] [pid 2594513] [client -] QUERY OK source="tabby_sim_payments" db=0.3ms idle=1603.0ms SELECT count(t0.`id`), min(t0.`expires_at`) FROM `tabby_sim_payments` AS t0 WHERE ((t0.`status` = 'CREATED') AND NOT (t0.`expires_at` IS NULL)) [] ↳ DaProductApp.TabbySim.Expiry.schedule_next/1, at: lib/da_product_app/tabby_sim/expiry.ex:38 [Thu Nov 5 13:29:08.658000 2026] [DaProductApp.TabbySim.Expiry:info] [pid 2594513] [client -] [TabbySim] expiry job 403616 scheduled in 60s (1 CREATED payment(s) waiting, 0 stuck)