kamau1 commited on
Commit
756bc21
Β·
1 Parent(s): c001b0a

fix: add 60s timeout to Cloudinary uploads with Supabase fallback for large images

Browse files
docs/devlogs/browser/browserconsole.txt CHANGED
@@ -0,0 +1,202 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Download the React DevTools for a better development experience: https://reactjs.org/link/react-devtools
2
+ %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/auth/me
3
+ ⚠️ React Router Future Flag Warning: React Router will begin wrapping state updates in `React.startTransition` in v7. You can use the `v7_startTransition` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_starttransition.
4
+ warnOnce @ react-router-dom.js?v=02c37274:4393
5
+ ⚠️ React Router Future Flag Warning: Relative route resolution within Splat routes is changing in v7. You can use the `v7_relativeSplatPath` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_relativesplatpath.
6
+ warnOnce @ react-router-dom.js?v=02c37274:4393
7
+ WebSocket connection to 'ws://localhost:8080/?token=5ZvTJdG43mEu' failed:
8
+ setupWebSocket @ client:536
9
+ WebSocket connection to 'ws://localhost:8080/?token=5ZvTJdG43mEu' failed:
10
+ setupWebSocket @ client:536
11
+ [vite] failed to connect to websocket.
12
+ your current setup:
13
+ (browser) localhost:8080/ <--[HTTP]--> localhost:8080/ (server)
14
+ (browser) localhost:8080/ <--[WebSocket (failing)]--> localhost:8080/ (server)
15
+ Check out your Vite / network configuration and https://vite.dev/config/server-options.html#server-hmr .
16
+ (anonymous) @ client:512
17
+ GET https://kamau1-swiftops-backend.hf.space/api/v1/auth/me β†’ 200 (6.00s)
18
+ %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/auth/me/preferences
19
+ GET https://kamau1-swiftops-backend.hf.space/api/v1/auth/me/preferences β†’ 200 (1.52s)
20
+ %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/dashboard
21
+ ℹ️ [11:18:04] [COMPONENT] ProjectDashboardPage: Project dashboard loaded Object
22
+ GET https://kamau1-swiftops-backend.hf.space/api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/dashboard β†’ 200 (8.25s)
23
+ %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/stats?project_id=0ade6bd1-e492-4e25-b681-59f42058d29a
24
+ GET https://kamau1-swiftops-backend.hf.space/api/v1/tickets/stats?project_id=0ade6bd1-e492-4e25-b681-59f42058d29a β†’ 200 (786ms)
25
+ ℹ️ [11:18:18] [AUTH] Logout initiated
26
+ %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/auth/logout
27
+ POST https://kamau1-swiftops-backend.hf.space/api/v1/auth/logout β†’ 200 (4.23s)
28
+ ℹ️ [11:18:23] [AUTH] Logout successful on server
29
+ ℹ️ [11:18:23] [AUTH] Tokens cleared, user logged out
30
+ ℹ️ [11:18:26] [AUTH] Login attempt Object
31
+ %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/auth/login
32
+ POST https://kamau1-swiftops-backend.hf.space/api/v1/auth/login β†’ 200 (652ms)
33
+ ℹ️ [11:18:27] [AUTH] Login successful, tokens stored Object
34
+ ℹ️ [11:18:27] [AUTH] User logged in successfully Object
35
+ %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/auth/me
36
+ GET https://kamau1-swiftops-backend.hf.space/api/v1/auth/me β†’ 200 (880ms)
37
+ ℹ️ [11:18:29] [COMPONENT] Dashboard component selected Object
38
+ %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/analytics/user/overview?limit=50
39
+ GET https://kamau1-swiftops-backend.hf.space/api/v1/analytics/user/overview?limit=50 β†’ 200 (3.06s)
40
+ %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/projects?page=1&per_page=100&status=active
41
+ GET https://kamau1-swiftops-backend.hf.space/api/v1/projects?page=1&per_page=100&status=active β†’ 200 (542ms)
42
+ %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/detail
43
+ GET https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/detail β†’ 200 (1.09s)
44
+ %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/regions/24510a5a-13a6-4334-9055-b4d476aa9e0a
45
+ GET https://kamau1-swiftops-backend.hf.space/api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/regions/24510a5a-13a6-4334-9055-b4d476aa9e0a β†’ 200 (879ms)
46
+ Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}.
47
+ (anonymous) @ chunk-3WZOQKYN.js?v=02c37274:340
48
+ %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-expenses
49
+ POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-expenses β†’ 201 (2.33s)
50
+ %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/detail
51
+ GET https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/detail β†’ 200 (336ms)
52
+ Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}.
53
+ (anonymous) @ chunk-3WZOQKYN.js?v=02c37274:340
54
+ %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-expenses
55
+ POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-expenses β†’ 201 (843ms)
56
+ %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/detail
57
+ GET https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/detail β†’ 200 (342ms)
58
+ %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/start-journey
59
+ POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/start-journey β†’ 200 (718ms)
60
+ %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/detail
61
+ %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
62
+ POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location β†’ 200 (1.26s)
63
+ GET https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/detail β†’ 200 (1.47s)
64
+ %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
65
+ POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location β†’ 200 (309ms)
66
+ %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
67
+ POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location β†’ 200 (503ms)
68
+ %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
69
+ POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location β†’ 200 (346ms)
70
+ %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
71
+ POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location β†’ 200 (1.13s)
72
+ %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
73
+ POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location β†’ 200 (1.22s)
74
+ %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
75
+ POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location β†’ 200 (850ms)
76
+ %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
77
+ POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location β†’ 200 (343ms)
78
+ %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
79
+ POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location β†’ 200 (1.09s)
80
+ %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
81
+ POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location β†’ 200 (1.86s)
82
+ %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
83
+ POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location β†’ 200 (432ms)
84
+ %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
85
+ core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location β†’ 200 (712ms)
86
+ core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
87
+ core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location β†’ 200 (1.16s)
88
+ core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
89
+ core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location β†’ 200 (1.34s)
90
+ core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
91
+ core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location β†’ 200 (533ms)
92
+ core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
93
+ core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location β†’ 200 (2.06s)
94
+ core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
95
+ core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location β†’ 200 (1.10s)
96
+ core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
97
+ core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location β†’ 200 (1.52s)
98
+ core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
99
+ core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location β†’ 200 (660ms)
100
+ core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
101
+ core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location β†’ 200 (530ms)
102
+ core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
103
+ core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location β†’ 200 (1.01s)
104
+ core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
105
+ core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location β†’ 200 (872ms)
106
+ core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
107
+ core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location β†’ 200 (931ms)
108
+ core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
109
+ core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location β†’ 200 (1.01s)
110
+ core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
111
+ core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/arrived
112
+ core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location β†’ 200 (362ms)
113
+ core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/arrived β†’ 200 (669ms)
114
+ core.ts:169 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/detail
115
+ core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
116
+ core.ts:169 GET https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/detail β†’ 200 (637ms)
117
+ api-client.ts:124 POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location 400 (Bad Request)
118
+ request @ api-client.ts:124
119
+ post @ api-client.ts:213
120
+ updateLocation @ tickets.service.ts:411
121
+ (anonymous) @ LocationTrackerContext.tsx:79
122
+ core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location β†’ 400 (976ms)
123
+ LocationTrackerContext.tsx:90 [LocationTracker] Failed to stream location: APIError: Already arrived. No more location updates needed.
124
+ at APIClient.request (api-client.ts:158:15)
125
+ at async updateLocation (tickets.service.ts:411:5)
126
+ at async LocationTrackerContext.tsx:79:25
127
+ (anonymous) @ LocationTrackerContext.tsx:90
128
+ core.ts:169 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/completion-checklist
129
+ core.ts:169 GET https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/completion-checklist β†’ 200 (2.10s)
130
+ image-compression.ts:50 Image compressed: 56687 -> 46590 bytes
131
+ core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/upload-photos
132
+ image-compression.ts:50 Image compressed: 299548 -> 245006 bytes
133
+ core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/upload-photos
134
+ image-compression.ts:50 Image compressed: 211885 -> 205136 bytes
135
+ core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/upload-photos
136
+ image-compression.ts:50 Image compressed: 2073692 -> 271804 bytes
137
+ core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/upload-photos
138
+ core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/upload-photos β†’ 200 (5.15s)
139
+ core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/completion-data
140
+ core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/upload-photos β†’ 408 (30.77s)
141
+ TicketCompletionWizard.tsx:184 Background upload error APIError: Request timeout
142
+ at APIClient.request (api-client.ts:173:30)
143
+ at async uploadCompletionPhoto (tickets.service.ts:445:22)
144
+ at async Promise.all (index 2)
145
+ (anonymous) @ TicketCompletionWizard.tsx:184
146
+ Promise.catch
147
+ handleStep1Next @ TicketCompletionWizard.tsx:183
148
+ handleNext @ TicketCompletionWizard.tsx:275
149
+ callCallback2 @ chunk-276SZO74.js?v=02c37274:3674
150
+ invokeGuardedCallbackDev @ chunk-276SZO74.js?v=02c37274:3699
151
+ invokeGuardedCallback @ chunk-276SZO74.js?v=02c37274:3733
152
+ invokeGuardedCallbackAndCatchFirstError @ chunk-276SZO74.js?v=02c37274:3736
153
+ executeDispatch @ chunk-276SZO74.js?v=02c37274:7014
154
+ processDispatchQueueItemsInOrder @ chunk-276SZO74.js?v=02c37274:7034
155
+ processDispatchQueue @ chunk-276SZO74.js?v=02c37274:7043
156
+ dispatchEventsForPlugins @ chunk-276SZO74.js?v=02c37274:7051
157
+ (anonymous) @ chunk-276SZO74.js?v=02c37274:7174
158
+ batchedUpdates$1 @ chunk-276SZO74.js?v=02c37274:18913
159
+ batchedUpdates @ chunk-276SZO74.js?v=02c37274:3579
160
+ dispatchEventForPluginEventSystem @ chunk-276SZO74.js?v=02c37274:7173
161
+ dispatchEventWithEnableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay @ chunk-276SZO74.js?v=02c37274:5478
162
+ dispatchEvent @ chunk-276SZO74.js?v=02c37274:5472
163
+ dispatchDiscreteEvent @ chunk-276SZO74.js?v=02c37274:5449
164
+ core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/upload-photos β†’ 408 (30.73s)
165
+ core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/upload-photos β†’ 408 (30.67s)
166
+ core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/completion-data β†’ 408 (30.01s)
167
+ core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/completion-data
168
+ core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/completion-data β†’ 200 (345ms)
169
+ image-compression.ts:50 Image compressed: 211885 -> 205136 bytes
170
+ core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/upload-photos
171
+ image-compression.ts:50 Image compressed: 299548 -> 245006 bytes
172
+ core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/upload-photos
173
+ core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/completion-data
174
+ image-compression.ts:50 Image compressed: 5576851 -> 189208 bytes
175
+ core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/upload-photos
176
+ core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/completion-data β†’ 200 (16.73s)
177
+ core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/upload-photos β†’ 408 (30.00s)
178
+ TicketCompletionWizard.tsx:184 Background upload error APIError: Request timeout
179
+ at APIClient.request (api-client.ts:173:30)
180
+ at async uploadCompletionPhoto (tickets.service.ts:445:22)
181
+ at async Promise.all (index 0)
182
+ (anonymous) @ TicketCompletionWizard.tsx:184
183
+ Promise.catch
184
+ handleStep1Next @ TicketCompletionWizard.tsx:183
185
+ handleNext @ TicketCompletionWizard.tsx:275
186
+ callCallback2 @ chunk-276SZO74.js?v=02c37274:3674
187
+ invokeGuardedCallbackDev @ chunk-276SZO74.js?v=02c37274:3699
188
+ invokeGuardedCallback @ chunk-276SZO74.js?v=02c37274:3733
189
+ invokeGuardedCallbackAndCatchFirstError @ chunk-276SZO74.js?v=02c37274:3736
190
+ executeDispatch @ chunk-276SZO74.js?v=02c37274:7014
191
+ processDispatchQueueItemsInOrder @ chunk-276SZO74.js?v=02c37274:7034
192
+ processDispatchQueue @ chunk-276SZO74.js?v=02c37274:7043
193
+ dispatchEventsForPlugins @ chunk-276SZO74.js?v=02c37274:7051
194
+ (anonymous) @ chunk-276SZO74.js?v=02c37274:7174
195
+ batchedUpdates$1 @ chunk-276SZO74.js?v=02c37274:18913
196
+ batchedUpdates @ chunk-276SZO74.js?v=02c37274:3579
197
+ dispatchEventForPluginEventSystem @ chunk-276SZO74.js?v=02c37274:7173
198
+ dispatchEventWithEnableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay @ chunk-276SZO74.js?v=02c37274:5478
199
+ dispatchEvent @ chunk-276SZO74.js?v=02c37274:5472
200
+ dispatchDiscreteEvent @ chunk-276SZO74.js?v=02c37274:5449
201
+ core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/upload-photos β†’ 408 (30.01s)
202
+ core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/upload-photos β†’ 408 (30.02s)
docs/devlogs/db/logs.sql CHANGED
@@ -1,6 +1 @@
1
- INSERT INTO "public"."timesheets" ("id", "user_id", "project_id", "work_date", "status", "check_in_time", "check_out_time", "hours_worked", "leave_reason", "leave_approved_by_user_id", "notes", "additional_metadata", "created_at", "updated_at", "deleted_at", "tickets_assigned", "tickets_completed", "tickets_rescheduled", "tickets_cancelled", "tickets_rejected", "is_payroll_generated", "payroll_id", "total_expenses", "approved_expenses", "pending_expenses", "rejected_expenses", "expense_claims_count", "inventory_issued_count", "inventory_issued_value", "inventory_installed_count", "inventory_consumed_count", "inventory_returned_count", "inventory_returned_value", "inventory_lost_count", "inventory_damaged_count", "inventory_loss_value", "inventory_on_hand_count", "inventory_on_hand_value", "inventory_details", "version") VALUES ('39d65205-7d0a-4081-9eb2-e581c767992f', '43b778b0-2062-4724-abbb-916a4835a9b0', '0ade6bd1-e492-4e25-b681-59f42058d29a', '2025-12-11', 'on_leave', null, null, null, 'please', null, null, '{}', '2025-12-10 08:12:03.015561+00', '2025-12-10 08:12:03.015564+00', null, '0', '0', '0', '0', '0', 'false', null, '0.00', '0.00', '0.00', '0.00', '0', '0', '0.00', '0', '0', '0', '0.00', '0', '0', '0.00', '0', '0.00', '[]', '1'), ('7d9fa491-c16d-42b2-8115-b02d98873b64', '43b778b0-2062-4724-abbb-916a4835a9b0', '0ade6bd1-e492-4e25-b681-59f42058d29a', '2025-12-13', 'present', null, null, null, null, null, null, '{}', '2025-12-13 07:17:52.420939+00', '2025-12-13 10:52:33.893222+00', null, '1', '0', '0', '0', '0', 'false', null, '0.00', '0.00', '0.00', '0.00', '0', '0', '0.00', '0', '0', '0', '0.00', '0', '0', '0.00', '0', '0.00', '[]', '3');
2
-
3
-
4
- INSERT INTO "public"."ticket_expenses" ("id", "ticket_assignment_id", "ticket_id", "incurred_by_user_id", "category", "description", "quantity", "unit", "unit_cost", "total_cost", "receipt_document_id", "location_verified", "verification_notes", "is_approved", "approved_by_user_id", "approved_at", "rejection_reason", "is_paid", "paid_to_user_id", "paid_at", "payment_reference", "notes", "additional_metadata", "created_at", "updated_at", "deleted_at", "payment_recipient_type", "payment_method", "payment_details", "expense_date", "timesheet_synced", "timesheet_synced_at") VALUES ('01d2c337-3104-4723-87cf-7d1de66be823', 'f5b40f0c-bc9c-4904-9ec1-7e570bda34eb', '169eec08-654d-4ffe-bdb3-45fad1101637', '43b778b0-2062-4724-abbb-916a4835a9b0', 'meals', 'kwa mathe ', '1.00', 'unit', '70.00', '70.00', null, 'false', 'Not verified: No GPS location found for 2025-12-10. Manual review required.', 'false', null, null, null, 'false', null, null, null, '', '{}', '2025-12-10 11:39:05.973838+00', '2025-12-10 11:39:05.97384+00', null, 'agent', 'send_money', '{"phone_number": "+2547994597823", "recipient_name": "Viyisa"}', '2025-12-10', 'false', null), ('053dbe58-919c-4a11-9ca5-eb2a8384bf66', '4fe9d28c-b657-4672-9138-78edabb9749b', '1e622599-1909-49b9-9d8b-4c5cb483b29e', '43b778b0-2062-4724-abbb-916a4835a9b0', 'transport', 'uber ', '1.00', 'unit', '340.00', '340.00', null, 'false', 'Not verified: No GPS location found for 2025-12-10. Manual review required.', 'true', 'c5cf92be-4172-4fe2-af5c-f05d83b3a938', '2025-12-10 17:32:35.048874+00', null, 'true', '43b778b0-2062-4724-abbb-916a4835a9b0', '2025-12-10 17:32:47.362899+00', 'CSV_EXPORT_20251210_173247_c5cf92be-4172-4fe2-af5c-f05d83b3a938', '', '{}', '2025-12-10 12:25:27.373978+00', '2025-12-10 17:32:47.365061+00', null, 'agent', 'send_money', '{"phone_number": "+254799459782", "recipient_name": "Viyisa"}', '2025-12-10', 'false', null), ('0bf05fe1-ea66-4391-9d93-0059164b247a', '20772cb1-ec31-41dc-9cb0-73649dc6ac55', '70090c47-e9c1-4b0a-add4-69bec53d92f9', '43b778b0-2062-4724-abbb-916a4835a9b0', 'transport', 'uber boda', '1.00', 'unit', '70.00', '70.00', null, 'false', 'Not verified: No GPS location found for 2025-12-09. Manual review required.', 'true', 'c5cf92be-4172-4fe2-af5c-f05d83b3a938', '2025-12-09 08:36:43.568628+00', null, 'true', '43b778b0-2062-4724-abbb-916a4835a9b0', '2025-12-09 10:17:50.227495+00', 'CSV_EXPORT_20251209_101750_c5cf92be-4172-4fe2-af5c-f05d83b3a938', 'long jorney', '{}', '2025-12-09 07:36:51.915415+00', '2025-12-09 10:17:50.232336+00', null, 'agent', 'send_money', '{"phone_number": "+254799459782", "recipient_name": "Viyisa"}', '2025-12-09', 'false', null), ('29df452a-ceb5-4bcb-8d3f-e4b732ab46fd', 'e2096a93-8f55-4063-92c5-2bc7122b3228', '1e622599-1909-49b9-9d8b-4c5cb483b29e', '43b778b0-2062-4724-abbb-916a4835a9b0', 'transport', 'testing vendor payment', '1.00', 'unit', '1000.00', '1000.00', null, 'false', 'Not verified: No GPS location found for 2025-12-13. Manual review required.', 'false', null, null, null, 'false', null, null, null, 'pay for fuel to shell', '{}', '2025-12-13 10:52:33.770683+00', '2025-12-13 10:52:33.964172+00', null, 'vendor', 'till_number', '{"till_number": "2342356", "business_name": "Shelli"}', '2025-12-13', 'true', '2025-12-13 10:52:33.957461+00'), ('2e21e94f-400e-4ab3-8a0a-b26724227e60', '4fe9d28c-b657-4672-9138-78edabb9749b', '1e622599-1909-49b9-9d8b-4c5cb483b29e', '43b778b0-2062-4724-abbb-916a4835a9b0', 'other', 'Toa chai', '1.00', 'unit', '50.00', '50.00', null, 'false', 'Not verified: No GPS location found for 2025-12-10. Manual review required.', 'true', 'c5cf92be-4172-4fe2-af5c-f05d83b3a938', '2025-12-10 17:32:35.0489+00', null, 'false', null, null, null, '', '{}', '2025-12-10 12:22:02.788205+00', '2025-12-10 17:32:35.048906+00', null, 'agent', 'send_money', '{"phone_number": "+254799459782", "recipient_name": "Viyisa"}', '2025-12-10', 'false', null), ('35db9201-3c05-4853-be91-5eb6f30782d1', '34c2a077-5630-4af8-843d-e125c2497267', '2de41ce7-dff1-4151-9710-87958d18b5c4', '43b778b0-2062-4724-abbb-916a4835a9b0', 'transport', 'nganya', '1.00', 'unit', '60.00', '60.00', null, 'false', 'Not verified: No GPS location found for 2025-12-10. Manual review required.', 'true', 'c5cf92be-4172-4fe2-af5c-f05d83b3a938', '2025-12-10 12:49:31.240803+00', null, 'true', '43b778b0-2062-4724-abbb-916a4835a9b0', '2025-12-10 13:23:41.579606+00', 'CSV_EXPORT_20251210_132341_c5cf92be-4172-4fe2-af5c-f05d83b3a938', '', '{}', '2025-12-10 12:48:01.97843+00', '2025-12-10 13:23:41.581979+00', null, 'agent', 'send_money', '{"phone_number": "+254799459782", "recipient_name": "Viyisa"}', '2025-12-10', 'false', null), ('5d0a1d44-0eb4-4b32-90ec-5cbdda883238', '4fe9d28c-b657-4672-9138-78edabb9749b', '1e622599-1909-49b9-9d8b-4c5cb483b29e', '43b778b0-2062-4724-abbb-916a4835a9b0', 'transport', 'boda to road', '1.00', 'unit', '150.00', '150.00', null, 'false', 'Not verified: No GPS location found for 2025-12-10. Manual review required.', 'true', 'c5cf92be-4172-4fe2-af5c-f05d83b3a938', '2025-12-13 10:40:29.510366+00', null, 'false', null, null, null, '', '{}', '2025-12-10 12:02:36.66789+00', '2025-12-13 10:40:29.510372+00', null, 'agent', 'send_money', '{"phone_number": "+254799459782", "recipient_name": "Viyisa"}', '2025-12-10', 'false', null), ('6d64a8fc-219c-465b-b1a1-7e710b391a70', '4fe9d28c-b657-4672-9138-78edabb9749b', '1e622599-1909-49b9-9d8b-4c5cb483b29e', '43b778b0-2062-4724-abbb-916a4835a9b0', 'accommodation', 'Slept', '1.00', 'unit', '2000.00', '2000.00', null, 'false', 'Not verified: No GPS location found for 2025-12-10. Manual review required.', 'false', null, null, null, 'false', null, null, null, '', '{}', '2025-12-10 11:53:42.062175+00', '2025-12-10 11:53:42.062179+00', null, 'agent', 'send_money', '{"phone_number": "+254799459782", "recipient_name": "Viyisa"}', '2025-12-10', 'false', null), ('6ec9e645-e4ff-4408-ac9f-de41b37e64dc', 'f5b40f0c-bc9c-4904-9ec1-7e570bda34eb', '169eec08-654d-4ffe-bdb3-45fad1101637', '43b778b0-2062-4724-abbb-916a4835a9b0', 'transport', 'we move', '1.00', 'unit', '50.00', '50.00', null, 'false', 'Not verified: No GPS location found for 2025-12-10. Manual review required.', 'false', null, null, null, 'false', null, null, null, '', '{}', '2025-12-10 11:30:03.835226+00', '2025-12-10 11:30:03.835228+00', null, 'agent', 'send_money', '{"phone_number": "+", "recipient_name": "Viyisa"}', '2025-12-10', 'false', null), ('754be718-8834-4b99-804b-01a3f1974e07', 'a82a3824-f4f1-4283-a2e3-8c348dbb28ce', 'f59b29fc-d0b9-4618-b0d1-889e340da612', '43b778b0-2062-4724-abbb-916a4835a9b0', 'transport', 'boda boda', '1.00', 'unit', '5000.00', '5000.00', null, 'true', 'Verified: Agent arrived at site on 2025-11-30 with GPS location', 'false', 'c5cf92be-4172-4fe2-af5c-f05d83b3a938', '2025-12-09 08:51:10.572232+00', 'this is exergrated for the short distance travelled', 'false', null, null, null, 'mpesa message', '{}', '2025-11-30 20:52:12.047667+00', '2025-12-09 08:51:10.572648+00', null, null, null, null, '2025-11-30', 'false', null), ('7b697e88-c4c1-4366-b05e-c0689a90451c', '4fe9d28c-b657-4672-9138-78edabb9749b', '1e622599-1909-49b9-9d8b-4c5cb483b29e', '43b778b0-2062-4724-abbb-916a4835a9b0', 'transport', 'bolt', '1.00', 'unit', '210.00', '210.00', null, 'false', 'Not verified: No GPS location found for 2025-12-10. Manual review required.', 'true', 'c5cf92be-4172-4fe2-af5c-f05d83b3a938', '2025-12-10 12:49:31.240768+00', null, 'true', '43b778b0-2062-4724-abbb-916a4835a9b0', '2025-12-10 13:48:43.261279+00', 'CSV_EXPORT_20251210_134843_c5cf92be-4172-4fe2-af5c-f05d83b3a938', '', '{}', '2025-12-10 12:31:04.554338+00', '2025-12-10 13:48:43.265153+00', null, 'agent', 'send_money', '{"phone_number": "+254799459782", "recipient_name": "Viyisa"}', '2025-12-10', 'false', null), ('b8a0bac2-69c0-4218-a565-e1e2b6ce0d4d', '34c2a077-5630-4af8-843d-e125c2497267', '2de41ce7-dff1-4151-9710-87958d18b5c4', '43b778b0-2062-4724-abbb-916a4835a9b0', 'transport', 'boda boda', '1.00', 'unit', '100.00', '100.00', null, 'false', 'Not verified: No GPS location found for 2025-12-10. Manual review required.', 'true', 'c5cf92be-4172-4fe2-af5c-f05d83b3a938', '2025-12-10 12:49:31.240785+00', null, 'true', '43b778b0-2062-4724-abbb-916a4835a9b0', '2025-12-10 13:48:43.261303+00', 'CSV_EXPORT_20251210_134843_c5cf92be-4172-4fe2-af5c-f05d83b3a938', '', '{}', '2025-12-10 12:32:23.362852+00', '2025-12-10 13:48:43.265156+00', null, 'agent', 'send_money', '{"phone_number": "+254799459782", "recipient_name": "Viyisa"}', '2025-12-10', 'false', null), ('c466510a-96d8-48e1-82cf-9c6d4ff51fff', 'd6f25868-5117-4b85-8bb3-44314144ef6e', '0fd3ee15-5e7d-465a-b377-155f9bdb7e70', '43b778b0-2062-4724-abbb-916a4835a9b0', 'transport', 'boda', '1.00', 'unit', '9.97', '9.97', null, 'true', 'Verified: Agent changed ticket status on 2025-12-01 with GPS location', 'true', 'c5cf92be-4172-4fe2-af5c-f05d83b3a938', '2025-12-08 20:37:52.435561+00', null, 'true', '43b778b0-2062-4724-abbb-916a4835a9b0', '2025-12-09 10:17:50.227511+00', 'CSV_EXPORT_20251209_101750_c5cf92be-4172-4fe2-af5c-f05d83b3a938', 'aZfghji', '{}', '2025-12-01 09:15:39.988606+00', '2025-12-09 10:17:50.232338+00', null, null, null, null, '2025-12-01', 'false', null), ('d73cb843-e4fb-4200-aa3e-243887714422', '34c2a077-5630-4af8-843d-e125c2497267', '2de41ce7-dff1-4151-9710-87958d18b5c4', '43b778b0-2062-4724-abbb-916a4835a9b0', 'transport', 'matatu', '1.00', 'unit', '30.00', '30.00', null, 'false', 'Not verified: No GPS location found for 2025-12-10. Manual review required.', 'true', 'c5cf92be-4172-4fe2-af5c-f05d83b3a938', '2025-12-10 12:49:31.240794+00', null, 'true', '43b778b0-2062-4724-abbb-916a4835a9b0', '2025-12-10 13:23:41.579593+00', 'CSV_EXPORT_20251210_132341_c5cf92be-4172-4fe2-af5c-f05d83b3a938', '', '{}', '2025-12-10 12:47:37.968268+00', '2025-12-10 13:23:41.581981+00', null, 'agent', 'send_money', '{"phone_number": "+254799459782", "recipient_name": "Viyisa"}', '2025-12-10', 'false', null), ('db836b45-5d6b-4e67-a12a-4619c0fb3f38', '4fe9d28c-b657-4672-9138-78edabb9749b', '1e622599-1909-49b9-9d8b-4c5cb483b29e', '43b778b0-2062-4724-abbb-916a4835a9b0', 'meals', 'rice beans na chapo', '1.00', 'unit', '80.00', '80.00', null, 'false', 'Not verified: No GPS location found for 2025-12-10. Manual review required.', 'false', null, null, null, 'false', null, null, null, '', '{}', '2025-12-10 11:54:30.892742+00', '2025-12-10 12:02:07.865311+00', null, 'agent', 'send_money', '{"phone_number": "+254799459782", "recipient_name": "Viyisa"}', '2025-12-10', 'false', null), ('e5a609ec-eb74-43f0-a7f4-f031accb08fb', '69a2a4f6-f72a-425c-9f90-4088e074c13b', '1f807cf8-f139-421b-86e3-38c2f8bc7070', '43b778b0-2062-4724-abbb-916a4835a9b0', 'transport', 'Boda to trm', '1.00', 'unit', '100.00', '100.00', null, 'true', 'Verified: Agent changed ticket status on 2025-12-02 with GPS location', 'true', 'c5cf92be-4172-4fe2-af5c-f05d83b3a938', '2025-12-09 10:33:11.622869+00', null, 'true', '43b778b0-2062-4724-abbb-916a4835a9b0', '2025-12-09 10:33:18.098152+00', 'CSV_EXPORT_20251209_103318_c5cf92be-4172-4fe2-af5c-f05d83b3a938', '', '{}', '2025-12-02 14:48:16.142758+00', '2025-12-09 10:33:18.099276+00', null, null, null, null, '2025-12-02', 'false', null), ('f41ef6b4-9b47-48cf-8ed0-b59aa20a0757', 'e2096a93-8f55-4063-92c5-2bc7122b3228', '1e622599-1909-49b9-9d8b-4c5cb483b29e', '43b778b0-2062-4724-abbb-916a4835a9b0', 'transport', 'boda boda', '1.00', 'unit', '100.00', '100.00', null, 'false', 'Not verified: No GPS location found for 2025-12-13. Manual review required.', 'true', 'c5cf92be-4172-4fe2-af5c-f05d83b3a938', '2025-12-13 09:54:53.641819+00', null, 'false', null, null, null, '', '{}', '2025-12-13 09:51:22.48771+00', '2025-12-13 09:54:53.641825+00', null, 'agent', 'send_money', '{"phone_number": "+254799459782", "recipient_name": "Viyisa"}', '2025-12-13', 'true', '2025-12-13 09:51:22.64403+00'), ('fac7e155-a8a7-48bd-86f0-d74d8bb21b2a', 'f5b40f0c-bc9c-4904-9ec1-7e570bda34eb', '169eec08-654d-4ffe-bdb3-45fad1101637', '43b778b0-2062-4724-abbb-916a4835a9b0', 'materials', 'bought nails', '1.00', 'unit', '200.00', '200.00', null, 'false', 'Not verified: No GPS location found for 2025-12-10. Manual review required.', 'false', null, null, null, 'false', null, null, null, '', '{}', '2025-12-10 11:48:49.793431+00', '2025-12-10 11:48:49.793435+00', null, 'agent', 'send_money', '{"phone_number": "+254799459782", "recipient_name": "Viyisa"}', '2025-12-10', 'false', null), ('fce5d718-86d5-489e-88cd-f3385f487849', 'f5b40f0c-bc9c-4904-9ec1-7e570bda34eb', '169eec08-654d-4ffe-bdb3-45fad1101637', '43b778b0-2062-4724-abbb-916a4835a9b0', 'transport', 'Boda to home ', '1.00', 'unit', '100.00', '100.00', null, 'true', 'Verified: Agent changed ticket status on 2025-12-03 with GPS location', 'true', 'c5cf92be-4172-4fe2-af5c-f05d83b3a938', '2025-12-08 20:36:14.289213+00', null, 'true', '43b778b0-2062-4724-abbb-916a4835a9b0', '2025-12-08 20:58:34.466326+00', 'CSV_EXPORT_20251208_205834_c5cf92be-4172-4fe2-af5c-f05d83b3a938', '', '{}', '2025-12-03 13:33:10.63594+00', '2025-12-08 20:58:34.469281+00', null, null, null, null, '2025-12-03', 'false', null);
5
-
6
-
 
