@brt-innovation/aether-utility
v1.0.4
Published
Shared utilities and middlewares for Aether microservices
Readme
@brt-innovation/aether-utility
Shared utilities for Aether microservices.
This repository contains reusable components such as:
- Hono middlewares
- Common utilities
- Shared types and constants
The library is published as a public npm package and is intended to be shared across Aether microservices.
Installation
npm install @brt-innovation/aether-utilityPeer Dependencies
This package requires the following peer dependencies:
- dayjs ^1.11.19
- hono ^4.0.0
Usage
Importing the library
import { authMiddleware, responseMiddleware, onAppError } from '@brt-innovation/aether-utility';Features
Hono Middleware
authMiddleware
Authentication middleware for Hono using JWT.
Supported token sources
Authorizationheader (Bearer token)- Cookie (fallback if header is missing)
Example (inline usage)
import { Hono } from 'hono';
import { authMiddleware } from '@brt-innovation/aether-utility/hono';
const app = new Hono();
app.use(
'*',
authMiddleware({
jwtSecret: process.env.JWT_SECRET,
}),
);Example (reusable middleware instance)
import { Hono } from 'hono';
import { authMiddleware } from '@brt-innovation/aether-utility/hono';
const authMid = authMiddleware({
jwtSecret: process.env.JWT_SECRET,
});
const app = new Hono();
app.use('*', authMid);Behavior
- Extracts access token from
Authorizationheader or cookies - Verifies JWT signature and algorithm
- Stores
userIdin Hono context (c.set('userId', payload.sub)) - Returns
401 Unauthorizedfor invalid or missing token
responseMiddleware
Standard response formatter middleware to ensure consistent API responses across services.
Example
import { Hono } from 'hono';
import { responseMiddleware } from '@brt-innovation/aether-utility/hono';
const app = new Hono();
app.use('*', responseMiddleware);onAppError
Global error handler for Hono applications.
This handler catches unhandled errors thrown during request processing and transforms them into a standardized API error response.
Example
import { Hono } from 'hono';
import { onAppError } from '@brt-innovation/aether-utility/hono';
const app = new Hono();
app.onError(onAppError);Dayjs Utilities
Common date/time utilities pre-configured with dayjs, utc, and timezone plugins. Asia/Bangkok is used as the default timezone for BKK specific functions.
Import
import {
startOfDayBkk,
endOfDayBkk,
startOfDayBkkToUtc,
endOfDayBkkToUtc,
convertUtcToBkk,
convertBkkToUtc,
formatDate,
bkkTimezone,
} from '@brt-innovation/aether-utility/dayjs';Available Functions
bkkTimezone: Constant'Asia/Bangkok'.startOfDayBkk(date): Returns the start of the day (00:00:00) in Bangkok timezone as aDateobject.endOfDayBkk(date): Returns the end of the day (23:59:59.999) in Bangkok timezone as aDateobject.startOfDayBkkToUtc(date): Returns the start of the day in Bangkok, converted to UTC as aDateobject.endOfDayBkkToUtc(date): Returns the end of the day in Bangkok, converted to UTC as aDateobject.convertUtcToBkk(date): Converts a UTC date to Bangkok time (Date object with BKK wall time).convertBkkToUtc(date): Converts a Bangkok date to UTC.formatDate(date, options): Formats a date string or object.options.format: Format string (default:'YYYY-MM-DD HH:mm:ss')options.timezone: Target timezone (default:'UTC', options:'UTC','Asia/Bangkok')
Example
import { formatDate, startOfDayBkk, bkkTimezone } from '@brt-innovation/aether-utility/dayjs';
const now = new Date();
const bkkStart = startOfDayBkk(now);
const formatted = formatDate(now, { timezone: bkkTimezone, format: 'DD/MM/YYYY' });License
UNLICENSED - Internal use only for BRT Innovation
