chore: stop tracking TypeScript emit under packages/*/src

Ignore .js/.js.map/.d.ts/.d.ts.map next to sources (tsc outDir is dist).
Preserve hand-written packages/auth/src/types/base58-universal.d.ts.

Made-with: Cursor
This commit is contained in:
defiQUG
2026-04-07 22:08:37 -07:00
parent 27c4012431
commit 923b703d97
149 changed files with 8 additions and 5504 deletions

View File

@@ -1,32 +0,0 @@
/**
* Authentication and authorization middleware
*/
import { FastifyRequest, FastifyReply } from 'fastify';
export interface AuthUser {
id: string;
email?: string;
did?: string;
roles?: string[];
}
declare module 'fastify' {
interface FastifyRequest {
user?: AuthUser;
}
}
/**
* JWT authentication middleware
*/
export declare function authenticateJWT(request: FastifyRequest, _reply: FastifyReply): Promise<void>;
/**
* DID-based authentication middleware
*/
export declare function authenticateDID(request: FastifyRequest, _reply: FastifyReply): Promise<void>;
/**
* Role-based access control middleware
*/
export declare function requireRole(...allowedRoles: string[]): (request: FastifyRequest, _reply: FastifyReply) => Promise<void>;
/**
* OIDC token validation middleware
*/
export declare function authenticateOIDC(request: FastifyRequest, _reply: FastifyReply): Promise<void>;
//# sourceMappingURL=auth.d.ts.map

View File

@@ -1 +0,0 @@
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAOvD,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAU,cAAc;QACtB,IAAI,CAAC,EAAE,QAAQ,CAAC;KACjB;CACF;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,YAAY,EAAE,MAAM,EAAE,IACrC,SAAS,cAAc,EAAE,QAAQ,YAAY,KAAG,OAAO,CAAC,IAAI,CAAC,CAY5E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAmEf"}

View File

@@ -1,137 +0,0 @@
/**
* Authentication and authorization middleware
*/
import { verify } from 'jsonwebtoken';
import { DIDResolver } from '@the-order/auth';
import { getEnv } from './env';
import { AppError } from './error-handler';
import fetch from 'node-fetch';
/**
* JWT authentication middleware
*/
export async function authenticateJWT(request, _reply) {
const authHeader = request.headers.authorization;
if (!authHeader || !authHeader.startsWith('Bearer ')) {
throw new AppError(401, 'UNAUTHORIZED', 'Missing or invalid authorization header');
}
const token = authHeader.substring(7);
const env = getEnv();
if (!env.JWT_SECRET) {
throw new AppError(500, 'CONFIG_ERROR', 'JWT secret not configured');
}
try {
const decoded = verify(token, env.JWT_SECRET);
request.user = decoded;
}
catch (error) {
throw new AppError(401, 'INVALID_TOKEN', 'Invalid or expired token');
}
}
/**
* DID-based authentication middleware
*/
export async function authenticateDID(request, _reply) {
const didHeader = request.headers['x-did'];
const signatureHeader = request.headers['x-did-signature'];
const messageHeader = request.headers['x-did-message'];
if (!didHeader || !signatureHeader || !messageHeader) {
throw new AppError(401, 'UNAUTHORIZED', 'Missing DID authentication headers');
}
try {
const resolver = new DIDResolver();
const isValid = await resolver.verifySignature(didHeader, messageHeader, signatureHeader);
if (!isValid) {
throw new AppError(401, 'INVALID_SIGNATURE', 'Invalid DID signature');
}
request.user = {
id: didHeader,
did: didHeader,
};
}
catch (error) {
if (error instanceof AppError) {
throw error;
}
throw new AppError(401, 'AUTH_ERROR', 'DID authentication failed');
}
}
/**
* Role-based access control middleware
*/
export function requireRole(...allowedRoles) {
return async (request, _reply) => {
if (!request.user) {
throw new AppError(401, 'UNAUTHORIZED', 'Authentication required');
}
const userRoles = request.user.roles || [];
const hasRole = allowedRoles.some((role) => userRoles.includes(role));
if (!hasRole) {
throw new AppError(403, 'FORBIDDEN', `Required role: ${allowedRoles.join(' or ')}`);
}
};
}
/**
* OIDC token validation middleware
*/
export async function authenticateOIDC(request, _reply) {
const authHeader = request.headers.authorization;
if (!authHeader || !authHeader.startsWith('Bearer ')) {
throw new AppError(401, 'UNAUTHORIZED', 'Missing authorization header');
}
const token = authHeader.substring(7);
const env = getEnv();
// Validate token with OIDC issuer
if (!env.OIDC_ISSUER) {
throw new AppError(500, 'CONFIG_ERROR', 'OIDC issuer not configured');
}
try {
// Introspect token with issuer
const introspectionUrl = `${env.OIDC_ISSUER}/introspect`;
const response = await fetch(introspectionUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
Authorization: `Basic ${Buffer.from(`${env.OIDC_CLIENT_ID}:${env.OIDC_CLIENT_SECRET}`).toString('base64')}`,
},
body: new URLSearchParams({
token,
token_type_hint: 'access_token',
}),
});
if (!response.ok) {
throw new AppError(401, 'INVALID_TOKEN', 'Token introspection failed');
}
const tokenInfo = (await response.json());
if (!tokenInfo.active) {
throw new AppError(401, 'INVALID_TOKEN', 'Token is not active');
}
// Get user info from userinfo endpoint
const userInfoUrl = `${env.OIDC_ISSUER}/userinfo`;
const userInfoResponse = await fetch(userInfoUrl, {
headers: {
Authorization: `Bearer ${token}`,
},
});
if (userInfoResponse.ok) {
const userInfo = (await userInfoResponse.json());
request.user = {
id: userInfo.sub,
email: userInfo.email,
};
}
else {
// Fallback to token info
request.user = {
id: tokenInfo.sub || 'oidc-user',
email: tokenInfo.email,
};
}
}
catch (error) {
if (error instanceof AppError) {
throw error;
}
throw new AppError(401, 'AUTH_ERROR', 'OIDC token validation failed');
}
}
//# sourceMappingURL=auth.js.map