1
+ INSERT INTO "public"."timesheets" ("id", "user_id", "project_id", "work_date", "status", "check_in_time", "check_out_time", "hours_worked", "leave_reason", "leave_approved_by_user_id", "notes", "additional_metadata", "created_at", "updated_at", "deleted_at", "tickets_assigned", "tickets_completed", "tickets_rescheduled", "tickets_cancelled", "tickets_rejected", "is_payroll_generated", "payroll_id", "total_expenses", "approved_expenses", "pending_expenses", "rejected_expenses", "expense_claims_count", "inventory_issued_count", "inventory_issued_value", "inventory_installed_count", "inventory_consumed_count", "inventory_returned_count", "inventory_returned_value", "inventory_lost_count", "inventory_damaged_count", "inventory_loss_value", "inventory_on_hand_count", "inventory_on_hand_value", "inventory_details", "version") VALUES ('39d65205-7d0a-4081-9eb2-e581c767992f', '43b778b0-2062-4724-abbb-916a4835a9b0', '0ade6bd1-e492-4e25-b681-59f42058d29a', '2025-12-11', 'on_leave', null, null, null, 'please', null, null, '{}', '2025-12-10 08:12:03.015561+00', '2025-12-10 08:12:03.015564+00', null, '0', '0', '0', '0', '0', 'false', null, '0.00', '0.00', '0.00', '0.00', '0', '0', '0.00', '0', '0', '0', '0.00', '0', '0', '0.00', '0', '0.00', '[]', '1'), ('7d9fa491-c16d-42b2-8115-b02d98873b64', '43b778b0-2062-4724-abbb-916a4835a9b0', '0ade6bd1-e492-4e25-b681-59f42058d29a', '2025-12-13', 'present', '2025-12-13 11:35:04.461382+00', null, null, null, null, null, '{}', '2025-12-13 07:17:52.420939+00', '2025-12-13 11:54:22.418767+00', null, '1', '0', '0', '0', '0', 'false', null, '1130.00', '1110.00', '20.00', '0.00', '4', '0', '0.00', '0', '0', '0', '0.00', '0', '0', '0.00', '0', '0.00', '[]', '7');
 
 
 
 
 
