ugly-app 0.1.234 → 0.1.238

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/dist/cli/feedbackResolve.d.ts.map +1 -1
  2. package/dist/cli/feedbackResolve.js +15 -18
  3. package/dist/cli/feedbackResolve.js.map +1 -1
  4. package/dist/cli/feedbackSubmit.d.ts +1 -1
  5. package/dist/cli/feedbackSubmit.d.ts.map +1 -1
  6. package/dist/cli/feedbackSubmit.js +48 -50
  7. package/dist/cli/feedbackSubmit.js.map +1 -1
  8. package/dist/cli/serverLogQueryApi.d.ts.map +1 -1
  9. package/dist/cli/serverLogQueryApi.js +47 -16
  10. package/dist/cli/serverLogQueryApi.js.map +1 -1
  11. package/dist/cli/version.d.ts +1 -1
  12. package/dist/cli/version.js +1 -1
  13. package/dist/client/AppApi.d.ts +17 -0
  14. package/dist/client/AppApi.d.ts.map +1 -0
  15. package/dist/client/AppApi.js +44 -0
  16. package/dist/client/AppApi.js.map +1 -0
  17. package/dist/client/ErrorLog.d.ts +3 -4
  18. package/dist/client/ErrorLog.d.ts.map +1 -1
  19. package/dist/client/ErrorLog.js +18 -11
  20. package/dist/client/ErrorLog.js.map +1 -1
  21. package/dist/client/Logger.d.ts +3 -4
  22. package/dist/client/Logger.d.ts.map +1 -1
  23. package/dist/client/Logger.js +17 -13
  24. package/dist/client/Logger.js.map +1 -1
  25. package/dist/client/components/FeedbackButton.d.ts +1 -8
  26. package/dist/client/components/FeedbackButton.d.ts.map +1 -1
  27. package/dist/client/components/FeedbackButton.js +20 -16
  28. package/dist/client/components/FeedbackButton.js.map +1 -1
  29. package/dist/client/index.d.ts +1 -0
  30. package/dist/client/index.d.ts.map +1 -1
  31. package/dist/client/index.js +1 -0
  32. package/dist/client/index.js.map +1 -1
  33. package/dist/server/App.d.ts.map +1 -1
  34. package/dist/server/App.js +7 -66
  35. package/dist/server/App.js.map +1 -1
  36. package/dist/server/Auth.d.ts.map +1 -1
  37. package/dist/server/Auth.js +1 -44
  38. package/dist/server/Auth.js.map +1 -1
  39. package/dist/server/Logging.d.ts +3 -4
  40. package/dist/server/Logging.d.ts.map +1 -1
  41. package/dist/server/Logging.js +80 -91
  42. package/dist/server/Logging.js.map +1 -1
  43. package/dist/server/PostgresFilter.d.ts.map +1 -1
  44. package/dist/server/PostgresFilter.js +13 -3
  45. package/dist/server/PostgresFilter.js.map +1 -1
  46. package/dist/server/index.d.ts +4 -5
  47. package/dist/server/index.d.ts.map +1 -1
  48. package/dist/server/index.js +4 -3
  49. package/dist/server/index.js.map +1 -1
  50. package/dist/server/vector.d.ts +58 -0
  51. package/dist/server/vector.d.ts.map +1 -0
  52. package/dist/server/vector.js +300 -0
  53. package/dist/server/vector.js.map +1 -0
  54. package/dist/shared/DB.d.ts +51 -86
  55. package/dist/shared/DB.d.ts.map +1 -1
  56. package/dist/shared/DB.js +1 -9
  57. package/dist/shared/DB.js.map +1 -1
  58. package/dist/shared/FrameworkRequests.d.ts +0 -31
  59. package/dist/shared/FrameworkRequests.d.ts.map +1 -1
  60. package/dist/shared/FrameworkRequests.js +0 -27
  61. package/dist/shared/FrameworkRequests.js.map +1 -1
  62. package/dist/shared/index.d.ts +0 -1
  63. package/dist/shared/index.d.ts.map +1 -1
  64. package/dist/shared/index.js +0 -1
  65. package/dist/shared/index.js.map +1 -1
  66. package/dist/webrtc/server/VideoRoomServer.d.ts +109 -0
  67. package/dist/webrtc/server/VideoRoomServer.d.ts.map +1 -0
  68. package/dist/webrtc/server/VideoRoomServer.js +468 -0
  69. package/dist/webrtc/server/VideoRoomServer.js.map +1 -0
  70. package/dist/webrtc/server/index.d.ts +21 -0
  71. package/dist/webrtc/server/index.d.ts.map +1 -0
  72. package/dist/webrtc/server/index.js +24 -0
  73. package/dist/webrtc/server/index.js.map +1 -0
  74. package/package.json +2 -1
  75. package/src/cli/feedbackResolve.ts +22 -22
  76. package/src/cli/feedbackSubmit.ts +55 -60
  77. package/src/cli/serverLogQueryApi.ts +53 -19
  78. package/src/cli/version.ts +1 -1
  79. package/src/client/AppApi.ts +56 -0
  80. package/src/client/ErrorLog.ts +19 -11
  81. package/src/client/Logger.ts +18 -14
  82. package/src/client/components/FeedbackButton.tsx +23 -23
  83. package/src/client/index.ts +1 -0
  84. package/src/server/App.ts +9 -70
  85. package/src/server/Auth.ts +2 -56
  86. package/src/server/Logging.ts +96 -96
  87. package/src/server/PostgresFilter.ts +11 -3
  88. package/src/server/index.ts +31 -17
  89. package/src/server/vector.ts +380 -0
  90. package/src/shared/DB.ts +57 -9
  91. package/src/shared/FrameworkRequests.ts +0 -31
  92. package/src/shared/index.ts +0 -1
  93. package/src/webrtc/server/VideoRoomServer.ts +546 -0
  94. package/src/webrtc/server/index.ts +34 -0
  95. package/src/server/ErrorLogAdmin.ts +0 -221
  96. package/src/server/FeedbackReport.ts +0 -109
