{"_id":"@axyom/ui-starter-kit","_rev":"19-ca677bb5282b67bc6ba99d171043f237","name":"@axyom/ui-starter-kit","dist-tags":{"latest":"1.0.11"},"versions":{"1.0.6":{"name":"@axyom/ui-starter-kit","version":"1.0.6","keywords":["oidc","token","auth","authentication","ui-server"],"author":{"name":"Axyom"},"license":"MIT","_id":"@axyom/ui-starter-kit@1.0.6","maintainers":[{"name":"kchelms","email":"kendall.h@symsoftsolutions.com"}],"bin":{"axyom-ui-starter-kit":"dist/bin/cli.js"},"dist":{"shasum":"52e70eb81e60426940290478d64dccc374da5fd8","tarball":"https://registry.npmjs.org/@axyom/ui-starter-kit/-/ui-starter-kit-1.0.6.tgz","fileCount":94,"integrity":"sha512-u9p/LAakIB6TR4cG2qv7E4eRWO1C/O4u40v7+DHUCV8HGb4zgGk05t63yvdOqZmLiRZadXPeh/Tk3Z4mTmfg3A==","signatures":[{"sig":"MEUCIQD8r+3TWir5jHuE949vxxvCgUwZWNLCIUj8hrfoLu7YEwIgWP9V2cJo56Dn7yBMvZ6BQYMoo4DZu57pcqO8L7D+tW0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":308817},"main":"./dist/server.js","type":"commonjs","types":"./dist/server.d.ts","gitHead":"782d3e326cc2ce0de844d533f50903d0d6709327","scripts":{"dev":"tsx watch src/bin/cli.ts start","lint":"eslint src/","test":"jest","build":"tsc","start":"node dist/bin/cli.js start","format":"prettier --write \"src/**/*.ts\"","prepublishOnly":"npm run build"},"_npmUser":{"name":"kchelms","email":"kendall.h@symsoftsolutions.com"},"deprecated":"Deprecated - please upgrade to 1.0.8 or later","_npmVersion":"11.6.2","description":"Standalone UI server for Axyom customers. Generates and manages OAuth 2.0 tokens using client credentials flow, and serves a range of customizable search interface layouts.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"joi":"^17.13.3","pino":"^9.5.0","dotenv":"^16.4.5","helmet":"^8.0.0","express":"^4.21.1","commander":"^12.1.0","node-cache":"^5.1.2","pino-pretty":"^11.3.0","openid-client":"^5.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","jest":"^29.7.0","eslint":"^9.15.0","nodemon":"^3.1.7","ts-jest":"^29.2.5","prettier":"^3.3.3","@eslint/js":"^9.15.0","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^22.9.3","@types/express":"^5.0.0","@typescript-eslint/parser":"^8.15.0","@typescript-eslint/eslint-plugin":"^8.15.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-starter-kit_1.0.6_1769215682177_0.3448488767753688","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@axyom/ui-starter-kit","version":"1.0.7","keywords":["oidc","token","auth","authentication","ui-server"],"author":{"name":"Axyom"},"license":"MIT","_id":"@axyom/ui-starter-kit@1.0.7","maintainers":[{"name":"kchelms","email":"kendall.h@symsoftsolutions.com"}],"bin":{"axyom-ui-starter-kit":"dist/bin/cli.js"},"dist":{"shasum":"5754181c6bdec0b790a2980f2198ef3df81b741d","tarball":"https://registry.npmjs.org/@axyom/ui-starter-kit/-/ui-starter-kit-1.0.7.tgz","fileCount":94,"integrity":"sha512-GzzmEu9yMQWfnFSeMCmY1YJCpjWExbXDqWLMMCyTp+tyF7k8Ynhm2r1O9MjPI/fg6Bolg92O5TpAookYVrVC0A==","signatures":[{"sig":"MEUCIGSBAa04YWgZAqYYACsZTN5hao22EpmdOhNMnSw7q6DSAiEAkxLMUIvbrCcV+firYhdoBoUxlqRDge5/+ha5h/WqvB8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":307527},"main":"./dist/server.js","type":"commonjs","types":"./dist/server.d.ts","gitHead":"67f834789413c206248d676de9a86c21237ba72f","scripts":{"dev":"tsx watch src/bin/cli.ts start","lint":"eslint src/","test":"jest","build":"tsc","start":"node dist/bin/cli.js start","format":"prettier --write \"src/**/*.ts\"","prepublishOnly":"npm run build"},"_npmUser":{"name":"kchelms","email":"kendall.h@symsoftsolutions.com"},"deprecated":"Deprecated - please upgrade to 1.0.8 or later","_npmVersion":"11.6.2","description":"Standalone UI server for Axyom customers. Generates and manages OAuth 2.0 tokens using client credentials flow, and serves a range of customizable search interface layouts.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"joi":"^17.13.3","pino":"^9.5.0","dotenv":"^16.4.5","helmet":"^8.0.0","express":"^4.21.1","commander":"^12.1.0","node-cache":"^5.1.2","pino-pretty":"^11.3.0","openid-client":"^5.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","jest":"^29.7.0","eslint":"^9.15.0","nodemon":"^3.1.7","ts-jest":"^29.2.5","prettier":"^3.3.3","@eslint/js":"^9.15.0","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^22.9.3","@types/express":"^5.0.0","@typescript-eslint/parser":"^8.15.0","@typescript-eslint/eslint-plugin":"^8.15.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-starter-kit_1.0.7_1770074284467_0.8815392140272915","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@axyom/ui-starter-kit","version":"1.0.8","keywords":["oidc","token","auth","authentication","ui-server"],"author":{"name":"Axyom"},"license":"MIT","_id":"@axyom/ui-starter-kit@1.0.8","maintainers":[{"name":"kchelms","email":"kendall.h@symsoftsolutions.com"}],"bin":{"axyom-ui-starter-kit":"dist/bin/cli.js"},"dist":{"shasum":"29171b579fd4c3d7484e4b83f7abdee9ecca35a5","tarball":"https://registry.npmjs.org/@axyom/ui-starter-kit/-/ui-starter-kit-1.0.8.tgz","fileCount":94,"integrity":"sha512-ILoxudu0/5wc8LC1cm5vLxjA4oydKheJ46SdlWClv/vBySVfhnjGwBxFszIlzjpBlBtA9E0ZvuUFxnY3ChUuQQ==","signatures":[{"sig":"MEUCIHLcyqNHeSbl7bcoHz/VGtuJ/M1nYBMG4M3uZO2gAM+6AiEApCvcJtxZunQQ6Se3kRSqUX0aCN2sWpA5Ktgs6flX68M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":307548},"main":"./dist/server.js","type":"commonjs","types":"./dist/server.d.ts","gitHead":"cf0d8dcff7a72d4bbaf2e06fcb9d84db2e78836b","scripts":{"dev":"tsx watch src/bin/cli.ts start","lint":"eslint src/","test":"jest","build":"tsc","start":"node dist/bin/cli.js start","format":"prettier --write \"src/**/*.ts\"","prepublishOnly":"npm run build"},"_npmUser":{"name":"kchelms","email":"kendall.h@symsoftsolutions.com"},"_npmVersion":"11.6.2","description":"Standalone UI server for Axyom customers. Generates and manages OAuth 2.0 tokens using client credentials flow, and serves a range of customizable search interface layouts.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"joi":"^17.13.3","pino":"^9.5.0","dotenv":"^16.4.5","helmet":"^8.0.0","express":"^4.21.1","commander":"^12.1.0","node-cache":"^5.1.2","pino-pretty":"^11.3.0","openid-client":"^5.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","jest":"^29.7.0","eslint":"^9.15.0","nodemon":"^3.1.7","ts-jest":"^29.2.5","prettier":"^3.3.3","@eslint/js":"^9.15.0","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^22.9.3","@types/express":"^5.0.0","@typescript-eslint/parser":"^8.15.0","@typescript-eslint/eslint-plugin":"^8.15.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-starter-kit_1.0.8_1771374315299_0.5574891551025143","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"@axyom/ui-starter-kit","version":"1.0.9","keywords":["oidc","token","auth","authentication","ui-server"],"author":{"name":"Axyom"},"license":"MIT","_id":"@axyom/ui-starter-kit@1.0.9","maintainers":[{"name":"kchelms","email":"kendall.h@symsoftsolutions.com"}],"bin":{"axyom-ui-starter-kit":"dist/bin/cli.js"},"dist":{"shasum":"72256a166fd5424b3dcdb732e0cd1e14317777aa","tarball":"https://registry.npmjs.org/@axyom/ui-starter-kit/-/ui-starter-kit-1.0.9.tgz","fileCount":94,"integrity":"sha512-jbFGIb7Ekz5gKMmvOzbjmvrNqjmhjpkwGYEECsnAS9Pr3XPB6CsGZaBHeYmLC+PEugBQSuI0xppvbl1/Hgm4bA==","signatures":[{"sig":"MEQCIHkGxa5MgBVFPGEkzJv2wccsvkCLhVm0V0/VzXvLV/aGAiAo53UzY73d5h0VRlDQPTOP185i9pqGkIy5PuYKLxGq6g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":309176},"main":"./dist/server.js","type":"commonjs","types":"./dist/server.d.ts","gitHead":"d5c85f49c8a804fd98a7325b4d7031afec00a603","scripts":{"dev":"tsx watch src/bin/cli.ts start","lint":"eslint src/","test":"jest","build":"tsc","start":"node dist/bin/cli.js start","format":"prettier --write \"src/**/*.ts\"","prepublishOnly":"npm run build"},"_npmUser":{"name":"kchelms","email":"kendall.h@symsoftsolutions.com"},"_npmVersion":"11.6.2","description":"Standalone UI server for Axyom customers. Generates and manages OAuth 2.0 tokens using client credentials flow, and serves a range of customizable search interface layouts.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"joi":"^17.13.3","pino":"^9.5.0","dotenv":"^16.4.5","helmet":"^8.0.0","express":"^4.21.1","commander":"^12.1.0","node-cache":"^5.1.2","pino-pretty":"^11.3.0","openid-client":"^5.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","jest":"^29.7.0","eslint":"^9.15.0","nodemon":"^3.1.7","ts-jest":"^29.2.5","prettier":"^3.3.3","@eslint/js":"^9.15.0","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^22.9.3","@types/express":"^5.0.0","@typescript-eslint/parser":"^8.15.0","@typescript-eslint/eslint-plugin":"^8.15.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-starter-kit_1.0.9_1771886072285_0.3800044313441642","host":"s3://npm-registry-packages-npm-production"}},"1.0.10":{"name":"@axyom/ui-starter-kit","version":"1.0.10","keywords":["oidc","token","auth","authentication","ui-server"],"author":{"name":"Axyom"},"license":"MIT","_id":"@axyom/ui-starter-kit@1.0.10","maintainers":[{"name":"kchelms","email":"kendall.h@symsoftsolutions.com"}],"bin":{"axyom-ui-starter-kit":"dist/bin/cli.js"},"dist":{"shasum":"0a38cc3d8377fbe7105bdec6b997c5208138e7df","tarball":"https://registry.npmjs.org/@axyom/ui-starter-kit/-/ui-starter-kit-1.0.10.tgz","fileCount":94,"integrity":"sha512-xK/6bxA2tlQXFGSz/NSUi3M9iN5cxKX4Xm2MVnwihDO5xbSetx70iZJx/Jb4VMB5fV83vZmn/e9PuULDkd1djg==","signatures":[{"sig":"MEUCIAH4ONWvFjAxPZi/hsvz8jFWYyxlzGVqD/xjcGggxqIdAiEA1qmmhyvvZAyqMlZDCGnXixIIVkmwtZAASX957WUf33U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":309842},"main":"./dist/server.js","type":"commonjs","types":"./dist/server.d.ts","gitHead":"d8ac7c10e6528f00479ea5c17da81171a950d5bf","scripts":{"dev":"tsx watch src/bin/cli.ts start","lint":"eslint src/","test":"jest","build":"tsc","start":"node dist/bin/cli.js start","format":"prettier --write \"src/**/*.ts\"","prepublishOnly":"npm run build"},"_npmUser":{"name":"kchelms","email":"kendall.h@symsoftsolutions.com"},"_npmVersion":"11.6.2","description":"Standalone UI server for Axyom customers. Generates and manages OAuth 2.0 tokens using client credentials flow, and serves a range of customizable search interface layouts.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"joi":"^17.13.3","pino":"^9.5.0","dotenv":"^16.4.5","helmet":"^8.0.0","express":"^4.21.1","commander":"^12.1.0","node-cache":"^5.1.2","pino-pretty":"^11.3.0","openid-client":"^5.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","jest":"^29.7.0","eslint":"^9.15.0","nodemon":"^3.1.7","ts-jest":"^29.2.5","prettier":"^3.3.3","@eslint/js":"^9.15.0","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^22.9.3","@types/express":"^5.0.0","@typescript-eslint/parser":"^8.15.0","@typescript-eslint/eslint-plugin":"^8.15.0"},"_npmOperationalInternal":{"tmp":"tmp/ui-starter-kit_1.0.10_1773866678800_0.5526468074761837","host":"s3://npm-registry-packages-npm-production"}},"1.0.11":{"name":"@axyom/ui-starter-kit","version":"1.0.11","description":"Standalone UI server for Axyom customers. Generates and manages OAuth 2.0 tokens using client credentials flow, and serves a range of customizable search interface layouts.","keywords":["oidc","token","auth","authentication","ui-server"],"license":"MIT","author":{"name":"Axyom"},"type":"commonjs","main":"./dist/server.js","types":"./dist/server.d.ts","scripts":{"build":"tsc","start":"node dist/bin/cli.js start","dev":"tsx watch src/bin/cli.ts start","test":"jest","lint":"eslint src/","format":"prettier --write \"src/**/*.ts\"","prepublishOnly":"npm run build"},"bin":{"axyom-ui-starter-kit":"dist/bin/cli.js"},"publishConfig":{"access":"public"},"dependencies":{"commander":"^12.1.0","dotenv":"^16.4.5","express":"^4.21.1","helmet":"^8.0.0","joi":"^17.13.3","node-cache":"^5.1.2","openid-client":"^5.7.0","pino":"^9.5.0","pino-pretty":"^11.3.0"},"devDependencies":{"@eslint/js":"^9.15.0","@types/express":"^5.0.0","@types/jest":"^29.5.14","@types/node":"^22.9.3","@typescript-eslint/eslint-plugin":"^8.15.0","@typescript-eslint/parser":"^8.15.0","eslint":"^9.15.0","jest":"^29.7.0","nodemon":"^3.1.7","prettier":"^3.3.3","ts-jest":"^29.2.5","tsx":"^4.19.2","typescript":"^5.7.2"},"gitHead":"909bf0b2808a122ef8c8641f585d8f69617dc901","_id":"@axyom/ui-starter-kit@1.0.11","_nodeVersion":"24.11.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-eUYUCNtSYBB63hym4KXcH23U/tPHF6Ekn3JgUmblO7EIvP6BRkLtR3emLeAlOxoAaDdRujBeLQAwOb8pbtes1A==","shasum":"46608fea52496e1a68133a49105bac1e5f543d06","tarball":"https://registry.npmjs.org/@axyom/ui-starter-kit/-/ui-starter-kit-1.0.11.tgz","fileCount":94,"unpackedSize":312551,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIERx1hiuaGhXJnIDT6huQtmxi3cp9+pUndclA6gp0gm1AiEA76IOYoVUx9G2d4Nr/vwEdrzHHdJMAa6V6cinkbvoqT8="}]},"_npmUser":{"name":"kchelms","email":"kendall.h@symsoftsolutions.com"},"directories":{},"maintainers":[{"name":"kchelms","email":"kendall.h@symsoftsolutions.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ui-starter-kit_1.0.11_1776274967862_0.7829468272122602"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-24T00:48:02.064Z","modified":"2026-04-15T17:42:48.158Z","1.0.0":"2025-12-20T00:37:51.284Z","1.0.1":"2025-12-23T00:38:13.238Z","1.0.2":"2025-12-24T00:06:52.320Z","1.0.3":"2026-01-22T22:55:57.345Z","1.0.4":"2026-01-24T00:01:59.225Z","1.0.5":"2026-01-24T00:31:34.425Z","1.0.6":"2026-01-24T00:48:02.311Z","1.0.7":"2026-02-02T23:18:04.633Z","1.0.8":"2026-02-18T00:25:15.515Z","1.0.9":"2026-02-23T22:34:32.451Z","1.0.10":"2026-03-18T20:44:38.929Z","1.0.11":"2026-04-15T17:42:48.005Z"},"author":{"name":"Axyom"},"license":"MIT","keywords":["oidc","token","auth","authentication","ui-server"],"description":"Standalone UI server for Axyom customers. Generates and manages OAuth 2.0 tokens using client credentials flow, and serves a range of customizable search interface layouts.","maintainers":[{"name":"kchelms","email":"kendall.h@symsoftsolutions.com"}],"readme":"# Axyom UI Starter Kit\r\n\r\nA standalone server for Axyom customers that provides ready-to-use search interfaces powered by the Axyom Search API. Includes OIDC authentication, token management, and customizable UI views.\r\n\r\n## Features\r\n\r\n### Search Interfaces\r\n- **AI Search** - Complete and component-based AI-powered search interfaces\r\n- **Classic Search** - Traditional search with full functionality\r\n- **AI Chat** - Interactive conversational search interface\r\n- **Unified Search** - Tabbed interface combining AI and classic search\r\n- **Customizable Views** - Bring your own HTML/CSS/JS to match your brand\r\n\r\n### Configuration & Management\r\n- **Web-based Configuration UI** - Manage all settings through an intuitive web interface\r\n- **Persistent Configuration** - Three-file reconciliation system for robust config management\r\n- **OIDC Authentication** - Automatic token generation and caching\r\n- **Real-time Updates** - See changes immediately when customizing views\r\n- **Configuration Reconciliation** - Seamlessly merge infrastructure changes with UI customizations\r\n\r\n### Developer Experience\r\n- **Multiple Configuration Methods** - JSON, .env, environment variables, or CLI\r\n- **CLI Interface** - Easy server management from the command line\r\n- **RESTful API** - Token and configuration endpoints\r\n- **Structured Logging** - Configurable log levels with Pino\r\n- **Health Check Endpoints** - Monitor server status\r\n- **Security Best Practices** - Helmet.js, CSP, and secure defaults\r\n\r\n## Installation\r\n\r\n```bash\r\nnpm init -y\r\nnpm install @axyom/ui-starter-kit\r\n```\r\n\r\n## Quick Start\r\n\r\n1. Create a configuration file `axyom-credentials.json`:\r\n\r\n```json\r\n{\r\n  \"clientName\": \"your-client-name\",\r\n  \"clientId\": \"your-client-id\",\r\n  \"clientSecret\": \"your-client-secret\",\r\n  \"issuerUrl\": \"https://keycloak.axyom.co/realms/REALM_NAME\"\r\n}\r\n```\r\n\r\n2. Start the server:\r\n\r\n```bash\r\nnpx axyom-ui-starter-kit start\r\n```\r\n\r\n3. Open your browser to `http://localhost:3000`\r\n\r\nYou'll see the **Axyom Search** home page with links to:\r\n- AI Search interfaces\r\n- Classic Search interfaces\r\n- Unified Search\r\n- Configuration management\r\n\r\n4. **Customize your views** (optional):\r\n    - HTML view files for the demo views are placed in the folder in the current path\r\n        - A custom views path may be set in server settings, on the settings page\r\n    - Edit HTML, CSS, and JavaScript with your branding and styles\r\n    - Changes are persisted across server restarts\r\n    - To revert changes, delete the HTML file and restart the server. The default html file will be replaced in the views folder.\r\n\r\n## API Usage\r\n\r\n### Getting a Token\r\n\r\nOnce your server is running, you can retrieve an OAuth 2.0 access token for use with the Axyom Search API:\r\n\r\n**Endpoint:** `GET /auth/token`\r\n\r\n**Example:**\r\n```bash\r\ncurl http://localhost:3000/auth/token\r\n```\r\n\r\n**Response:**\r\n```json\r\n{\r\n  \"access_token\": \"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...\",\r\n  \"token_type\": \"Bearer\",\r\n  \"expires_in\": 7200,\r\n  \"cached\": true\r\n}\r\n```\r\n\r\nThe server automatically caches tokens and returns cached tokens when they're still valid. The `cached` flag is set to `true` when a cached token is returned.\r\n\r\n### Force Token Refresh\r\n\r\nTo bypass the cache and generate a fresh token:\r\n\r\n**Endpoint:** `POST /auth/token/refresh`\r\n\r\n**Example:**\r\n```bash\r\ncurl -X POST http://localhost:3000/auth/token/refresh\r\n```\r\n\r\n## Configuration\r\n\r\n### Getting Your Configuration File\r\n\r\nWhen you become an Axyom customer, you'll receive an **axyom-credentials.json** file with your authentication credentials pre-configured. This file contains everything you need to get started with the Axyom UI Starter Kit.\r\n\r\nSimply place this file in your project directory and start the server and it will automatically detect and use your credentials.\r\n\r\nYou can customize additional settings through the web UI at `http://localhost:3000/config` after starting the server. Any changes you make through the web UI will be saved and persist across server restarts.\r\n\r\n### Required Configuration\r\n\r\n- `clientName` - Your Axyom client name\r\n- `clientId` - Your OIDC client ID\r\n- `clientSecret` - Your OIDC client secret\r\n- `issuerUrl` - The OIDC issuer URL (e.g., `https://keycloak.axyom.co/realms/REALM_NAME`)\r\n\r\n### Optional Configuration\r\n\r\n- `classicSearchIndex` - Search index name for classic search (required for classic search features)\r\n- `searchMode` - Search mode: 'ai', 'classic', or 'both' (default: 'both')\r\n- `port` - Server port (default: 3000)\r\n- `host` - Host to bind to (default: 127.0.0.1)\r\n- `viewsPath` - Custom views directory path (default: './views')\r\n- `logsPath` - Logs directory path (default: './logs')\r\n- `tokenCacheTtl` - Token cache TTL in seconds (default: auto-calculated from token expiry)\r\n- `logLevel` - Logging level: debug, info, warn, error (default: info)\r\n\r\n### Configuration Methods\r\n\r\n#### Method 1: Axyom Credentials File (axyom-credentials.json)\r\n\r\n```json\r\n{\r\n  \"clientName\": \"your-client-name\",\r\n  \"clientId\": \"your-client-id\",\r\n  \"clientSecret\": \"your-client-secret\",\r\n  \"issuerUrl\": \"https://keycloak.axyom.co/realms/REALM_NAME\"\r\n}\r\n```\r\n\r\n#### Method 2: Web UI (Recommended for Runtime Changes)\r\n\r\n1. Start the server with initial configuration\r\n2. Navigate to `http://localhost:3000/config`\r\n3. Edit settings through the intuitive web interface\r\n4. Changes are saved automatically and will be retained between sessions.\r\n5. Click \"Reset to Defaults\" to revert to your original infrastructure config\r\n\r\n#### Method 3: Environment Variables\r\n\r\n```bash\r\nexport AXYOM_CLIENT_NAME=your-client-name\r\nexport AXYOM_CLIENT_ID=your-client-id\r\nexport AXYOM_CLIENT_SECRET=your-client-secret\r\nexport AXYOM_ISSUER_URL=https://keycloak.axyom.co/realms/SMUD\r\nexport AXYOM_CLASSIC_SEARCH_INDEX=your-search-index\r\naxyom-ui-starter-kit start\r\n```\r\n\r\n#### Method 4: Environment File (.env)\r\n\r\n```bash\r\nAXYOM_CLIENT_NAME=your-client-name\r\nAXYOM_CLIENT_ID=your-client-id\r\nAXYOM_CLIENT_SECRET=your-client-secret\r\nAXYOM_ISSUER_URL=https://keycloak.axyom.co/realms/SMUD\r\nAXYOM_CLASSIC_SEARCH_INDEX=your-search-index\r\nAXYOM_SEARCH_MODE=both\r\nPORT=3000\r\nHOST=127.0.0.1\r\nAXYOM_VIEWS_PATH=./custom-views\r\nAXYOM_LOGS_PATH=./logs\r\nLOG_LEVEL=info\r\nTOKEN_CACHE_TTL=6900\r\n```\r\n\r\n## CLI Commands\r\n\r\n### `start` (default command)\r\n\r\nStart the server.\r\n\r\n```bash\r\naxyom-ui-starter-kit start [options]\r\n\r\nOptions:\r\n  -c, --config <path>      Path to configuration file (.json or .env)\r\n  -p, --port <number>      Server port (overrides config)\r\n  -h, --host <address>     Host to bind to (127.0.0.1 or 0.0.0.0)\r\n  -l, --log-level <level>  Log level (debug|info|warn|error)\r\n```\r\n\r\nExamples:\r\n\r\n```bash\r\n# Start with default configuration\r\naxyom-ui-starter-kit start\r\n\r\n# Start with custom config file\r\naxyom-ui-starter-kit start --config ./prod-config.json\r\n\r\n# Start on custom port\r\naxyom-ui-starter-kit start --port 8080\r\n\r\n# Start with debug logging\r\naxyom-ui-starter-kit start --log-level debug\r\n```\r\n\r\n### `config`\r\n\r\nDisplay current configuration with secrets masked.\r\n\r\n```bash\r\naxyom-ui-starter-kit config [options]\r\n\r\nOptions:\r\n  -c, --config <path>  Path to configuration file (.json or .env)\r\n```\r\n\r\nExample:\r\n\r\n```bash\r\naxyom-ui-starter-kit config\r\n```\r\n\r\n### `health`\r\n\r\nCheck if the server is running and healthy.\r\n\r\n```bash\r\naxyom-ui-starter-kit health [options]\r\n\r\nOptions:\r\n  -u, --url <url>  Server URL (default: http://localhost:3000)\r\n```\r\n\r\nExample:\r\n\r\n```bash\r\naxyom-ui-starter-kit health --url http://localhost:8080\r\n```\r\n\r\n## Web Interfaces\r\n\r\nOnce your server is running, navigate to `http://localhost:3000` to access the web interface.\r\n\r\n### Home Page (`/`)\r\n\r\nThe landing page provides quick navigation to all available features:\r\n- **AI Search** - Complete and component-based AI search interfaces\r\n- **Classic Search** - Traditional search interfaces\r\n- **AI Chat** - Interactive conversational search\r\n- **Unified Search** - Tabbed interface combining AI and classic search\r\n- **Configuration** - Web-based settings management\r\n\r\n### Search Views\r\n\r\n#### AI Search - Complete (`/app/ai-search-complete`)\r\nFull-featured AI-powered search interface with built-in styling and components.\r\n\r\n#### AI Search - Components (`/app/ai-search-components`)\r\nModular AI search components for custom integration into your own layouts.\r\n\r\n#### AI Chat (`/app/ai-chat`)\r\nInteractive chat interface for conversational search experiences.\r\n\r\n#### Classic Search - Complete (`/app/classic-search-complete`)\r\nTraditional search interface with comprehensive functionality.\r\n\r\n#### Classic Search - Components (`/app/classic-search-components`)\r\nComponent-based classic search for custom implementations.\r\n\r\n#### Unified Search - Tabs (`/app/unified-search-tabs`)\r\nTabbed interface that combines both AI and classic search in one view.\r\n\r\n### Configuration Management (`/config`)\r\n\r\nWeb-based interface for managing all server settings:\r\n- OIDC authentication credentials\r\n- Search configuration (client name, index, mode)\r\n- Server settings (port, host, log level)\r\n- Custom paths (views, logs)\r\n- Token cache configuration\r\n\r\nAll changes made through the web UI are automatically persisted and reconciled with your infrastructure configuration.\r\n\r\n### Health Check (`/health`)\r\n\r\nJSON endpoint for monitoring server status, uptime, and token cache statistics.\r\n\r\n## Customizing Views\r\n\r\nThe Axyom UI Server allows you to customize the search interfaces to match your brand and requirements.\r\n\r\n### Setting a Custom Views Path\r\n\r\n1. Navigate to the home page (`http://localhost:3000`)\r\n2. Enter your desired views path in the \"Customize Your Views\" section\r\n3. The server will copy default view files to your custom location\r\n5. Edit the HTML, CSS, and JavaScript files to match your brand\r\n6. Changes are automatically persisted across server restarts\r\n7. To revert changes, simply delete the HTML file. It will be replaced by the default file.\r\n\r\n### View Files\r\n\r\nAll search interfaces are standard HTML files that you can customize:\r\n- `AiSearchComplete.html` - Full AI search interface\r\n- `AiSearchComponents.html` - Modular AI search components\r\n- `AiChat.html` - Chat interface\r\n- `ClassicSearchComplete.html` - Complete classic search\r\n- `ClassicSearchComponents.html` - Classic search components\r\n- `UnifiedSearch-Tabs.html` - Unified tabbed interface\r\n\r\nEach file includes the Axyom Search SDK and can be modified to fit your design requirements.\r\n\r\n## Security Best Practices\r\n\r\n### Configuration Security\r\n\r\n- Never commit `axyom-credentials.json` or `.env` files to version control\r\n- Use the provided `.gitignore` to prevent accidental commits\r\n- Store secrets in secure locations (e.g., environment variables, secret managers)\r\n- Restrict file permissions on configuration files\r\n\r\n### Network Security\r\n\r\n- **Default:** Server listens on `127.0.0.1` (localhost only)\r\n- **Production:** Deploy behind a firewall, VPN, or reverse proxy\r\n- **Warning:** Only bind to `0.0.0.0` if you understand the security implications\r\n- No authentication is required for API endpoints (intended for internal network use)\r\n\r\n### Deployment Recommendations\r\n\r\n1. Run behind a reverse proxy (nginx, Apache)\r\n2. Use network-level security (VPN, private network)\r\n3. Implement rate limiting at the proxy level\r\n4. Monitor access logs\r\n5. Rotate client credentials regularly\r\n\r\n## Logging\r\n\r\nThe server outputs structured logs to help you monitor and troubleshoot issues.\r\n\r\n### Log Levels\r\n\r\nYou can control logging verbosity by setting `logLevel` in your configuration:\r\n\r\n- `error` - Only critical failures and startup errors\r\n- `warn` - Warnings plus errors (e.g., token refresh issues, configuration problems)\r\n- `info` - General information plus warnings and errors (default - server start, token generation)\r\n- `debug` - Detailed information for troubleshooting (includes request details, cache operations)\r\n\r\n### Changing Log Level\r\n\r\n**Via Configuration File:**\r\n```json\r\n{\r\n  \"logLevel\": \"debug\"\r\n}\r\n```\r\n\r\n**Via Web UI:**\r\nNavigate to `/config` and update the \"Log Level\" field.\r\n\r\n**Via CLI:**\r\n```bash\r\naxyom-ui-starter-kit start --log-level debug\r\n```\r\n\r\n## Troubleshooting\r\n\r\n### Server won't start\r\n\r\n1. Check configuration: `axyom-ui-starter-kit config`\r\n2. Verify credentials are correct\r\n3. Ensure OIDC issuer URL is accessible\r\n4. Check port is not already in use\r\n\r\n### Token generation fails\r\n\r\n1. Verify client credentials are valid\r\n2. Check OIDC provider is accessible\r\n3. Review logs with `--log-level debug`\r\n4. Ensure correct issuer URL format\r\n\r\n### Cannot connect to server\r\n\r\n1. Verify server is running: `axyom-ui-starter-kit health`\r\n2. Check firewall settings\r\n3. Ensure correct host/port configuration\r\n4. Review network security settings\r\n\r\n## License\r\n\r\nMIT\r\n\r\n## Author\r\n\r\nSymSoft Solutions, LLC\r\n\r\n## Support\r\n\r\nFor issues and questions, please contact Axyom support or file an issue in the project repository.\r\n","readmeFilename":"README.md"}