docs/devlogs/server/runtimeerror.txt CHANGED
@@ -1,39 +1,68 @@
1
- ===== Application Startup at 2025-12-13 11:33:09 =====
2
 
3
  INFO: Started server process [7]
4
  INFO: Waiting for application startup.
5
- INFO: 2025-12-13T11:33:22 - app.main: ============================================================
6
- INFO: 2025-12-13T11:33:22 - app.main: πŸš€ SwiftOps API v1.0.0 | PRODUCTION
7
- INFO: 2025-12-13T11:33:22 - app.main: πŸ“Š Dashboard: Enabled
8
- INFO: 2025-12-13T11:33:22 - app.main: ============================================================
9
- INFO: 2025-12-13T11:33:22 - app.main: πŸ“¦ Database:
10
- INFO: 2025-12-13T11:33:23 - app.main: βœ“ Connected | 45 tables | 6 users
11
- INFO: 2025-12-13T11:33:23 - app.main: πŸ’Ύ Cache & Sessions:
12
- INFO: 2025-12-13T11:33:24 - app.services.otp_service: βœ… OTP Service initialized with Redis storage
13
- INFO: 2025-12-13T11:33:24 - app.main: βœ“ Redis: Connected
14
- INFO: 2025-12-13T11:33:24 - app.main: πŸ”Œ External Services:
15
- INFO: 2025-12-13T11:33:25 - app.main: βœ“ Cloudinary: Connected
16
- INFO: 2025-12-13T11:33:25 - app.main: βœ“ Resend: Configured
17
- INFO: 2025-12-13T11:33:25 - app.main: β—‹ WASender: Disconnected
18
- INFO: 2025-12-13T11:33:25 - app.main: βœ“ Supabase: Connected | 6 buckets
19
- INFO: 2025-12-13T11:33:25 - app.main: ============================================================
20
- INFO: 2025-12-13T11:33:25 - app.main: βœ… Startup complete | Ready to serve requests
 
