{"_id":"@1fe/starter-app","_rev":"6-1e23ad689575b4dd678109ce327fec54","name":"@1fe/starter-app","dist-tags":{"latest":"0.0.4"},"versions":{"0.0.1":{"name":"@1fe/starter-app","version":"0.0.1","_id":"@1fe/starter-app@0.0.1","maintainers":[{"name":"kun-li.chen.1fe","email":"kun-li.chen+npm@docusign.com"}],"dist":{"shasum":"c5c4b5bafc167d952914adb16666da859e5ef4db","tarball":"https://registry.npmjs.org/@1fe/starter-app/-/starter-app-0.0.1.tgz","fileCount":28,"integrity":"sha512-+HmKkNwb6IUsj4h2w1kiAlmhuZMmdtIj+L8P2YWfgbJH4FXTnP1oA54HTivmnhHwgiNg20afhsem7CVQLCv8Nw==","signatures":[{"sig":"MEYCIQCY5kGc/gcK4mahIWRE3vjsIaFTLQ1vF1AIzwYp6HM8ewIhAJ5OEKq/0YUDoyJEJkxUtNEUixTzqPA28VsXhXfCPzOd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17048416},"types":"dist/shell/index.d.ts","gitHead":"9cf87dc1fbe58e5b150679f8136efb279bc9271d","scripts":{"dev":"run-s client:dev server:dev","build":"yarn clean && yarn server:build && yarn client:build","clean":"npx rimraf dist","start":"node dist/server.js","prepack":"yarn build","client:dev":"npx webpack --config ./bundle/client/dev.js","server:dev":"node bundle/server/dev.js","client-types":"npx tsc --project ./tsconfig-shell.types.json","client:build":"cross-env npx webpack --config ./bundle/client/build.js","server:build":"tsc --project tsconfig.server.json --noEmit && node bundle/server/build.js","test:playwright":"playwright test","client-types:dev":"tsc-watch --project ./tsconfig-shell.types.json --onSuccess 'npx yalc push'","client-types:check":"yarn client-types && npx api-extractor run","client-types:extract":"yarn client-types && npx api-extractor run --local"},"_npmUser":{"name":"kun-li.chen.1fe","email":"kun-li.chen+npm@docusign.com"},"_npmVersion":"11.4.1","description":"> Quickly bootstrap a new project with Vite Boilerplate.","directories":{},"_nodeVersion":"22.15.0","dependencies":{"ejs":"^3.1.10","zod":"^3.25.36","react":"^18.3.1","dotenv":"^16.0.3","lodash":"^4.17.21","core-js":"^3.40.0","express":"^4.21.2","systemjs":"^6.15.1","react-dom":"^18.3.1","@1fe/shell":"0.0.1","@1fe/server":"0.0.1","workbox-core":"^7.3.0","react-refresh":"^0.16.0","serve-favicon":"^2.5.0","@emotion/react":"^11.14.0","@emotion/styled":"11.14.0","react-router-dom":"6.30.0","express-validator":"^7.0.1","workbox-expiration":"^7.3.0","workbox-precaching":"^7.3.0","workbox-strategies":"^7.3.0","@azure/app-configuration-provider":"^2.1.0"},"publishConfig":{"access":"restricted","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"yarn@4.9.1","devDependencies":{"vite":"^6.2.3","chalk":"^5.4.1","eslint":"8.57.1","esbuild":"0.19.5","webpack":"^5.97.1","prettier":"^3.5.3","cross-env":"^7.0.3","stylelint":"^14.0.0","ts-loader":"^9.5.2","@types/ejs":"^3.1.5","css-loader":"^7.1.2","typescript":"5.8.2","@babel/core":"^7.26.10","@types/node":"22.9.0","lint-staged":"^13.3.0","npm-run-all":"^4.1.5","ts-node-dev":"^2.0.0","webpack-cli":"^6.0.1","@types/react":"^18.2.62","babel-loader":"^9.2.1","concurrently":"^6.3.0","style-loader":"^4.0.0","@types/lodash":"^4.14.200","thread-loader":"^4.0.4","webpack-merge":"^6.0.1","@types/express":"^4.17.13","@changesets/cli":"^2.29.5","@types/systemjs":"^6.15.1","@playwright/test":"^1.51.1","@types/react-dom":"^18.2.19","webpack-dev-server":"^5.2.0","copy-webpack-plugin":"^12.0.2","esbuild-plugin-copy":"^2.1.1","@types/react-refresh":"^0","@types/serve-favicon":"^2.5.7","http-proxy-middleware":"^2.0.1","eslint-config-prettier":"^10.1.1","@typescript-eslint/parser":"^5.62.0","stylelint-config-prettier":"^9.0.3","stylelint-config-standard":"^23.0.0","progress-bar-webpack-plugin":"^2.1.0","@vitejs/plugin-react-refresh":"^1.3.6","@es-exec/esbuild-plugin-start":"^0.0.5","@typescript-eslint/eslint-plugin":"^5.62.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.15"},"_npmOperationalInternal":{"tmp":"tmp/starter-app_0.0.1_1754042135387_0.20712531587571403","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@1fe/starter-app","version":"0.0.2","_id":"@1fe/starter-app@0.0.2","maintainers":[{"name":"kun-li.chen.1fe","email":"kun-li.chen+npm@docusign.com"}],"dist":{"shasum":"32f215523aee198d83f428992ac2caf7a1bc7805","tarball":"https://registry.npmjs.org/@1fe/starter-app/-/starter-app-0.0.2.tgz","fileCount":30,"integrity":"sha512-RIQrmFy227sAvxCHiwe6CigIFfI1PF0ecfHiaKAS6wsFtOLClYk2S7URVZDNn3jwJbLF1IoHHLCwEvdQSK67+g==","signatures":[{"sig":"MEUCIQCbx633URYf6f6pl6GX7Hu8IArZGvT3iyBAdsSVQIZN5AIgGI2rH+2ZnZhKMwfHTgnRNymnfiwlspZAYYwg/F8P+MI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17029928},"types":"dist/shell/index.d.ts","gitHead":"9aa2965dc43bc8b5a958bed709fd607229ec21af","scripts":{"dev":"run-s client:dev server:dev","build":"yarn clean && yarn server:build && yarn client:build","clean":"rimraf dist","start":"node dist/server.js","prepack":"yarn build","client:dev":"npx webpack --config ./bundle/client/dev.js","server:dev":"node bundle/server/dev.js","client-types":"npx tsc --project ./tsconfig-shell.types.json","client:build":"cross-env npx webpack --config ./bundle/client/build.js","server:build":"tsc --project tsconfig.server.json --noEmit && node bundle/server/build.js","test:playwright":"playwright test","client-types:dev":"tsc-watch --project ./tsconfig-shell.types.json --onSuccess 'npx yalc push'","client-types:check":"yarn client-types && npx api-extractor run","client-types:extract":"yarn client-types && npx api-extractor run --local"},"_npmUser":{"name":"kun-li.chen.1fe","email":"kun-li.chen+npm@docusign.com"},"_npmVersion":"10.8.2","description":"A production-ready template for creating your own 1fe instance. This application serves as both the reference implementation powering [demo.1fe.com](https://demo.1fe.com) and as the git template used by `create-1fe-app`.","directories":{},"_nodeVersion":"20.19.4","dependencies":{"ejs":"^3.1.10","zod":"^3.25.36","react":"^18.3.1","dotenv":"^16.0.3","lodash":"^4.17.21","core-js":"^3.40.0","express":"^4.21.2","systemjs":"^6.15.1","react-dom":"^18.3.1","@1fe/shell":"0.0.2","@1fe/server":"0.0.2","workbox-core":"^7.3.0","react-refresh":"^0.16.0","serve-favicon":"^2.5.0","@emotion/react":"^11.14.0","@emotion/styled":"11.14.0","react-router-dom":"6.30.0","express-validator":"^7.0.1","workbox-expiration":"^7.3.0","workbox-precaching":"^7.3.0","workbox-strategies":"^7.3.0","@azure/app-configuration-provider":"^2.1.0"},"publishConfig":{"access":"restricted","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"yarn@4.9.1","devDependencies":{"vite":"^6.2.3","chalk":"^5.4.1","eslint":"8.57.1","rimraf":"^6.0.1","esbuild":"0.19.5","webpack":"^5.97.1","prettier":"^3.5.3","cross-env":"^7.0.3","stylelint":"^14.0.0","ts-loader":"^9.5.2","@types/ejs":"^3.1.5","css-loader":"^7.1.2","typescript":"5.8.2","@babel/core":"^7.26.10","@types/node":"22.9.0","lint-staged":"^13.3.0","npm-run-all":"^4.1.5","ts-node-dev":"^2.0.0","webpack-cli":"^6.0.1","@types/react":"^18.2.62","babel-loader":"^9.2.1","concurrently":"^6.3.0","style-loader":"^4.0.0","@types/lodash":"^4.14.200","thread-loader":"^4.0.4","webpack-merge":"^6.0.1","@types/express":"^4.17.13","@changesets/cli":"^2.29.5","@types/systemjs":"^6.15.1","@playwright/test":"^1.51.1","@types/react-dom":"^18.2.19","webpack-dev-server":"^5.2.0","copy-webpack-plugin":"^12.0.2","esbuild-plugin-copy":"^2.1.1","@types/react-refresh":"^0","@types/serve-favicon":"^2.5.7","http-proxy-middleware":"^2.0.1","eslint-config-prettier":"^10.1.1","@typescript-eslint/parser":"^5.62.0","stylelint-config-prettier":"^9.0.3","stylelint-config-standard":"^23.0.0","progress-bar-webpack-plugin":"^2.1.0","@vitejs/plugin-react-refresh":"^1.3.6","@es-exec/esbuild-plugin-start":"^0.0.5","@typescript-eslint/eslint-plugin":"^5.62.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.15"},"_npmOperationalInternal":{"tmp":"tmp/starter-app_0.0.2_1754672367537_0.9518179438348775","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@1fe/starter-app","version":"0.0.3","_id":"@1fe/starter-app@0.0.3","maintainers":[{"name":"kun-li.chen.1fe","email":"kun-li.chen+npm@docusign.com"},{"name":"dsdevcenter","email":"devcenter@docusign.com"}],"dist":{"shasum":"c46139dcd9950e8ab58af3cf71f7feee058c1418","tarball":"https://registry.npmjs.org/@1fe/starter-app/-/starter-app-0.0.3.tgz","fileCount":30,"integrity":"sha512-/rLyCq4GX6VHJdNJ3dHHs9ojayh805DjG9kPlUlaAcYNAvo7ZVjrALBwreGEl4/bkr8KzV+/EFlLquWvCdiUDw==","signatures":[{"sig":"MEYCIQCAakGJWaAJm7GAz3eVDRWPbpZI7YjkKurjN6u5KLbebQIhALnj7F7FgFYm8GrbCry0ihKZM40YoC/UtsOoNZ6lVrZZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17030157},"types":"dist/shell/index.d.ts","gitHead":"a90a876e9f20400b02332ab411a1832baaa7dd16","scripts":{"dev":"run-s client:dev server:dev","build":"yarn clean && yarn server:build && yarn client:build","clean":"rimraf dist","start":"node dist/server.js","prepack":"yarn build","client:dev":"npx webpack --config ./bundle/client/dev.js","server:dev":"node bundle/server/dev.js","client-types":"npx tsc --project ./tsconfig-shell.types.json","client:build":"cross-env npx webpack --config ./bundle/client/build.js","server:build":"tsc --project tsconfig.server.json --noEmit && node bundle/server/build.js","test:playwright":"playwright test","client-types:dev":"tsc-watch --project ./tsconfig-shell.types.json --onSuccess 'npx yalc push'","client-types:check":"yarn client-types && npx api-extractor run","client-types:extract":"yarn client-types && npx api-extractor run --local"},"_npmUser":{"name":"dsdevcenter","email":"devcenter@docusign.com"},"_npmVersion":"10.8.2","description":"A production-ready template for creating your own 1fe instance. This application serves as both the reference implementation powering [demo.1fe.com](https://demo.1fe.com) and as the git template used by `create-1fe-app`.","directories":{},"_nodeVersion":"20.19.4","dependencies":{"ejs":"^3.1.10","zod":"^3.25.36","react":"^18.3.1","dotenv":"^16.0.3","lodash":"^4.17.21","core-js":"^3.40.0","express":"^4.21.2","systemjs":"^6.15.1","react-dom":"^18.3.1","@1fe/shell":"0.0.2","@1fe/server":"0.0.2","workbox-core":"^7.3.0","react-refresh":"^0.16.0","serve-favicon":"^2.5.0","@emotion/react":"^11.14.0","@emotion/styled":"11.14.0","react-router-dom":"6.30.0","express-validator":"^7.0.1","workbox-expiration":"^7.3.0","workbox-precaching":"^7.3.0","workbox-strategies":"^7.3.0","@azure/app-configuration-provider":"^2.1.0"},"publishConfig":{"access":"restricted","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"yarn@4.9.1","devDependencies":{"vite":"^6.2.3","chalk":"^5.4.1","eslint":"8.57.1","rimraf":"^6.0.1","esbuild":"0.19.5","webpack":"^5.97.1","prettier":"^3.5.3","cross-env":"^7.0.3","stylelint":"^14.0.0","ts-loader":"^9.5.2","@types/ejs":"^3.1.5","css-loader":"^7.1.2","typescript":"5.8.2","@babel/core":"^7.26.10","@types/node":"22.9.0","lint-staged":"^13.3.0","npm-run-all":"^4.1.5","ts-node-dev":"^2.0.0","webpack-cli":"^6.0.1","@types/react":"^18.2.62","babel-loader":"^9.2.1","concurrently":"^6.3.0","style-loader":"^4.0.0","@types/lodash":"^4.14.200","thread-loader":"^4.0.4","webpack-merge":"^6.0.1","@types/express":"^4.17.13","@changesets/cli":"^2.29.5","@types/systemjs":"^6.15.1","@playwright/test":"^1.51.1","@types/react-dom":"^18.2.19","webpack-dev-server":"^5.2.0","copy-webpack-plugin":"^12.0.2","esbuild-plugin-copy":"^2.1.1","@types/react-refresh":"^0","@types/serve-favicon":"^2.5.7","http-proxy-middleware":"^2.0.1","eslint-config-prettier":"^10.1.1","@typescript-eslint/parser":"^5.62.0","stylelint-config-prettier":"^9.0.3","stylelint-config-standard":"^23.0.0","progress-bar-webpack-plugin":"^2.1.0","@vitejs/plugin-react-refresh":"^1.3.6","@es-exec/esbuild-plugin-start":"^0.0.5","@typescript-eslint/eslint-plugin":"^5.62.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.15"},"_npmOperationalInternal":{"tmp":"tmp/starter-app_0.0.3_1754937033059_0.16245482752129337","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@1fe/starter-app","version":"0.0.4","repository":{"type":"git","url":"git+https://github.com/docusign/1fe-starter-app.git"},"types":"dist/shell/index.d.ts","scripts":{"clean":"rimraf dist","dev":"run-s client:dev server:dev","client:dev":"npx webpack --config ./bundle/client/dev.js","server:dev":"node bundle/server/dev.js","client:build":"cross-env npx webpack --config ./bundle/client/build.js","client-types":"npx tsc --project ./tsconfig-shell.types.json","client-types:dev":"tsc-watch --project ./tsconfig-shell.types.json --onSuccess 'npx yalc push'","client-types:extract":"yarn client-types && npx api-extractor run --local","client-types:check":"yarn client-types && npx api-extractor run","server:build":"tsc --project tsconfig.server.json --noEmit && node bundle/server/build.js","build":"yarn clean && yarn server:build && yarn client:build","test:playwright":"playwright test","start":"node dist/server.js","prepack":"yarn build"},"devDependencies":{"@babel/core":"^7.26.10","@changesets/cli":"^2.29.5","@es-exec/esbuild-plugin-start":"^0.0.5","@playwright/test":"^1.51.1","@pmmmwh/react-refresh-webpack-plugin":"^0.5.15","@types/ejs":"^3.1.5","@types/express":"^4.17.13","@types/lodash":"^4.14.200","@types/node":"22.9.0","@types/react":"^18.2.62","@types/react-dom":"^18.2.19","@types/react-refresh":"^0","@types/serve-favicon":"^2.5.7","@types/systemjs":"^6.15.1","@typescript-eslint/eslint-plugin":"^5.62.0","@typescript-eslint/parser":"^5.62.0","@vitejs/plugin-react-refresh":"^1.3.6","babel-loader":"^9.2.1","chalk":"^5.4.1","concurrently":"^6.3.0","copy-webpack-plugin":"^12.0.2","cross-env":"^7.0.3","css-loader":"^7.1.2","esbuild":"0.19.5","esbuild-plugin-copy":"^2.1.1","eslint":"8.57.1","eslint-config-prettier":"^10.1.1","http-proxy-middleware":"^2.0.1","lint-staged":"^13.3.0","npm-run-all":"^4.1.5","prettier":"^3.5.3","progress-bar-webpack-plugin":"^2.1.0","rimraf":"^6.0.1","style-loader":"^4.0.0","stylelint":"^14.0.0","stylelint-config-prettier":"^9.0.3","stylelint-config-standard":"^23.0.0","thread-loader":"^4.0.4","ts-loader":"^9.5.2","ts-node-dev":"^2.0.0","typescript":"5.8.2","vite":"^6.2.3","webpack":"^5.97.1","webpack-cli":"^6.0.1","webpack-dev-server":"^5.2.0","webpack-merge":"^6.0.1"},"dependencies":{"@1fe/server":"^0.1.2","@1fe/shell":"^0.1.2","@azure/app-configuration-provider":"^2.1.0","@emotion/react":"^11.14.0","@emotion/styled":"11.14.0","core-js":"^3.40.0","dotenv":"^16.0.3","ejs":"^3.1.10","express":"^4.21.2","express-validator":"^7.0.1","lodash":"^4.17.21","react":"^18.3.1","react-dom":"^18.3.1","react-refresh":"^0.16.0","react-router-dom":"6.30.0","serve-favicon":"^2.5.0","systemjs":"^6.15.1","workbox-core":"^7.3.0","workbox-expiration":"^7.3.0","workbox-precaching":"^7.3.0","workbox-strategies":"^7.3.0","zod":"^3.25.36"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"packageManager":"yarn@4.9.1","gitHead":"6bda3e2f237d41a324e5827dfb790bcf63f4ba32","_id":"@1fe/starter-app@0.0.4","description":"A production-ready template for creating your own 1fe instance. This application serves as both the reference implementation powering [demo.1fe.com](https://demo.1fe.com) and as the git template used by `create-1fe-app`.","bugs":{"url":"https://github.com/docusign/1fe-starter-app/issues"},"homepage":"https://github.com/docusign/1fe-starter-app#readme","_nodeVersion":"22.20.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-kq3eKOzMe6J0vOg4p88Q5XbUWwpupVik9gX+zlzcOOonpfRgEPla9xzTo6wm1fOnHIt+eWcB2DHO/1osVUp6Cg==","shasum":"afb3ae7830af101aee437776a1bf63cdd5e4d920","tarball":"https://registry.npmjs.org/@1fe/starter-app/-/starter-app-0.0.4.tgz","fileCount":30,"unpackedSize":17033504,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@1fe%2fstarter-app@0.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCWGJWb1n36JEvvNKyo1/npyiq6htzBBW/m8IwABsrOTwIhAPOj1/LtROFo8tC+NzIBmFyYwF5etD1z2L/EZD18Gy9+"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a6e893ee-98c7-476b-91a4-78e2805e5ffe"}},"directories":{},"maintainers":[{"name":"kun-li.chen.1fe","email":"kun-li.chen+npm@docusign.com"},{"name":"dsdevcenter","email":"devcenter@docusign.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/starter-app_0.0.4_1761697418297_0.17915664840736611"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-01T09:55:34.920Z","modified":"2025-10-29T00:23:39.069Z","0.0.1":"2025-08-01T09:55:35.695Z","0.0.2":"2025-08-08T16:59:27.817Z","0.0.3":"2025-08-11T18:30:33.296Z","0.0.4":"2025-10-29T00:23:38.605Z"},"description":"A production-ready template for creating your own 1fe instance. This application serves as both the reference implementation powering [demo.1fe.com](https://demo.1fe.com) and as the git template used by `create-1fe-app`.","maintainers":[{"name":"kun-li.chen.1fe","email":"kun-li.chen+npm@docusign.com"},{"name":"dsdevcenter","email":"devcenter@docusign.com"}],"readme":"# 1fe Starter App 🚀\n\nA production-ready template for creating your own 1fe instance. This application serves as both the reference implementation powering [demo.1fe.com](https://demo.1fe.com) and as the git template used by `create-1fe-app`.\n\n## 🎯 What is this?\n\nThis starter app demonstrates how to build a complete 1fe instance using `@1fe/server` and `@1fe/shell`. It includes:\n\n- **Examples for live configurations** for live configurations, CSP settings, and environment management\n- **Two environments**: Integration and Production setups\n- **Example widgets** and plugin integrations\n\n## 📋 Prerequisites\n\n- **Node.js** `>= 22`\n- **Yarn** (package manager)\n\n## 🚀 Quick Start\n\n### 1. Using create-1fe-app (Recommended)\n\n```bash\nnpx @1fe/create-1fe-app my-1fe-app\ncd my-1fe-app\nyarn install\nyarn dev\n```\n\n### 2. Access Your Application by going to <http://localhost:3001>\n\n## 📦 Project Structure\n\n```\nsrc/\n├── configs/\n│   ├── ecosystem-configs.ts    # Live configurations\n│   ├── critical-libs.ts        # Critical library URLs\n│   └── env.ts                  # Environment configuration\n├── csp-configs.ts              # Content Security Policy settings\n├── server.ts                   # Express server setup\n├── shell/                      # Shell components and utilities\n└── public/                     # Static assets\n```\n\n## ⚙️ Configuration\n\n### Environment Variables\n\nCreate a `.env` file based on `.env.example`:\n\n| Variable              | Description      | Default       |\n| --------------------- | ---------------- | ------------- |\n| `PORT`                | Server port      | `3001`        |\n| `NODE_ENV`            | Environment mode | `development` |\n| `SERVER_BUILD_NUMBER` | Build identifier | `local`       |\n\n### Live Configurations\n\nUpdate `src/configs/ecosystem-configs.ts` to point to your CDN:\n\n```typescript\nexport const configManagement: OneFEConfigManagement = {\n  widgetVersions: {\n    url: 'https://your-cdn.com/configs/widget-versions.json',\n  },\n  libraryVersions: {\n    url: 'https://your-cdn.com/configs/lib-versions.json',\n  },\n  dynamicConfigs: {\n    url: 'https://your-cdn.com/configs/live.json',\n  },\n  refreshMs: 30 * 1000,\n};\n```\n\n### CSP Configuration\n\nModify `src/csp-configs.ts` to allow your CDN domains:\n\n```typescript\nexport const cspConfigs = {\n  'script-src': [\n    \"'self'\",\n    \"'unsafe-inline'\",\n    'https://your-cdn.com',\n    // ... other sources\n  ],\n  // ... other CSP directives\n};\n```\n\n## 🛠️ Development Commands\n\n```bash\n# Start development server (client + server)\nyarn dev\n\n# Build for production\nyarn build\n\n# Start production server\nyarn start\n\n# Run tests\nyarn test\n\n# Type checking\nyarn typecheck\n\n# Linting\nyarn lint\n```\n\n## 🌍 Deployment\n\nThis starter app can be deployed to any platform that supports Node.js applications:\n\n### Deploy to Render\n\n[![Deploy to Render](https://render.com/images/deploy-to-render-button.svg)](https://render.com/deploy?repo=https://github.com/docusign/1fe/1fe-starter-app)\n\n### Deploy to Heroku\n\n[![Deploy to Heroku](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy?template=https://github.com/docusign/1fe/1fe-starter-app)\n\n### Deploy to Vercel\n\n```bash\nyarn global add vercel\nvercel --prod\n```\n\n### Deploy to Railway\n\n```bash\nyarn global add @railway/cli\nrailway deploy\n```\n\n### Deploy to AWS/Azure/GCP\n\nFollow the respective platform documentation for Node.js applications. The built application is a standard Express.js server.\n\n## 🔗 Widget Integration\n\n### Adding New Widgets\n\n1. **Build your widget** using [1fe-widget-starter-kit](https://github.com/docusign/1fe-widget-starter-kit)\n2. **Deploy widget assets** to your CDN\n3. **Update widget-versions.json** with your widget's information\n4. **Configure the widget** in your live.json file\n5. **Update CSP settings** if needed for new domains\n\n### Example Widget Configuration\n\n```json\n// In your live.json\n{\n  \"widgets\": {\n    \"basePrefix\": \"https://your-cdn.com/widgets/\",\n    \"configs\": [\n      {\n        \"widgetId\": \"@your-org/your-widget\",\n        \"plugin\": {\n          \"enabled\": true,\n          \"route\": \"/your-widget\"\n        }\n      }\n    ]\n  }\n}\n```\n\n## 🔧 Customization\n\n### Branding & Styling\n\n- Update `src/shell/components/` for custom layout components\n- Modify CSS variables in your shell styles\n- Replace favicon and other assets in `src/public/`\n\n### Adding Custom Utilities\n\n- Extend the shell utilities in `src/shell/utils/`\n- Update the platform props interface\n- Ensure new utilities are available to widgets via the sandbox\n\n### Environment-Specific Configuration\n\n- Create environment-specific config files\n- Use environment variables for sensitive data\n- Set up different CDN endpoints per environment\n\n## 🤝 Related Projects\n\n- **[1fe](https://github.com/docusign/1fe)** - Core 1fe packages and CLI tools\n- **[1fe-widget-starter-kit](https://github.com/docusign/1fe-widget-starter-kit)** - Template for building widgets\n- **[1fe-playground](https://github.com/docusign/1fe-playground)** - Development sandbox\n- **[1fe-ci-cd](https://github.com/docusign/1fe-ci-cd)** - CI/CD pipeline templates\n\n## 📖 Documentation\n\n- **[1fe Documentation](https://1fe.com/)** - Complete platform documentation\n- **[Getting Started Guide](https://1fe.com/start-here)** - Step-by-step setup\n- **[Architecture Overview](https://1fe.com/main-concepts/what-is-1fe)** - How 1fe works\n- **[Deployment Guide](https://1fe.com/getting-started/deploy-poc)** - Production deployment\n\n## 🐛 Troubleshooting\n\n### Common Issues\n\n**CSP Errors**: Make sure your CDN domains are added to `csp-configs.ts`\n**Widget Loading Failures**: Verify your live configurations are accessible and valid\n**Build Errors**: Ensure all dependencies are installed and Node.js version is >= 22\n\n### Getting Help\n\n- Check the [documentation](https://1fe.com/start-here/)\n- Search [existing issues](https://github.com/docusign/1fe/issues)\n- Ask questions in [GitHub Discussions](https://github.com/docusign/1fe/discussions)\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n---\n\n**Ready to build your 1fe instance?** Check out our [comprehensive documentation](https://1fe.com/start-here/) or explore the [live demo](https://demo.1fe.com)!\n","readmeFilename":"README.md","homepage":"https://github.com/docusign/1fe-starter-app#readme","repository":{"type":"git","url":"git+https://github.com/docusign/1fe-starter-app.git"},"bugs":{"url":"https://github.com/docusign/1fe-starter-app/issues"}}