View File

@@ -1 +0,0 @@
{"version":3,"file":"auth.js","sourceRoot":"","sources":["auth.ts"],"names":[],"mappings":"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"}

View File

@@ -1,117 +0,0 @@
/**
* Environment variable validation
*/
import { z } from 'zod';
/**
* Environment variable schema
*/
declare const envSchema: z.ZodObject<{
NODE_ENV: z.ZodDefault<z.ZodEnum<["development", "staging", "production"]>>;
PORT: z.ZodDefault<z.ZodPipeline<z.ZodEffects<z.ZodString, number, string>, z.ZodNumber>>;
DATABASE_URL: z.ZodString;
STORAGE_TYPE: z.ZodDefault<z.ZodEnum<["s3", "gcs"]>>;
STORAGE_BUCKET: z.ZodString;
STORAGE_REGION: z.ZodDefault<z.ZodString>;
AWS_ACCESS_KEY_ID: z.ZodOptional<z.ZodString>;
AWS_SECRET_ACCESS_KEY: z.ZodOptional<z.ZodString>;
GCP_PROJECT_ID: z.ZodOptional<z.ZodString>;
GCP_KEY_FILE: z.ZodOptional<z.ZodString>;
KMS_TYPE: z.ZodDefault<z.ZodEnum<["aws", "gcp"]>>;
KMS_KEY_ID: z.ZodString;
KMS_REGION: z.ZodDefault<z.ZodString>;
JWT_SECRET: z.ZodString;
OIDC_ISSUER: z.ZodOptional<z.ZodString>;
OIDC_CLIENT_ID: z.ZodOptional<z.ZodString>;
OIDC_CLIENT_SECRET: z.ZodOptional<z.ZodString>;
VC_ISSUER_DID: z.ZodOptional<z.ZodString>;
VC_ISSUER_DOMAIN: z.ZodOptional<z.ZodString>;
SWAGGER_SERVER_URL: z.ZodOptional<z.ZodString>;
CORS_ORIGIN: z.ZodOptional<z.ZodString>;
LOG_LEVEL: z.ZodDefault<z.ZodEnum<["fatal", "error", "warn", "info", "debug", "trace"]>>;
OTEL_EXPORTER_OTLP_ENDPOINT: z.ZodOptional<z.ZodString>;
OTEL_SERVICE_NAME: z.ZodOptional<z.ZodString>;
PAYMENT_GATEWAY_API_KEY: z.ZodOptional<z.ZodString>;
PAYMENT_GATEWAY_WEBHOOK_SECRET: z.ZodOptional<z.ZodString>;
OCR_SERVICE_URL: z.ZodOptional<z.ZodString>;
OCR_SERVICE_API_KEY: z.ZodOptional<z.ZodString>;
ML_CLASSIFICATION_SERVICE_URL: z.ZodOptional<z.ZodString>;
ML_CLASSIFICATION_API_KEY: z.ZodOptional<z.ZodString>;
REDIS_URL: z.ZodOptional<z.ZodString>;
MESSAGE_QUEUE_URL: z.ZodOptional<z.ZodString>;
}, "strip", z.ZodTypeAny, {
NODE_ENV: "production" | "development" | "staging";
PORT: number;
DATABASE_URL: string;
STORAGE_TYPE: "s3" | "gcs";
STORAGE_BUCKET: string;
STORAGE_REGION: string;
KMS_TYPE: "aws" | "gcp";
KMS_KEY_ID: string;
KMS_REGION: string;
JWT_SECRET: string;
LOG_LEVEL: "fatal" | "error" | "warn" | "info" | "debug" | "trace";
AWS_ACCESS_KEY_ID?: string | undefined;
AWS_SECRET_ACCESS_KEY?: string | undefined;
GCP_PROJECT_ID?: string | undefined;
GCP_KEY_FILE?: string | undefined;
OIDC_ISSUER?: string | undefined;
OIDC_CLIENT_ID?: string | undefined;
OIDC_CLIENT_SECRET?: string | undefined;
VC_ISSUER_DID?: string | undefined;
VC_ISSUER_DOMAIN?: string | undefined;
SWAGGER_SERVER_URL?: string | undefined;
CORS_ORIGIN?: string | undefined;
OTEL_EXPORTER_OTLP_ENDPOINT?: string | undefined;
OTEL_SERVICE_NAME?: string | undefined;
PAYMENT_GATEWAY_API_KEY?: string | undefined;
PAYMENT_GATEWAY_WEBHOOK_SECRET?: string | undefined;
OCR_SERVICE_URL?: string | undefined;
OCR_SERVICE_API_KEY?: string | undefined;
ML_CLASSIFICATION_SERVICE_URL?: string | undefined;
ML_CLASSIFICATION_API_KEY?: string | undefined;
REDIS_URL?: string | undefined;
MESSAGE_QUEUE_URL?: string | undefined;
}, {
DATABASE_URL: string;
STORAGE_BUCKET: string;
KMS_KEY_ID: string;
JWT_SECRET: string;
NODE_ENV?: "production" | "development" | "staging" | undefined;
PORT?: string | undefined;
STORAGE_TYPE?: "s3" | "gcs" | undefined;
STORAGE_REGION?: string | undefined;
AWS_ACCESS_KEY_ID?: string | undefined;
AWS_SECRET_ACCESS_KEY?: string | undefined;
GCP_PROJECT_ID?: string | undefined;
GCP_KEY_FILE?: string | undefined;
KMS_TYPE?: "aws" | "gcp" | undefined;
KMS_REGION?: string | undefined;
OIDC_ISSUER?: string | undefined;
OIDC_CLIENT_ID?: string | undefined;
OIDC_CLIENT_SECRET?: string | undefined;
VC_ISSUER_DID?: string | undefined;
VC_ISSUER_DOMAIN?: string | undefined;
SWAGGER_SERVER_URL?: string | undefined;
CORS_ORIGIN?: string | undefined;
LOG_LEVEL?: "fatal" | "error" | "warn" | "info" | "debug" | "trace" | undefined;
OTEL_EXPORTER_OTLP_ENDPOINT?: string | undefined;
OTEL_SERVICE_NAME?: string | undefined;
PAYMENT_GATEWAY_API_KEY?: string | undefined;
PAYMENT_GATEWAY_WEBHOOK_SECRET?: string | undefined;
OCR_SERVICE_URL?: string | undefined;
OCR_SERVICE_API_KEY?: string | undefined;
ML_CLASSIFICATION_SERVICE_URL?: string | undefined;
ML_CLASSIFICATION_API_KEY?: string | undefined;
REDIS_URL?: string | undefined;
MESSAGE_QUEUE_URL?: string | undefined;
}>;
/**
* Validated environment variables
*/
export type Env = z.infer<typeof envSchema>;
/**
* Get validated environment variables
*/
export declare function getEnv(): Env;
export {};
//# sourceMappingURL=env.d.ts.map

