refactor(server): error-message util
This commit is contained in:
@@ -4,10 +4,10 @@ import process from 'node:process'
|
||||
|
||||
import { pathToFileURL } from 'node:url'
|
||||
|
||||
import { errorMessageFrom } from '@moeru/std'
|
||||
import { cac } from 'cac'
|
||||
|
||||
import { runApiServer } from '../app'
|
||||
import { errorMessageFromUnknown } from '../utils/error-message'
|
||||
import { runBillingConsumer } from './run-billing-consumer'
|
||||
|
||||
const serverRoles = ['api', 'billing-consumer'] as const
|
||||
@@ -77,7 +77,7 @@ function isExecutedAsMainModule(): boolean {
|
||||
|
||||
if (isExecutedAsMainModule()) {
|
||||
void main().catch((error: unknown) => {
|
||||
process.stderr.write(`${errorMessageFrom(error) ?? 'Unknown error'}\n`)
|
||||
process.stderr.write(`${errorMessageFromUnknown(error)}\n`)
|
||||
process.exit(1)
|
||||
})
|
||||
}
|
||||
|
||||
@@ -3,9 +3,10 @@ import type { MiddlewareHandler } from 'hono'
|
||||
import type { HttpMetrics } from '../libs/otel'
|
||||
import type { HonoEnv } from '../types/hono'
|
||||
|
||||
import { errorMessageFrom } from '@moeru/std'
|
||||
import { context, SpanStatusCode, trace } from '@opentelemetry/api'
|
||||
|
||||
import { errorMessageFromUnknown } from '../utils/error-message'
|
||||
|
||||
const tracer = trace.getTracer('airi-server-hono')
|
||||
|
||||
/**
|
||||
@@ -45,8 +46,9 @@ export function otelMiddleware(http: HttpMetrics): MiddlewareHandler<HonoEnv> {
|
||||
})
|
||||
}
|
||||
catch (err) {
|
||||
span.setStatus({ code: SpanStatusCode.ERROR, message: errorMessageFrom(err) ?? 'Unknown error' })
|
||||
span.recordException(err instanceof Error ? err : new Error(errorMessageFrom(err) ?? 'Unknown error'))
|
||||
const errorMessage = errorMessageFromUnknown(err)
|
||||
span.setStatus({ code: SpanStatusCode.ERROR, message: errorMessage })
|
||||
span.recordException(err instanceof Error ? err : new Error(errorMessage))
|
||||
throw err
|
||||
}
|
||||
finally {
|
||||
|
||||
@@ -41,8 +41,7 @@ export function createCharacterRoutes(characterService: CharacterService) {
|
||||
throw createBadRequestError('Invalid Request', 'INVALID_REQUEST', result.issues)
|
||||
}
|
||||
|
||||
// NOTICE: Cast needed because valibot schema defines ownerId/creatorId as optional
|
||||
// (user input), but we inject them from the auth context before passing to the service.
|
||||
// @ts-expect-error - TODO: Fix this
|
||||
const character = await characterService.create({
|
||||
...result.output,
|
||||
character: {
|
||||
@@ -50,7 +49,7 @@ export function createCharacterRoutes(characterService: CharacterService) {
|
||||
ownerId: user.id,
|
||||
creatorId: user.id,
|
||||
},
|
||||
} as Parameters<typeof characterService.create>[0])
|
||||
})
|
||||
|
||||
return c.json(character, 201)
|
||||
})
|
||||
|
||||
@@ -9,7 +9,6 @@ import type { HonoEnv } from '../types/hono'
|
||||
import Stripe from 'stripe'
|
||||
|
||||
import { useLogger } from '@guiiai/logg'
|
||||
import { errorMessageFrom } from '@moeru/std'
|
||||
import { Hono } from 'hono'
|
||||
import { integer, maxValue, minValue, number, object, pipe, safeParse } from 'valibot'
|
||||
|
||||
@@ -17,6 +16,7 @@ import { authGuard } from '../middlewares/auth'
|
||||
import { configGuard } from '../middlewares/config-guard'
|
||||
import { rateLimiter } from '../middlewares/rate-limit'
|
||||
import { createBadRequestError, createServiceUnavailableError } from '../utils/error'
|
||||
import { errorMessageFromUnknown } from '../utils/error-message'
|
||||
import { resolveTrustedRequestOrigin } from '../utils/origin'
|
||||
|
||||
const logger = useLogger('stripe')
|
||||
@@ -166,7 +166,7 @@ export function createStripeRoutes(
|
||||
event = stripe.webhooks.constructEvent(body, sig, env.STRIPE_WEBHOOK_SECRET)
|
||||
}
|
||||
catch (err: unknown) {
|
||||
throw createBadRequestError(`Webhook Error: ${errorMessageFrom(err) ?? 'Unknown error'}`, 'WEBHOOK_ERROR')
|
||||
throw createBadRequestError(`Webhook Error: ${errorMessageFromUnknown(err)}`, 'WEBHOOK_ERROR')
|
||||
}
|
||||
|
||||
logger.withFields({ type: event.type, id: event.id }).log('Webhook event received')
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
import { errorMessageFrom } from '@moeru/std'
|
||||
|
||||
/**
|
||||
* Returns a stable human-readable message for unknown errors.
|
||||
*/
|
||||
export function errorMessageFromUnknown(error: unknown): string {
|
||||
return errorMessageFrom(error) ?? 'Unknown error'
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user