21
  INFO: Application startup complete.
22
- INFO: 2025-12-13T11:33:25 - app.main: ============================================================
23
  INFO: Uvicorn running on http://0.0.0.0:7860 (Press CTRL+C to quit)
24
- INFO: 10.16.37.13:55412 - "GET /health HTTP/1.1" 200 OK
25
- INFO: 2025-12-13T11:33:58 - app.services.ticket_expense_service: Bulk approved 1 expenses by user c5cf92be-4172-4fe2-af5c-f05d83b3a938. Errors: 0
26
- INFO: 2025-12-13T11:33:58 - app.services.timesheet_realtime_service: Timesheet 7d9fa491-c16d-42b2-8115-b02d98873b64 updated for expense_approved. Entity: ticket_expense:de87f0fc-68df-418e-9208-194c7a1d4f44
27
- INFO: 2025-12-13T11:33:58 - app.services.ticket_expense_service: Bulk timesheet updates: 1 successful, 0 failed
28
- INFO: 10.16.13.79:52083 - "POST /api/v1/ticket-expenses/bulk-approve?expense_ids=de87f0fc-68df-418e-9208-194c7a1d4f44&is_approved=true HTTP/1.1" 200 OK
29
- INFO: 2025-12-13T11:33:58 - app.services.notification_service: Created notification f3ea4f08-008a-4bda-9d50-6ddb2d272c34 for user c5cf92be-4172-4fe2-af5c-f05d83b3a938
30
- INFO: 2025-12-13T11:33:58 - app.services.notification_helper: Created bulk expense approval notification for user c5cf92be-4172-4fe2-af5c-f05d83b3a938: 1/1 successful
31
- INFO: 10.16.13.79:52083 - "GET /api/v1/ticket-expenses?project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&page=1&page_size=20&is_approved=false HTTP/1.1" 200 OK
32
- INFO: 10.16.37.13:33714 - "GET /api/v1/ticket-expenses/stats/summary?project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&page=1&page_size=20&status=pending HTTP/1.1" 200 OK
33
- INFO: 10.16.13.79:1540 - "GET /health HTTP/1.1" 200 OK
34
- INFO: 10.16.37.13:60124 - "GET /health HTTP/1.1" 200 OK
35
- INFO: 10.16.13.79:28092 - "POST /api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/start-journey HTTP/1.1" 200 OK
36
- INFO: 10.16.37.13:3195 - "POST /api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location HTTP/1.1" 200 OK
37
- INFO: 10.16.13.79:28092 - "GET /api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/detail HTTP/1.1" 200 OK
38
- INFO: 10.16.37.13:3195 - "POST /api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location HTTP/1.1" 200 OK
39
- INFO: 10.16.13.79:45535 - "GET /health HTTP/1.1" 200 OK
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ===== Application Startup at 2025-12-13 11:53:10 =====
2
 
