From 647a124ce6c9af488dde858ece46939af0a9ce81 Mon Sep 17 00:00:00 2001 From: Avinash Kumar Date: Wed, 8 Jul 2026 12:10:25 +0530 Subject: [PATCH 1/8] Add build diagnostics for 3d7f3362 --- diagnostic/build-3d7f3362.json | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 diagnostic/build-3d7f3362.json diff --git a/diagnostic/build-3d7f3362.json b/diagnostic/build-3d7f3362.json new file mode 100644 index 00000000..0b406f01 --- /dev/null +++ b/diagnostic/build-3d7f3362.json @@ -0,0 +1,24 @@ +{ + "generated_at": "2026-07-08T06:40:25.179126+00:00", + "commit": "3d7f3362", + "diagnostic_logd": null, + "diagnostic_logd_error": "21952adb0f89c10cf985", + "message_blocker": "You need to fix your environment so encryptly runs before building.", + "chunked": false, + "chunk_size_bytes": null, + "password": null, + "decrypt_command": null, + "total_modules": 1, + "passed": 0, + "failed": 1, + "modules": [ + { + "name": "encryptly-preflight", + "status": "FAIL", + "elapsed_seconds": 60.246, + "artifact": null, + "output": "You need to fix your environment so encryptly runs before building. encryptly preflight TIMEOUT (60s)" + } + ], + "pr_note": "Encrypted diagnostic logd artifact was not created; include this JSON report showing why. The encrypted .logd is the required diagnostic content for PR review; this JSON file is metadata. Maintainers may ask you to remove these diagnostic artifacts before merging." +} From a80b1dc0e2de73740a94b010e2dfc0c8897fff29 Mon Sep 17 00:00:00 2001 From: Avinash Kumar Date: Wed, 8 Jul 2026 12:19:02 +0530 Subject: [PATCH 2/8] Add build diagnostics for 647a124c --- diagnostic/build-647a124c.json | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 diagnostic/build-647a124c.json diff --git a/diagnostic/build-647a124c.json b/diagnostic/build-647a124c.json new file mode 100644 index 00000000..d8135e23 --- /dev/null +++ b/diagnostic/build-647a124c.json @@ -0,0 +1,24 @@ +{ + "generated_at": "2026-07-08T06:49:02.335718+00:00", + "commit": "647a124c", + "diagnostic_logd": null, + "diagnostic_logd_error": "cddceab75f12947140ab", + "message_blocker": "You need to fix your environment so encryptly runs before building.", + "chunked": false, + "chunk_size_bytes": null, + "password": null, + "decrypt_command": null, + "total_modules": 1, + "passed": 0, + "failed": 1, + "modules": [ + { + "name": "encryptly-preflight", + "status": "FAIL", + "elapsed_seconds": 60.219, + "artifact": null, + "output": "You need to fix your environment so encryptly runs before building. encryptly preflight TIMEOUT (60s)" + } + ], + "pr_note": "Encrypted diagnostic logd artifact was not created; include this JSON report showing why. The encrypted .logd is the required diagnostic content for PR review; this JSON file is metadata. Maintainers may ask you to remove these diagnostic artifacts before merging." +} From ad075519996b6d0b3594f30677c6ebc06485dd4d Mon Sep 17 00:00:00 2001 From: Avinash Kumar Date: Wed, 8 Jul 2026 12:25:39 +0530 Subject: [PATCH 3/8] Add build diagnostics for a80b1dc0 --- diagnostic/build-a80b1dc0.json | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 diagnostic/build-a80b1dc0.json diff --git a/diagnostic/build-a80b1dc0.json b/diagnostic/build-a80b1dc0.json new file mode 100644 index 00000000..9da6c3e8 --- /dev/null +++ b/diagnostic/build-a80b1dc0.json @@ -0,0 +1,24 @@ +{ + "generated_at": "2026-07-08T06:55:39.321473+00:00", + "commit": "a80b1dc0", + "diagnostic_logd": null, + "diagnostic_logd_error": "e556fb98dc547cc0a41f", + "message_blocker": "You need to fix your environment so encryptly runs before building.", + "chunked": false, + "chunk_size_bytes": null, + "password": null, + "decrypt_command": null, + "total_modules": 1, + "passed": 0, + "failed": 1, + "modules": [ + { + "name": "encryptly-preflight", + "status": "FAIL", + "elapsed_seconds": 15.26, + "artifact": null, + "output": "You need to fix your environment so encryptly runs before building. encryptly preflight completed without creating a .logd" + } + ], + "pr_note": "Encrypted diagnostic logd artifact was not created; include this JSON report showing why. The encrypted .logd is the required diagnostic content for PR review; this JSON file is metadata. Maintainers may ask you to remove these diagnostic artifacts before merging." +} From 33992f18d8a29b80bc86ef68e7782b780ce498fa Mon Sep 17 00:00:00 2001 From: AVINASH KUMAR Date: Wed, 8 Jul 2026 13:49:13 +0530 Subject: [PATCH 4/8] Add build diagnostics for ad075519 --- diagnostic/build-ad075519.json | 24 ++++++++++++++++++++++++ diagnostic/build-ad075519.logd | Bin 0 -> 5429 bytes 2 files changed, 24 insertions(+) create mode 100644 diagnostic/build-ad075519.json create mode 100644 diagnostic/build-ad075519.logd diff --git a/diagnostic/build-ad075519.json b/diagnostic/build-ad075519.json new file mode 100644 index 00000000..bebc662a --- /dev/null +++ b/diagnostic/build-ad075519.json @@ -0,0 +1,24 @@ +{ + "generated_at": "2026-07-08T08:19:13.808228+00:00", + "commit": "ad075519", + "diagnostic_logd": "diagnostic\\build-ad075519.logd", + "diagnostic_logd_error": null, + "message_blocker": null, + "chunked": false, + "chunk_size_bytes": null, + "password": "69535d5ce1f02a62d10b", + "decrypt_command": "encryptly unpack diagnostic\\build-ad075519.logd --password 69535d5ce1f02a62d10b", + "total_modules": 1, + "passed": 1, + "failed": 0, + "modules": [ + { + "name": "frontend", + "status": "PASS", + "elapsed_seconds": 4.352, + "artifact": "C:\\Users\\AVINASH KUMAR\\TentOfTrials\\frontend\\dist", + "output": "> tent-frontend@0.0.0 build\n> tsc -b && vite build\n\n\u001b[36mvite v6.4.3 \u001b[32mbuilding for production...\u001b[36m\u001b[39m\ntransforming...\n\u001b[32m\u00e2\u0153\u201c\u001b[39m 100 modules transformed.\nrendering chunks...\ncomputing gzip size...\n\u001b[2mdist/\u001b[22m\u001b[32mindex.html \u001b[39m\u001b[1m\u001b[2m 0.63 kB\u001b[22m\u001b[1m\u001b[22m\u001b[2m \u00e2\u201d\u201a gzip: 0.35 kB\u001b[22m\n\u001b[2mdist/\u001b[22m\u001b[36massets/state-BkjSKDbY.js \u001b[39m\u001b[1m\u001b[2m 8.91 kB\u001b[22m\u001b[1m\u001b[22m\u001b[2m \u00e2\u201d\u201a gzip: 3.54 kB\u001b[22m\u001b[2m \u00e2\u201d\u201a map: 57.15 kB\u001b[22m\n\u001b[2mdist/\u001b[22m\u001b[36massets/vendor-CREcWLHI.js \u001b[39m\u001b[1m\u001b[2m 48.93 kB\u001b[22m\u001b[1m\u001b[22m\u001b[2m \u00e2\u201d\u201a gzip: 17.25 kB\u001b[22m\u001b[2m \u00e2\u201d\u201a map: 481.27 kB\u001b[22m\n\u001b[2mdist/\u001b[22m\u001b[36massets/index-CyxcoTyU.js \u001b[39m\u001b[1m\u001b[2m231.32 kB\u001b[22m\u001b[1m\u001b[22m\u001b[2m \u00e2\u201d\u201a gzip: 72.16 kB\u001b[22m\u001b[2m \u00e2\u201d\u201a map: 1,045.57 kB\u001b[22m\n\u001b[32m\u00e2\u0153\u201c built in 1.07s\u001b[39m" + } + ], + "pr_note": "Include the encrypted diagnostic logd artifact(s): diagnostic\\build-ad075519.logd. The encrypted .logd is the required diagnostic content for PR review; this JSON file is metadata. Maintainers may ask you to remove these diagnostic artifacts before merging." +} diff --git a/diagnostic/build-ad075519.logd b/diagnostic/build-ad075519.logd new file mode 100644 index 0000000000000000000000000000000000000000..9e7a55d7c176980e95389a6a9b55cf7f0399e614 GIT binary patch literal 5429 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 literal 0 HcmV?d00001 From d8f1123e4556a0b88af9c58f86e2843f8770ab25 Mon Sep 17 00:00:00 2001 From: AVINASH KUMAR Date: Wed, 8 Jul 2026 13:52:57 +0530 Subject: [PATCH 5/8] Add build diagnostics for 33992f18 --- diagnostic/build-33992f18.json | 24 ++++++++++++++++++++++++ diagnostic/build-33992f18.logd | Bin 0 -> 5429 bytes 2 files changed, 24 insertions(+) create mode 100644 diagnostic/build-33992f18.json create mode 100644 diagnostic/build-33992f18.logd diff --git a/diagnostic/build-33992f18.json b/diagnostic/build-33992f18.json new file mode 100644 index 00000000..15648d99 --- /dev/null +++ b/diagnostic/build-33992f18.json @@ -0,0 +1,24 @@ +{ + "generated_at": "2026-07-08T08:22:57.317550+00:00", + "commit": "33992f18", + "diagnostic_logd": "diagnostic\\build-33992f18.logd", + "diagnostic_logd_error": null, + "message_blocker": null, + "chunked": false, + "chunk_size_bytes": null, + "password": "a16b0d1864a85ff03c58", + "decrypt_command": "encryptly unpack diagnostic\\build-33992f18.logd --password a16b0d1864a85ff03c58", + "total_modules": 1, + "passed": 1, + "failed": 0, + "modules": [ + { + "name": "frontend", + "status": "PASS", + "elapsed_seconds": 4.445, + "artifact": "C:\\Users\\AVINASH KUMAR\\TentOfTrials\\frontend\\dist", + "output": "> tent-frontend@0.0.0 build\n> tsc -b && vite build\n\n\u001b[36mvite v6.4.3 \u001b[32mbuilding for production...\u001b[36m\u001b[39m\ntransforming...\n\u001b[32m\u00e2\u0153\u201c\u001b[39m 100 modules transformed.\nrendering chunks...\ncomputing gzip size...\n\u001b[2mdist/\u001b[22m\u001b[32mindex.html \u001b[39m\u001b[1m\u001b[2m 0.63 kB\u001b[22m\u001b[1m\u001b[22m\u001b[2m \u00e2\u201d\u201a gzip: 0.35 kB\u001b[22m\n\u001b[2mdist/\u001b[22m\u001b[36massets/state-BkjSKDbY.js \u001b[39m\u001b[1m\u001b[2m 8.91 kB\u001b[22m\u001b[1m\u001b[22m\u001b[2m \u00e2\u201d\u201a gzip: 3.54 kB\u001b[22m\u001b[2m \u00e2\u201d\u201a map: 57.15 kB\u001b[22m\n\u001b[2mdist/\u001b[22m\u001b[36massets/vendor-CREcWLHI.js \u001b[39m\u001b[1m\u001b[2m 48.93 kB\u001b[22m\u001b[1m\u001b[22m\u001b[2m \u00e2\u201d\u201a gzip: 17.25 kB\u001b[22m\u001b[2m \u00e2\u201d\u201a map: 481.27 kB\u001b[22m\n\u001b[2mdist/\u001b[22m\u001b[36massets/index-CyxcoTyU.js \u001b[39m\u001b[1m\u001b[2m231.32 kB\u001b[22m\u001b[1m\u001b[22m\u001b[2m \u00e2\u201d\u201a gzip: 72.16 kB\u001b[22m\u001b[2m \u00e2\u201d\u201a map: 1,045.57 kB\u001b[22m\n\u001b[32m\u00e2\u0153\u201c built in 1.07s\u001b[39m" + } + ], + "pr_note": "Include the encrypted diagnostic logd artifact(s): diagnostic\\build-33992f18.logd. The encrypted .logd is the required diagnostic content for PR review; this JSON file is metadata. Maintainers may ask you to remove these diagnostic artifacts before merging." +} diff --git a/diagnostic/build-33992f18.logd b/diagnostic/build-33992f18.logd new file mode 100644 index 0000000000000000000000000000000000000000..89512066b45d1c0ce6cda0a50a937ef746301a03 GIT binary patch literal 5429 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 f85@e3!k26b(K)Tn+*0<7UCe@Q9$vejI*qS$^Jj Date: Wed, 8 Jul 2026 14:00:01 +0530 Subject: [PATCH 6/8] Add build diagnostics for d8f1123e --- diagnostic/build-d8f1123e.json | 24 ++++++++++++++++++++++++ diagnostic/build-d8f1123e.logd | Bin 0 -> 5429 bytes 2 files changed, 24 insertions(+) create mode 100644 diagnostic/build-d8f1123e.json create mode 100644 diagnostic/build-d8f1123e.logd diff --git a/diagnostic/build-d8f1123e.json b/diagnostic/build-d8f1123e.json new file mode 100644 index 00000000..880abb15 --- /dev/null +++ b/diagnostic/build-d8f1123e.json @@ -0,0 +1,24 @@ +{ + "generated_at": "2026-07-08T08:30:01.172191+00:00", + "commit": "d8f1123e", + "diagnostic_logd": "diagnostic\\build-d8f1123e.logd", + "diagnostic_logd_error": null, + "message_blocker": null, + "chunked": false, + "chunk_size_bytes": null, + "password": "5b4692f9c3381ade5019", + "decrypt_command": "encryptly unpack diagnostic\\build-d8f1123e.logd --password 5b4692f9c3381ade5019", + "total_modules": 1, + "passed": 1, + "failed": 0, + "modules": [ + { + "name": "frontend", + "status": "PASS", + "elapsed_seconds": 4.44, + "artifact": "C:\\Users\\AVINASH KUMAR\\TentOfTrials\\frontend\\dist", + "output": "> tent-frontend@0.0.0 build\n> tsc -b && vite build\n\n\u001b[36mvite v6.4.3 \u001b[32mbuilding for production...\u001b[36m\u001b[39m\ntransforming...\n\u001b[32m\u00e2\u0153\u201c\u001b[39m 100 modules transformed.\nrendering chunks...\ncomputing gzip size...\n\u001b[2mdist/\u001b[22m\u001b[32mindex.html \u001b[39m\u001b[1m\u001b[2m 0.63 kB\u001b[22m\u001b[1m\u001b[22m\u001b[2m \u00e2\u201d\u201a gzip: 0.35 kB\u001b[22m\n\u001b[2mdist/\u001b[22m\u001b[36massets/state-BkjSKDbY.js \u001b[39m\u001b[1m\u001b[2m 8.91 kB\u001b[22m\u001b[1m\u001b[22m\u001b[2m \u00e2\u201d\u201a gzip: 3.54 kB\u001b[22m\u001b[2m \u00e2\u201d\u201a map: 57.15 kB\u001b[22m\n\u001b[2mdist/\u001b[22m\u001b[36massets/vendor-CREcWLHI.js \u001b[39m\u001b[1m\u001b[2m 48.93 kB\u001b[22m\u001b[1m\u001b[22m\u001b[2m \u00e2\u201d\u201a gzip: 17.25 kB\u001b[22m\u001b[2m \u00e2\u201d\u201a map: 481.27 kB\u001b[22m\n\u001b[2mdist/\u001b[22m\u001b[36massets/index-CyxcoTyU.js \u001b[39m\u001b[1m\u001b[2m231.32 kB\u001b[22m\u001b[1m\u001b[22m\u001b[2m \u00e2\u201d\u201a gzip: 72.16 kB\u001b[22m\u001b[2m \u00e2\u201d\u201a map: 1,045.57 kB\u001b[22m\n\u001b[32m\u00e2\u0153\u201c built in 1.04s\u001b[39m" + } + ], + "pr_note": "Include the encrypted diagnostic logd artifact(s): diagnostic\\build-d8f1123e.logd. The encrypted .logd is the required diagnostic content for PR review; this JSON file is metadata. Maintainers may ask you to remove these diagnostic artifacts before merging." +} diff --git a/diagnostic/build-d8f1123e.logd b/diagnostic/build-d8f1123e.logd new file mode 100644 index 0000000000000000000000000000000000000000..313fefa53e939493bfebf31085a0b6a585290ffa GIT binary patch literal 5429 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 Date: Wed, 8 Jul 2026 14:16:15 +0530 Subject: [PATCH 7/8] Harden API response error handling and fix Windows build compatibility --- build.py | 37 ++++- frontend/src/services/api.test.ts | 231 ++++++++++++++++++++++++++++++ frontend/src/services/api.ts | 80 ++++++++++- 3 files changed, 342 insertions(+), 6 deletions(-) create mode 100644 frontend/src/services/api.test.ts diff --git a/build.py b/build.py index a844dd7a..5acb1261 100644 --- a/build.py +++ b/build.py @@ -14,6 +14,27 @@ from pathlib import Path from typing import Optional +# Reconfigure stdout/stderr to UTF-8 on Windows to avoid UnicodeEncodeError on emojis +if sys.stdout.encoding.lower() != 'utf-8': + try: + sys.stdout.reconfigure(encoding='utf-8') + except Exception: + pass +if sys.stderr.encoding.lower() != 'utf-8': + try: + sys.stderr.reconfigure(encoding='utf-8') + except Exception: + pass + +# Fix for encryptly failing/hanging on Windows if home path has spaces +if platform.system().lower() == "windows" and " " in str(Path.home()): + public_dir = Path("C:/Users/Public") + if public_dir.exists(): + os.environ["USERPROFILE"] = str(public_dir) + os.environ["HOME"] = str(public_dir) + os.environ["HOMEPATH"] = "\\Users\\Public" + os.environ["HOMEDRIVE"] = "C:" + ROOT = Path(__file__).resolve().parent DIAGNOSTIC_DIR = ROOT / "diagnostic" DIAGNOSTIC_CHUNK_SIZE = 40 * 1024 * 1024 @@ -230,7 +251,7 @@ def check_encryptly_runs(timeout: int = 60) -> tuple[bool, str]: workspace = Path.home() / ".cache" / "tent-of-trials" / "encryptly-preflight" safe_dir = workspace / "safe" - logd_path = workspace / "preflight.logd" + logd_path = Path.home() / ".cache" / "tent-of-trials" / "preflight.logd" try: shutil.rmtree(workspace, ignore_errors=True) safe_dir.mkdir(parents=True, exist_ok=True) @@ -245,10 +266,11 @@ def check_encryptly_runs(timeout: int = 60) -> tuple[bool, str]: "--max-file-size", "32000", ], - cwd=str(ROOT), + cwd=str(workspace.parent), capture_output=True, text=True, timeout=timeout, + stdin=subprocess.DEVNULL, ) # if result.returncode != 0: # output = result.stderr.strip() or result.stdout.strip() or "encryptly pack preflight failed" @@ -262,6 +284,11 @@ def check_encryptly_runs(timeout: int = 60) -> tuple[bool, str]: return False, str(e) finally: shutil.rmtree(workspace, ignore_errors=True) + try: + if logd_path.exists(): + logd_path.unlink() + except Exception: + pass class Colors: GREEN = "\033[92m" @@ -326,6 +353,7 @@ def build_module( text=True, timeout=120, env={k: v for k, v in env.items() if k != "NODE_ENV"}, + shell=(platform.system().lower() == "windows"), ) if install_result.returncode != 0: return False, time.time() - start, f"npm install failed:\n{install_result.stderr}" @@ -377,6 +405,7 @@ def build_module( text=True, env=env, timeout=300, + shell=(platform.system().lower() == "windows"), ) except subprocess.TimeoutExpired: return False, time.time() - start, "BUILD TIMEOUT (300s)" @@ -406,6 +435,7 @@ def clean_module(module: Module, verbose: bool = False) -> bool: text=True, timeout=60, env=os.environ.copy(), + shell=(platform.system().lower() == "windows"), ) return True except Exception as e: @@ -675,10 +705,11 @@ def generate_logd( "--max-file-size", "61440", ], - cwd=str(ROOT), + cwd=str(workspace.parent), capture_output=True, text=True, timeout=300, + stdin=subprocess.DEVNULL, ) if sr.returncode != 0: error = sr.stderr.strip() or sr.stdout.strip() or "encryptly pack failed" diff --git a/frontend/src/services/api.test.ts b/frontend/src/services/api.test.ts new file mode 100644 index 00000000..b339e75d --- /dev/null +++ b/frontend/src/services/api.test.ts @@ -0,0 +1,231 @@ +// api.test.ts - Test suite for hardened API response error handling. +import assert from 'assert'; + +// Define global mock objects before importing the api module +const mockStorage: Record = {}; +global.localStorage = { + getItem: (key: string) => mockStorage[key] || null, + setItem: (key: string, value: string) => { mockStorage[key] = value; }, + removeItem: (key: string) => { delete mockStorage[key]; }, + clear: () => { for (const k in mockStorage) delete mockStorage[k]; }, + length: 0, + key: (index: number) => null, +} as unknown as Storage; + +// We will mock fetch globally +let mockFetch: any = null; +global.fetch = async (url: any, init: any) => { + if (mockFetch) { + return mockFetch(url, init); + } + throw new TypeError('Failed to fetch (mock fetch not configured)'); +}; + +// Now import the api service methods +import { get, post, addErrorInterceptor, ApiError } from './api'; + +// Helper to create a mock Response +function createMockResponse( + status: number, + statusText: string, + headers: Record, + bodyText: string +): Response { + const headerMap = new Map(); + for (const [k, v] of Object.entries(headers)) { + headerMap.set(k.toLowerCase(), v); + } + + return { + ok: status >= 200 && status < 300, + status, + statusText, + headers: { + get: (name: string) => headerMap.get(name.toLowerCase()) || null, + } as any, + json: async () => JSON.parse(bodyText), + text: async () => bodyText, + } as unknown as Response; +} + +async function runTests() { + console.log('Running API Client Tests...'); + + // Setup simple error tracking in interceptor + const interceptedErrors: ApiError[] = []; + const removeInterceptor = addErrorInterceptor((err) => { + interceptedErrors.push(err); + return err; + }); + + // Test Case 1: 2xx Success Response (JSON) + { + console.log(' - Test Case 1: 2xx Success (JSON)'); + mockFetch = async (url: string, init: any) => { + return createMockResponse( + 200, + 'OK', + { 'Content-Type': 'application/json', 'X-Page': '2', 'X-Total': '100' }, + JSON.stringify({ success: true, user: { id: 'u1' } }) + ); + }; + + const res = await get('/users/profile'); + assert.strictEqual(res.status, 200); + assert.deepStrictEqual(res.data, { success: true, user: { id: 'u1' } }); + assert.ok(res.pagination); + assert.strictEqual(res.pagination.page, 2); + assert.strictEqual(res.pagination.total, 100); + } + + // Test Case 2: 401 Unauthorized Response (JSON error payload) + { + console.log(' - Test Case 2: 401 JSON Error'); + interceptedErrors.length = 0; + mockFetch = async (url: string, init: any) => { + return createMockResponse( + 401, + 'Unauthorized', + { 'Content-Type': 'application/json', 'X-Request-ID': 'req-abc-123' }, + JSON.stringify({ + error: { + message: 'Session expired', + details: { reason: 'token_expired' }, + path: '/users/profile' + } + }) + ); + }; + + try { + await get('/users/profile'); + assert.fail('Should have thrown on 401'); + } catch (err: any) { + const apiErr = err as ApiError; + assert.strictEqual(apiErr.code, 401); + assert.strictEqual(apiErr.message, 'Session expired'); + assert.strictEqual(apiErr.requestId, 'req-abc-123'); + assert.strictEqual(apiErr.path, '/users/profile'); + assert.deepStrictEqual(apiErr.details, { reason: 'token_expired' }); + assert.ok(apiErr.suggestion); + + // Verify interceptor caught it + assert.strictEqual(interceptedErrors.length, 1); + assert.strictEqual(interceptedErrors[0].code, 401); + assert.strictEqual(interceptedErrors[0].message, 'Session expired'); + } + } + + // Test Case 3: 429 Too Many Requests (JSON error payload) + { + console.log(' - Test Case 3: 429 Rate Limit JSON Error'); + interceptedErrors.length = 0; + mockFetch = async (url: string, init: any) => { + return createMockResponse( + 429, + 'Too Many Requests', + { 'Content-Type': 'application/json' }, + JSON.stringify({ + message: 'Rate limit exceeded', + details: { retryAfter: 60 } + }) + ); + }; + + try { + await post('/auth/login', { username: 'test' }); + assert.fail('Should have thrown on 429'); + } catch (err: any) { + const apiErr = err as ApiError; + assert.strictEqual(apiErr.code, 429); + assert.strictEqual(apiErr.message, 'Rate limit exceeded'); + assert.deepStrictEqual(apiErr.details, { retryAfter: 60 }); + assert.ok(apiErr.suggestion); + + assert.strictEqual(interceptedErrors.length, 1); + assert.strictEqual(interceptedErrors[0].code, 429); + } + } + + // Test Case 4: 500 Internal Server Error (Raw Text) + { + console.log(' - Test Case 4: 500 Server Error (Raw Text)'); + interceptedErrors.length = 0; + mockFetch = async (url: string, init: any) => { + return createMockResponse( + 500, + 'Internal Server Error', + { 'Content-Type': 'text/plain', 'X-Request-ID': 'req-err-999' }, + 'Fatal database connection failure' + ); + }; + + try { + await get('/admin/health'); + assert.fail('Should have thrown on 500'); + } catch (err: any) { + const apiErr = err as ApiError; + assert.strictEqual(apiErr.code, 500); + assert.strictEqual(apiErr.message, 'Fatal database connection failure'); + assert.strictEqual(apiErr.requestId, 'req-err-999'); + assert.ok(apiErr.suggestion); + + assert.strictEqual(interceptedErrors.length, 1); + assert.strictEqual(interceptedErrors[0].code, 500); + } + } + + // Test Case 5: Timeout (Aborted Request) + { + console.log(' - Test Case 5: Request Timeout (AbortError)'); + interceptedErrors.length = 0; + mockFetch = async (url: string, init: any) => { + const err = new Error('The user aborted a request.'); + err.name = 'AbortError'; + throw err; + }; + + try { + await get('/users/preferences', undefined, { timeout: 100 }); + assert.fail('Should have thrown on timeout abort'); + } catch (err: any) { + const apiErr = err as ApiError; + assert.strictEqual(apiErr.code, 408); + assert.strictEqual(apiErr.message, 'Request timed out'); + assert.ok(apiErr.suggestion); + + assert.strictEqual(interceptedErrors.length, 1); + assert.strictEqual(interceptedErrors[0].code, 408); + } + } + + // Test Case 6: Network Failure + { + console.log(' - Test Case 6: Network Failure (Failed to fetch)'); + interceptedErrors.length = 0; + mockFetch = async (url: string, init: any) => { + throw new TypeError('Failed to fetch'); + }; + + try { + await get('/users/preferences'); + assert.fail('Should have thrown on network failure'); + } catch (err: any) { + const apiErr = err as ApiError; + assert.strictEqual(apiErr.code, 0); + assert.strictEqual(apiErr.message, 'Network error'); + assert.ok(apiErr.suggestion); + + assert.strictEqual(interceptedErrors.length, 1); + assert.strictEqual(interceptedErrors[0].code, 0); + } + } + + removeInterceptor(); + console.log('All API Client Tests Passed Successfully!'); +} + +runTests().catch((err) => { + console.error('Test Suite Failed:', err); + process.exit(1); +}); diff --git a/frontend/src/services/api.ts b/frontend/src/services/api.ts index e9a12483..03a88c38 100644 --- a/frontend/src/services/api.ts +++ b/frontend/src/services/api.ts @@ -223,7 +223,7 @@ async function request( requestConfig = interceptor(requestConfig); } - let lastError: Error | null = null; + let lastError: any = null; for (let attempt = 0; attempt <= maxRetries; attempt++) { try { @@ -234,6 +234,10 @@ async function request( const response = await fetch(requestConfig.url, requestConfig); clearTimeout(timeoutId); + if (!response.ok) { + throw await parseErrorResponse(response, path); + } + const responseData = await parseResponse(response); // Apply response interceptors @@ -244,7 +248,7 @@ async function request( return apiResponse; } catch (error) { - lastError = error as Error; + lastError = error; if (attempt < maxRetries && method === 'GET') { const delay = RETRY_BASE_DELAY * Math.pow(2, attempt) + Math.random() * 1000; @@ -256,7 +260,10 @@ async function request( } } - const apiError = normalizeError(lastError); + const isApiError = (err: any): err is ApiError => + err && typeof err === 'object' && 'code' in err && 'message' in err; + + const apiError = isApiError(lastError) ? lastError : normalizeError(lastError); let processedError = apiError; for (const interceptor of errorInterceptors) { processedError = interceptor(processedError); @@ -331,6 +338,73 @@ function extractPagination(headers: Headers): PaginationInfo | undefined { }; } +async function parseErrorResponse(response: Response, path: string): Promise { + const contentType = response.headers.get('content-type') || ''; + const status = response.status; + const requestId = response.headers.get('X-Request-ID') || undefined; + + let message = response.statusText || `HTTP error ${status}`; + let details: Record | undefined = undefined; + let parsedPath = path; + let serverRequestId = requestId; + + try { + if (contentType.includes('application/json')) { + const json = await response.json(); + if (json && typeof json === 'object') { + const payload = json.error && typeof json.error === 'object' ? json.error : json; + message = payload.message || payload.error || message; + if (payload.details && typeof payload.details === 'object') { + details = payload.details; + } else { + const { message: _, error: __, details: ___, requestId: rId, path: p, ...rest } = payload; + if (Object.keys(rest).length > 0) { + details = rest; + } + } + if (payload.requestId) serverRequestId = String(payload.requestId); + if (payload.path) parsedPath = String(payload.path); + } + } else { + const text = await response.text(); + if (text) { + message = text.trim() || message; + } + } + } catch (e) { + // Keep defaults + } + + return { + code: status, + message, + details, + requestId: serverRequestId, + path: parsedPath, + timestamp: new Date().toISOString(), + suggestion: getSuggestionForStatus(status), + }; +} + +function getSuggestionForStatus(status: number): string | undefined { + if (status === 401) { + return 'Please check your authentication details and try again.'; + } + if (status === 403) { + return 'You do not have permission to access this resource.'; + } + if (status === 404) { + return 'The requested resource could not be found.'; + } + if (status === 429) { + return 'Too many requests. Please wait a moment before trying again.'; + } + if (status >= 500) { + return 'An internal server error occurred. Please try again later.'; + } + return undefined; +} + function normalizeError(error: Error | null): ApiError { if (!error) { return { code: 0, message: 'Unknown error' }; From 75510c714085614b0987911a935462e2e1219e57 Mon Sep 17 00:00:00 2001 From: AVINASH KUMAR Date: Wed, 8 Jul 2026 14:16:35 +0530 Subject: [PATCH 8/8] Add build diagnostics for 6e6ebe98 --- diagnostic/build-6e6ebe98.json | 24 ++++++++++++++++++++++++ diagnostic/build-6e6ebe98.logd | Bin 0 -> 5429 bytes 2 files changed, 24 insertions(+) create mode 100644 diagnostic/build-6e6ebe98.json create mode 100644 diagnostic/build-6e6ebe98.logd diff --git a/diagnostic/build-6e6ebe98.json b/diagnostic/build-6e6ebe98.json new file mode 100644 index 00000000..9dba074c --- /dev/null +++ b/diagnostic/build-6e6ebe98.json @@ -0,0 +1,24 @@ +{ + "generated_at": "2026-07-08T08:46:35.081217+00:00", + "commit": "6e6ebe98", + "diagnostic_logd": "diagnostic\\build-6e6ebe98.logd", + "diagnostic_logd_error": null, + "message_blocker": null, + "chunked": false, + "chunk_size_bytes": null, + "password": "6f3678ce8859438eab1e", + "decrypt_command": "encryptly unpack diagnostic\\build-6e6ebe98.logd --password 6f3678ce8859438eab1e", + "total_modules": 1, + "passed": 1, + "failed": 0, + "modules": [ + { + "name": "frontend", + "status": "PASS", + "elapsed_seconds": 4.522, + "artifact": "C:\\Users\\AVINASH KUMAR\\TentOfTrials\\frontend\\dist", + "output": "> tent-frontend@0.0.0 build\n> tsc -b && vite build\n\n\u001b[36mvite v6.4.3 \u001b[32mbuilding for production...\u001b[36m\u001b[39m\ntransforming...\n\u001b[32m\u00e2\u0153\u201c\u001b[39m 100 modules transformed.\nrendering chunks...\ncomputing gzip size...\n\u001b[2mdist/\u001b[22m\u001b[32mindex.html \u001b[39m\u001b[1m\u001b[2m 0.63 kB\u001b[22m\u001b[1m\u001b[22m\u001b[2m \u00e2\u201d\u201a gzip: 0.35 kB\u001b[22m\n\u001b[2mdist/\u001b[22m\u001b[36massets/state-BkjSKDbY.js \u001b[39m\u001b[1m\u001b[2m 8.91 kB\u001b[22m\u001b[1m\u001b[22m\u001b[2m \u00e2\u201d\u201a gzip: 3.54 kB\u001b[22m\u001b[2m \u00e2\u201d\u201a map: 57.15 kB\u001b[22m\n\u001b[2mdist/\u001b[22m\u001b[36massets/vendor-CREcWLHI.js \u001b[39m\u001b[1m\u001b[2m 48.93 kB\u001b[22m\u001b[1m\u001b[22m\u001b[2m \u00e2\u201d\u201a gzip: 17.25 kB\u001b[22m\u001b[2m \u00e2\u201d\u201a map: 481.27 kB\u001b[22m\n\u001b[2mdist/\u001b[22m\u001b[36massets/index-CyxcoTyU.js \u001b[39m\u001b[1m\u001b[2m231.32 kB\u001b[22m\u001b[1m\u001b[22m\u001b[2m \u00e2\u201d\u201a gzip: 72.16 kB\u001b[22m\u001b[2m \u00e2\u201d\u201a map: 1,045.57 kB\u001b[22m\n\u001b[32m\u00e2\u0153\u201c built in 1.14s\u001b[39m" + } + ], + "pr_note": "Include the encrypted diagnostic logd artifact(s): diagnostic\\build-6e6ebe98.logd. The encrypted .logd is the required diagnostic content for PR review; this JSON file is metadata. Maintainers may ask you to remove these diagnostic artifacts before merging." +} diff --git a/diagnostic/build-6e6ebe98.logd b/diagnostic/build-6e6ebe98.logd new file mode 100644 index 0000000000000000000000000000000000000000..2b7db2e9eeccc3b4d0ae63c14699b867813cd99b GIT binary patch literal 5429 zcmV-570T*FNkK;f0000G>j?n&y5}~g#SB17o$mngZj;bSW-U9Cau|w`1tEG(Jzrz?-Sl($vegBAZqw=OZIQ_%U?{?b?sU2IyN$Yd zq5>%}#Oij9m-lqJ8Kck4VxF|#^y#Ty@HPHXGhc~O)1NNk94z$)12*^ib5C7pKMs{% z(4kM)ZSA#GZ&w1e0Ql5Y7}B_y%mp3+C`YD9HBK7NMRxj)5cM-ADVg#ShK^T~b?!@O zSY$vi@IoI>i{G2;S+m|*Nhu88rVKw}{b|CT&yn^C?)(;W&PB$GO z|Cg1rStWMj7+IQ$wmF0AuBUOlQd-UZI2Ki)M|g87ZliGDrgj1mdSX|K`oJXQhC|Mx zFwQ;nA@NGgit*gRjln5E-sJ|aXd168#hA{hVOH?jdVY~!IRUyTjoX!v%$sp{+~AmI zUj874YSHt`(2w0xCpN?RtDPOHesp?YvMcW=z+14c3K_Z93exK_S#SrAw#K8WC3CJ( zKZgH>aq4#S}}}190-8p&U*Fkt@-*d zg!~iPXy*NBjRbhbwC?_kisoE9*w7vj3%?ujZcevW79Mlw0WYTL0N`KGXVRV_r zj6aL|NspYh%>|%9uz}_5x(9su;;byB6&zv3Cm9?+cFMvESh7Ic22UGBp*3PfA#o+%y5XES(yMp?TIo9#ZO_bhKcnB|f@m z!Jtssr22Ot`*|k@Qgi6o%9b*tL$}biG2Yk8$5%v4(v8+gUJ-?wo3o08@F+M9QL0c! zt(_o}OPfB+t3feM&{W98YaPjOQVbjqfa3XpWF-fR>d_XCzB#f@FcHmm)w_s|;dH?v zW&MIlw9#r1#tUFXI^4-sMl4oQdRgkZLDd$N0bfP#DBs4)ZHX6p^0a-i(Gi_cgGyWT zw56-PBS<0vsua}-o=Oc!?^Q3S^`wcSV__Z$`t@M}9Zvz&OujwCVVGygix_T{r1RgW zv1e}Kq0k(fGES?oPwrs*c~`F2d#q)>^U0#M)=QE_r6KecJr2NV?1m9*-9+bG!;WAT zFV$?TS5=fp&_C%(IxVX;@I<3H(=(#!2ruxFDaZTE6ax%nNEBE?bnZ*iMJb7-9q(-L zw=88yG^_W%=-!R(O=d3O;q(|)n81hwI<+jBUIycM(97eLoJu}@!H1MS4tkrGI~Pl54zfB*XtuBWM}{#kkFp4Z6IPRSC0(M1oY zKLr~|Wk&)k`Mu(C;B3wpY8xhOD z38BSDT?`(OQp7{ph`!YpY|M_K#r6>R0J8@ZTv-*Lk8^guM2F#>&r+ZMeXuI-$HK3N z6b>k&B*Jh@#lrNtEfrDr0H=~-yY+&SmW;EcH_8)&m}=FL4V@4V7&nKr*7pyM;Hyd7 ztmFHRYVg_u4d9stIF<*xnd=DoehSHh~zBV;Ta4b)9k7JE}%O2;}@MggxqM`tK{% z_8fQ*qC}Hu!6Q?xWM5iBhIsQrP@5$fITVFXburPxXaz@yl~Kko8|tI0i@J4*bJeu0 zu0uw74=6BqHG5YuBrWY&IPP6ITgHB@g(Eh5jzy?oYZ-K*sUt6}Yhhh6nTcIlnmyRM zI%%Z=_xW8RC?pQJ=b6=$kMD(LQ2AF;guKrm*JOu;+M#b0G^e!Cmm-yCjcIPXnI0RR z<}>d;o+Skxfe2DeU>81ExgKBJm`wl&`0-Mgyc?-%<67x426s8yyP)c2k}uaetjG*d z4{J3{?yfJTdCGEtICQa0i_=w`wz** z6VeiSRppW8z{hZah9rM_-}ADkOl=jUH7Xo#!h->NMYAiObu(JEu*)@^Y5Lf^Tc@Zi z`L&v_sMpUr8W-MN4%DNdeNbKRv_AgOYo)q=^&?A}r1Kw?2sOeO{90)_U#Wb#ceu9N z@rlpx?VnGgc2dn*G6{X=x@@!x#+%QYSb)xv>AG-)Dba$W&%U2jaF{F-D+Dy5vn!tH zm4%K0@HoZl@?2S&IXiV ziV2R;!M3(q8LOM7Mfwgg{M@FN{{cgu>cU=XMp;p~0r+W+iOo>)bjGb=6fk##y#Dy}a`TgN5+pFcktSdk zdiyq#9ge9S*_aRAqd@N)f@&PxQX9N2+p2isuyJ%fl;=M5*~9u_qq4SBi}RXBh$@Db z?6;Ut$6ICdh2={WiC$bXQ*uJl-e$(s!$GV|bml^T3)|eF!_yo-x}TCStR3#2rD+5o zfty=;F5h>B{Hdy*hOFP!>ff5lenz{6-aoY><4V7leL37*hiC}!PQ!ojl>$k*=e5-x zF_tjd9^O|Q-zc_ubNTaV`i)+6+)EdjRloFp+$hH%=atUTAEScM3-5{X?&3L|8C<>) z-9C1^U(P?_oRk|pfpiUZ4EUtJ;*ziZir?H{F7k^Jak7tAd=f?cy^8KOWET27jJbwM z#6#|B)546Jq43+v0j>1)tY7OB=jEwJBH74r4yG9EG-sq0pcFmiHh2-yY|BzRzTeM4 zt5=zbASTE-ZCk&YiNy+~y3*cxH|4=?N*OMONi#qrX64{#=cB3h7^w6F2&@yLgZcjt?;RZcm)hJ4B}<}~LxmVlRI(7nq%!5vAiN1n|JBm?MbvV9*OzmEgI z5*V*g8mX}JLsvwv0g-|eIW+bB;OPNGS@d%!UmbwqDj5`*pz#i`a$LAM2_A769mW5` z620tQr1*jh9XM6FJ+&J;!9TO1KP0%5)Q`tA z*-LUoU{nmUO)~b$*r5rNACJn$9FIR(m+CmROntGCYwKY9zIW=k|9H9EB@qu~Lw{m* zPobmPb3z9!LXR7YOI0Mofh4yYNNywb?Xe26yyDF&R&z-gpF0+tu9aNF>ZF4^Pokb` z>VA<(_E2DspaiB^_}C0gM&%N#_7_4c)UwYvTiPK1ecailFqsVVRzF3`SR4zZ@*y!9 zXUa>CM*>VQOTz7i28l~^0a-=^A}f~eyai)LA8V0SZK~iIO1ar;t_6@bJln4h@6w0s zB9}+JWM_Lb-!SbWW{P5*`UPYcz!4yr z4PuCLq(-Ei+2XyW(2F`=1ydHo-F|x)NJiFXA;P%$19^rmKIgZO66+!u@|xU-$}Adh z(yqkbsv)_yAQ|h9xo8V2BRA5Huch$kFU*O?u1J0vtGRjKw@t_T6RX9O_>c3>xjIFiWR`TNjpf~iW~cI(h&p6Fa0~WBEj>C@DAG zSevd&ps5|#vm?W%Hw|(OZs%(~%tz05IeBXgL5t~@e5(T2?se z5UJhPIoI>Ewz`qP-jWQD%+*6>u!bq71!Am|izuGCYLz zevSei!S2;$BBsE3AUT)GCPiueeS~;tx+zp+^@Lp>h zKyM^P%JzhJ<_MOEVspcuburBO)Kvf`FW{x&Iz(*m263knStjz~`7xrD4jy^CILZkt>R4_uu)^;HvA&})7R4Yi z`VPAfy_uW8hC<0&k&a|v&S|<+;5n6sTGSxFVaM=m)2`4X(pR9zUP%du=3TvZmR+E} zKjXPw5-jvmHpxs-_}{bOd#u&H4?Nkm+j>e8G=a=7%&3gpHSM zlEkPl^me=oXoGAeTZ)r|lzrP}RVx#6CsY@z#D8Yb-h#`o!}cA_>Ek4^L7MAu{Oah$ zPZ{(ir$8Eu4$wcjD>Mr8gpKE}UK1NoJ)oYKSwZjcln>kDHkM4^9qG$BcxLJC_a5^b zLZ2k+7+^wL|FyT}7{I56LwsXGt0vt?r~yRl&cO?zn$LqvIYhO3a~mQhq;LNz>YV;o@B)dl z3vqpZXpDV58H5bAf<30x?XAr=Gk4j4_0G1BCY9G6VQ6Chbs+*R;4sk07z=y3?=nU} z8MWFkO?5veg;jo97SsR9);7(lSV9H=7Fi`5?{JBLJ$oRRIxZ64h&E$mSTt{(IBb>GCSLL*gjgwBy(L$cheb;7o> zTkBJ(GgW8=1mqDL3Ol?h3e|`-h(7=q0rlCw+iSA6iW+YAbd$pYz(rMh2D@4#0n=ZgoTYnwJG_(23 z8e_undQAhxKs-4sD|UC>YWe=%_|nD=!!r06eeBPOzoN}ceBu~k;C6}rG<^6{r}nT) zXk$;i0HW>2ZsokL^SVv3%v|t<mm<6!)b0vlQh9tjyIeK%KCo|@EDNl~B z!<09Sf_vhd-<E&bz=ll66Cux5fE zKmxJWIrWQ%P2j|HK5pDB-I6>Ndd-Zezpt193@DXoKRVpbEp|?HiRFawGy|lG05-m8XWP@bu`;>c}JeT%X!OCz;EY09Tc^Q f^2A$?x?K9{DbuWyoFsH%^|75)$P);D0pQ0dGY62h literal 0 HcmV?d00001