View File

@@ -1 +0,0 @@
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["env.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,QAAA,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4Db,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC;AAI5C;;GAEG;AACH,wBAAgB,MAAM,IAAI,GAAG,CAe5B"}

View File

@@ -1,80 +0,0 @@
/**
* Environment variable validation
*/
import { z } from 'zod';
/**
* Environment variable schema
*/
const envSchema = z.object({
// Node environment
NODE_ENV: z.enum(['development', 'staging', 'production']).default('development'),
// Server configuration
PORT: z.string().transform(Number).pipe(z.number().int().positive()).default('3000'),
// Database
DATABASE_URL: z.string().url(),
// Storage (S3/GCS)
STORAGE_TYPE: z.enum(['s3', 'gcs']).default('s3'),
STORAGE_BUCKET: z.string(),
STORAGE_REGION: z.string().default('us-east-1'),
AWS_ACCESS_KEY_ID: z.string().optional(),
AWS_SECRET_ACCESS_KEY: z.string().optional(),
GCP_PROJECT_ID: z.string().optional(),
GCP_KEY_FILE: z.string().optional(),
// KMS
KMS_TYPE: z.enum(['aws', 'gcp']).default('aws'),
KMS_KEY_ID: z.string(),
KMS_REGION: z.string().default('us-east-1'),
// Authentication
JWT_SECRET: z.string().min(32),
OIDC_ISSUER: z.string().url().optional(),
OIDC_CLIENT_ID: z.string().optional(),
OIDC_CLIENT_SECRET: z.string().optional(),
VC_ISSUER_DID: z.string().optional(),
VC_ISSUER_DOMAIN: z.string().optional(),
SWAGGER_SERVER_URL: z.string().url().optional(),
// CORS
CORS_ORIGIN: z.string().optional(),
// Logging
LOG_LEVEL: z.enum(['fatal', 'error', 'warn', 'info', 'debug', 'trace']).default('info'),
// Monitoring
OTEL_EXPORTER_OTLP_ENDPOINT: z.string().url().optional(),
OTEL_SERVICE_NAME: z.string().optional(),
// Payment Gateway
PAYMENT_GATEWAY_API_KEY: z.string().optional(),
PAYMENT_GATEWAY_WEBHOOK_SECRET: z.string().optional(),
// OCR Service
OCR_SERVICE_URL: z.string().url().optional(),
OCR_SERVICE_API_KEY: z.string().optional(),
// ML Classification
ML_CLASSIFICATION_SERVICE_URL: z.string().url().optional(),
ML_CLASSIFICATION_API_KEY: z.string().optional(),
// Redis/Cache
REDIS_URL: z.string().url().optional(),
// Message Queue
MESSAGE_QUEUE_URL: z.string().url().optional(),
});
let env = null;
/**
* Get validated environment variables
*/
export function getEnv() {
if (env) {
return env;
}
try {
env = envSchema.parse(process.env);
return env;
}
catch (error) {
if (error instanceof z.ZodError) {
const missing = error.errors.map((e) => `${e.path.join('.')}: ${e.message}`).join(', ');
throw new Error(`Invalid environment variables: ${missing}`);
}
throw error;
}
}
/**
* Validate environment variables on module load
*/
getEnv();
//# sourceMappingURL=env.js.map