3
  INFO: Started server process [7]
4
  INFO: Waiting for application startup.
5
+ INFO: 2025-12-13T11:53:21 - app.main: ============================================================
6
+ INFO: 2025-12-13T11:53:21 - app.main: πŸš€ SwiftOps API v1.0.0 | PRODUCTION
7
+ INFO: 2025-12-13T11:53:21 - app.main: πŸ“Š Dashboard: Enabled
8
+ INFO: 2025-12-13T11:53:21 - app.main: ============================================================
9
+ INFO: 2025-12-13T11:53:21 - app.main: πŸ“¦ Database:
10
+ INFO: 2025-12-13T11:53:22 - app.main: βœ“ Connected | 45 tables | 6 users
11
+ INFO: 2025-12-13T11:53:22 - app.main: πŸ’Ύ Cache & Sessions:
12
+ INFO: 2025-12-13T11:53:23 - app.services.otp_service: βœ… OTP Service initialized with Redis storage
13
+ INFO: 2025-12-13T11:53:23 - app.main: βœ“ Redis: Connected
14
+ INFO: 2025-12-13T11:53:23 - app.main: πŸ”Œ External Services:
15
+ INFO: 2025-12-13T11:53:24 - app.main: βœ“ Cloudinary: Connected
16
+ INFO: 2025-12-13T11:53:24 - app.main: βœ“ Resend: Configured
17
+ INFO: 2025-12-13T11:53:24 - app.main: β—‹ WASender: Disconnected
18
+ INFO: 2025-12-13T11:53:24 - app.main: βœ“ Supabase: Connected | 6 buckets
19
+ INFO: 2025-12-13T11:53:24 - app.main: ============================================================
20
+ INFO: 2025-12-13T11:53:24 - app.main: βœ… Startup complete | Ready to serve requests
21
+ INFO: 2025-12-13T11:53:24 - app.main: ============================================================
22
  INFO: Application startup complete.
 