@@ -1 +1 @@
1
- {"version":3,"file":"feedbackResolve.d.ts","sourceRoot":"","sources":["../../src/cli/feedbackResolve.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;CACpB;AAuBD,wBAAsB,eAAe,CACnC,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAuBf"}
1
+ {"version":3,"file":"feedbackResolve.d.ts","sourceRoot":"","sources":["../../src/cli/feedbackResolve.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;CACpB;AAsBD,wBAAsB,eAAe,CACnC,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAwBf"}
@@ -1,32 +1,29 @@
1
1
  import fs from 'node:fs';
2
+ import os from 'node:os';
2
3
  import path from 'node:path';
3
- import { getLocalUrl } from './url.js';
4
- function readTokenFromEnv() {
5
- let envContent = '';
6
- try {
7
- envContent = fs.readFileSync(path.join(process.cwd(), '.env'), 'utf-8');
4
+ function readAuth() {
5
+ const authPath = path.join(os.homedir(), '.ugly-bot', 'auth.json');
6
+ if (!fs.existsSync(authPath)) {
7
+ throw new Error('Not logged in. Run "ugly-app login" first.');
8
8
  }
9
- catch {
10
- throw new Error('No .env file found. Run "npx ugly-app login" first to set up UGLY_BOT_TOKEN.');
11
- }
12
- const match = /^UGLY_BOT_TOKEN=(.+)$/m.exec(envContent);
13
- if (!match?.[1]) {
14
- throw new Error('UGLY_BOT_TOKEN not found in .env. Run "npx ugly-app login" first.');
15
- }
16
- return match[1];
9
+ return JSON.parse(fs.readFileSync(authPath, 'utf-8'));
10
+ }
11
+ function getAppApiUrl() {
12
+ return process.env['UGLY_BOT_API'] ?? 'https://ugly.bot';
17
13
  }
18
14
  export async function resolveFeedback(opts) {
19
- const baseUrl = getLocalUrl(process.cwd());
20
- const token = readTokenFromEnv();
21
- const res = await fetch(`${baseUrl}/api/resolveFeedback`, {
15
+ const appApiUrl = getAppApiUrl();
16
+ const auth = readAuth();
17
+ const res = await fetch(`${appApiUrl}/request`, {
22
18
  method: 'POST',
23
19
  headers: {
24
- 'Authorization': `Bearer ${token}`,
20
+ 'Authorization': `Bearer ${auth.token}`,
25
21
  'Content-Type': 'application/json',
26
22
  },
27
23
  body: JSON.stringify({
24
+ function: 'feedbackReportResolve',
28
25
  input: {
29
- feedbackId: opts.feedbackId,
26
+ feedbackReportId: opts.feedbackId,
30
27
  status: opts.status,
31
28
  resolution: opts.resolution,
32
29
  },
@@ -1 +1 @@
1
- {"version":3,"file":"feedbackResolve.js","sourceRoot":"","sources":["../../src/cli/feedbackResolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAQvC,SAAS,gBAAgB;IACvB,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,IAAI,CAAC;QACH,UAAU,GAAG,EAAE,CAAC,YAAY,CAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,EAChC,OAAO,CACR,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,8EAA8E,CAC/E,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxD,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAA4B;IAE5B,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;IAEjC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,sBAAsB,EAAE;QACxD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,eAAe,EAAE,UAAU,KAAK,EAAE;YAClC,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,KAAK,EAAE;gBACL,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,UAAU,EAAE,IAAI,CAAC,UAAU;aAC5B;SACF,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"feedbackResolve.js","sourceRoot":"","sources":["../../src/cli/feedbackResolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAc7B,SAAS,QAAQ;IACf,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IACnE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,4CAA4C,CAC7C,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAe,CAAC;AACtE,CAAC;AAED,SAAS,YAAY;IACnB,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,kBAAkB,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAA4B;IAE5B,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;IAExB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,UAAU,EAAE;QAC9C,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,eAAe,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE;YACvC,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,QAAQ,EAAE,uBAAuB;YACjC,KAAK,EAAE;gBACL,gBAAgB,EAAE,IAAI,CAAC,UAAU;gBACjC,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,UAAU,EAAE,IAAI,CAAC,UAAU;aAC5B;SACF,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC;AACH,CAAC"}
@@ -3,7 +3,7 @@ export interface FeedbackSubmitOptions {
3
3
  message: string;
4
4
  url?: string;
5
5
  screenshot?: string;
6
- token: string;
6
+ token?: string;
7
7
  logs?: string;
8
8
  elementMap?: string;
9
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"feedbackSubmit.d.ts","sourceRoot":"","sources":["../../src/cli/feedbackSubmit.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,KAAK,GAAG,SAAS,GAAG,QAAQ,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAgDD,wBAAsB,cAAc,CAClC,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAoDzB"}
1
+ {"version":3,"file":"feedbackSubmit.d.ts","sourceRoot":"","sources":["../../src/cli/feedbackSubmit.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,KAAK,GAAG,SAAS,GAAG,QAAQ,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA0BD,wBAAsB,cAAc,CAClC,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAoEzB"}
@@ -1,80 +1,77 @@
1
1
  import fs from 'node:fs';
2
+ import os from 'node:os';
2
3
  import path from 'node:path';
3
- import { getLocalUrl } from './url.js';
4
- async function uploadScreenshot(baseUrl, token, filePath) {
5
- const ext = path.extname(filePath).slice(1) || 'png';
6
- const key = `feedback/${Date.now()}.${ext}`;
7
- // Check file exists before requesting upload URL
8
- if (!fs.existsSync(filePath)) {
9
- throw new Error(`Screenshot file not found: ${filePath}`);
4
+ import { readUglyAppConfig } from './uglyappConfig.js';
5
+ function readAuth() {
6
+ const authPath = path.join(os.homedir(), '.ugly-bot', 'auth.json');
7
+ try {
8
+ return JSON.parse(fs.readFileSync(authPath, 'utf-8'));
10
9
  }
11
- // Get presigned upload URL
12
- const presignRes = await fetch(`${baseUrl}/api/uploadUrl`, {
13
- method: 'POST',
14
- headers: {
15
- 'Authorization': `Bearer ${token}`,
16
- 'Content-Type': 'application/json',
17
- },
18
- body: JSON.stringify({
19
- input: { key, contentType: `image/${ext}` },
20
- }),
21
- });
22
- if (!presignRes.ok) {
23
- throw new Error(`Failed to get upload URL: ${presignRes.status}`);
10
+ catch {
11
+ return null;
24
12
  }
25
- const { uploadUrl, resultUrl } = (await presignRes.json());
26
- // Upload the file
27
- const fileBuffer = fs.readFileSync(filePath);
28
- const uploadRes = await fetch(uploadUrl, {
29
- method: 'PUT',
30
- headers: { 'Content-Type': `image/${ext}` },
31
- body: fileBuffer,
32
- });
33
- if (!uploadRes.ok) {
34
- throw new Error(`Failed to upload screenshot: ${uploadRes.status}`);
35
- }
36
- return resultUrl;
13
+ }
14
+ function getAppApiUrl() {
15
+ return process.env['UGLY_BOT_API'] ?? 'https://ugly.bot';
16
+ }
17
+ function getProjectId() {
18
+ const config = readUglyAppConfig(process.cwd());
19
+ return process.env['UGLY_BOT_PROJECT_ID'] ?? config?.projectId ?? 'unknown';
37
20
  }
38
21
  export async function submitFeedback(opts) {
39
- const baseUrl = getLocalUrl(process.cwd());
40
- let screenshotUri;
22
+ const appApiUrl = getAppApiUrl();
23
+ const projectId = getProjectId();
24
+ const auth = readAuth();
25
+ let screenshotBase64;
41
26
  if (opts.screenshot) {
42
- screenshotUri = await uploadScreenshot(baseUrl, opts.token, opts.screenshot);
27
+ if (!fs.existsSync(opts.screenshot)) {
28
+ throw new Error(`Screenshot file not found: ${opts.screenshot}`);
29
+ }
30
+ screenshotBase64 = fs.readFileSync(opts.screenshot).toString('base64');
43
31
  }
44
- let previousLogs;
32
+ let logs = [];
45
33
  if (opts.logs) {
46
34
  try {
47
- previousLogs = JSON.parse(opts.logs);
35
+ logs = JSON.parse(opts.logs);
48
36
  }
49
37
  catch {
50
38
  throw new Error(`--logs must be valid JSON: ${opts.logs.slice(0, 100)}`);
51
39
  }
52
40
  }
53
- let elementMap;
41
+ let context;
54
42
  if (opts.elementMap) {
55
43
  try {
56
44
  const raw = fs.readFileSync(opts.elementMap, 'utf-8');
57
45
  JSON.parse(raw); // validate it's valid JSON
58
- elementMap = raw;
46
+ context = { elementMap: raw };
59
47
  }
60
48
  catch (e) {
61
49
  throw new Error(`--element-map must be a valid JSON file: ${e.message}`);
62
50
  }
63
51
  }
64
- const res = await fetch(`${baseUrl}/api/submitFeedback`, {
52
+ const headers = {
53
+ 'Content-Type': 'application/json',
54
+ };
55
+ const token = opts.token ?? auth?.token;
56
+ if (token)
57
+ headers['Authorization'] = `Bearer ${token}`;
58
+ const fn = token ? 'feedbackReportCreate' : 'feedbackReportCreateNoAuth';
59
+ const res = await fetch(`${appApiUrl}/request`, {
65
60
  method: 'POST',
66
- headers: {
67
- 'Authorization': `Bearer ${opts.token}`,
68
- 'Content-Type': 'application/json',
69
- },
61
+ headers,
70
62
  body: JSON.stringify({
63
+ function: fn,
71
64
  input: {
65
+ projectId,
66
+ description: opts.message,
72
67
  type: opts.type,
73
- message: opts.message,
74
- url: opts.url ?? baseUrl,
75
- screenshotUri,
76
- previousLogs,
77
- elementMap,
68
+ url: opts.url ?? '',
69
+ screenshotBase64,
70
+ logs: logs.map((l) => ({
71
+ ...l,
72
+ args: [],
73
+ })),
74
+ context,
78
75
  },
79
76
  }),
80
77
  });
@@ -82,6 +79,7 @@ export async function submitFeedback(opts) {
82
79
  const body = await res.text().catch(() => '');
83
80
  throw new Error(`Failed to submit feedback: ${res.status} ${body}`);
84
81
  }
85
- return (await res.json());
82
+ const data = (await res.json());
83
+ return { id: data.result.feedbackReportId };
86
84
  }
87
85
  //# sourceMappingURL=feedbackSubmit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"feedbackSubmit.js","sourceRoot":"","sources":["../../src/cli/feedbackSubmit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"feedbackSubmit.js","sourceRoot":"","sources":["../../src/cli/feedbackSubmit.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"serverLogQueryApi.d.ts","sourceRoot":"","sources":["../../src/cli/serverLogQueryApi.ts"],"names":[],"mappings":"AAmHA,KAAK,eAAe,GAAG,UAAU,GAAG,SAAS,GAAG,gBAAgB,CAAC;AAQjE,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,eAAe,EAC3B,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAC1D,OAAO,CAAC,IAAI,CAAC,CA0Bf"}
1
+ {"version":3,"file":"serverLogQueryApi.d.ts","sourceRoot":"","sources":["../../src/cli/serverLogQueryApi.ts"],"names":[],"mappings":"AAiIA,KAAK,eAAe,GAAG,UAAU,GAAG,SAAS,GAAG,gBAAgB,CAAC;AAEjE,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,eAAe,EAC3B,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAC1D,OAAO,CAAC,IAAI,CAAC,CAoDf"}
@@ -1,6 +1,7 @@
1
1
  import fs from 'fs';
2
2
  import path from 'path';
3
3
  import os from 'os';
4
+ import { readUglyAppConfig } from './uglyappConfig.js';
4
5
  function readAuth() {
5
6
  const authPath = path.join(os.homedir(), '.ugly-bot', 'auth.json');
6
7
  if (!fs.existsSync(authPath)) {
@@ -8,15 +9,23 @@ function readAuth() {
8
9
  }
9
10
  return JSON.parse(fs.readFileSync(authPath, 'utf-8'));
10
11
  }
12
+ function getAppApiUrl() {
13
+ return process.env['UGLY_BOT_API'] ?? 'https://ugly.bot';
14
+ }
15
+ function getProjectId() {
16
+ const config = readUglyAppConfig(process.cwd());
17
+ return process.env['UGLY_BOT_PROJECT_ID'] ?? config?.projectId ?? undefined;
18
+ }
11
19
  async function adminRequest(op, input) {
12
20
  const auth = readAuth();
13
- const res = await fetch(`${auth.serverUrl}/request`, {
21
+ const appApiUrl = getAppApiUrl();
22
+ const res = await fetch(`${appApiUrl}/request`, {
14
23
  method: 'POST',
15
24
  headers: {
16
25
  'Authorization': `Bearer ${auth.token}`,
17
26
  'Content-Type': 'application/json',
18
27
  },
19
- body: JSON.stringify({ op, input }),
28
+ body: JSON.stringify({ function: op, input }),
20
29
  });
21
30
  if (!res.ok) {
22
31
  const body = await res.text().catch(() => '');
@@ -61,7 +70,7 @@ function formatPerfDoc(doc) {
61
70
  function formatFeedbackDoc(doc) {
62
71
  const ts = formatTimestamp(doc['created']);
63
72
  const type = String(doc['type'] ?? '').toUpperCase().padEnd(7);
64
- const message = String(doc['message'] ?? '');
73
+ const message = String(doc['description'] ?? doc['message'] ?? '');
65
74
  const lines = [`${ts} [${type}] ${message}`];
66
75
  if (doc['status'])
67
76
  lines.push(` Status: ${doc['status']}`);
@@ -71,12 +80,15 @@ function formatFeedbackDoc(doc) {
71
80
  lines.push(` URL: ${doc['url']}`);
72
81
  if (doc['screenshotUri'])
73
82
  lines.push(` Screenshot: ${doc['screenshotUri']}`);
74
- const ctx = String(doc['context'] ?? '');
75
- if (ctx && ctx !== '{}' && ctx !== '')
76
- lines.push(` Context: ${ctx}`);
83
+ const ctx = doc['context'];
84
+ if (ctx && typeof ctx === 'object') {
85
+ const ctxStr = JSON.stringify(ctx);
86
+ if (ctxStr !== '{}')
87
+ lines.push(` Context: ${ctxStr}`);
88
+ }
77
89
  if (doc['resolution'])
78
90
  lines.push(` Resolution: ${doc['resolution']}`);
79
- const previousLogs = doc['previousLogs'];
91
+ const previousLogs = doc['logs'] ?? doc['previousLogs'];
80
92
  if (Array.isArray(previousLogs) && previousLogs.length > 0) {
81
93
  lines.push(` Console logs (${previousLogs.length}):`);
82
94
  for (const entry of previousLogs) {
@@ -93,17 +105,36 @@ const formatters = {
93
105
  perfLog: formatPerfDoc,
94
106
  feedbackReport: formatFeedbackDoc,
95
107
  };
96
- const opMap = {
97
- errorLog: 'adminGetErrorLogs',
98
- perfLog: 'adminGetPerfLogs',
99
- feedbackReport: 'adminGetFeedbackLogs',
100
- };
101
108
  export async function queryServerLogsApi(collection, options) {
102
109
  const limit = options.limit ?? 50;
103
- const input = { limit };
104
- if (options.level)
105
- input['level'] = options.level;
106
- const { items } = await adminRequest(opMap[collection], input);
110
+ const projectId = getProjectId();
111
+ let items;
112
+ if (collection === 'errorLog') {
113
+ const input = { limit };
114
+ if (options.level)
115
+ input['level'] = options.level;
116
+ if (projectId)
117
+ input['projectId'] = projectId;
118
+ const result = await adminRequest('errorLogGetList', input);
119
+ items = result.errors;
120
+ }
121
+ else if (collection === 'feedbackReport') {
122
+ // Use errorLogGetList with feedback filter or a dedicated endpoint
123
+ // For now, query the admin API directly
124
+ const input = { limit };
125
+ if (projectId)
126
+ input['projectId'] = projectId;
127
+ const result = await adminRequest('adminGetFeedbackLogs', input);
128
+ items = result.items;
129
+ }
130
+ else {
131
+ // perfLog — still uses the old admin API
132
+ const input = { limit };
133
+ if (options.level)
134
+ input['level'] = options.level;
135
+ const result = await adminRequest('adminGetPerfLogs', input);
136
+ items = result.items;
137
+ }
107
138
  // Reverse so oldest first (server returns newest first)
108
139
  items.reverse();
109
140
  if (items.length === 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"serverLogQueryApi.js","sourceRoot":"","sources":["../../src/cli/serverLogQueryApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAQpB,SAAS,QAAQ;IACf,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IACnE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAe,CAAC;AACtE,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,EAAU,EACV,KAA8B;IAE9B,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;IACxB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,UAAU,EAAE;QACnD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,eAAe,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE;YACvC,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;KACpC,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9C,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,YAAY,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAkB,CAAC;IACjD,OAAO,IAAI,CAAC,MAAM,CAAC;AACrB,CAAC;AAED,SAAS,eAAe,CAAC,OAAgB;IACvC,IAAI,OAAO,YAAY,IAAI,EAAE,CAAC;QAC5B,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,cAAc,CAAC,GAA4B;IAClD,MAAM,EAAE,GAAG,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACtE,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC;QACxB,CAAC,CAAC,OAAO,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;QACpE,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,GAAG,EAAE,IAAI,KAAK,IAAI,MAAM,IAAI,OAAO,GAAG,MAAM,GAAG,KAAK,EAAE,CAAC;AAChE,CAAC;AAED,SAAS,aAAa,CAAC,GAA4B;IACjD,MAAM,EAAE,GAAG,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3C,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,MAAM,EAAE,GAAG,GAAG,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACrE,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;AACtC,CAAC;AAED,SAAS,iBAAiB,CAAC,GAA4B;IACrD,MAAM,EAAE,GAAG,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,KAAK,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;IAE7C,IAAI,GAAG,CAAC,QAAQ,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC5D,IAAI,GAAG,CAAC,QAAQ,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1D,IAAI,GAAG,CAAC,KAAK,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACnD,IAAI,GAAG,CAAC,eAAe,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IAE9E,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IACzC,IAAI,GAAG,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,EAAE;QAAE,KAAK,CAAC,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,CAAC;IAEvE,IAAI,GAAG,CAAC,YAAY,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAExE,MAAM,YAAY,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC;IACzC,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,mBAAmB,YAAY,CAAC,MAAM,IAAI,CAAC,CAAC;QACvD,KAAK,MAAM,KAAK,IAAI,YAAyC,EAAE,CAAC;YAC9D,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;YAClD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACjE,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3C,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,GAA6D;IAC3E,QAAQ,EAAE,cAAc;IACxB,OAAO,EAAE,aAAa;IACtB,cAAc,EAAE,iBAAiB;CAClC,CAAC;AAIF,MAAM,KAAK,GAAoC;IAC7C,QAAQ,EAAE,mBAAmB;IAC7B,OAAO,EAAE,kBAAkB;IAC3B,cAAc,EAAE,sBAAsB;CACvC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,UAA2B,EAC3B,OAA2D;IAE3D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;IAClC,MAAM,KAAK,GAA4B,EAAE,KAAK,EAAE,CAAC;IACjD,IAAI,OAAO,CAAC,KAAK;QAAE,KAAK,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;IAElD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,YAAY,CAClC,KAAK,CAAC,UAAU,CAAC,EACjB,KAAK,CACN,CAAC;IAEF,wDAAwD;IACxD,KAAK,CAAC,OAAO,EAAE,CAAC;IAEhB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,uBAAuB,UAAU,GAAG,CAAC,CAAC;QAClD,OAAO;IACT,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,cAAc,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"serverLogQueryApi.js","sourceRoot":"","sources":["../../src/cli/serverLogQueryApi.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export declare const CLI_VERSION = "0.1.234";
1
+ export declare const CLI_VERSION = "0.1.238";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,3 +1,3 @@
1
1
  // Auto-generated by prebuild — do not edit manually
2
- export const CLI_VERSION = "0.1.234";
2
+ export const CLI_VERSION = "0.1.238";
3
3
  //# sourceMappingURL=version.js.map
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Client-side HTTP helper for calling ugly.bot (../app) API directly.
3
+ * Used by FeedbackButton and Logger to send data to the centralized backend.
4
+ */
5
+ export declare function initAppApi(opts: {
6
+ appApiUrl: string;
7
+ projectId: string;
8
+ getToken?: () => string | null;
9
+ }): void;
10
+ export declare function getAppApiProjectId(): string;
11
+ export declare function isAppApiInitialized(): boolean;
12
+ export declare function appApiRequest(fn: string, input: Record<string, unknown>): Promise<unknown>;
13
+ /**
14
+ * Fire-and-forget version — never throws. Used by Logger.
15
+ */
16
+ export declare function appApiRequestSilent(fn: string, input: Record<string, unknown>): void;
17
+ //# sourceMappingURL=AppApi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppApi.d.ts","sourceRoot":"","sources":["../../src/client/AppApi.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,wBAAgB,UAAU,CAAC,IAAI,EAAE;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;CAChC,GAAG,IAAI,CAIP;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAED,wBAAsB,aAAa,CACjC,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,OAAO,CAAC,CAclB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,IAAI,CAGN"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Client-side HTTP helper for calling ugly.bot (../app) API directly.
3
+ * Used by FeedbackButton and Logger to send data to the centralized backend.
4
+ */
5
+ let _appApiUrl = '';
6
+ let _projectId = '';
7
+ let _getToken = null;
8
+ export function initAppApi(opts) {
9
+ _appApiUrl = opts.appApiUrl.replace(/\/$/, '');
10
+ _projectId = opts.projectId;
11
+ _getToken = opts.getToken ?? null;
12
+ }
13
+ export function getAppApiProjectId() {
14
+ return _projectId;
15
+ }
16
+ export function isAppApiInitialized() {
17
+ return _appApiUrl !== '' && _projectId !== '';
18
+ }
19
+ export async function appApiRequest(fn, input) {
20
+ const token = _getToken?.();
21
+ const headers = { 'Content-Type': 'application/json' };
22
+ if (token)
23
+ headers['Authorization'] = `Bearer ${token}`;
24
+ const res = await fetch(`${_appApiUrl}/request`, {
25
+ method: 'POST',
26
+ headers,
27
+ body: JSON.stringify({
28
+ function: fn,
29
+ input: { ...input, projectId: _projectId },
30
+ }),
31
+ });
32
+ if (!res.ok)
33
+ throw new Error(`AppApi ${fn}: ${res.status}`);
34
+ return res.json();
35
+ }
36
+ /**
37
+ * Fire-and-forget version — never throws. Used by Logger.
38
+ */
39
+ export function appApiRequestSilent(fn, input) {
40
+ if (!_appApiUrl || !_projectId)
41
+ return;
42
+ appApiRequest(fn, input).catch(() => { });
43
+ }
44
+ //# sourceMappingURL=AppApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppApi.js","sourceRoot":"","sources":["../../src/client/AppApi.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,IAAI,UAAU,GAAG,EAAE,CAAC;AACpB,IAAI,UAAU,GAAG,EAAE,CAAC;AACpB,IAAI,SAAS,GAAiC,IAAI,CAAC;AAEnD,MAAM,UAAU,UAAU,CAAC,IAI1B;IACC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC/C,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC;IAC5B,SAAS,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,UAAU,KAAK,EAAE,IAAI,UAAU,KAAK,EAAE,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,EAAU,EACV,KAA8B;IAE9B,MAAM,KAAK,GAAG,SAAS,EAAE,EAAE,CAAC;IAC5B,MAAM,OAAO,GAA2B,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;IAC/E,IAAI,KAAK;QAAE,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,KAAK,EAAE,CAAC;IACxD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,UAAU,EAAE;QAC/C,MAAM,EAAE,MAAM;QACd,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,QAAQ,EAAE,EAAE;YACZ,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE;SAC3C,CAAC;KACH,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,UAAU,EAAE,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5D,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,EAAU,EACV,KAA8B;IAE9B,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU;QAAE,OAAO;IACvC,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AAC3C,CAAC"}
@@ -1,12 +1,11 @@
1
1
  /**
2
2
  * Client-side error capture.
3
3
  *
4
- * Classifies the error, logs it to the console, and POSTs it to
5
- * /api/client-error using a fire-and-forget fetch so callers never block
6
- * on network I/O and a failed request never propagates.
4
+ * Classifies the error, logs it to the console, and sends it to
5
+ * ../app's error log API using a fire-and-forget request.
7
6
  */
8
7
  /**
9
- * Capture a client-side error: log to console and POST to /api/client-error.
8
+ * Capture a client-side error: log to console and send to error log API.
10
9
  *
11
10
  * @param message A const string following the pattern '[Area] Description of cause'
12
11
  * @param error The caught value (typically an Error instance)
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorLog.d.ts","sourceRoot":"","sources":["../../src/client/ErrorLog.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,IAAI,CAcN"}
1
+ {"version":3,"file":"ErrorLog.d.ts","sourceRoot":"","sources":["../../src/client/ErrorLog.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,IAAI,CAqBN"}
@@ -1,12 +1,12 @@
1
1
  /**
2
2
  * Client-side error capture.
3
3
  *
4
- * Classifies the error, logs it to the console, and POSTs it to
5
- * /api/client-error using a fire-and-forget fetch so callers never block
6
- * on network I/O and a failed request never propagates.
4
+ * Classifies the error, logs it to the console, and sends it to
5
+ * ../app's error log API using a fire-and-forget request.
7
6
  */
7
+ import { appApiRequestSilent } from './AppApi.js';
8
8
  /**
9
- * Capture a client-side error: log to console and POST to /api/client-error.
9
+ * Capture a client-side error: log to console and send to error log API.
10
10
  *
11
11
  * @param message A const string following the pattern '[Area] Description of cause'
12
12
  * @param error The caught value (typically an Error instance)
@@ -16,13 +16,20 @@ export function captureClientError(message, error, context) {
16
16
  const stack = error instanceof Error ? error.stack : undefined;
17
17
  // Log locally so developers see it in the browser console immediately.
18
18
  console.error(message, error, context);
19
- // Fire-and-forget POST — never await, never throw.
20
- fetch('/api/client-error', {
21
- method: 'POST',
22
- headers: { 'Content-Type': 'application/json' },
23
- body: JSON.stringify({ message, stack, context }),
24
- }).catch(() => {
25
- // Intentionally swallowed — logging failures must never cause further errors.
19
+ // Fire-and-forget — never await, never throw.
20
+ appApiRequestSilent('errorLogCaptureNoAuth', {
21
+ entries: [
22
+ {
23
+ level: 'error',
24
+ message,
25
+ stack,
26
+ url: typeof window !== 'undefined' ? window.location.href : undefined,
27
+ timestamp: Date.now(),
28
+ source: 'client',
29
+ type: 'exception',
30
+ context,
31
+ },
32
+ ],
26
33
  });
27
34
  }
28
35
  //# sourceMappingURL=ErrorLog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorLog.js","sourceRoot":"","sources":["../../src/client/ErrorLog.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAe,EACf,KAAc,EACd,OAAiC;IAEjC,MAAM,KAAK,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAE/D,uEAAuE;IACvE,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAEvC,mDAAmD;IACnD,KAAK,CAAC,mBAAmB,EAAE;QACzB,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;KAClD,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;QACZ,8EAA8E;IAChF,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"ErrorLog.js","sourceRoot":"","sources":["../../src/client/ErrorLog.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAe,EACf,KAAc,EACd,OAAiC;IAEjC,MAAM,KAAK,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAE/D,uEAAuE;IACvE,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAEvC,8CAA8C;IAC9C,mBAAmB,CAAC,uBAAuB,EAAE;QAC3C,OAAO,EAAE;YACP;gBACE,KAAK,EAAE,OAAO;gBACd,OAAO;gBACP,KAAK;gBACL,GAAG,EAAE,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;gBACrE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,MAAM,EAAE,QAAQ;gBAChB,IAAI,EAAE,WAAW;gBACjB,OAAO;aACR;SACF;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -5,9 +5,8 @@ import type { ErrorLogEntry } from '../shared/DB.js';
5
5
  */
6
6
  export declare function getConsoleBuffer(): ErrorLogEntry[];
7
7
  /**
8
- * Optionally configure the server URL for log flushing.
9
- * For same-origin apps, this does not need to be called interception is already active
10
- * and logs are sent to the relative `/logs/client` path by default.
8
+ * No-op for backward compatibility Logger now uses AppApi for flushing.
9
+ * Call initAppApi() instead to configure the API endpoint.
11
10
  */
12
- export declare function initClientLogger(serverUrl?: string): void;
11
+ export declare function initClientLogger(_serverUrl?: string): void;
13
12
  //# sourceMappingURL=Logger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Logger.d.ts","sourceRoot":"","sources":["../../src/client/Logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,iBAAiB,CAAC;AA6IpE;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,EAAE,CAElD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,SAAK,GAAG,IAAI,CAErD"}
1
+ {"version":3,"file":"Logger.d.ts","sourceRoot":"","sources":["../../src/client/Logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,iBAAiB,CAAC;AAkJpE;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,EAAE,CAElD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,SAAK,GAAG,IAAI,CAEtD"}
@@ -1,5 +1,5 @@
1
+ import { appApiRequestSilent, isAppApiInitialized } from './AppApi.js';
1
2
  // Module-level state
2
- let _serverUrl = '';
3
3
  let _intercepted = false;
4
4
  const MAX_BUFFER = 100;
5
5
  const consoleBuffer = [];
@@ -23,15 +23,20 @@ function addToBuffer(level, args) {
23
23
  consoleBuffer.shift();
24
24
  }
25
25
  function flush() {
26
- if (sendBuffer.length === 0)
26
+ if (sendBuffer.length === 0 || !isAppApiInitialized())
27
27
  return;
28
28
  const entries = sendBuffer.splice(0);
29
- // Fire-and-forget — never throw from logging
30
- fetch(`${_serverUrl}/logs/client`, {
31
- method: 'POST',
32
- headers: { 'Content-Type': 'application/json' },
33
- body: JSON.stringify({ entries }),
34
- }).catch(() => { });
29
+ appApiRequestSilent('errorLogCaptureNoAuth', {
30
+ entries: entries.map((e) => ({
31
+ level: e.level,
32
+ message: e.message,
33
+ stack: e.stack,
34
+ url: e.url,
35
+ timestamp: e.timestamp,
36
+ source: 'browser',
37
+ type: 'console',
38
+ })),
39
+ });
35
40
  }
36
41
  function schedule() {
37
42
  if (flushTimer)
@@ -126,11 +131,10 @@ export function getConsoleBuffer() {
126
131
  return [...consoleBuffer];
127
132
  }
128
133
  /**
129
- * Optionally configure the server URL for log flushing.
130
- * For same-origin apps, this does not need to be called interception is already active
131
- * and logs are sent to the relative `/logs/client` path by default.
134
+ * No-op for backward compatibility Logger now uses AppApi for flushing.
135
+ * Call initAppApi() instead to configure the API endpoint.
132
136
  */
133
- export function initClientLogger(serverUrl = '') {
134
- _serverUrl = serverUrl.replace(/\/$/, '');
137
+ export function initClientLogger(_serverUrl = '') {
138
+ // No-op kept for backward compatibility
135
139
  }
136
140
  //# sourceMappingURL=Logger.js.map