activity for server result errors
This commit is contained in:
@@ -13,7 +13,7 @@ export function getRouter() {
|
|||||||
gcTime: 5 * 60 * 1000, // 5 minutes
|
gcTime: 5 * 60 * 1000, // 5 minutes
|
||||||
refetchOnWindowFocus: false,
|
refetchOnWindowFocus: false,
|
||||||
refetchOnReconnect: "always",
|
refetchOnReconnect: "always",
|
||||||
retry: 3,
|
retry: 1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
import { logger } from "../../logger";
|
import { logger } from "../../logger";
|
||||||
import { ErrorType, ServerError, ServerResult } from "../types";
|
import { ErrorType, ServerError, ServerResult } from "../types";
|
||||||
|
import { pbAdmin } from "../../pocketbase/client";
|
||||||
|
import { getRequest } from "@tanstack/react-start/server";
|
||||||
|
|
||||||
export const createServerError = (
|
export const createServerError = (
|
||||||
type: ErrorType,
|
type: ErrorType,
|
||||||
@@ -15,14 +17,53 @@ export const createServerError = (
|
|||||||
context,
|
context,
|
||||||
});
|
});
|
||||||
|
|
||||||
export const toServerResult = async <T>(serverFn: () => Promise<T>): Promise<ServerResult<T>> => {
|
export const toServerResult = async <T>(
|
||||||
|
serverFn: () => Promise<T>
|
||||||
|
): Promise<ServerResult<T>> => {
|
||||||
|
const startTime = Date.now();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const data = await serverFn();
|
const data = await serverFn();
|
||||||
return { success: true, data };
|
return { success: true, data };
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
const duration = Date.now() - startTime;
|
||||||
logger.error('Server Fn Error', error);
|
logger.error('Server Fn Error', error);
|
||||||
|
|
||||||
const mappedError = mapKnownError(error);
|
const mappedError = mapKnownError(error);
|
||||||
|
|
||||||
|
let fnName = 'unknown';
|
||||||
|
try {
|
||||||
|
const request = getRequest();
|
||||||
|
const url = new URL(request.url);
|
||||||
|
|
||||||
|
const functionId = url.searchParams.get('_serverFnId') || url.pathname;
|
||||||
|
|
||||||
|
if (functionId.includes('--')) {
|
||||||
|
const match = functionId.match(/--([^_]+)_/);
|
||||||
|
fnName = match?.[1] || functionId.split('--')[1]?.split('_')[0] || 'unknown';
|
||||||
|
} else {
|
||||||
|
fnName = serverFn.name || 'unknown';
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
fnName = serverFn.name || 'unknown';
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
await pbAdmin.authPromise;
|
||||||
|
await pbAdmin.createActivity({
|
||||||
|
name: fnName,
|
||||||
|
duration,
|
||||||
|
success: false,
|
||||||
|
error: mappedError.message,
|
||||||
|
arguments: {
|
||||||
|
errorType: mappedError.code,
|
||||||
|
statusCode: mappedError.statusCode,
|
||||||
|
userMessage: mappedError.userMessage,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
} catch (activityError) {
|
||||||
|
}
|
||||||
|
|
||||||
return { success: false, error: mappedError };
|
return { success: false, error: mappedError };
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user