23
  INFO: Uvicorn running on http://0.0.0.0:7860 (Press CTRL+C to quit)
24
+ INFO: 10.16.13.79:60277 - "POST /api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location HTTP/1.1" 200 OK
25
+ INFO: 10.16.37.13:4764 - "GET /health HTTP/1.1" 200 OK
26
+ INFO: 10.16.13.79:61377 - "POST /api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location HTTP/1.1" 200 OK
27
+ INFO: 2025-12-13T11:54:22 - app.services.timesheet_realtime_service: Timesheet 7d9fa491-c16d-42b2-8115-b02d98873b64 updated for arrived_at_site. Entity: ticket_assignment:e2096a93-8f55-4063-92c5-2bc7122b3228
28
+ INFO: 10.16.13.79:61377 - "POST /api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/arrived HTTP/1.1" 200 OK
29
+ INFO: 10.16.13.79:61377 - "GET /api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/detail HTTP/1.1" 200 OK
30
+ INFO: 10.16.37.13:50595 - "POST /api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location HTTP/1.1" 400 Bad Request
31
+ INFO: 10.16.13.79:3504 - "GET /health HTTP/1.1" 200 OK
32
+ INFO: 10.16.13.79:23222 - "GET /health HTTP/1.1" 200 OK
33
+ INFO: 10.16.37.13:57338 - "GET /health HTTP/1.1" 200 OK
34
+ INFO: 10.16.37.13:5211 - "GET /api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/completion-checklist HTTP/1.1" 200 OK
35
+ INFO: 10.16.37.13:1550 - "GET /health HTTP/1.1" 200 OK
36
+ INFO: 10.16.13.79:36501 - "GET /health HTTP/1.1" 200 OK
37
+ INFO: 10.16.13.79:36501 - "GET /health HTTP/1.1" 200 OK
38
+ INFO: 2025-12-13T11:58:13 - app.services.media_service: Using forced provider: cloudinary
39
+ INFO: 2025-12-13T11:58:13 - app.services.media_service: Uploading 6dc8524b572ff4739383212fdca9f040.jpg as ticket_1e622599_ticket_photo_speedtest_speedtest_20251213_115813_6dc8524b572ff4739383212fdca9f0.jpg to cloudinary
40
+ INFO: 2025-12-13T11:58:13 - app.integrations.cloudinary: Uploaded file to Cloudinary: https://res.cloudinary.com/dnhajmziu/image/upload/v1765627093/ticket_1e622599_ticket_photo_speedtest_speedtest_20251213_115813_6dc8524b572ff4739383212fdca9f0.webp
41
+ INFO: 2025-12-13T11:58:13 - app.services.media_service: Document created: 4a965b9b-67ea-452c-999f-7bebe117748e (version 1)
42
+ INFO: 2025-12-13T11:58:13 - app.services.ticket_completion_service: Photos updated for ticket 1e622599-1909-49b9-9d8b-4c5cb483b29e: ['Speedtest']
43
+ INFO: 10.16.13.79:33350 - "POST /api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/upload-photos HTTP/1.1" 200 OK
44
+ INFO: 10.16.13.79:16293 - "GET /health HTTP/1.1" 200 OK
45
+ INFO: 10.16.13.79:12196 - "GET /health HTTP/1.1" 200 OK
46
+ INFO: 10.16.37.13:30334 - "GET /health HTTP/1.1" 200 OK
47
+ INFO: 10.16.13.79:62358 - "GET /health HTTP/1.1" 200 OK
48
+ INFO: 2025-12-13T12:00:05 - app.api.deps: Checking active user: c5cf92be-4172-4fe2-af5c-f05d83b3a938, is_active: True, type: <class 'bool'>
49
+ INFO: 2025-12-13T12:00:05 - app.api.deps: User c5cf92be-4172-4fe2-af5c-f05d83b3a938 is active - proceeding
50
+ INFO: 10.16.13.79:42937 - "GET /api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/regions HTTP/1.1" 200 OK
51
+ INFO: 2025-12-13T12:00:05 - app.services.ticket_service: Listed 7 tickets (total: 7) for user c5cf92be-4172-4fe2-af5c-f05d83b3a938
52
+ INFO: 10.16.37.13:63069 - "GET /api/v1/tickets?project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&page=1&page_size=50&status=open HTTP/1.1" 200 OK
53
+ INFO: 10.16.13.79:43670 - "GET /api/v1/tickets/stats?project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&status=open HTTP/1.1" 200 OK
54
+ INFO: 2025-12-13T12:00:14 - app.services.ticket_service: Listed 13 tickets (total: 13) for user c5cf92be-4172-4fe2-af5c-f05d83b3a938
55
+ INFO: 10.16.37.13:8516 - "GET /api/v1/tickets?project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&page=1&page_size=50&status=open%2Ccompleted HTTP/1.1" 200 OK
56
+ INFO: 10.16.13.79:9125 - "GET /api/v1/tickets/stats?project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&status=open%2Ccompleted HTTP/1.1" 200 OK
57
+ INFO: 10.16.37.13:8516 - "GET /health HTTP/1.1" 200 OK
58
+ INFO: 2025-12-13T12:00:28 - app.services.ticket_service: Listed 8 tickets (total: 8) for user c5cf92be-4172-4fe2-af5c-f05d83b3a938
59
+ INFO: 10.16.13.79:62533 - "GET /api/v1/tickets?project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&page=1&page_size=50&status=open%2Cin_progress HTTP/1.1" 200 OK
60
+ INFO: 10.16.37.13:34736 - "GET /api/v1/tickets/stats?project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&status=open%2Cin_progress HTTP/1.1" 200 OK
61
+ INFO: 10.16.37.13:47574 - "GET /api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/detail HTTP/1.1" 200 OK
62
+ INFO: 10.16.37.13:47574 - "GET /api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/regions/24510a5a-13a6-4334-9055-b4d476aa9e0a HTTP/1.1" 200 OK
63
+ INFO: 10.16.13.79:11529 - "GET /health HTTP/1.1" 200 OK
64
+ INFO: 2025-12-13T12:00:58 - app.services.ticket_completion_service: Completion data replaced for ticket 1e622599-1909-49b9-9d8b-4c5cb483b29e
65
+ INFO: 10.16.13.79:7379 - "POST /api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/completion-data HTTP/1.1" 200 OK
66
+ INFO: 2025-12-13T12:01:47 - app.services.ticket_completion_service: Completion data replaced for ticket 1e622599-1909-49b9-9d8b-4c5cb483b29e
67
+ INFO: 10.16.13.79:38355 - "POST /api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/completion-data HTTP/1.1" 200 OK
68
+ INFO: 10.16.37.13:40215 - "GET /health HTTP/1.1" 200 OK
src/app/integrations/cloudinary.py CHANGED
@@ -112,7 +112,11 @@ class CloudinaryService:
112
  upload_options['use_filename'] = True
113
  upload_options['unique_filename'] = True
114
 
115
- # Upload to Cloudinary
 
 
 
 
116
  upload_result = cloudinary.uploader.upload(
117
  file_content,
118
  **upload_options
 
112
  upload_options['use_filename'] = True
113
  upload_options['unique_filename'] = True
114
 
115
+ # Upload to Cloudinary with timeout (60 seconds)
116
+ # If upload takes longer, it will raise an exception and trigger Supabase fallback
117
+ # Frontend has 120s timeout with retries, so 60s gives Cloudinary a fair chance
118
+ # while leaving time for Supabase fallback if needed
119
+ upload_options['timeout'] = 60
120
  upload_result = cloudinary.uploader.upload(
121
  file_content,
122
  **upload_options