@c-rex/core 0.1.15 → 0.1.16

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.
package/dist/OIDC.js CHANGED
@@ -182,14 +182,14 @@ var createUserOIDCConfig = () => {
182
182
  id: process.env.CREX_IDS_CLIENT_ID,
183
183
  secret: process.env.CREX_IDS_CLIENT_SECRET,
184
184
  scope: process.env.CREX_IDS_USER_SCOPES,
185
- issuer: process.env.OIDC_IDS_ISSUER == void 0 ? void 0 : formatIssuer(process.env.OIDC_IDS_ISSUER),
185
+ issuer: process.env.OIDC_ISSUER == void 0 ? void 0 : formatIssuer(process.env.OIDC_ISSUER),
186
186
  enabled: process.env.CREX_IDS_USER_LOGIN_ENABLE == void 0 ? void 0 : process.env.CREX_IDS_USER_LOGIN_ENABLE == "true"
187
187
  };
188
188
  const user = mergeConfigs(userDefaults, userEnvs);
189
189
  if (user.enabled) {
190
190
  const disableOIDCVars = [
191
191
  { key: "CREX_IDS_CLIENT_ID", value: process.env.CREX_IDS_CLIENT_ID },
192
- { key: "OIDC_IDS_ISSUER", value: process.env.OIDC_IDS_ISSUER }
192
+ { key: "OIDC_ISSUER", value: process.env.OIDC_ISSUER }
193
193
  ];
194
194
  disableOIDCVars.forEach((variable) => {
195
195
  if (variable.value === void 0) {
@@ -217,7 +217,7 @@ var createClientOIDCConfig = () => {
217
217
  };
218
218
  const clientEnvs = {
219
219
  id: process.env.CREX_IDS_CLIENT_ID,
220
- issuer: process.env.OIDC_IDS_ISSUER == void 0 ? void 0 : formatIssuer(process.env.OIDC_IDS_ISSUER),
220
+ issuer: process.env.OIDC_ISSUER == void 0 ? void 0 : formatIssuer(process.env.OIDC_ISSUER),
221
221
  secret: process.env.CREX_IDS_CLIENT_SECRET,
222
222
  enabled: process.env.CREX_IDS_CLIENT_LOGIN_ENABLE == void 0 ? void 0 : process.env.CREX_IDS_CLIENT_LOGIN_ENABLE == "true"
223
223
  };
@@ -225,7 +225,7 @@ var createClientOIDCConfig = () => {
225
225
  if (client.enabled) {
226
226
  const disableOIDCVars = [
227
227
  { key: "CREX_IDS_CLIENT_ID", value: process.env.CREX_IDS_CLIENT_ID },
228
- { key: "OIDC_IDS_ISSUER", value: process.env.OIDC_IDS_ISSUER }
228
+ { key: "OIDC_ISSUER", value: process.env.OIDC_ISSUER }
229
229
  ];
230
230
  disableOIDCVars.forEach((variable) => {
231
231
  if (variable.value === void 0) {
package/dist/OIDC.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/OIDC.ts","../src/logger.ts","../src/transports/matomo.ts","../../constants/src/index.ts","../src/transports/graylog.ts","../src/utils.ts","../src/sdk.ts"],"sourcesContent":["import { Issuer } from 'openid-client';\nimport { CrexLogger } from './logger';\nimport { CrexSDK } from './sdk';\n\n/**\n * Retrieves an access token using client credentials flow from the configured OIDC provider\n * \n * @returns NextResponse with success status or error message\n * @throws Error if token retrieval fails\n */\nexport const getToken = async (): Promise<{ token: string; expiresAt: number; error?: string }> => {\n try {\n const sdk = new CrexSDK();\n const config = sdk.getServerConfig();\n const issuer = await Issuer.discover(config.OIDC.client.issuer);\n const client = new issuer.Client({\n client_id: config.OIDC.client.id,\n client_secret: config.OIDC.client.secret,\n });\n const tokenSet = await client.grant({ grant_type: 'client_credentials' });\n\n const token = tokenSet.access_token!;\n const expiresAt = tokenSet.expires_at!;\n\n return { token, expiresAt };\n\n } catch (error) {\n const logger = new CrexLogger()\n logger.log({\n level: \"error\",\n message: `getToken error: ${error}`\n })\n return { token: '', expiresAt: 0, error: JSON.stringify(error) };\n\n }\n}\n\nexport const getIssuerMetadata = async (): Promise<any> => {\n const sdk = new CrexSDK();\n const config = sdk.getServerConfig();\n const issuer = await Issuer.discover(config.OIDC.client.issuer);\n return issuer.metadata;\n}\n","import winston from \"winston\";\nimport { MatomoTransport } from \"./transports/matomo\";\nimport { GraylogTransport } from \"./transports/graylog\";\nimport { ConfigInterface } from \"@c-rex/interfaces\";\nimport { LogCategoriesType, LogLevelType } from \"@c-rex/types\";\nimport { LOG_LEVELS } from \"@c-rex/constants\";\nimport { CrexSDK } from \"./sdk\";\n\n\n/**\n * Logger class for the CREX application.\n * Provides logging functionality with multiple transports (Console, Matomo, Graylog).\n */\nexport class CrexLogger {\n private customerConfig!: ConfigInterface;\n public logger!: winston.Logger;\n\n /**\n * Initializes the logger instance if it hasn't been initialized yet.\n * Loads customer configuration and creates the logger with appropriate transports.\n * \n * @private\n */\n private async initLogger() {\n try {\n if (!this.customerConfig) {\n const sdk = new CrexSDK();\n\n this.customerConfig = sdk.getServerConfig();\n }\n if (!this.logger) {\n this.logger = this.createLogger();\n }\n } catch (error) {\n console.log(\"Error initializing logger:\", error);\n }\n }\n\n /**\n * Logs a message with the specified level and optional category.\n * \n * @param options - Logging options\n * @param options.level - The log level (error, warn, info, etc.)\n * @param options.message - The message to log\n * @param options.category - Optional category for the log message\n */\n public async log({ level, message, category }: {\n level: LogLevelType,\n message: string,\n category?: LogCategoriesType\n }) {\n await this.initLogger();\n const timestamp = new Date().toISOString();\n const newMessage = `[${timestamp}] ${message}`;\n this.logger.log(level, newMessage, category);\n }\n\n /**\n * Creates a new Winston logger instance with configured transports.\n * \n * @private\n * @returns A configured Winston logger instance\n */\n private createLogger() {\n return winston.createLogger({\n levels: LOG_LEVELS,\n transports: [\n new winston.transports.Console({\n level: this.customerConfig.logs.console.minimumLevel,\n silent: this.customerConfig.logs.console.silent,\n }),\n new MatomoTransport(this.customerConfig),\n new GraylogTransport(this.customerConfig),\n ],\n });\n }\n}","import Transport from \"winston-transport\";\nimport { LogCategoriesType, LogLevelType } from \"@c-rex/types\";\nimport { ALL } from \"@c-rex/constants\";\nimport { ConfigInterface } from \"@c-rex/interfaces\";\n\n/**\n * Winston transport for sending logs to Matomo analytics.\n * Extends the base Winston transport with Matomo-specific functionality.\n */\nexport class MatomoTransport extends Transport {\n public matomoTransport: any;\n private configs: ConfigInterface;\n\n /**\n * Creates a new instance of MatomoTransport.\n * \n * @param configs - The application configuration containing logging settings\n */\n constructor(configs: ConfigInterface) {\n super({\n level: configs.logs.matomo.minimumLevel,\n silent: configs.logs.matomo.silent,\n });\n\n this.matomoTransport = new Transport();\n this.configs = configs;\n }\n\n /**\n * Logs a message to Matomo if the message category is included in the configured categories.\n * \n * @param info - The log information including level, message, and category\n * @param callback - Callback function to execute after logging\n */\n log(\n info: { level: LogLevelType, message: string, category: LogCategoriesType },\n callback: () => void,\n ): void {\n const matomoCategory = this.configs.logs.matomo.categoriesLevel\n\n if (matomoCategory.includes(info.category) || matomoCategory.includes(ALL)) {\n this.matomoTransport.log(info, callback);\n }\n }\n}\n","export const ALL = \"*\"\n\nexport const LOG_CATEGORIES = [\n \"NoLicense\",\n \"Scenario\",\n \"Favorites\",\n \"Subscription\",\n \"Share\",\n \"Document\",\n \"Search\",\n \"History\",\n \"Notification\",\n \"UserProfile\",\n] as const;\n\nexport const LOG_LEVELS = {\n critical: 2,\n error: 3,\n warning: 4,\n info: 6,\n debug: 7,\n} as const;\n\nexport const RESULT_VIEW_STYLES = [\n \"cards\",\n \"table\",\n \"table-with-images\",\n] as const;\n\nexport const API = {\n MAX_RETRY: 3,\n API_TIMEOUT: 10000,\n RETRY_DELAY: 500,\n API_HEADERS: {\n \"content-Type\": \"application/json\",\n },\n};\n\nexport const SDK_CONFIG_KEY = \"crex-sdk-config\";\n\nexport const CONTENT_LANG_KEY = \"CONTENT_LANG_KEY\";\n\nexport const AVAILABLE_CONTENT_LANG_KEY = \"AVAILABLE_CONTENT_LANG_KEY\";\n\nexport const UI_LANG_KEY = \"UI_LANG_KEY\";\n\nexport const FLAGS_BY_LANG = {\n \"en\": \"US\",\n \"de\": \"DE\",\n};\n\nexport const DEFAULT_LANG = \"en-US\";\n\nexport const EN_LANG = \"en\";\n\nexport const UI_LANG_OPTIONS = [\"en-us\", \"de-de\"];\n\nexport const TOPICS_TYPE_AND_LINK = \"topics\";\nexport const BLOG_TYPE_AND_LINK = \"blog\";\nexport const DOCUMENTS_TYPE_AND_LINK = \"documents\";\n\nexport const TOPIC = \"TOPIC\";\nexport const DOCUMENT = \"DOCUMENT\";\nexport const PACKAGE = \"PACKAGE\";\nexport const FRAGMENT = \"FRAGMENT\";\n\nexport const RESULT_TYPES = {\n TOPIC: TOPIC,\n DOCUMENT: DOCUMENT,\n PACKAGE: PACKAGE,\n FRAGMENT: FRAGMENT\n} as const;\n\nexport const FILES_EXTENSIONS = {\n PDF: \"application/pdf\",\n HTML: \"text/html\",\n} as const;\n\nexport const DEFAULT_COOKIE_LIMIT = 30 * 24 * 60 * 60 * 1000; // 30 days in milliseconds\n\nexport const ICONS_BY_FILE_EXTENSION = {\n \"application/pdf\": \"FaFilePdf\",\n} as const;\n\nexport const DEFAULT_ICON = \"file\";\n\nexport const CREX_TOKEN_HEADER_KEY = \"crex-token\";\n\nexport const WILD_CARD_OPTIONS = {\n BOTH: \"BOTH\",\n END: \"END\",\n START: \"START\",\n NONE: \"NONE\",\n} as const;\n\nexport const OPERATOR_OPTIONS = {\n AND: \"AND\",\n OR: \"OR\",\n} as const;\n\nexport const ARTICLE_PAGE_LAYOUT = {\n BLOG: \"BLOG\",\n DOCUMENT: \"DOCUMENT\",\n} as const;\n\nexport const DEVICE_OPTIONS = {\n MOBILE: \"mobile\",\n TABLET: \"tablet\",\n DESKTOP: \"desktop\",\n}\nexport const BREAKPOINTS = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n \"2xl\": 1536,\n};\n\nexport const MARKER_COLORS = [\n \"red-500\",\n \"orange-500\",\n \"yellow-400\",\n \"green-500\",\n \"teal-500\",\n \"blue-500\",\n \"sky-500\",\n \"purple-500\",\n \"pink-500\",\n \"gray-500\",\n \"neutral-800\",\n \"cyan-500\",\n \"lime-500\",\n \"amber-500\",\n \"indigo-500\",\n];","import Transport from \"winston-transport\";\nimport Graylog2Transport from \"winston-graylog2\";\nimport { LogCategoriesType, LogLevelType } from \"@c-rex/types\";\nimport { ALL } from \"@c-rex/constants\";\nimport { ConfigInterface } from \"@c-rex/interfaces\";\n\n/**\n * Winston transport for sending logs to Graylog.\n * Extends the base Winston transport with Graylog-specific functionality.\n */\nexport class GraylogTransport extends Transport {\n public graylogTransport: any;\n private configs: ConfigInterface\n\n /**\n * Creates a new instance of GraylogTransport.\n * \n * @param configs - The application configuration containing logging settings\n */\n constructor(configs: ConfigInterface) {\n if (!configs.logs.graylog.hostname || configs.logs.graylog.port === undefined) {\n throw new Error(\"Graylog hostname and port must be defined\");\n }\n\n super({\n level: configs.logs.graylog.minimumLevel,\n silent: configs.logs.graylog.silent,\n });\n\n this.configs = configs;\n this.graylogTransport = new Graylog2Transport({\n name: configs.logs.graylog.app,\n silent: configs.logs.graylog.silent,\n handleExceptions: false,\n graylog: {\n servers: [\n { host: configs.logs.graylog.hostname, port: configs.logs.graylog.port }\n ],\n },\n });\n }\n\n /**\n * Logs a message to Graylog if the message category is included in the configured categories.\n * \n * @param info - The log information including level, message, and category\n * @param callback - Callback function to execute after logging\n */\n log(\n info: { level: LogLevelType, message: string, category: LogCategoriesType },\n callback: () => void,\n ): void {\n const graylogCategory = this.configs.logs.graylog.categoriesLevel\n\n if (graylogCategory.includes(info.category) || graylogCategory.includes(ALL)) {\n this.graylogTransport.log(info, callback);\n }\n }\n}\n","import { WarningVars } from \"@c-rex/types\";\nimport { logInfo, OIDCInterface } from \"@c-rex/interfaces\";\nimport { LogLevelType } from \"@c-rex/types\";\nimport { LogCategoriesType } from \"@c-rex/types\";\n\nconst formatIssuer = (issuer: string): string => {\n let newIssuer = issuer\n const lastChar = newIssuer.charAt(newIssuer.length - 1)\n if (lastChar !== \"/\") {\n newIssuer += \"/\"\n }\n newIssuer += \".well-known/openid-configuration\"\n\n return newIssuer;\n}\nexport const formatApiUrl = (apiUrl: string): string => {\n let newApiUrl = apiUrl\n const lastChar = newApiUrl.charAt(newApiUrl.length - 1)\n if (lastChar !== \"/\") {\n newApiUrl += \"/\"\n }\n newApiUrl += \"iirds/v1/\"\n\n return newApiUrl;\n}\n\nexport const mergeConfigs = <T>(defaultConfig: Partial<T>, envVars: Partial<T>): T => {\n const definedEnvVars: T = {} as T;\n\n for (const key in envVars) {\n if (envVars[key] !== undefined) {\n definedEnvVars[key] = envVars[key];\n }\n }\n\n return {\n ...defaultConfig,\n ...definedEnvVars,\n };\n}\n\nexport const generateWarnings = (vars: WarningVars[]): string[] => {\n\n const warnings: string[] = []\n\n vars.forEach((variable) => {\n const value = process.env[variable.key];\n if (value === undefined) {\n warnings.push(`Missing environment variable ${variable.key}, using default value: ${variable.default}`)\n }\n })\n\n return warnings;\n}\n\nexport const createUserOIDCConfig = (): { user: OIDCInterface, warnings: string[] } => {\n const warnings: string[] = []\n const userDefaults: Partial<OIDCInterface> = {\n secret: \"dummy\",\n scope: \"openid profile crex.ids.api crex.ids.api.public\",\n enabled: true,\n }\n const userEnvs: Partial<OIDCInterface> = {\n id: process.env.CREX_IDS_CLIENT_ID,\n secret: process.env.CREX_IDS_CLIENT_SECRET,\n scope: process.env.CREX_IDS_USER_SCOPES,\n issuer: process.env.OIDC_IDS_ISSUER == undefined ? undefined : formatIssuer(process.env.OIDC_IDS_ISSUER),\n enabled: process.env.CREX_IDS_USER_LOGIN_ENABLE == undefined ? undefined : process.env.CREX_IDS_USER_LOGIN_ENABLE == \"true\",\n }\n const user: OIDCInterface = mergeConfigs<OIDCInterface>(userDefaults, userEnvs);\n\n if (user.enabled) {\n const disableOIDCVars = [\n { key: \"CREX_IDS_CLIENT_ID\", value: process.env.CREX_IDS_CLIENT_ID },\n { key: \"OIDC_IDS_ISSUER\", value: process.env.OIDC_IDS_ISSUER },\n ]\n disableOIDCVars.forEach((variable) => {\n if (variable.value === undefined) {\n user.enabled = false\n\n warnings.push(`Missing environment variable ${variable.key}, disabling client and login`)\n }\n })\n\n }\n\n if (user.enabled) {\n const userWarningVars = [\n { key: \"CREX_IDS_USER_SCOPES\", default: user.scope },\n { key: \"CREX_IDS_CLIENT_SECRET\", default: user.secret },\n { key: \"CREX_IDS_USER_LOGIN_ENABLE\", default: user.enabled }\n ]\n const aux = generateWarnings(userWarningVars)\n warnings.push(...aux);\n }\n\n return { user, warnings }\n}\n\nexport const createClientOIDCConfig = (): { client: OIDCInterface, warnings: string[] } => {\n const warnings: string[] = []\n const clientDefault: Partial<OIDCInterface> = {\n secret: \"dummy\",\n enabled: true,\n }\n const clientEnvs: Partial<OIDCInterface> = {\n id: process.env.CREX_IDS_CLIENT_ID,\n issuer: process.env.OIDC_IDS_ISSUER == undefined ? undefined : formatIssuer(process.env.OIDC_IDS_ISSUER),\n secret: process.env.CREX_IDS_CLIENT_SECRET,\n enabled: process.env.CREX_IDS_CLIENT_LOGIN_ENABLE == undefined ? undefined : process.env.CREX_IDS_CLIENT_LOGIN_ENABLE == \"true\",\n }\n const client: OIDCInterface = mergeConfigs<OIDCInterface>(clientDefault, clientEnvs);\n\n if (client.enabled) {\n const disableOIDCVars = [\n { key: \"CREX_IDS_CLIENT_ID\", value: process.env.CREX_IDS_CLIENT_ID },\n { key: \"OIDC_IDS_ISSUER\", value: process.env.OIDC_IDS_ISSUER },\n ]\n disableOIDCVars.forEach((variable) => {\n if (variable.value === undefined) {\n client.enabled = false\n warnings.push(`Missing environment variable ${variable.key}, disabling client and login`)\n }\n })\n }\n\n if (client.enabled) {\n const clientWarningVars = [\n { key: \"CREX_IDS_CLIENT_SECRET\", default: client.secret },\n { key: \"CREX_IDS_CLIENT_LOGIN_ENABLE\", default: client.enabled }\n ]\n\n const aux = generateWarnings(clientWarningVars)\n warnings.push(...aux);\n }\n\n return { client, warnings }\n}\n\nexport const createConsoleLoggerConfig = (): { consoleLogger: Omit<logInfo, \"hostname\" | \"app\" | \"categoriesLevel\">, warnings: string[]; } => {\n const warnings: string[] = []\n\n const consoleLoggerDefaults: Partial<logInfo> = {\n minimumLevel: \"info\" as LogLevelType,\n silent: false,\n }\n const consoleLoggerEnvs: Partial<logInfo> = {\n minimumLevel: process.env.LOG_CONSOLE_LEVEL as LogLevelType,\n silent: process.env.LOG_CONSOLE_SILENT == undefined ? undefined : process.env.LOG_CONSOLE_SILENT == \"true\",\n }\n const consoleLogger: logInfo = mergeConfigs<logInfo>(consoleLoggerDefaults, consoleLoggerEnvs);\n\n if (consoleLogger.silent == false) {\n const consoleWarningsVars = [\n { key: \"LOG_CONSOLE_SILENT\", default: consoleLogger.silent },\n { key: \"LOG_CONSOLE_LEVEL\", default: consoleLogger.minimumLevel }\n ]\n const aux = generateWarnings(consoleWarningsVars)\n warnings.push(...aux);\n }\n\n return {\n consoleLogger,\n warnings\n }\n}\n\nexport const createGraylogLoggerConfig = (projectName: string): { graylog: logInfo, warnings: string[] } => {\n const warnings: string[] = []\n\n const graylogDefaults: Partial<logInfo> = {\n app: `NextJs-Project-${projectName}`,\n minimumLevel: \"info\" as LogLevelType,\n silent: false,\n hostname: \"https://log.c-rex.net\",\n port: 12202,\n categoriesLevel: [\"NoLicense\", \"Scenario\", \"Document\", \"Search\", \"Notification\", \"History\", \"UserProfile\"],\n }\n const graylogEnvs: Partial<logInfo> = {\n app: process.env.LOG_GRAYLOG_APP_NAME,\n silent: process.env.LOG_GRAYLOG_SILENT == undefined ? undefined : process.env.LOG_GRAYLOG_SILENT == \"true\",\n hostname: process.env.LOG_GRAYLOG_HOSTNAME,\n port: process.env.LOG_GRAYLOG_PORT == undefined ? undefined : Number(process.env.LOG_GRAYLOG_PORT),\n minimumLevel: process.env.LOG_GRAYLOG_LEVEL as any,\n categoriesLevel: process.env.LOG_GRAYLOG_CATEGORIES == undefined ? undefined : process.env.LOG_GRAYLOG_CATEGORIES.split(\",\") as LogCategoriesType[],\n }\n const graylog: logInfo = mergeConfigs<logInfo>(graylogDefaults, graylogEnvs);\n\n if (graylog.silent == false) {\n const graylogWarningVars = [\n { key: \"LOG_GRAYLOG_APP_NAME\", default: graylog.app },\n { key: \"LOG_GRAYLOG_HOSTNAME\", default: graylog.hostname },\n { key: \"LOG_GRAYLOG_LEVEL\", default: graylog.minimumLevel },\n { key: \"LOG_GRAYLOG_SILENT\", default: graylog.silent },\n { key: \"LOG_GRAYLOG_CATEGORIES\", default: graylog.categoriesLevel },\n { key: \"LOG_GRAYLOG_PORT\", default: graylog.port }\n ]\n const aux = generateWarnings(graylogWarningVars)\n warnings.push(...aux);\n }\n\n return {\n graylog,\n warnings\n }\n}\n\nexport const createMatomoLoggerConfig = (projectName: string): { matomo: logInfo, warnings: string[] } => {\n const warnings: string[] = []\n\n const matomoDefaults: Partial<logInfo> = {\n app: `NextJs-Project-${projectName}`,\n minimumLevel: \"info\" as LogLevelType,\n silent: true,\n hostname: \"\",\n port: 0,\n categoriesLevel: [\"NoLicense\", \"Scenario\", \"Document\", \"Search\", \"Notification\", \"History\", \"UserProfile\"],\n }\n const matomoEnvs: Partial<logInfo> = {\n app: process.env.LOG_MATOMO_APP_NAME,\n silent: process.env.LOG_MATOMO_SILENT == undefined ? undefined : process.env.LOG_MATOMO_SILENT == \"true\",\n hostname: process.env.LOG_MATOMO_HOSTNAME,\n port: process.env.LOG_MATOMO_PORT == undefined ? undefined : Number(process.env.LOG_MATOMO_PORT),\n minimumLevel: process.env.LOG_MATOMO_LEVEL as any,\n categoriesLevel: process.env.LOG_MATOMO_CATEGORIES == undefined ? undefined : process.env.LOG_MATOMO_CATEGORIES.split(\",\") as LogCategoriesType[],\n }\n const matomo: logInfo = mergeConfigs<logInfo>(matomoDefaults, matomoEnvs);\n\n\n const matomoSilentVars = [\n { key: \"LOG_MATOMO_SILENT\", value: process.env.LOG_MATOMO_SILENT },\n { key: \"LOG_MATOMO_HOSTNAME\", value: process.env.LOG_MATOMO_HOSTNAME },\n { key: \"LOG_MATOMO_PORT\", value: process.env.LOG_MATOMO_PORT }\n ]\n matomoSilentVars.forEach((variable) => {\n if (variable.value === undefined) {\n matomo.silent = true\n warnings.push(`Missing environment variable ${variable.key}, setting matomo logger to silent`)\n }\n })\n\n if (matomo.silent == false) {\n const matomoWarningVars = [\n { key: \"LOG_MATOMO_APP_NAME\", default: matomo.app },\n { key: \"LOG_MATOMO_LEVEL\", default: matomo.minimumLevel },\n { key: \"LOG_MATOMO_CATEGORIES\", default: matomo.categoriesLevel }\n ]\n const aux = generateWarnings(matomoWarningVars)\n warnings.push(...aux);\n }\n\n return {\n matomo,\n warnings\n }\n}\n\n","import { ConfigInterface, CookiesConfigs, CustomerConfig } from \"@c-rex/interfaces\";\nimport {\n createClientOIDCConfig,\n createConsoleLoggerConfig,\n createGraylogLoggerConfig,\n createMatomoLoggerConfig,\n createUserOIDCConfig,\n formatApiUrl\n} from \"./utils\";\nimport { cookies } from \"next/headers\";\nimport { SDK_CONFIG_KEY } from \"@c-rex/constants\";\n\ndeclare global {\n // eslint-disable-next-line no-var\n var __GLOBAL_CONFIG__: ConfigInterface | null;\n}\n\n/**\n * SDK class for the CREX application.\n * Provides configuration and authentication functionality.\n */\nexport class CrexSDK {\n public userAuthConfig!: any;\n public customerConfig!: ConfigInterface;\n public cookiesConfig!: CookiesConfigs;\n\n public async getUserAuthConfig() {\n if (this.userAuthConfig) {\n return this.userAuthConfig;\n }\n\n if (!this.customerConfig) {\n this.customerConfig = this.getServerConfig()\n }\n\n const user = this.customerConfig.OIDC.user;\n const userInfoEndPoint = this.customerConfig.OIDC.issuerMetadata?.userinfo_endpoint;\n if (user.enabled) {\n this.userAuthConfig = {\n providers: [\n {\n id: \"crex\",\n name: \"CREX\",\n type: \"oauth\",\n version: \"2.0\",\n clientId: user.id,\n wellKnown: user.issuer,\n clientSecret: user.secret,\n authorization: {\n params: {\n scope: user.scope,\n prompt: \"login\"\n }\n },\n idToken: true,\n checks: [\"pkce\", \"state\"],\n async profile(_: any, tokens: any) {\n const res = await fetch(userInfoEndPoint, {\n headers: {\n Authorization: `Bearer ${tokens.access_token}`,\n },\n });\n\n const userinfo = await res.json();\n\n return {\n id: userinfo.sub,\n name: userinfo.name,\n email: userinfo.email,\n };\n },\n callbacks: {\n async jwt({ token, account }: any) {\n if (account) {\n token.id_token = account.id_token;\n }\n return token;\n },\n async session({ session, token }: any) {\n session.id_token = token.id_token;\n return session;\n },\n },\n },\n ]\n }\n };\n\n return this.userAuthConfig;\n }\n\n public createCustomerConfig(CUSTOMER_CONFIG: CustomerConfig, shouldLog: boolean): { cookiesConfig: CookiesConfigs, config: ConfigInterface } {\n\n const requiredEnvVars = [\"CREX_IDS_API_URL\", \"NEXT_PUBLIC_API_URL\"]\n const required = requiredEnvVars.map(key => {\n const value = process.env[key];\n if (value === undefined) {\n return `Missing required environment variable: ${key}`;\n }\n\n return \"\"\n }).filter(item => item.length > 0)\n\n const { user, warnings: userWarnings } = createUserOIDCConfig()\n const { client, warnings: clientWarnings } = createClientOIDCConfig()\n const { matomo, warnings: matomoWarnings } = createMatomoLoggerConfig(CUSTOMER_CONFIG.projectName)\n const { graylog, warnings: graylogWarnings } = createGraylogLoggerConfig(CUSTOMER_CONFIG.projectName)\n const { consoleLogger, warnings: consoleWarnings } = createConsoleLoggerConfig()\n\n const warnings = required.concat(\n consoleWarnings,\n clientWarnings,\n userWarnings,\n graylogWarnings,\n matomoWarnings\n )\n\n if (shouldLog) {\n if (warnings.length > 0) console.warn(warnings.join('\\n'));\n }\n\n const cookiesConfig: CookiesConfigs = {\n publicNextApiUrl: process.env.NEXT_PUBLIC_API_URL!,\n ...CUSTOMER_CONFIG,\n OIDC: {\n clientEnabled: client.enabled,\n userEnabled: user.enabled,\n },\n }\n\n const config: ConfigInterface = {\n baseUrl: process.env.CREX_IDS_API_URL == undefined ? \"\" : formatApiUrl(process.env.CREX_IDS_API_URL),\n OIDC: { client, user },\n logs: { console: consoleLogger, graylog, matomo, },\n ...CUSTOMER_CONFIG,\n }\n\n return { cookiesConfig, config };\n }\n\n public getClientConfig = (): CookiesConfigs => {\n const jsonConfigs = cookies().get(SDK_CONFIG_KEY)?.value;\n if (!jsonConfigs) {\n throw new Error('Configs not found');\n }\n\n const configs: CookiesConfigs = JSON.parse(jsonConfigs);\n\n return configs;\n }\n\n public getServerConfig() {\n if (!global.__GLOBAL_CONFIG__) {\n throw new Error('Server config not initialized');\n }\n return global.__GLOBAL_CONFIG__;\n }\n\n public initializeConfig(config: ConfigInterface) {\n if (global.__GLOBAL_CONFIG__) return global.__GLOBAL_CONFIG__;\n global.__GLOBAL_CONFIG__ = config;\n return global.__GLOBAL_CONFIG__;\n }\n\n public updateConfigProp(key: keyof ConfigInterface, value: any) {\n if (!global.__GLOBAL_CONFIG__) {\n throw new Error('Server config not initialized');\n }\n global.__GLOBAL_CONFIG__[key] = value;\n return global.__GLOBAL_CONFIG__;\n }\n}"],"mappings":"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","names":["Transport","import_winston_transport","Transport","Graylog2Transport","winston"]}
1
+ {"version":3,"sources":["../src/OIDC.ts","../src/logger.ts","../src/transports/matomo.ts","../../constants/src/index.ts","../src/transports/graylog.ts","../src/utils.ts","../src/sdk.ts"],"sourcesContent":["import { Issuer } from 'openid-client';\nimport { CrexLogger } from './logger';\nimport { CrexSDK } from './sdk';\n\n/**\n * Retrieves an access token using client credentials flow from the configured OIDC provider\n * \n * @returns NextResponse with success status or error message\n * @throws Error if token retrieval fails\n */\nexport const getToken = async (): Promise<{ token: string; expiresAt: number; error?: string }> => {\n try {\n const sdk = new CrexSDK();\n const config = sdk.getServerConfig();\n const issuer = await Issuer.discover(config.OIDC.client.issuer);\n const client = new issuer.Client({\n client_id: config.OIDC.client.id,\n client_secret: config.OIDC.client.secret,\n });\n const tokenSet = await client.grant({ grant_type: 'client_credentials' });\n\n const token = tokenSet.access_token!;\n const expiresAt = tokenSet.expires_at!;\n\n return { token, expiresAt };\n\n } catch (error) {\n const logger = new CrexLogger()\n logger.log({\n level: \"error\",\n message: `getToken error: ${error}`\n })\n return { token: '', expiresAt: 0, error: JSON.stringify(error) };\n\n }\n}\n\nexport const getIssuerMetadata = async (): Promise<any> => {\n const sdk = new CrexSDK();\n const config = sdk.getServerConfig();\n const issuer = await Issuer.discover(config.OIDC.client.issuer);\n return issuer.metadata;\n}\n","import winston from \"winston\";\nimport { MatomoTransport } from \"./transports/matomo\";\nimport { GraylogTransport } from \"./transports/graylog\";\nimport { ConfigInterface } from \"@c-rex/interfaces\";\nimport { LogCategoriesType, LogLevelType } from \"@c-rex/types\";\nimport { LOG_LEVELS } from \"@c-rex/constants\";\nimport { CrexSDK } from \"./sdk\";\n\n\n/**\n * Logger class for the CREX application.\n * Provides logging functionality with multiple transports (Console, Matomo, Graylog).\n */\nexport class CrexLogger {\n private customerConfig!: ConfigInterface;\n public logger!: winston.Logger;\n\n /**\n * Initializes the logger instance if it hasn't been initialized yet.\n * Loads customer configuration and creates the logger with appropriate transports.\n * \n * @private\n */\n private async initLogger() {\n try {\n if (!this.customerConfig) {\n const sdk = new CrexSDK();\n\n this.customerConfig = sdk.getServerConfig();\n }\n if (!this.logger) {\n this.logger = this.createLogger();\n }\n } catch (error) {\n console.log(\"Error initializing logger:\", error);\n }\n }\n\n /**\n * Logs a message with the specified level and optional category.\n * \n * @param options - Logging options\n * @param options.level - The log level (error, warn, info, etc.)\n * @param options.message - The message to log\n * @param options.category - Optional category for the log message\n */\n public async log({ level, message, category }: {\n level: LogLevelType,\n message: string,\n category?: LogCategoriesType\n }) {\n await this.initLogger();\n const timestamp = new Date().toISOString();\n const newMessage = `[${timestamp}] ${message}`;\n this.logger.log(level, newMessage, category);\n }\n\n /**\n * Creates a new Winston logger instance with configured transports.\n * \n * @private\n * @returns A configured Winston logger instance\n */\n private createLogger() {\n return winston.createLogger({\n levels: LOG_LEVELS,\n transports: [\n new winston.transports.Console({\n level: this.customerConfig.logs.console.minimumLevel,\n silent: this.customerConfig.logs.console.silent,\n }),\n new MatomoTransport(this.customerConfig),\n new GraylogTransport(this.customerConfig),\n ],\n });\n }\n}","import Transport from \"winston-transport\";\nimport { LogCategoriesType, LogLevelType } from \"@c-rex/types\";\nimport { ALL } from \"@c-rex/constants\";\nimport { ConfigInterface } from \"@c-rex/interfaces\";\n\n/**\n * Winston transport for sending logs to Matomo analytics.\n * Extends the base Winston transport with Matomo-specific functionality.\n */\nexport class MatomoTransport extends Transport {\n public matomoTransport: any;\n private configs: ConfigInterface;\n\n /**\n * Creates a new instance of MatomoTransport.\n * \n * @param configs - The application configuration containing logging settings\n */\n constructor(configs: ConfigInterface) {\n super({\n level: configs.logs.matomo.minimumLevel,\n silent: configs.logs.matomo.silent,\n });\n\n this.matomoTransport = new Transport();\n this.configs = configs;\n }\n\n /**\n * Logs a message to Matomo if the message category is included in the configured categories.\n * \n * @param info - The log information including level, message, and category\n * @param callback - Callback function to execute after logging\n */\n log(\n info: { level: LogLevelType, message: string, category: LogCategoriesType },\n callback: () => void,\n ): void {\n const matomoCategory = this.configs.logs.matomo.categoriesLevel\n\n if (matomoCategory.includes(info.category) || matomoCategory.includes(ALL)) {\n this.matomoTransport.log(info, callback);\n }\n }\n}\n","export const ALL = \"*\"\n\nexport const LOG_CATEGORIES = [\n \"NoLicense\",\n \"Scenario\",\n \"Favorites\",\n \"Subscription\",\n \"Share\",\n \"Document\",\n \"Search\",\n \"History\",\n \"Notification\",\n \"UserProfile\",\n] as const;\n\nexport const LOG_LEVELS = {\n critical: 2,\n error: 3,\n warning: 4,\n info: 6,\n debug: 7,\n} as const;\n\nexport const RESULT_VIEW_STYLES = [\n \"cards\",\n \"table\",\n \"table-with-images\",\n] as const;\n\nexport const API = {\n MAX_RETRY: 3,\n API_TIMEOUT: 10000,\n RETRY_DELAY: 500,\n API_HEADERS: {\n \"content-Type\": \"application/json\",\n },\n};\n\nexport const SDK_CONFIG_KEY = \"crex-sdk-config\";\n\nexport const CONTENT_LANG_KEY = \"CONTENT_LANG_KEY\";\n\nexport const AVAILABLE_CONTENT_LANG_KEY = \"AVAILABLE_CONTENT_LANG_KEY\";\n\nexport const UI_LANG_KEY = \"UI_LANG_KEY\";\n\nexport const FLAGS_BY_LANG = {\n \"en\": \"US\",\n \"de\": \"DE\",\n};\n\nexport const DEFAULT_LANG = \"en-US\";\n\nexport const EN_LANG = \"en\";\n\nexport const UI_LANG_OPTIONS = [\"en-us\", \"de-de\"];\n\nexport const TOPICS_TYPE_AND_LINK = \"topics\";\nexport const BLOG_TYPE_AND_LINK = \"blog\";\nexport const DOCUMENTS_TYPE_AND_LINK = \"documents\";\n\nexport const TOPIC = \"TOPIC\";\nexport const DOCUMENT = \"DOCUMENT\";\nexport const PACKAGE = \"PACKAGE\";\nexport const FRAGMENT = \"FRAGMENT\";\n\nexport const RESULT_TYPES = {\n TOPIC: TOPIC,\n DOCUMENT: DOCUMENT,\n PACKAGE: PACKAGE,\n FRAGMENT: FRAGMENT\n} as const;\n\nexport const FILES_EXTENSIONS = {\n PDF: \"application/pdf\",\n HTML: \"text/html\",\n} as const;\n\nexport const DEFAULT_COOKIE_LIMIT = 30 * 24 * 60 * 60 * 1000; // 30 days in milliseconds\n\nexport const ICONS_BY_FILE_EXTENSION = {\n \"application/pdf\": \"FaFilePdf\",\n} as const;\n\nexport const DEFAULT_ICON = \"file\";\n\nexport const CREX_TOKEN_HEADER_KEY = \"crex-token\";\n\nexport const WILD_CARD_OPTIONS = {\n BOTH: \"BOTH\",\n END: \"END\",\n START: \"START\",\n NONE: \"NONE\",\n} as const;\n\nexport const OPERATOR_OPTIONS = {\n AND: \"AND\",\n OR: \"OR\",\n} as const;\n\nexport const ARTICLE_PAGE_LAYOUT = {\n BLOG: \"BLOG\",\n DOCUMENT: \"DOCUMENT\",\n} as const;\n\nexport const DEVICE_OPTIONS = {\n MOBILE: \"mobile\",\n TABLET: \"tablet\",\n DESKTOP: \"desktop\",\n}\nexport const BREAKPOINTS = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n \"2xl\": 1536,\n};\n\nexport const MARKER_COLORS = [\n \"red-500\",\n \"orange-500\",\n \"yellow-400\",\n \"green-500\",\n \"teal-500\",\n \"blue-500\",\n \"sky-500\",\n \"purple-500\",\n \"pink-500\",\n \"gray-500\",\n \"neutral-800\",\n \"cyan-500\",\n \"lime-500\",\n \"amber-500\",\n \"indigo-500\",\n];","import Transport from \"winston-transport\";\nimport Graylog2Transport from \"winston-graylog2\";\nimport { LogCategoriesType, LogLevelType } from \"@c-rex/types\";\nimport { ALL } from \"@c-rex/constants\";\nimport { ConfigInterface } from \"@c-rex/interfaces\";\n\n/**\n * Winston transport for sending logs to Graylog.\n * Extends the base Winston transport with Graylog-specific functionality.\n */\nexport class GraylogTransport extends Transport {\n public graylogTransport: any;\n private configs: ConfigInterface\n\n /**\n * Creates a new instance of GraylogTransport.\n * \n * @param configs - The application configuration containing logging settings\n */\n constructor(configs: ConfigInterface) {\n if (!configs.logs.graylog.hostname || configs.logs.graylog.port === undefined) {\n throw new Error(\"Graylog hostname and port must be defined\");\n }\n\n super({\n level: configs.logs.graylog.minimumLevel,\n silent: configs.logs.graylog.silent,\n });\n\n this.configs = configs;\n this.graylogTransport = new Graylog2Transport({\n name: configs.logs.graylog.app,\n silent: configs.logs.graylog.silent,\n handleExceptions: false,\n graylog: {\n servers: [\n { host: configs.logs.graylog.hostname, port: configs.logs.graylog.port }\n ],\n },\n });\n }\n\n /**\n * Logs a message to Graylog if the message category is included in the configured categories.\n * \n * @param info - The log information including level, message, and category\n * @param callback - Callback function to execute after logging\n */\n log(\n info: { level: LogLevelType, message: string, category: LogCategoriesType },\n callback: () => void,\n ): void {\n const graylogCategory = this.configs.logs.graylog.categoriesLevel\n\n if (graylogCategory.includes(info.category) || graylogCategory.includes(ALL)) {\n this.graylogTransport.log(info, callback);\n }\n }\n}\n","import { WarningVars } from \"@c-rex/types\";\nimport { logInfo, OIDCInterface } from \"@c-rex/interfaces\";\nimport { LogLevelType } from \"@c-rex/types\";\nimport { LogCategoriesType } from \"@c-rex/types\";\n\nconst formatIssuer = (issuer: string): string => {\n let newIssuer = issuer\n const lastChar = newIssuer.charAt(newIssuer.length - 1)\n if (lastChar !== \"/\") {\n newIssuer += \"/\"\n }\n newIssuer += \".well-known/openid-configuration\"\n\n return newIssuer;\n}\nexport const formatApiUrl = (apiUrl: string): string => {\n let newApiUrl = apiUrl\n const lastChar = newApiUrl.charAt(newApiUrl.length - 1)\n if (lastChar !== \"/\") {\n newApiUrl += \"/\"\n }\n newApiUrl += \"iirds/v1/\"\n\n return newApiUrl;\n}\n\nexport const mergeConfigs = <T>(defaultConfig: Partial<T>, envVars: Partial<T>): T => {\n const definedEnvVars: T = {} as T;\n\n for (const key in envVars) {\n if (envVars[key] !== undefined) {\n definedEnvVars[key] = envVars[key];\n }\n }\n\n return {\n ...defaultConfig,\n ...definedEnvVars,\n };\n}\n\nexport const generateWarnings = (vars: WarningVars[]): string[] => {\n\n const warnings: string[] = []\n\n vars.forEach((variable) => {\n const value = process.env[variable.key];\n if (value === undefined) {\n warnings.push(`Missing environment variable ${variable.key}, using default value: ${variable.default}`)\n }\n })\n\n return warnings;\n}\n\nexport const createUserOIDCConfig = (): { user: OIDCInterface, warnings: string[] } => {\n const warnings: string[] = []\n const userDefaults: Partial<OIDCInterface> = {\n secret: \"dummy\",\n scope: \"openid profile crex.ids.api crex.ids.api.public\",\n enabled: true,\n }\n const userEnvs: Partial<OIDCInterface> = {\n id: process.env.CREX_IDS_CLIENT_ID,\n secret: process.env.CREX_IDS_CLIENT_SECRET,\n scope: process.env.CREX_IDS_USER_SCOPES,\n issuer: process.env.OIDC_ISSUER == undefined ? undefined : formatIssuer(process.env.OIDC_ISSUER),\n enabled: process.env.CREX_IDS_USER_LOGIN_ENABLE == undefined ? undefined : process.env.CREX_IDS_USER_LOGIN_ENABLE == \"true\",\n }\n const user: OIDCInterface = mergeConfigs<OIDCInterface>(userDefaults, userEnvs);\n\n if (user.enabled) {\n const disableOIDCVars = [\n { key: \"CREX_IDS_CLIENT_ID\", value: process.env.CREX_IDS_CLIENT_ID },\n { key: \"OIDC_ISSUER\", value: process.env.OIDC_ISSUER },\n ]\n disableOIDCVars.forEach((variable) => {\n if (variable.value === undefined) {\n user.enabled = false\n\n warnings.push(`Missing environment variable ${variable.key}, disabling client and login`)\n }\n })\n\n }\n\n if (user.enabled) {\n const userWarningVars = [\n { key: \"CREX_IDS_USER_SCOPES\", default: user.scope },\n { key: \"CREX_IDS_CLIENT_SECRET\", default: user.secret },\n { key: \"CREX_IDS_USER_LOGIN_ENABLE\", default: user.enabled }\n ]\n const aux = generateWarnings(userWarningVars)\n warnings.push(...aux);\n }\n\n return { user, warnings }\n}\n\nexport const createClientOIDCConfig = (): { client: OIDCInterface, warnings: string[] } => {\n const warnings: string[] = []\n const clientDefault: Partial<OIDCInterface> = {\n secret: \"dummy\",\n enabled: true,\n }\n const clientEnvs: Partial<OIDCInterface> = {\n id: process.env.CREX_IDS_CLIENT_ID,\n issuer: process.env.OIDC_ISSUER == undefined ? undefined : formatIssuer(process.env.OIDC_ISSUER),\n secret: process.env.CREX_IDS_CLIENT_SECRET,\n enabled: process.env.CREX_IDS_CLIENT_LOGIN_ENABLE == undefined ? undefined : process.env.CREX_IDS_CLIENT_LOGIN_ENABLE == \"true\",\n }\n const client: OIDCInterface = mergeConfigs<OIDCInterface>(clientDefault, clientEnvs);\n\n if (client.enabled) {\n const disableOIDCVars = [\n { key: \"CREX_IDS_CLIENT_ID\", value: process.env.CREX_IDS_CLIENT_ID },\n { key: \"OIDC_ISSUER\", value: process.env.OIDC_ISSUER },\n ]\n disableOIDCVars.forEach((variable) => {\n if (variable.value === undefined) {\n client.enabled = false\n warnings.push(`Missing environment variable ${variable.key}, disabling client and login`)\n }\n })\n }\n\n if (client.enabled) {\n const clientWarningVars = [\n { key: \"CREX_IDS_CLIENT_SECRET\", default: client.secret },\n { key: \"CREX_IDS_CLIENT_LOGIN_ENABLE\", default: client.enabled }\n ]\n\n const aux = generateWarnings(clientWarningVars)\n warnings.push(...aux);\n }\n\n return { client, warnings }\n}\n\nexport const createConsoleLoggerConfig = (): { consoleLogger: Omit<logInfo, \"hostname\" | \"app\" | \"categoriesLevel\">, warnings: string[]; } => {\n const warnings: string[] = []\n\n const consoleLoggerDefaults: Partial<logInfo> = {\n minimumLevel: \"info\" as LogLevelType,\n silent: false,\n }\n const consoleLoggerEnvs: Partial<logInfo> = {\n minimumLevel: process.env.LOG_CONSOLE_LEVEL as LogLevelType,\n silent: process.env.LOG_CONSOLE_SILENT == undefined ? undefined : process.env.LOG_CONSOLE_SILENT == \"true\",\n }\n const consoleLogger: logInfo = mergeConfigs<logInfo>(consoleLoggerDefaults, consoleLoggerEnvs);\n\n if (consoleLogger.silent == false) {\n const consoleWarningsVars = [\n { key: \"LOG_CONSOLE_SILENT\", default: consoleLogger.silent },\n { key: \"LOG_CONSOLE_LEVEL\", default: consoleLogger.minimumLevel }\n ]\n const aux = generateWarnings(consoleWarningsVars)\n warnings.push(...aux);\n }\n\n return {\n consoleLogger,\n warnings\n }\n}\n\nexport const createGraylogLoggerConfig = (projectName: string): { graylog: logInfo, warnings: string[] } => {\n const warnings: string[] = []\n\n const graylogDefaults: Partial<logInfo> = {\n app: `NextJs-Project-${projectName}`,\n minimumLevel: \"info\" as LogLevelType,\n silent: false,\n hostname: \"https://log.c-rex.net\",\n port: 12202,\n categoriesLevel: [\"NoLicense\", \"Scenario\", \"Document\", \"Search\", \"Notification\", \"History\", \"UserProfile\"],\n }\n const graylogEnvs: Partial<logInfo> = {\n app: process.env.LOG_GRAYLOG_APP_NAME,\n silent: process.env.LOG_GRAYLOG_SILENT == undefined ? undefined : process.env.LOG_GRAYLOG_SILENT == \"true\",\n hostname: process.env.LOG_GRAYLOG_HOSTNAME,\n port: process.env.LOG_GRAYLOG_PORT == undefined ? undefined : Number(process.env.LOG_GRAYLOG_PORT),\n minimumLevel: process.env.LOG_GRAYLOG_LEVEL as any,\n categoriesLevel: process.env.LOG_GRAYLOG_CATEGORIES == undefined ? undefined : process.env.LOG_GRAYLOG_CATEGORIES.split(\",\") as LogCategoriesType[],\n }\n const graylog: logInfo = mergeConfigs<logInfo>(graylogDefaults, graylogEnvs);\n\n if (graylog.silent == false) {\n const graylogWarningVars = [\n { key: \"LOG_GRAYLOG_APP_NAME\", default: graylog.app },\n { key: \"LOG_GRAYLOG_HOSTNAME\", default: graylog.hostname },\n { key: \"LOG_GRAYLOG_LEVEL\", default: graylog.minimumLevel },\n { key: \"LOG_GRAYLOG_SILENT\", default: graylog.silent },\n { key: \"LOG_GRAYLOG_CATEGORIES\", default: graylog.categoriesLevel },\n { key: \"LOG_GRAYLOG_PORT\", default: graylog.port }\n ]\n const aux = generateWarnings(graylogWarningVars)\n warnings.push(...aux);\n }\n\n return {\n graylog,\n warnings\n }\n}\n\nexport const createMatomoLoggerConfig = (projectName: string): { matomo: logInfo, warnings: string[] } => {\n const warnings: string[] = []\n\n const matomoDefaults: Partial<logInfo> = {\n app: `NextJs-Project-${projectName}`,\n minimumLevel: \"info\" as LogLevelType,\n silent: true,\n hostname: \"\",\n port: 0,\n categoriesLevel: [\"NoLicense\", \"Scenario\", \"Document\", \"Search\", \"Notification\", \"History\", \"UserProfile\"],\n }\n const matomoEnvs: Partial<logInfo> = {\n app: process.env.LOG_MATOMO_APP_NAME,\n silent: process.env.LOG_MATOMO_SILENT == undefined ? undefined : process.env.LOG_MATOMO_SILENT == \"true\",\n hostname: process.env.LOG_MATOMO_HOSTNAME,\n port: process.env.LOG_MATOMO_PORT == undefined ? undefined : Number(process.env.LOG_MATOMO_PORT),\n minimumLevel: process.env.LOG_MATOMO_LEVEL as any,\n categoriesLevel: process.env.LOG_MATOMO_CATEGORIES == undefined ? undefined : process.env.LOG_MATOMO_CATEGORIES.split(\",\") as LogCategoriesType[],\n }\n const matomo: logInfo = mergeConfigs<logInfo>(matomoDefaults, matomoEnvs);\n\n\n const matomoSilentVars = [\n { key: \"LOG_MATOMO_SILENT\", value: process.env.LOG_MATOMO_SILENT },\n { key: \"LOG_MATOMO_HOSTNAME\", value: process.env.LOG_MATOMO_HOSTNAME },\n { key: \"LOG_MATOMO_PORT\", value: process.env.LOG_MATOMO_PORT }\n ]\n matomoSilentVars.forEach((variable) => {\n if (variable.value === undefined) {\n matomo.silent = true\n warnings.push(`Missing environment variable ${variable.key}, setting matomo logger to silent`)\n }\n })\n\n if (matomo.silent == false) {\n const matomoWarningVars = [\n { key: \"LOG_MATOMO_APP_NAME\", default: matomo.app },\n { key: \"LOG_MATOMO_LEVEL\", default: matomo.minimumLevel },\n { key: \"LOG_MATOMO_CATEGORIES\", default: matomo.categoriesLevel }\n ]\n const aux = generateWarnings(matomoWarningVars)\n warnings.push(...aux);\n }\n\n return {\n matomo,\n warnings\n }\n}\n\n","import { ConfigInterface, CookiesConfigs, CustomerConfig } from \"@c-rex/interfaces\";\nimport {\n createClientOIDCConfig,\n createConsoleLoggerConfig,\n createGraylogLoggerConfig,\n createMatomoLoggerConfig,\n createUserOIDCConfig,\n formatApiUrl\n} from \"./utils\";\nimport { cookies } from \"next/headers\";\nimport { SDK_CONFIG_KEY } from \"@c-rex/constants\";\n\ndeclare global {\n // eslint-disable-next-line no-var\n var __GLOBAL_CONFIG__: ConfigInterface | null;\n}\n\n/**\n * SDK class for the CREX application.\n * Provides configuration and authentication functionality.\n */\nexport class CrexSDK {\n public userAuthConfig!: any;\n public customerConfig!: ConfigInterface;\n public cookiesConfig!: CookiesConfigs;\n\n public async getUserAuthConfig() {\n if (this.userAuthConfig) {\n return this.userAuthConfig;\n }\n\n if (!this.customerConfig) {\n this.customerConfig = this.getServerConfig()\n }\n\n const user = this.customerConfig.OIDC.user;\n const userInfoEndPoint = this.customerConfig.OIDC.issuerMetadata?.userinfo_endpoint;\n if (user.enabled) {\n this.userAuthConfig = {\n providers: [\n {\n id: \"crex\",\n name: \"CREX\",\n type: \"oauth\",\n version: \"2.0\",\n clientId: user.id,\n wellKnown: user.issuer,\n clientSecret: user.secret,\n authorization: {\n params: {\n scope: user.scope,\n prompt: \"login\"\n }\n },\n idToken: true,\n checks: [\"pkce\", \"state\"],\n async profile(_: any, tokens: any) {\n const res = await fetch(userInfoEndPoint, {\n headers: {\n Authorization: `Bearer ${tokens.access_token}`,\n },\n });\n\n const userinfo = await res.json();\n\n return {\n id: userinfo.sub,\n name: userinfo.name,\n email: userinfo.email,\n };\n },\n callbacks: {\n async jwt({ token, account }: any) {\n if (account) {\n token.id_token = account.id_token;\n }\n return token;\n },\n async session({ session, token }: any) {\n session.id_token = token.id_token;\n return session;\n },\n },\n },\n ]\n }\n };\n\n return this.userAuthConfig;\n }\n\n public createCustomerConfig(CUSTOMER_CONFIG: CustomerConfig, shouldLog: boolean): { cookiesConfig: CookiesConfigs, config: ConfigInterface } {\n\n const requiredEnvVars = [\"CREX_IDS_API_URL\", \"NEXT_PUBLIC_API_URL\"]\n const required = requiredEnvVars.map(key => {\n const value = process.env[key];\n if (value === undefined) {\n return `Missing required environment variable: ${key}`;\n }\n\n return \"\"\n }).filter(item => item.length > 0)\n\n const { user, warnings: userWarnings } = createUserOIDCConfig()\n const { client, warnings: clientWarnings } = createClientOIDCConfig()\n const { matomo, warnings: matomoWarnings } = createMatomoLoggerConfig(CUSTOMER_CONFIG.projectName)\n const { graylog, warnings: graylogWarnings } = createGraylogLoggerConfig(CUSTOMER_CONFIG.projectName)\n const { consoleLogger, warnings: consoleWarnings } = createConsoleLoggerConfig()\n\n const warnings = required.concat(\n consoleWarnings,\n clientWarnings,\n userWarnings,\n graylogWarnings,\n matomoWarnings\n )\n\n if (shouldLog) {\n if (warnings.length > 0) console.warn(warnings.join('\\n'));\n }\n\n const cookiesConfig: CookiesConfigs = {\n publicNextApiUrl: process.env.NEXT_PUBLIC_API_URL!,\n ...CUSTOMER_CONFIG,\n OIDC: {\n clientEnabled: client.enabled,\n userEnabled: user.enabled,\n },\n }\n\n const config: ConfigInterface = {\n baseUrl: process.env.CREX_IDS_API_URL == undefined ? \"\" : formatApiUrl(process.env.CREX_IDS_API_URL),\n OIDC: { client, user },\n logs: { console: consoleLogger, graylog, matomo, },\n ...CUSTOMER_CONFIG,\n }\n\n return { cookiesConfig, config };\n }\n\n public getClientConfig = (): CookiesConfigs => {\n const jsonConfigs = cookies().get(SDK_CONFIG_KEY)?.value;\n if (!jsonConfigs) {\n throw new Error('Configs not found');\n }\n\n const configs: CookiesConfigs = JSON.parse(jsonConfigs);\n\n return configs;\n }\n\n public getServerConfig() {\n if (!global.__GLOBAL_CONFIG__) {\n throw new Error('Server config not initialized');\n }\n return global.__GLOBAL_CONFIG__;\n }\n\n public initializeConfig(config: ConfigInterface) {\n if (global.__GLOBAL_CONFIG__) return global.__GLOBAL_CONFIG__;\n global.__GLOBAL_CONFIG__ = config;\n return global.__GLOBAL_CONFIG__;\n }\n\n public updateConfigProp(key: keyof ConfigInterface, value: any) {\n if (!global.__GLOBAL_CONFIG__) {\n throw new Error('Server config not initialized');\n }\n global.__GLOBAL_CONFIG__[key] = value;\n return global.__GLOBAL_CONFIG__;\n }\n}"],"mappings":"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","names":["Transport","import_winston_transport","Transport","Graylog2Transport","winston"]}
package/dist/OIDC.mjs CHANGED
@@ -147,14 +147,14 @@ var createUserOIDCConfig = () => {
147
147
  id: process.env.CREX_IDS_CLIENT_ID,
148
148
  secret: process.env.CREX_IDS_CLIENT_SECRET,
149
149
  scope: process.env.CREX_IDS_USER_SCOPES,
150
- issuer: process.env.OIDC_IDS_ISSUER == void 0 ? void 0 : formatIssuer(process.env.OIDC_IDS_ISSUER),
150
+ issuer: process.env.OIDC_ISSUER == void 0 ? void 0 : formatIssuer(process.env.OIDC_ISSUER),
151
151
  enabled: process.env.CREX_IDS_USER_LOGIN_ENABLE == void 0 ? void 0 : process.env.CREX_IDS_USER_LOGIN_ENABLE == "true"
152
152
  };
153
153
  const user = mergeConfigs(userDefaults, userEnvs);
154
154
  if (user.enabled) {
155
155
  const disableOIDCVars = [
156
156
  { key: "CREX_IDS_CLIENT_ID", value: process.env.CREX_IDS_CLIENT_ID },
157
- { key: "OIDC_IDS_ISSUER", value: process.env.OIDC_IDS_ISSUER }
157
+ { key: "OIDC_ISSUER", value: process.env.OIDC_ISSUER }
158
158
  ];
159
159
  disableOIDCVars.forEach((variable) => {
160
160
  if (variable.value === void 0) {
@@ -182,7 +182,7 @@ var createClientOIDCConfig = () => {
182
182
  };
183
183
  const clientEnvs = {
184
184
  id: process.env.CREX_IDS_CLIENT_ID,
185
- issuer: process.env.OIDC_IDS_ISSUER == void 0 ? void 0 : formatIssuer(process.env.OIDC_IDS_ISSUER),
185
+ issuer: process.env.OIDC_ISSUER == void 0 ? void 0 : formatIssuer(process.env.OIDC_ISSUER),
186
186
  secret: process.env.CREX_IDS_CLIENT_SECRET,
187
187
  enabled: process.env.CREX_IDS_CLIENT_LOGIN_ENABLE == void 0 ? void 0 : process.env.CREX_IDS_CLIENT_LOGIN_ENABLE == "true"
188
188
  };
@@ -190,7 +190,7 @@ var createClientOIDCConfig = () => {
190
190
  if (client.enabled) {
191
191
  const disableOIDCVars = [
192
192
  { key: "CREX_IDS_CLIENT_ID", value: process.env.CREX_IDS_CLIENT_ID },
193
- { key: "OIDC_IDS_ISSUER", value: process.env.OIDC_IDS_ISSUER }
193
+ { key: "OIDC_ISSUER", value: process.env.OIDC_ISSUER }
194
194
  ];
195
195
  disableOIDCVars.forEach((variable) => {
196
196
  if (variable.value === void 0) {
package/dist/OIDC.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/OIDC.ts","../src/logger.ts","../src/transports/matomo.ts","../../constants/src/index.ts","../src/transports/graylog.ts","../src/utils.ts","../src/sdk.ts"],"sourcesContent":["import { Issuer } from 'openid-client';\nimport { CrexLogger } from './logger';\nimport { CrexSDK } from './sdk';\n\n/**\n * Retrieves an access token using client credentials flow from the configured OIDC provider\n * \n * @returns NextResponse with success status or error message\n * @throws Error if token retrieval fails\n */\nexport const getToken = async (): Promise<{ token: string; expiresAt: number; error?: string }> => {\n try {\n const sdk = new CrexSDK();\n const config = sdk.getServerConfig();\n const issuer = await Issuer.discover(config.OIDC.client.issuer);\n const client = new issuer.Client({\n client_id: config.OIDC.client.id,\n client_secret: config.OIDC.client.secret,\n });\n const tokenSet = await client.grant({ grant_type: 'client_credentials' });\n\n const token = tokenSet.access_token!;\n const expiresAt = tokenSet.expires_at!;\n\n return { token, expiresAt };\n\n } catch (error) {\n const logger = new CrexLogger()\n logger.log({\n level: \"error\",\n message: `getToken error: ${error}`\n })\n return { token: '', expiresAt: 0, error: JSON.stringify(error) };\n\n }\n}\n\nexport const getIssuerMetadata = async (): Promise<any> => {\n const sdk = new CrexSDK();\n const config = sdk.getServerConfig();\n const issuer = await Issuer.discover(config.OIDC.client.issuer);\n return issuer.metadata;\n}\n","import winston from \"winston\";\nimport { MatomoTransport } from \"./transports/matomo\";\nimport { GraylogTransport } from \"./transports/graylog\";\nimport { ConfigInterface } from \"@c-rex/interfaces\";\nimport { LogCategoriesType, LogLevelType } from \"@c-rex/types\";\nimport { LOG_LEVELS } from \"@c-rex/constants\";\nimport { CrexSDK } from \"./sdk\";\n\n\n/**\n * Logger class for the CREX application.\n * Provides logging functionality with multiple transports (Console, Matomo, Graylog).\n */\nexport class CrexLogger {\n private customerConfig!: ConfigInterface;\n public logger!: winston.Logger;\n\n /**\n * Initializes the logger instance if it hasn't been initialized yet.\n * Loads customer configuration and creates the logger with appropriate transports.\n * \n * @private\n */\n private async initLogger() {\n try {\n if (!this.customerConfig) {\n const sdk = new CrexSDK();\n\n this.customerConfig = sdk.getServerConfig();\n }\n if (!this.logger) {\n this.logger = this.createLogger();\n }\n } catch (error) {\n console.log(\"Error initializing logger:\", error);\n }\n }\n\n /**\n * Logs a message with the specified level and optional category.\n * \n * @param options - Logging options\n * @param options.level - The log level (error, warn, info, etc.)\n * @param options.message - The message to log\n * @param options.category - Optional category for the log message\n */\n public async log({ level, message, category }: {\n level: LogLevelType,\n message: string,\n category?: LogCategoriesType\n }) {\n await this.initLogger();\n const timestamp = new Date().toISOString();\n const newMessage = `[${timestamp}] ${message}`;\n this.logger.log(level, newMessage, category);\n }\n\n /**\n * Creates a new Winston logger instance with configured transports.\n * \n * @private\n * @returns A configured Winston logger instance\n */\n private createLogger() {\n return winston.createLogger({\n levels: LOG_LEVELS,\n transports: [\n new winston.transports.Console({\n level: this.customerConfig.logs.console.minimumLevel,\n silent: this.customerConfig.logs.console.silent,\n }),\n new MatomoTransport(this.customerConfig),\n new GraylogTransport(this.customerConfig),\n ],\n });\n }\n}","import Transport from \"winston-transport\";\nimport { LogCategoriesType, LogLevelType } from \"@c-rex/types\";\nimport { ALL } from \"@c-rex/constants\";\nimport { ConfigInterface } from \"@c-rex/interfaces\";\n\n/**\n * Winston transport for sending logs to Matomo analytics.\n * Extends the base Winston transport with Matomo-specific functionality.\n */\nexport class MatomoTransport extends Transport {\n public matomoTransport: any;\n private configs: ConfigInterface;\n\n /**\n * Creates a new instance of MatomoTransport.\n * \n * @param configs - The application configuration containing logging settings\n */\n constructor(configs: ConfigInterface) {\n super({\n level: configs.logs.matomo.minimumLevel,\n silent: configs.logs.matomo.silent,\n });\n\n this.matomoTransport = new Transport();\n this.configs = configs;\n }\n\n /**\n * Logs a message to Matomo if the message category is included in the configured categories.\n * \n * @param info - The log information including level, message, and category\n * @param callback - Callback function to execute after logging\n */\n log(\n info: { level: LogLevelType, message: string, category: LogCategoriesType },\n callback: () => void,\n ): void {\n const matomoCategory = this.configs.logs.matomo.categoriesLevel\n\n if (matomoCategory.includes(info.category) || matomoCategory.includes(ALL)) {\n this.matomoTransport.log(info, callback);\n }\n }\n}\n","export const ALL = \"*\"\n\nexport const LOG_CATEGORIES = [\n \"NoLicense\",\n \"Scenario\",\n \"Favorites\",\n \"Subscription\",\n \"Share\",\n \"Document\",\n \"Search\",\n \"History\",\n \"Notification\",\n \"UserProfile\",\n] as const;\n\nexport const LOG_LEVELS = {\n critical: 2,\n error: 3,\n warning: 4,\n info: 6,\n debug: 7,\n} as const;\n\nexport const RESULT_VIEW_STYLES = [\n \"cards\",\n \"table\",\n \"table-with-images\",\n] as const;\n\nexport const API = {\n MAX_RETRY: 3,\n API_TIMEOUT: 10000,\n RETRY_DELAY: 500,\n API_HEADERS: {\n \"content-Type\": \"application/json\",\n },\n};\n\nexport const SDK_CONFIG_KEY = \"crex-sdk-config\";\n\nexport const CONTENT_LANG_KEY = \"CONTENT_LANG_KEY\";\n\nexport const AVAILABLE_CONTENT_LANG_KEY = \"AVAILABLE_CONTENT_LANG_KEY\";\n\nexport const UI_LANG_KEY = \"UI_LANG_KEY\";\n\nexport const FLAGS_BY_LANG = {\n \"en\": \"US\",\n \"de\": \"DE\",\n};\n\nexport const DEFAULT_LANG = \"en-US\";\n\nexport const EN_LANG = \"en\";\n\nexport const UI_LANG_OPTIONS = [\"en-us\", \"de-de\"];\n\nexport const TOPICS_TYPE_AND_LINK = \"topics\";\nexport const BLOG_TYPE_AND_LINK = \"blog\";\nexport const DOCUMENTS_TYPE_AND_LINK = \"documents\";\n\nexport const TOPIC = \"TOPIC\";\nexport const DOCUMENT = \"DOCUMENT\";\nexport const PACKAGE = \"PACKAGE\";\nexport const FRAGMENT = \"FRAGMENT\";\n\nexport const RESULT_TYPES = {\n TOPIC: TOPIC,\n DOCUMENT: DOCUMENT,\n PACKAGE: PACKAGE,\n FRAGMENT: FRAGMENT\n} as const;\n\nexport const FILES_EXTENSIONS = {\n PDF: \"application/pdf\",\n HTML: \"text/html\",\n} as const;\n\nexport const DEFAULT_COOKIE_LIMIT = 30 * 24 * 60 * 60 * 1000; // 30 days in milliseconds\n\nexport const ICONS_BY_FILE_EXTENSION = {\n \"application/pdf\": \"FaFilePdf\",\n} as const;\n\nexport const DEFAULT_ICON = \"file\";\n\nexport const CREX_TOKEN_HEADER_KEY = \"crex-token\";\n\nexport const WILD_CARD_OPTIONS = {\n BOTH: \"BOTH\",\n END: \"END\",\n START: \"START\",\n NONE: \"NONE\",\n} as const;\n\nexport const OPERATOR_OPTIONS = {\n AND: \"AND\",\n OR: \"OR\",\n} as const;\n\nexport const ARTICLE_PAGE_LAYOUT = {\n BLOG: \"BLOG\",\n DOCUMENT: \"DOCUMENT\",\n} as const;\n\nexport const DEVICE_OPTIONS = {\n MOBILE: \"mobile\",\n TABLET: \"tablet\",\n DESKTOP: \"desktop\",\n}\nexport const BREAKPOINTS = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n \"2xl\": 1536,\n};\n\nexport const MARKER_COLORS = [\n \"red-500\",\n \"orange-500\",\n \"yellow-400\",\n \"green-500\",\n \"teal-500\",\n \"blue-500\",\n \"sky-500\",\n \"purple-500\",\n \"pink-500\",\n \"gray-500\",\n \"neutral-800\",\n \"cyan-500\",\n \"lime-500\",\n \"amber-500\",\n \"indigo-500\",\n];","import Transport from \"winston-transport\";\nimport Graylog2Transport from \"winston-graylog2\";\nimport { LogCategoriesType, LogLevelType } from \"@c-rex/types\";\nimport { ALL } from \"@c-rex/constants\";\nimport { ConfigInterface } from \"@c-rex/interfaces\";\n\n/**\n * Winston transport for sending logs to Graylog.\n * Extends the base Winston transport with Graylog-specific functionality.\n */\nexport class GraylogTransport extends Transport {\n public graylogTransport: any;\n private configs: ConfigInterface\n\n /**\n * Creates a new instance of GraylogTransport.\n * \n * @param configs - The application configuration containing logging settings\n */\n constructor(configs: ConfigInterface) {\n if (!configs.logs.graylog.hostname || configs.logs.graylog.port === undefined) {\n throw new Error(\"Graylog hostname and port must be defined\");\n }\n\n super({\n level: configs.logs.graylog.minimumLevel,\n silent: configs.logs.graylog.silent,\n });\n\n this.configs = configs;\n this.graylogTransport = new Graylog2Transport({\n name: configs.logs.graylog.app,\n silent: configs.logs.graylog.silent,\n handleExceptions: false,\n graylog: {\n servers: [\n { host: configs.logs.graylog.hostname, port: configs.logs.graylog.port }\n ],\n },\n });\n }\n\n /**\n * Logs a message to Graylog if the message category is included in the configured categories.\n * \n * @param info - The log information including level, message, and category\n * @param callback - Callback function to execute after logging\n */\n log(\n info: { level: LogLevelType, message: string, category: LogCategoriesType },\n callback: () => void,\n ): void {\n const graylogCategory = this.configs.logs.graylog.categoriesLevel\n\n if (graylogCategory.includes(info.category) || graylogCategory.includes(ALL)) {\n this.graylogTransport.log(info, callback);\n }\n }\n}\n","import { WarningVars } from \"@c-rex/types\";\nimport { logInfo, OIDCInterface } from \"@c-rex/interfaces\";\nimport { LogLevelType } from \"@c-rex/types\";\nimport { LogCategoriesType } from \"@c-rex/types\";\n\nconst formatIssuer = (issuer: string): string => {\n let newIssuer = issuer\n const lastChar = newIssuer.charAt(newIssuer.length - 1)\n if (lastChar !== \"/\") {\n newIssuer += \"/\"\n }\n newIssuer += \".well-known/openid-configuration\"\n\n return newIssuer;\n}\nexport const formatApiUrl = (apiUrl: string): string => {\n let newApiUrl = apiUrl\n const lastChar = newApiUrl.charAt(newApiUrl.length - 1)\n if (lastChar !== \"/\") {\n newApiUrl += \"/\"\n }\n newApiUrl += \"iirds/v1/\"\n\n return newApiUrl;\n}\n\nexport const mergeConfigs = <T>(defaultConfig: Partial<T>, envVars: Partial<T>): T => {\n const definedEnvVars: T = {} as T;\n\n for (const key in envVars) {\n if (envVars[key] !== undefined) {\n definedEnvVars[key] = envVars[key];\n }\n }\n\n return {\n ...defaultConfig,\n ...definedEnvVars,\n };\n}\n\nexport const generateWarnings = (vars: WarningVars[]): string[] => {\n\n const warnings: string[] = []\n\n vars.forEach((variable) => {\n const value = process.env[variable.key];\n if (value === undefined) {\n warnings.push(`Missing environment variable ${variable.key}, using default value: ${variable.default}`)\n }\n })\n\n return warnings;\n}\n\nexport const createUserOIDCConfig = (): { user: OIDCInterface, warnings: string[] } => {\n const warnings: string[] = []\n const userDefaults: Partial<OIDCInterface> = {\n secret: \"dummy\",\n scope: \"openid profile crex.ids.api crex.ids.api.public\",\n enabled: true,\n }\n const userEnvs: Partial<OIDCInterface> = {\n id: process.env.CREX_IDS_CLIENT_ID,\n secret: process.env.CREX_IDS_CLIENT_SECRET,\n scope: process.env.CREX_IDS_USER_SCOPES,\n issuer: process.env.OIDC_IDS_ISSUER == undefined ? undefined : formatIssuer(process.env.OIDC_IDS_ISSUER),\n enabled: process.env.CREX_IDS_USER_LOGIN_ENABLE == undefined ? undefined : process.env.CREX_IDS_USER_LOGIN_ENABLE == \"true\",\n }\n const user: OIDCInterface = mergeConfigs<OIDCInterface>(userDefaults, userEnvs);\n\n if (user.enabled) {\n const disableOIDCVars = [\n { key: \"CREX_IDS_CLIENT_ID\", value: process.env.CREX_IDS_CLIENT_ID },\n { key: \"OIDC_IDS_ISSUER\", value: process.env.OIDC_IDS_ISSUER },\n ]\n disableOIDCVars.forEach((variable) => {\n if (variable.value === undefined) {\n user.enabled = false\n\n warnings.push(`Missing environment variable ${variable.key}, disabling client and login`)\n }\n })\n\n }\n\n if (user.enabled) {\n const userWarningVars = [\n { key: \"CREX_IDS_USER_SCOPES\", default: user.scope },\n { key: \"CREX_IDS_CLIENT_SECRET\", default: user.secret },\n { key: \"CREX_IDS_USER_LOGIN_ENABLE\", default: user.enabled }\n ]\n const aux = generateWarnings(userWarningVars)\n warnings.push(...aux);\n }\n\n return { user, warnings }\n}\n\nexport const createClientOIDCConfig = (): { client: OIDCInterface, warnings: string[] } => {\n const warnings: string[] = []\n const clientDefault: Partial<OIDCInterface> = {\n secret: \"dummy\",\n enabled: true,\n }\n const clientEnvs: Partial<OIDCInterface> = {\n id: process.env.CREX_IDS_CLIENT_ID,\n issuer: process.env.OIDC_IDS_ISSUER == undefined ? undefined : formatIssuer(process.env.OIDC_IDS_ISSUER),\n secret: process.env.CREX_IDS_CLIENT_SECRET,\n enabled: process.env.CREX_IDS_CLIENT_LOGIN_ENABLE == undefined ? undefined : process.env.CREX_IDS_CLIENT_LOGIN_ENABLE == \"true\",\n }\n const client: OIDCInterface = mergeConfigs<OIDCInterface>(clientDefault, clientEnvs);\n\n if (client.enabled) {\n const disableOIDCVars = [\n { key: \"CREX_IDS_CLIENT_ID\", value: process.env.CREX_IDS_CLIENT_ID },\n { key: \"OIDC_IDS_ISSUER\", value: process.env.OIDC_IDS_ISSUER },\n ]\n disableOIDCVars.forEach((variable) => {\n if (variable.value === undefined) {\n client.enabled = false\n warnings.push(`Missing environment variable ${variable.key}, disabling client and login`)\n }\n })\n }\n\n if (client.enabled) {\n const clientWarningVars = [\n { key: \"CREX_IDS_CLIENT_SECRET\", default: client.secret },\n { key: \"CREX_IDS_CLIENT_LOGIN_ENABLE\", default: client.enabled }\n ]\n\n const aux = generateWarnings(clientWarningVars)\n warnings.push(...aux);\n }\n\n return { client, warnings }\n}\n\nexport const createConsoleLoggerConfig = (): { consoleLogger: Omit<logInfo, \"hostname\" | \"app\" | \"categoriesLevel\">, warnings: string[]; } => {\n const warnings: string[] = []\n\n const consoleLoggerDefaults: Partial<logInfo> = {\n minimumLevel: \"info\" as LogLevelType,\n silent: false,\n }\n const consoleLoggerEnvs: Partial<logInfo> = {\n minimumLevel: process.env.LOG_CONSOLE_LEVEL as LogLevelType,\n silent: process.env.LOG_CONSOLE_SILENT == undefined ? undefined : process.env.LOG_CONSOLE_SILENT == \"true\",\n }\n const consoleLogger: logInfo = mergeConfigs<logInfo>(consoleLoggerDefaults, consoleLoggerEnvs);\n\n if (consoleLogger.silent == false) {\n const consoleWarningsVars = [\n { key: \"LOG_CONSOLE_SILENT\", default: consoleLogger.silent },\n { key: \"LOG_CONSOLE_LEVEL\", default: consoleLogger.minimumLevel }\n ]\n const aux = generateWarnings(consoleWarningsVars)\n warnings.push(...aux);\n }\n\n return {\n consoleLogger,\n warnings\n }\n}\n\nexport const createGraylogLoggerConfig = (projectName: string): { graylog: logInfo, warnings: string[] } => {\n const warnings: string[] = []\n\n const graylogDefaults: Partial<logInfo> = {\n app: `NextJs-Project-${projectName}`,\n minimumLevel: \"info\" as LogLevelType,\n silent: false,\n hostname: \"https://log.c-rex.net\",\n port: 12202,\n categoriesLevel: [\"NoLicense\", \"Scenario\", \"Document\", \"Search\", \"Notification\", \"History\", \"UserProfile\"],\n }\n const graylogEnvs: Partial<logInfo> = {\n app: process.env.LOG_GRAYLOG_APP_NAME,\n silent: process.env.LOG_GRAYLOG_SILENT == undefined ? undefined : process.env.LOG_GRAYLOG_SILENT == \"true\",\n hostname: process.env.LOG_GRAYLOG_HOSTNAME,\n port: process.env.LOG_GRAYLOG_PORT == undefined ? undefined : Number(process.env.LOG_GRAYLOG_PORT),\n minimumLevel: process.env.LOG_GRAYLOG_LEVEL as any,\n categoriesLevel: process.env.LOG_GRAYLOG_CATEGORIES == undefined ? undefined : process.env.LOG_GRAYLOG_CATEGORIES.split(\",\") as LogCategoriesType[],\n }\n const graylog: logInfo = mergeConfigs<logInfo>(graylogDefaults, graylogEnvs);\n\n if (graylog.silent == false) {\n const graylogWarningVars = [\n { key: \"LOG_GRAYLOG_APP_NAME\", default: graylog.app },\n { key: \"LOG_GRAYLOG_HOSTNAME\", default: graylog.hostname },\n { key: \"LOG_GRAYLOG_LEVEL\", default: graylog.minimumLevel },\n { key: \"LOG_GRAYLOG_SILENT\", default: graylog.silent },\n { key: \"LOG_GRAYLOG_CATEGORIES\", default: graylog.categoriesLevel },\n { key: \"LOG_GRAYLOG_PORT\", default: graylog.port }\n ]\n const aux = generateWarnings(graylogWarningVars)\n warnings.push(...aux);\n }\n\n return {\n graylog,\n warnings\n }\n}\n\nexport const createMatomoLoggerConfig = (projectName: string): { matomo: logInfo, warnings: string[] } => {\n const warnings: string[] = []\n\n const matomoDefaults: Partial<logInfo> = {\n app: `NextJs-Project-${projectName}`,\n minimumLevel: \"info\" as LogLevelType,\n silent: true,\n hostname: \"\",\n port: 0,\n categoriesLevel: [\"NoLicense\", \"Scenario\", \"Document\", \"Search\", \"Notification\", \"History\", \"UserProfile\"],\n }\n const matomoEnvs: Partial<logInfo> = {\n app: process.env.LOG_MATOMO_APP_NAME,\n silent: process.env.LOG_MATOMO_SILENT == undefined ? undefined : process.env.LOG_MATOMO_SILENT == \"true\",\n hostname: process.env.LOG_MATOMO_HOSTNAME,\n port: process.env.LOG_MATOMO_PORT == undefined ? undefined : Number(process.env.LOG_MATOMO_PORT),\n minimumLevel: process.env.LOG_MATOMO_LEVEL as any,\n categoriesLevel: process.env.LOG_MATOMO_CATEGORIES == undefined ? undefined : process.env.LOG_MATOMO_CATEGORIES.split(\",\") as LogCategoriesType[],\n }\n const matomo: logInfo = mergeConfigs<logInfo>(matomoDefaults, matomoEnvs);\n\n\n const matomoSilentVars = [\n { key: \"LOG_MATOMO_SILENT\", value: process.env.LOG_MATOMO_SILENT },\n { key: \"LOG_MATOMO_HOSTNAME\", value: process.env.LOG_MATOMO_HOSTNAME },\n { key: \"LOG_MATOMO_PORT\", value: process.env.LOG_MATOMO_PORT }\n ]\n matomoSilentVars.forEach((variable) => {\n if (variable.value === undefined) {\n matomo.silent = true\n warnings.push(`Missing environment variable ${variable.key}, setting matomo logger to silent`)\n }\n })\n\n if (matomo.silent == false) {\n const matomoWarningVars = [\n { key: \"LOG_MATOMO_APP_NAME\", default: matomo.app },\n { key: \"LOG_MATOMO_LEVEL\", default: matomo.minimumLevel },\n { key: \"LOG_MATOMO_CATEGORIES\", default: matomo.categoriesLevel }\n ]\n const aux = generateWarnings(matomoWarningVars)\n warnings.push(...aux);\n }\n\n return {\n matomo,\n warnings\n }\n}\n\n","import { ConfigInterface, CookiesConfigs, CustomerConfig } from \"@c-rex/interfaces\";\nimport {\n createClientOIDCConfig,\n createConsoleLoggerConfig,\n createGraylogLoggerConfig,\n createMatomoLoggerConfig,\n createUserOIDCConfig,\n formatApiUrl\n} from \"./utils\";\nimport { cookies } from \"next/headers\";\nimport { SDK_CONFIG_KEY } from \"@c-rex/constants\";\n\ndeclare global {\n // eslint-disable-next-line no-var\n var __GLOBAL_CONFIG__: ConfigInterface | null;\n}\n\n/**\n * SDK class for the CREX application.\n * Provides configuration and authentication functionality.\n */\nexport class CrexSDK {\n public userAuthConfig!: any;\n public customerConfig!: ConfigInterface;\n public cookiesConfig!: CookiesConfigs;\n\n public async getUserAuthConfig() {\n if (this.userAuthConfig) {\n return this.userAuthConfig;\n }\n\n if (!this.customerConfig) {\n this.customerConfig = this.getServerConfig()\n }\n\n const user = this.customerConfig.OIDC.user;\n const userInfoEndPoint = this.customerConfig.OIDC.issuerMetadata?.userinfo_endpoint;\n if (user.enabled) {\n this.userAuthConfig = {\n providers: [\n {\n id: \"crex\",\n name: \"CREX\",\n type: \"oauth\",\n version: \"2.0\",\n clientId: user.id,\n wellKnown: user.issuer,\n clientSecret: user.secret,\n authorization: {\n params: {\n scope: user.scope,\n prompt: \"login\"\n }\n },\n idToken: true,\n checks: [\"pkce\", \"state\"],\n async profile(_: any, tokens: any) {\n const res = await fetch(userInfoEndPoint, {\n headers: {\n Authorization: `Bearer ${tokens.access_token}`,\n },\n });\n\n const userinfo = await res.json();\n\n return {\n id: userinfo.sub,\n name: userinfo.name,\n email: userinfo.email,\n };\n },\n callbacks: {\n async jwt({ token, account }: any) {\n if (account) {\n token.id_token = account.id_token;\n }\n return token;\n },\n async session({ session, token }: any) {\n session.id_token = token.id_token;\n return session;\n },\n },\n },\n ]\n }\n };\n\n return this.userAuthConfig;\n }\n\n public createCustomerConfig(CUSTOMER_CONFIG: CustomerConfig, shouldLog: boolean): { cookiesConfig: CookiesConfigs, config: ConfigInterface } {\n\n const requiredEnvVars = [\"CREX_IDS_API_URL\", \"NEXT_PUBLIC_API_URL\"]\n const required = requiredEnvVars.map(key => {\n const value = process.env[key];\n if (value === undefined) {\n return `Missing required environment variable: ${key}`;\n }\n\n return \"\"\n }).filter(item => item.length > 0)\n\n const { user, warnings: userWarnings } = createUserOIDCConfig()\n const { client, warnings: clientWarnings } = createClientOIDCConfig()\n const { matomo, warnings: matomoWarnings } = createMatomoLoggerConfig(CUSTOMER_CONFIG.projectName)\n const { graylog, warnings: graylogWarnings } = createGraylogLoggerConfig(CUSTOMER_CONFIG.projectName)\n const { consoleLogger, warnings: consoleWarnings } = createConsoleLoggerConfig()\n\n const warnings = required.concat(\n consoleWarnings,\n clientWarnings,\n userWarnings,\n graylogWarnings,\n matomoWarnings\n )\n\n if (shouldLog) {\n if (warnings.length > 0) console.warn(warnings.join('\\n'));\n }\n\n const cookiesConfig: CookiesConfigs = {\n publicNextApiUrl: process.env.NEXT_PUBLIC_API_URL!,\n ...CUSTOMER_CONFIG,\n OIDC: {\n clientEnabled: client.enabled,\n userEnabled: user.enabled,\n },\n }\n\n const config: ConfigInterface = {\n baseUrl: process.env.CREX_IDS_API_URL == undefined ? \"\" : formatApiUrl(process.env.CREX_IDS_API_URL),\n OIDC: { client, user },\n logs: { console: consoleLogger, graylog, matomo, },\n ...CUSTOMER_CONFIG,\n }\n\n return { cookiesConfig, config };\n }\n\n public getClientConfig = (): CookiesConfigs => {\n const jsonConfigs = cookies().get(SDK_CONFIG_KEY)?.value;\n if (!jsonConfigs) {\n throw new Error('Configs not found');\n }\n\n const configs: CookiesConfigs = JSON.parse(jsonConfigs);\n\n return configs;\n }\n\n public getServerConfig() {\n if (!global.__GLOBAL_CONFIG__) {\n throw new Error('Server config not initialized');\n }\n return global.__GLOBAL_CONFIG__;\n }\n\n public initializeConfig(config: ConfigInterface) {\n if (global.__GLOBAL_CONFIG__) return global.__GLOBAL_CONFIG__;\n global.__GLOBAL_CONFIG__ = config;\n return global.__GLOBAL_CONFIG__;\n }\n\n public updateConfigProp(key: keyof ConfigInterface, value: any) {\n if (!global.__GLOBAL_CONFIG__) {\n throw new Error('Server config not initialized');\n }\n global.__GLOBAL_CONFIG__[key] = value;\n return global.__GLOBAL_CONFIG__;\n }\n}"],"mappings":"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","names":["Transport","Transport"]}
1
+ {"version":3,"sources":["../src/OIDC.ts","../src/logger.ts","../src/transports/matomo.ts","../../constants/src/index.ts","../src/transports/graylog.ts","../src/utils.ts","../src/sdk.ts"],"sourcesContent":["import { Issuer } from 'openid-client';\nimport { CrexLogger } from './logger';\nimport { CrexSDK } from './sdk';\n\n/**\n * Retrieves an access token using client credentials flow from the configured OIDC provider\n * \n * @returns NextResponse with success status or error message\n * @throws Error if token retrieval fails\n */\nexport const getToken = async (): Promise<{ token: string; expiresAt: number; error?: string }> => {\n try {\n const sdk = new CrexSDK();\n const config = sdk.getServerConfig();\n const issuer = await Issuer.discover(config.OIDC.client.issuer);\n const client = new issuer.Client({\n client_id: config.OIDC.client.id,\n client_secret: config.OIDC.client.secret,\n });\n const tokenSet = await client.grant({ grant_type: 'client_credentials' });\n\n const token = tokenSet.access_token!;\n const expiresAt = tokenSet.expires_at!;\n\n return { token, expiresAt };\n\n } catch (error) {\n const logger = new CrexLogger()\n logger.log({\n level: \"error\",\n message: `getToken error: ${error}`\n })\n return { token: '', expiresAt: 0, error: JSON.stringify(error) };\n\n }\n}\n\nexport const getIssuerMetadata = async (): Promise<any> => {\n const sdk = new CrexSDK();\n const config = sdk.getServerConfig();\n const issuer = await Issuer.discover(config.OIDC.client.issuer);\n return issuer.metadata;\n}\n","import winston from \"winston\";\nimport { MatomoTransport } from \"./transports/matomo\";\nimport { GraylogTransport } from \"./transports/graylog\";\nimport { ConfigInterface } from \"@c-rex/interfaces\";\nimport { LogCategoriesType, LogLevelType } from \"@c-rex/types\";\nimport { LOG_LEVELS } from \"@c-rex/constants\";\nimport { CrexSDK } from \"./sdk\";\n\n\n/**\n * Logger class for the CREX application.\n * Provides logging functionality with multiple transports (Console, Matomo, Graylog).\n */\nexport class CrexLogger {\n private customerConfig!: ConfigInterface;\n public logger!: winston.Logger;\n\n /**\n * Initializes the logger instance if it hasn't been initialized yet.\n * Loads customer configuration and creates the logger with appropriate transports.\n * \n * @private\n */\n private async initLogger() {\n try {\n if (!this.customerConfig) {\n const sdk = new CrexSDK();\n\n this.customerConfig = sdk.getServerConfig();\n }\n if (!this.logger) {\n this.logger = this.createLogger();\n }\n } catch (error) {\n console.log(\"Error initializing logger:\", error);\n }\n }\n\n /**\n * Logs a message with the specified level and optional category.\n * \n * @param options - Logging options\n * @param options.level - The log level (error, warn, info, etc.)\n * @param options.message - The message to log\n * @param options.category - Optional category for the log message\n */\n public async log({ level, message, category }: {\n level: LogLevelType,\n message: string,\n category?: LogCategoriesType\n }) {\n await this.initLogger();\n const timestamp = new Date().toISOString();\n const newMessage = `[${timestamp}] ${message}`;\n this.logger.log(level, newMessage, category);\n }\n\n /**\n * Creates a new Winston logger instance with configured transports.\n * \n * @private\n * @returns A configured Winston logger instance\n */\n private createLogger() {\n return winston.createLogger({\n levels: LOG_LEVELS,\n transports: [\n new winston.transports.Console({\n level: this.customerConfig.logs.console.minimumLevel,\n silent: this.customerConfig.logs.console.silent,\n }),\n new MatomoTransport(this.customerConfig),\n new GraylogTransport(this.customerConfig),\n ],\n });\n }\n}","import Transport from \"winston-transport\";\nimport { LogCategoriesType, LogLevelType } from \"@c-rex/types\";\nimport { ALL } from \"@c-rex/constants\";\nimport { ConfigInterface } from \"@c-rex/interfaces\";\n\n/**\n * Winston transport for sending logs to Matomo analytics.\n * Extends the base Winston transport with Matomo-specific functionality.\n */\nexport class MatomoTransport extends Transport {\n public matomoTransport: any;\n private configs: ConfigInterface;\n\n /**\n * Creates a new instance of MatomoTransport.\n * \n * @param configs - The application configuration containing logging settings\n */\n constructor(configs: ConfigInterface) {\n super({\n level: configs.logs.matomo.minimumLevel,\n silent: configs.logs.matomo.silent,\n });\n\n this.matomoTransport = new Transport();\n this.configs = configs;\n }\n\n /**\n * Logs a message to Matomo if the message category is included in the configured categories.\n * \n * @param info - The log information including level, message, and category\n * @param callback - Callback function to execute after logging\n */\n log(\n info: { level: LogLevelType, message: string, category: LogCategoriesType },\n callback: () => void,\n ): void {\n const matomoCategory = this.configs.logs.matomo.categoriesLevel\n\n if (matomoCategory.includes(info.category) || matomoCategory.includes(ALL)) {\n this.matomoTransport.log(info, callback);\n }\n }\n}\n","export const ALL = \"*\"\n\nexport const LOG_CATEGORIES = [\n \"NoLicense\",\n \"Scenario\",\n \"Favorites\",\n \"Subscription\",\n \"Share\",\n \"Document\",\n \"Search\",\n \"History\",\n \"Notification\",\n \"UserProfile\",\n] as const;\n\nexport const LOG_LEVELS = {\n critical: 2,\n error: 3,\n warning: 4,\n info: 6,\n debug: 7,\n} as const;\n\nexport const RESULT_VIEW_STYLES = [\n \"cards\",\n \"table\",\n \"table-with-images\",\n] as const;\n\nexport const API = {\n MAX_RETRY: 3,\n API_TIMEOUT: 10000,\n RETRY_DELAY: 500,\n API_HEADERS: {\n \"content-Type\": \"application/json\",\n },\n};\n\nexport const SDK_CONFIG_KEY = \"crex-sdk-config\";\n\nexport const CONTENT_LANG_KEY = \"CONTENT_LANG_KEY\";\n\nexport const AVAILABLE_CONTENT_LANG_KEY = \"AVAILABLE_CONTENT_LANG_KEY\";\n\nexport const UI_LANG_KEY = \"UI_LANG_KEY\";\n\nexport const FLAGS_BY_LANG = {\n \"en\": \"US\",\n \"de\": \"DE\",\n};\n\nexport const DEFAULT_LANG = \"en-US\";\n\nexport const EN_LANG = \"en\";\n\nexport const UI_LANG_OPTIONS = [\"en-us\", \"de-de\"];\n\nexport const TOPICS_TYPE_AND_LINK = \"topics\";\nexport const BLOG_TYPE_AND_LINK = \"blog\";\nexport const DOCUMENTS_TYPE_AND_LINK = \"documents\";\n\nexport const TOPIC = \"TOPIC\";\nexport const DOCUMENT = \"DOCUMENT\";\nexport const PACKAGE = \"PACKAGE\";\nexport const FRAGMENT = \"FRAGMENT\";\n\nexport const RESULT_TYPES = {\n TOPIC: TOPIC,\n DOCUMENT: DOCUMENT,\n PACKAGE: PACKAGE,\n FRAGMENT: FRAGMENT\n} as const;\n\nexport const FILES_EXTENSIONS = {\n PDF: \"application/pdf\",\n HTML: \"text/html\",\n} as const;\n\nexport const DEFAULT_COOKIE_LIMIT = 30 * 24 * 60 * 60 * 1000; // 30 days in milliseconds\n\nexport const ICONS_BY_FILE_EXTENSION = {\n \"application/pdf\": \"FaFilePdf\",\n} as const;\n\nexport const DEFAULT_ICON = \"file\";\n\nexport const CREX_TOKEN_HEADER_KEY = \"crex-token\";\n\nexport const WILD_CARD_OPTIONS = {\n BOTH: \"BOTH\",\n END: \"END\",\n START: \"START\",\n NONE: \"NONE\",\n} as const;\n\nexport const OPERATOR_OPTIONS = {\n AND: \"AND\",\n OR: \"OR\",\n} as const;\n\nexport const ARTICLE_PAGE_LAYOUT = {\n BLOG: \"BLOG\",\n DOCUMENT: \"DOCUMENT\",\n} as const;\n\nexport const DEVICE_OPTIONS = {\n MOBILE: \"mobile\",\n TABLET: \"tablet\",\n DESKTOP: \"desktop\",\n}\nexport const BREAKPOINTS = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n \"2xl\": 1536,\n};\n\nexport const MARKER_COLORS = [\n \"red-500\",\n \"orange-500\",\n \"yellow-400\",\n \"green-500\",\n \"teal-500\",\n \"blue-500\",\n \"sky-500\",\n \"purple-500\",\n \"pink-500\",\n \"gray-500\",\n \"neutral-800\",\n \"cyan-500\",\n \"lime-500\",\n \"amber-500\",\n \"indigo-500\",\n];","import Transport from \"winston-transport\";\nimport Graylog2Transport from \"winston-graylog2\";\nimport { LogCategoriesType, LogLevelType } from \"@c-rex/types\";\nimport { ALL } from \"@c-rex/constants\";\nimport { ConfigInterface } from \"@c-rex/interfaces\";\n\n/**\n * Winston transport for sending logs to Graylog.\n * Extends the base Winston transport with Graylog-specific functionality.\n */\nexport class GraylogTransport extends Transport {\n public graylogTransport: any;\n private configs: ConfigInterface\n\n /**\n * Creates a new instance of GraylogTransport.\n * \n * @param configs - The application configuration containing logging settings\n */\n constructor(configs: ConfigInterface) {\n if (!configs.logs.graylog.hostname || configs.logs.graylog.port === undefined) {\n throw new Error(\"Graylog hostname and port must be defined\");\n }\n\n super({\n level: configs.logs.graylog.minimumLevel,\n silent: configs.logs.graylog.silent,\n });\n\n this.configs = configs;\n this.graylogTransport = new Graylog2Transport({\n name: configs.logs.graylog.app,\n silent: configs.logs.graylog.silent,\n handleExceptions: false,\n graylog: {\n servers: [\n { host: configs.logs.graylog.hostname, port: configs.logs.graylog.port }\n ],\n },\n });\n }\n\n /**\n * Logs a message to Graylog if the message category is included in the configured categories.\n * \n * @param info - The log information including level, message, and category\n * @param callback - Callback function to execute after logging\n */\n log(\n info: { level: LogLevelType, message: string, category: LogCategoriesType },\n callback: () => void,\n ): void {\n const graylogCategory = this.configs.logs.graylog.categoriesLevel\n\n if (graylogCategory.includes(info.category) || graylogCategory.includes(ALL)) {\n this.graylogTransport.log(info, callback);\n }\n }\n}\n","import { WarningVars } from \"@c-rex/types\";\nimport { logInfo, OIDCInterface } from \"@c-rex/interfaces\";\nimport { LogLevelType } from \"@c-rex/types\";\nimport { LogCategoriesType } from \"@c-rex/types\";\n\nconst formatIssuer = (issuer: string): string => {\n let newIssuer = issuer\n const lastChar = newIssuer.charAt(newIssuer.length - 1)\n if (lastChar !== \"/\") {\n newIssuer += \"/\"\n }\n newIssuer += \".well-known/openid-configuration\"\n\n return newIssuer;\n}\nexport const formatApiUrl = (apiUrl: string): string => {\n let newApiUrl = apiUrl\n const lastChar = newApiUrl.charAt(newApiUrl.length - 1)\n if (lastChar !== \"/\") {\n newApiUrl += \"/\"\n }\n newApiUrl += \"iirds/v1/\"\n\n return newApiUrl;\n}\n\nexport const mergeConfigs = <T>(defaultConfig: Partial<T>, envVars: Partial<T>): T => {\n const definedEnvVars: T = {} as T;\n\n for (const key in envVars) {\n if (envVars[key] !== undefined) {\n definedEnvVars[key] = envVars[key];\n }\n }\n\n return {\n ...defaultConfig,\n ...definedEnvVars,\n };\n}\n\nexport const generateWarnings = (vars: WarningVars[]): string[] => {\n\n const warnings: string[] = []\n\n vars.forEach((variable) => {\n const value = process.env[variable.key];\n if (value === undefined) {\n warnings.push(`Missing environment variable ${variable.key}, using default value: ${variable.default}`)\n }\n })\n\n return warnings;\n}\n\nexport const createUserOIDCConfig = (): { user: OIDCInterface, warnings: string[] } => {\n const warnings: string[] = []\n const userDefaults: Partial<OIDCInterface> = {\n secret: \"dummy\",\n scope: \"openid profile crex.ids.api crex.ids.api.public\",\n enabled: true,\n }\n const userEnvs: Partial<OIDCInterface> = {\n id: process.env.CREX_IDS_CLIENT_ID,\n secret: process.env.CREX_IDS_CLIENT_SECRET,\n scope: process.env.CREX_IDS_USER_SCOPES,\n issuer: process.env.OIDC_ISSUER == undefined ? undefined : formatIssuer(process.env.OIDC_ISSUER),\n enabled: process.env.CREX_IDS_USER_LOGIN_ENABLE == undefined ? undefined : process.env.CREX_IDS_USER_LOGIN_ENABLE == \"true\",\n }\n const user: OIDCInterface = mergeConfigs<OIDCInterface>(userDefaults, userEnvs);\n\n if (user.enabled) {\n const disableOIDCVars = [\n { key: \"CREX_IDS_CLIENT_ID\", value: process.env.CREX_IDS_CLIENT_ID },\n { key: \"OIDC_ISSUER\", value: process.env.OIDC_ISSUER },\n ]\n disableOIDCVars.forEach((variable) => {\n if (variable.value === undefined) {\n user.enabled = false\n\n warnings.push(`Missing environment variable ${variable.key}, disabling client and login`)\n }\n })\n\n }\n\n if (user.enabled) {\n const userWarningVars = [\n { key: \"CREX_IDS_USER_SCOPES\", default: user.scope },\n { key: \"CREX_IDS_CLIENT_SECRET\", default: user.secret },\n { key: \"CREX_IDS_USER_LOGIN_ENABLE\", default: user.enabled }\n ]\n const aux = generateWarnings(userWarningVars)\n warnings.push(...aux);\n }\n\n return { user, warnings }\n}\n\nexport const createClientOIDCConfig = (): { client: OIDCInterface, warnings: string[] } => {\n const warnings: string[] = []\n const clientDefault: Partial<OIDCInterface> = {\n secret: \"dummy\",\n enabled: true,\n }\n const clientEnvs: Partial<OIDCInterface> = {\n id: process.env.CREX_IDS_CLIENT_ID,\n issuer: process.env.OIDC_ISSUER == undefined ? undefined : formatIssuer(process.env.OIDC_ISSUER),\n secret: process.env.CREX_IDS_CLIENT_SECRET,\n enabled: process.env.CREX_IDS_CLIENT_LOGIN_ENABLE == undefined ? undefined : process.env.CREX_IDS_CLIENT_LOGIN_ENABLE == \"true\",\n }\n const client: OIDCInterface = mergeConfigs<OIDCInterface>(clientDefault, clientEnvs);\n\n if (client.enabled) {\n const disableOIDCVars = [\n { key: \"CREX_IDS_CLIENT_ID\", value: process.env.CREX_IDS_CLIENT_ID },\n { key: \"OIDC_ISSUER\", value: process.env.OIDC_ISSUER },\n ]\n disableOIDCVars.forEach((variable) => {\n if (variable.value === undefined) {\n client.enabled = false\n warnings.push(`Missing environment variable ${variable.key}, disabling client and login`)\n }\n })\n }\n\n if (client.enabled) {\n const clientWarningVars = [\n { key: \"CREX_IDS_CLIENT_SECRET\", default: client.secret },\n { key: \"CREX_IDS_CLIENT_LOGIN_ENABLE\", default: client.enabled }\n ]\n\n const aux = generateWarnings(clientWarningVars)\n warnings.push(...aux);\n }\n\n return { client, warnings }\n}\n\nexport const createConsoleLoggerConfig = (): { consoleLogger: Omit<logInfo, \"hostname\" | \"app\" | \"categoriesLevel\">, warnings: string[]; } => {\n const warnings: string[] = []\n\n const consoleLoggerDefaults: Partial<logInfo> = {\n minimumLevel: \"info\" as LogLevelType,\n silent: false,\n }\n const consoleLoggerEnvs: Partial<logInfo> = {\n minimumLevel: process.env.LOG_CONSOLE_LEVEL as LogLevelType,\n silent: process.env.LOG_CONSOLE_SILENT == undefined ? undefined : process.env.LOG_CONSOLE_SILENT == \"true\",\n }\n const consoleLogger: logInfo = mergeConfigs<logInfo>(consoleLoggerDefaults, consoleLoggerEnvs);\n\n if (consoleLogger.silent == false) {\n const consoleWarningsVars = [\n { key: \"LOG_CONSOLE_SILENT\", default: consoleLogger.silent },\n { key: \"LOG_CONSOLE_LEVEL\", default: consoleLogger.minimumLevel }\n ]\n const aux = generateWarnings(consoleWarningsVars)\n warnings.push(...aux);\n }\n\n return {\n consoleLogger,\n warnings\n }\n}\n\nexport const createGraylogLoggerConfig = (projectName: string): { graylog: logInfo, warnings: string[] } => {\n const warnings: string[] = []\n\n const graylogDefaults: Partial<logInfo> = {\n app: `NextJs-Project-${projectName}`,\n minimumLevel: \"info\" as LogLevelType,\n silent: false,\n hostname: \"https://log.c-rex.net\",\n port: 12202,\n categoriesLevel: [\"NoLicense\", \"Scenario\", \"Document\", \"Search\", \"Notification\", \"History\", \"UserProfile\"],\n }\n const graylogEnvs: Partial<logInfo> = {\n app: process.env.LOG_GRAYLOG_APP_NAME,\n silent: process.env.LOG_GRAYLOG_SILENT == undefined ? undefined : process.env.LOG_GRAYLOG_SILENT == \"true\",\n hostname: process.env.LOG_GRAYLOG_HOSTNAME,\n port: process.env.LOG_GRAYLOG_PORT == undefined ? undefined : Number(process.env.LOG_GRAYLOG_PORT),\n minimumLevel: process.env.LOG_GRAYLOG_LEVEL as any,\n categoriesLevel: process.env.LOG_GRAYLOG_CATEGORIES == undefined ? undefined : process.env.LOG_GRAYLOG_CATEGORIES.split(\",\") as LogCategoriesType[],\n }\n const graylog: logInfo = mergeConfigs<logInfo>(graylogDefaults, graylogEnvs);\n\n if (graylog.silent == false) {\n const graylogWarningVars = [\n { key: \"LOG_GRAYLOG_APP_NAME\", default: graylog.app },\n { key: \"LOG_GRAYLOG_HOSTNAME\", default: graylog.hostname },\n { key: \"LOG_GRAYLOG_LEVEL\", default: graylog.minimumLevel },\n { key: \"LOG_GRAYLOG_SILENT\", default: graylog.silent },\n { key: \"LOG_GRAYLOG_CATEGORIES\", default: graylog.categoriesLevel },\n { key: \"LOG_GRAYLOG_PORT\", default: graylog.port }\n ]\n const aux = generateWarnings(graylogWarningVars)\n warnings.push(...aux);\n }\n\n return {\n graylog,\n warnings\n }\n}\n\nexport const createMatomoLoggerConfig = (projectName: string): { matomo: logInfo, warnings: string[] } => {\n const warnings: string[] = []\n\n const matomoDefaults: Partial<logInfo> = {\n app: `NextJs-Project-${projectName}`,\n minimumLevel: \"info\" as LogLevelType,\n silent: true,\n hostname: \"\",\n port: 0,\n categoriesLevel: [\"NoLicense\", \"Scenario\", \"Document\", \"Search\", \"Notification\", \"History\", \"UserProfile\"],\n }\n const matomoEnvs: Partial<logInfo> = {\n app: process.env.LOG_MATOMO_APP_NAME,\n silent: process.env.LOG_MATOMO_SILENT == undefined ? undefined : process.env.LOG_MATOMO_SILENT == \"true\",\n hostname: process.env.LOG_MATOMO_HOSTNAME,\n port: process.env.LOG_MATOMO_PORT == undefined ? undefined : Number(process.env.LOG_MATOMO_PORT),\n minimumLevel: process.env.LOG_MATOMO_LEVEL as any,\n categoriesLevel: process.env.LOG_MATOMO_CATEGORIES == undefined ? undefined : process.env.LOG_MATOMO_CATEGORIES.split(\",\") as LogCategoriesType[],\n }\n const matomo: logInfo = mergeConfigs<logInfo>(matomoDefaults, matomoEnvs);\n\n\n const matomoSilentVars = [\n { key: \"LOG_MATOMO_SILENT\", value: process.env.LOG_MATOMO_SILENT },\n { key: \"LOG_MATOMO_HOSTNAME\", value: process.env.LOG_MATOMO_HOSTNAME },\n { key: \"LOG_MATOMO_PORT\", value: process.env.LOG_MATOMO_PORT }\n ]\n matomoSilentVars.forEach((variable) => {\n if (variable.value === undefined) {\n matomo.silent = true\n warnings.push(`Missing environment variable ${variable.key}, setting matomo logger to silent`)\n }\n })\n\n if (matomo.silent == false) {\n const matomoWarningVars = [\n { key: \"LOG_MATOMO_APP_NAME\", default: matomo.app },\n { key: \"LOG_MATOMO_LEVEL\", default: matomo.minimumLevel },\n { key: \"LOG_MATOMO_CATEGORIES\", default: matomo.categoriesLevel }\n ]\n const aux = generateWarnings(matomoWarningVars)\n warnings.push(...aux);\n }\n\n return {\n matomo,\n warnings\n }\n}\n\n","import { ConfigInterface, CookiesConfigs, CustomerConfig } from \"@c-rex/interfaces\";\nimport {\n createClientOIDCConfig,\n createConsoleLoggerConfig,\n createGraylogLoggerConfig,\n createMatomoLoggerConfig,\n createUserOIDCConfig,\n formatApiUrl\n} from \"./utils\";\nimport { cookies } from \"next/headers\";\nimport { SDK_CONFIG_KEY } from \"@c-rex/constants\";\n\ndeclare global {\n // eslint-disable-next-line no-var\n var __GLOBAL_CONFIG__: ConfigInterface | null;\n}\n\n/**\n * SDK class for the CREX application.\n * Provides configuration and authentication functionality.\n */\nexport class CrexSDK {\n public userAuthConfig!: any;\n public customerConfig!: ConfigInterface;\n public cookiesConfig!: CookiesConfigs;\n\n public async getUserAuthConfig() {\n if (this.userAuthConfig) {\n return this.userAuthConfig;\n }\n\n if (!this.customerConfig) {\n this.customerConfig = this.getServerConfig()\n }\n\n const user = this.customerConfig.OIDC.user;\n const userInfoEndPoint = this.customerConfig.OIDC.issuerMetadata?.userinfo_endpoint;\n if (user.enabled) {\n this.userAuthConfig = {\n providers: [\n {\n id: \"crex\",\n name: \"CREX\",\n type: \"oauth\",\n version: \"2.0\",\n clientId: user.id,\n wellKnown: user.issuer,\n clientSecret: user.secret,\n authorization: {\n params: {\n scope: user.scope,\n prompt: \"login\"\n }\n },\n idToken: true,\n checks: [\"pkce\", \"state\"],\n async profile(_: any, tokens: any) {\n const res = await fetch(userInfoEndPoint, {\n headers: {\n Authorization: `Bearer ${tokens.access_token}`,\n },\n });\n\n const userinfo = await res.json();\n\n return {\n id: userinfo.sub,\n name: userinfo.name,\n email: userinfo.email,\n };\n },\n callbacks: {\n async jwt({ token, account }: any) {\n if (account) {\n token.id_token = account.id_token;\n }\n return token;\n },\n async session({ session, token }: any) {\n session.id_token = token.id_token;\n return session;\n },\n },\n },\n ]\n }\n };\n\n return this.userAuthConfig;\n }\n\n public createCustomerConfig(CUSTOMER_CONFIG: CustomerConfig, shouldLog: boolean): { cookiesConfig: CookiesConfigs, config: ConfigInterface } {\n\n const requiredEnvVars = [\"CREX_IDS_API_URL\", \"NEXT_PUBLIC_API_URL\"]\n const required = requiredEnvVars.map(key => {\n const value = process.env[key];\n if (value === undefined) {\n return `Missing required environment variable: ${key}`;\n }\n\n return \"\"\n }).filter(item => item.length > 0)\n\n const { user, warnings: userWarnings } = createUserOIDCConfig()\n const { client, warnings: clientWarnings } = createClientOIDCConfig()\n const { matomo, warnings: matomoWarnings } = createMatomoLoggerConfig(CUSTOMER_CONFIG.projectName)\n const { graylog, warnings: graylogWarnings } = createGraylogLoggerConfig(CUSTOMER_CONFIG.projectName)\n const { consoleLogger, warnings: consoleWarnings } = createConsoleLoggerConfig()\n\n const warnings = required.concat(\n consoleWarnings,\n clientWarnings,\n userWarnings,\n graylogWarnings,\n matomoWarnings\n )\n\n if (shouldLog) {\n if (warnings.length > 0) console.warn(warnings.join('\\n'));\n }\n\n const cookiesConfig: CookiesConfigs = {\n publicNextApiUrl: process.env.NEXT_PUBLIC_API_URL!,\n ...CUSTOMER_CONFIG,\n OIDC: {\n clientEnabled: client.enabled,\n userEnabled: user.enabled,\n },\n }\n\n const config: ConfigInterface = {\n baseUrl: process.env.CREX_IDS_API_URL == undefined ? \"\" : formatApiUrl(process.env.CREX_IDS_API_URL),\n OIDC: { client, user },\n logs: { console: consoleLogger, graylog, matomo, },\n ...CUSTOMER_CONFIG,\n }\n\n return { cookiesConfig, config };\n }\n\n public getClientConfig = (): CookiesConfigs => {\n const jsonConfigs = cookies().get(SDK_CONFIG_KEY)?.value;\n if (!jsonConfigs) {\n throw new Error('Configs not found');\n }\n\n const configs: CookiesConfigs = JSON.parse(jsonConfigs);\n\n return configs;\n }\n\n public getServerConfig() {\n if (!global.__GLOBAL_CONFIG__) {\n throw new Error('Server config not initialized');\n }\n return global.__GLOBAL_CONFIG__;\n }\n\n public initializeConfig(config: ConfigInterface) {\n if (global.__GLOBAL_CONFIG__) return global.__GLOBAL_CONFIG__;\n global.__GLOBAL_CONFIG__ = config;\n return global.__GLOBAL_CONFIG__;\n }\n\n public updateConfigProp(key: keyof ConfigInterface, value: any) {\n if (!global.__GLOBAL_CONFIG__) {\n throw new Error('Server config not initialized');\n }\n global.__GLOBAL_CONFIG__[key] = value;\n return global.__GLOBAL_CONFIG__;\n }\n}"],"mappings":"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","names":["Transport","Transport"]}
package/dist/logger.js CHANGED
@@ -178,14 +178,14 @@ var createUserOIDCConfig = () => {
178
178
  id: process.env.CREX_IDS_CLIENT_ID,
179
179
  secret: process.env.CREX_IDS_CLIENT_SECRET,
180
180
  scope: process.env.CREX_IDS_USER_SCOPES,
181
- issuer: process.env.OIDC_IDS_ISSUER == void 0 ? void 0 : formatIssuer(process.env.OIDC_IDS_ISSUER),
181
+ issuer: process.env.OIDC_ISSUER == void 0 ? void 0 : formatIssuer(process.env.OIDC_ISSUER),
182
182
  enabled: process.env.CREX_IDS_USER_LOGIN_ENABLE == void 0 ? void 0 : process.env.CREX_IDS_USER_LOGIN_ENABLE == "true"
183
183
  };
184
184
  const user = mergeConfigs(userDefaults, userEnvs);
185
185
  if (user.enabled) {
186
186
  const disableOIDCVars = [
187
187
  { key: "CREX_IDS_CLIENT_ID", value: process.env.CREX_IDS_CLIENT_ID },
188
- { key: "OIDC_IDS_ISSUER", value: process.env.OIDC_IDS_ISSUER }
188
+ { key: "OIDC_ISSUER", value: process.env.OIDC_ISSUER }
189
189
  ];
190
190
  disableOIDCVars.forEach((variable) => {
191
191
  if (variable.value === void 0) {
@@ -213,7 +213,7 @@ var createClientOIDCConfig = () => {
213
213
  };
214
214
  const clientEnvs = {
215
215
  id: process.env.CREX_IDS_CLIENT_ID,
216
- issuer: process.env.OIDC_IDS_ISSUER == void 0 ? void 0 : formatIssuer(process.env.OIDC_IDS_ISSUER),
216
+ issuer: process.env.OIDC_ISSUER == void 0 ? void 0 : formatIssuer(process.env.OIDC_ISSUER),
217
217
  secret: process.env.CREX_IDS_CLIENT_SECRET,
218
218
  enabled: process.env.CREX_IDS_CLIENT_LOGIN_ENABLE == void 0 ? void 0 : process.env.CREX_IDS_CLIENT_LOGIN_ENABLE == "true"
219
219
  };
@@ -221,7 +221,7 @@ var createClientOIDCConfig = () => {
221
221
  if (client.enabled) {
222
222
  const disableOIDCVars = [
223
223
  { key: "CREX_IDS_CLIENT_ID", value: process.env.CREX_IDS_CLIENT_ID },
224
- { key: "OIDC_IDS_ISSUER", value: process.env.OIDC_IDS_ISSUER }
224
+ { key: "OIDC_ISSUER", value: process.env.OIDC_ISSUER }
225
225
  ];
226
226
  disableOIDCVars.forEach((variable) => {
227
227
  if (variable.value === void 0) {