View File

@@ -1 +0,0 @@
{"version":3,"file":"env.js","sourceRoot":"","sources":["env.ts"],"names":[],"mappings":"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"}

View File

@@ -1,22 +0,0 @@
/**
* Error handling utilities for The Order services
*/
import { FastifyError, FastifyReply, FastifyRequest } from 'fastify';
/**
* Custom application error class
*/
export declare class AppError extends Error {
statusCode: number;
code: string;
details?: unknown | undefined;
constructor(statusCode: number, code: string, message: string, details?: unknown | undefined);
}
/**
* Global error handler for Fastify
*/
export declare function errorHandler(error: FastifyError, request: FastifyRequest, reply: FastifyReply): Promise<void>;
/**
* Create a standardized error response
*/
export declare function createErrorResponse(statusCode: number, code: string, message: string, details?: unknown): AppError;
//# sourceMappingURL=error-handler.d.ts.map

View File

@@ -1 +0,0 @@
{"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["error-handler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAErE;;GAEG;AACH,qBAAa,QAAS,SAAQ,KAAK;IAExB,UAAU,EAAE,MAAM;IAClB,IAAI,EAAE,MAAM;IAEZ,OAAO,CAAC,EAAE,OAAO;gBAHjB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACR,OAAO,CAAC,EAAE,OAAO,YAAA;CAM3B;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,IAAI,CAAC,CAsCf;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,OAAO,GAChB,QAAQ,CAEV"}

View File

@@ -1,65 +0,0 @@
/**
* Error handling utilities for The Order services
*/
/**
* Custom application error class
*/
export class AppError extends Error {
statusCode;
code;
details;
constructor(statusCode, code, message, details) {
super(message);
this.statusCode = statusCode;
this.code = code;
this.details = details;
this.name = 'AppError';
Error.captureStackTrace(this, this.constructor);
}
}
/**
* Global error handler for Fastify
*/
export async function errorHandler(error, request, reply) {
request.log.error({
err: error,
url: request.url,
method: request.method,
statusCode: error.statusCode || 500,
});
if (error instanceof AppError) {
return reply.status(error.statusCode).send({
error: {
code: error.code,
message: error.message,
details: error.details,
},
});
}
// Handle validation errors
if (error.validation) {
return reply.status(400).send({
error: {
code: 'VALIDATION_ERROR',
message: 'Validation failed',
details: error.validation,
},
});
}
// Don't expose internal errors in production
const isProduction = process.env.NODE_ENV === 'production';
return reply.status(error.statusCode || 500).send({
error: {
code: 'INTERNAL_ERROR',
message: isProduction ? 'Internal server error' : error.message,
...(isProduction ? {} : { stack: error.stack }),
},
});
}
/**
* Create a standardized error response
*/
export function createErrorResponse(statusCode, code, message, details) {
return new AppError(statusCode, code, message, details);
}
//# sourceMappingURL=error-handler.js.map

View File

@@ -1 +0,0 @@
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["error-handler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,MAAM,OAAO,QAAS,SAAQ,KAAK;IAExB;IACA;IAEA;IAJT,YACS,UAAkB,EAClB,IAAY,EACnB,OAAe,EACR,OAAiB;QAExB,KAAK,CAAC,OAAO,CAAC,CAAC;QALR,eAAU,GAAV,UAAU,CAAQ;QAClB,SAAI,GAAJ,IAAI,CAAQ;QAEZ,YAAO,GAAP,OAAO,CAAU;QAGxB,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,KAAmB,EACnB,OAAuB,EACvB,KAAmB;IAEnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;QAChB,GAAG,EAAE,KAAK;QACV,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,GAAG;KACpC,CAAC,CAAC;IAEH,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;YACzC,KAAK,EAAE;gBACL,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB;SACF,CAAC,CAAC;IACL,CAAC;IAED,2BAA2B;IAC3B,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YAC5B,KAAK,EAAE;gBACL,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,mBAAmB;gBAC5B,OAAO,EAAE,KAAK,CAAC,UAAU;aAC1B;SACF,CAAC,CAAC;IACL,CAAC;IAED,6CAA6C;IAC7C,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;IAC3D,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;QAChD,KAAK,EAAE;YACL,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO;YAC/D,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;SAChD;KACF,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,UAAkB,EAClB,IAAY,EACZ,OAAe,EACf,OAAiB;IAEjB,OAAO,IAAI,QAAQ,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC1D,CAAC"}

View File

@@ -1,12 +0,0 @@
/**
* Shared utilities for The Order services
*/
export * from './error-handler';
export * from './env';
export * from './logger';
export * from './security';
export * from './middleware';
export * from './validation';
export * from './auth';
export type { AuthUser } from './auth';
//# sourceMappingURL=index.d.ts.map

View File

@@ -1 +0,0 @@
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,QAAQ,CAAC;AAGvB,YAAY,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC"}

View File

@@ -1,11 +0,0 @@
/**
* Shared utilities for The Order services
*/
export * from './error-handler';
export * from './env';
export * from './logger';
export * from './security';
export * from './middleware';
export * from './validation';
export * from './auth';
//# sourceMappingURL=index.js.map

View File

@@ -1 +0,0 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,QAAQ,CAAC"}

View File

@@ -1,13 +0,0 @@
/**
* Structured logging utilities
*/
import pino from 'pino';
/**
* Create a Pino logger instance
*/
export declare function createLogger(serviceName: string): pino.Logger;
/**
* Add correlation ID to logger context
*/
export declare function withCorrelationId(logger: pino.Logger, correlationId: string): pino.Logger;
//# sourceMappingURL=logger.d.ts.map

View File

@@ -1 +0,0 @@
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CAwB7D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,IAAI,CAAC,MAAM,EACnB,aAAa,EAAE,MAAM,GACpB,IAAI,CAAC,MAAM,CAEb"}

View File

@@ -1,39 +0,0 @@
/**
* Structured logging utilities
*/
import pino from 'pino';
import { getEnv } from './env';
/**
* Create a Pino logger instance
*/
export function createLogger(serviceName) {
const env = getEnv();
const isDevelopment = env.NODE_ENV === 'development';
return pino({
level: env.LOG_LEVEL,
name: serviceName,
transport: isDevelopment
? {
target: 'pino-pretty',
options: {
colorize: true,
translateTime: 'HH:MM:ss Z',
ignore: 'pid,hostname',
},
}
: undefined,
formatters: {
level: (label) => {
return { level: label };
},
},
timestamp: pino.stdTimeFunctions.isoTime,
});
}
/**
* Add correlation ID to logger context
*/
export function withCorrelationId(logger, correlationId) {
return logger.child({ correlationId });
}
//# sourceMappingURL=logger.js.map

View File

@@ -1 +0,0 @@
{"version":3,"file":"logger.js","sourceRoot":"","sources":["logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/B;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC9C,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,MAAM,aAAa,GAAG,GAAG,CAAC,QAAQ,KAAK,aAAa,CAAC;IAErD,OAAO,IAAI,CAAC;QACV,KAAK,EAAE,GAAG,CAAC,SAAS;QACpB,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,aAAa;YACtB,CAAC,CAAC;gBACE,MAAM,EAAE,aAAa;gBACrB,OAAO,EAAE;oBACP,QAAQ,EAAE,IAAI;oBACd,aAAa,EAAE,YAAY;oBAC3B,MAAM,EAAE,cAAc;iBACvB;aACF;YACH,CAAC,CAAC,SAAS;QACb,UAAU,EAAE;YACV,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;gBACf,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YAC1B,CAAC;SACF;QACD,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO;KACzC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAmB,EACnB,aAAqB;IAErB,OAAO,MAAM,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC;AACzC,CAAC"}

View File

@@ -1,13 +0,0 @@
/**
* Common middleware utilities
*/
import { FastifyInstance } from 'fastify';
/**
* Add correlation ID middleware
*/
export declare function addCorrelationId(server: FastifyInstance): void;
/**
* Add request logging middleware
*/
export declare function addRequestLogging(server: FastifyInstance): void;
//# sourceMappingURL=middleware.d.ts.map

View File

@@ -1 +0,0 @@
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["middleware.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAkB,MAAM,SAAS,CAAC;AAG1D;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAO9D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAkB/D"}

View File

@@ -1,36 +0,0 @@
/**
* Common middleware utilities
*/
import { randomUUID } from 'crypto';
/**
* Add correlation ID middleware
*/
export function addCorrelationId(server) {
server.addHook('onRequest', async (request, reply) => {
const correlationId = request.headers['x-request-id'] || randomUUID();
request.id = correlationId;
reply.header('x-request-id', correlationId);
});
}
/**
* Add request logging middleware
*/
export function addRequestLogging(server) {
server.addHook('onRequest', async (request) => {
request.log.info({
method: request.method,
url: request.url,
ip: request.ip,
userAgent: request.headers['user-agent'],
});
});
server.addHook('onResponse', async (request, reply) => {
request.log.info({
method: request.method,
url: request.url,
statusCode: reply.statusCode,
responseTime: reply.getResponseTime(),
});
});
}
//# sourceMappingURL=middleware.js.map

View File

@@ -1 +0,0 @@
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["middleware.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAuB;IACtD,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,OAAuB,EAAE,KAAK,EAAE,EAAE;QACnE,MAAM,aAAa,GAChB,OAAO,CAAC,OAAO,CAAC,cAAc,CAAY,IAAI,UAAU,EAAE,CAAC;QAC9D,OAAO,CAAC,EAAE,GAAG,aAAa,CAAC;QAC3B,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAuB;IACvD,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,OAAuB,EAAE,EAAE;QAC5D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACf,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;SACzC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,EAAE,OAAuB,EAAE,KAAK,EAAE,EAAE;QACpE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACf,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,YAAY,EAAE,KAAK,CAAC,eAAe,EAAE;SACtC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}

View File

@@ -1,9 +0,0 @@
/**
* Security middleware for Fastify
*/
import { FastifyInstance } from 'fastify';
/**
* Register security plugins on a Fastify instance
*/
export declare function registerSecurityPlugins(server: FastifyInstance): Promise<void>;
//# sourceMappingURL=security.d.ts.map

View File

@@ -1 +0,0 @@
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["security.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAM1C;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAgDpF"}

View File

@@ -1,56 +0,0 @@
/**
* Security middleware for Fastify
*/
import fastifyHelmet from '@fastify/helmet';
import fastifyRateLimit from '@fastify/rate-limit';
import fastifyCors from '@fastify/cors';
import { getEnv } from './env';
/**
* Register security plugins on a Fastify instance
*/
export async function registerSecurityPlugins(server) {
const env = getEnv();
// Helmet for security headers
await server.register(fastifyHelmet, {
contentSecurityPolicy: {
directives: {
defaultSrc: ["'self'"],
styleSrc: ["'self'", "'unsafe-inline'"],
scriptSrc: ["'self'"],
imgSrc: ["'self'", 'data:', 'https:'],
connectSrc: ["'self'"],
fontSrc: ["'self'"],
objectSrc: ["'none'"],
mediaSrc: ["'self'"],
frameSrc: ["'none'"],
},
},
crossOriginEmbedderPolicy: false,
});
// CORS
const corsOrigins = env.CORS_ORIGIN
? env.CORS_ORIGIN.split(',').map((origin) => origin.trim())
: env.NODE_ENV === 'development'
? ['http://localhost:3000']
: [];
await server.register(fastifyCors, {
origin: corsOrigins,
credentials: true,
methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'],
allowedHeaders: ['Content-Type', 'Authorization', 'X-Request-ID'],
});
// Rate limiting
await server.register(fastifyRateLimit, {
max: 100,
timeWindow: '1 minute',
errorResponseBuilder: (_request, context) => {
return {
error: {
code: 'RATE_LIMIT_EXCEEDED',
message: `Rate limit exceeded, retry in ${Math.ceil(context.ttl / 1000)} seconds`,
},
};
},
});
}
//# sourceMappingURL=security.js.map

View File

@@ -1 +0,0 @@
{"version":3,"file":"security.js","sourceRoot":"","sources":["security.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,gBAAgB,MAAM,qBAAqB,CAAC;AACnD,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/B;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,MAAuB;IACnE,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IAErB,8BAA8B;IAC9B,MAAM,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE;QACnC,qBAAqB,EAAE;YACrB,UAAU,EAAE;gBACV,UAAU,EAAE,CAAC,QAAQ,CAAC;gBACtB,QAAQ,EAAE,CAAC,QAAQ,EAAE,iBAAiB,CAAC;gBACvC,SAAS,EAAE,CAAC,QAAQ,CAAC;gBACrB,MAAM,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC;gBACrC,UAAU,EAAE,CAAC,QAAQ,CAAC;gBACtB,OAAO,EAAE,CAAC,QAAQ,CAAC;gBACnB,SAAS,EAAE,CAAC,QAAQ,CAAC;gBACrB,QAAQ,EAAE,CAAC,QAAQ,CAAC;gBACpB,QAAQ,EAAE,CAAC,QAAQ,CAAC;aACrB;SACF;QACD,yBAAyB,EAAE,KAAK;KACjC,CAAC,CAAC;IAEH,OAAO;IACP,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW;QACjC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC3D,CAAC,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa;YAC9B,CAAC,CAAC,CAAC,uBAAuB,CAAC;YAC3B,CAAC,CAAC,EAAE,CAAC;IAET,MAAM,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE;QACjC,MAAM,EAAE,WAAW;QACnB,WAAW,EAAE,IAAI;QACjB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC;QAC7D,cAAc,EAAE,CAAC,cAAc,EAAE,eAAe,EAAE,cAAc,CAAC;KAClE,CAAC,CAAC;IAEH,gBAAgB;IAChB,MAAM,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE;QACtC,GAAG,EAAE,GAAG;QACR,UAAU,EAAE,UAAU;QACtB,oBAAoB,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE;YAC1C,OAAO;gBACL,KAAK,EAAE;oBACL,IAAI,EAAE,qBAAqB;oBAC3B,OAAO,EAAE,iCAAiC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU;iBAClF;aACF,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}

View File

@@ -1,18 +0,0 @@
/**
* Validation utilities for Fastify
*/
import { FastifySchema } from 'fastify';
import { ZodSchema, ZodTypeAny } from 'zod';
/**
* Convert Zod schema to Fastify JSON schema
*/
export declare function zodToFastifySchema(zodSchema: ZodSchema): FastifySchema;
/**
* Create Fastify schema from Zod schema for request body
*/
export declare function createBodySchema<T extends ZodTypeAny>(schema: T): FastifySchema;
/**
* Create Fastify schema with body and response
*/
export declare function createSchema<TBody extends ZodTypeAny, TResponse extends ZodTypeAny>(bodySchema: TBody, responseSchema?: TResponse): FastifySchema;
//# sourceMappingURL=validation.d.ts.map

View File

@@ -1 +0,0 @@
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAG5C;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,SAAS,GAAG,aAAa,CAQtE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,UAAU,EAAE,MAAM,EAAE,CAAC,GAAG,aAAa,CAE/E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,SAAS,UAAU,EAAE,SAAS,SAAS,UAAU,EACjF,UAAU,EAAE,KAAK,EACjB,cAAc,CAAC,EAAE,SAAS,GACzB,aAAa,CAUf"}

View File

@@ -1,34 +0,0 @@
/**
* Validation utilities for Fastify
*/
import { zodToJsonSchema } from 'zod-to-json-schema';
/**
* Convert Zod schema to Fastify JSON schema
*/
export function zodToFastifySchema(zodSchema) {
const jsonSchema = zodToJsonSchema(zodSchema, {
target: 'openApi3',
});
return {
body: jsonSchema,
};
}
/**
* Create Fastify schema from Zod schema for request body
*/
export function createBodySchema(schema) {
return zodToFastifySchema(schema);
}
/**
* Create Fastify schema with body and response
*/
export function createSchema(bodySchema, responseSchema) {
const schema = zodToFastifySchema(bodySchema);
if (responseSchema) {
schema.response = {
200: zodToJsonSchema(responseSchema, { target: 'openApi3' }),
};
}
return schema;
}
//# sourceMappingURL=validation.js.map

View File

@@ -1 +0,0 @@
{"version":3,"file":"validation.js","sourceRoot":"","sources":["validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAoB;IACrD,MAAM,UAAU,GAAG,eAAe,CAAC,SAAS,EAAE;QAC5C,MAAM,EAAE,UAAU;KACnB,CAAC,CAAC;IAEH,OAAO;QACL,IAAI,EAAE,UAAmC;KAC1C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAuB,MAAS;IAC9D,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,UAAiB,EACjB,cAA0B;IAE1B,MAAM,MAAM,GAAkB,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAE7D,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,CAAC,QAAQ,GAAG;YAChB,GAAG,EAAE,eAAe,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAA8B;SAC1F,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}