{"_id":"@apeiromont/opshop-sdk","_rev":"16-6b639dbda02b78d18f0cd02ee79954df","name":"@apeiromont/opshop-sdk","dist-tags":{"latest":"3.0.5"},"versions":{"3.0.2":{"name":"@apeiromont/opshop-sdk","version":"3.0.2","keywords":["internal tool","app","ui","ui builder"],"license":"MIT","_id":"@apeiromont/opshop-sdk@3.0.2","maintainers":[{"name":"apeiromontsys","email":"sys@apeiromont.com"},{"name":"ianatha","email":"ian@atha.io"}],"homepage":"https://opshop.apeiromont.com","bugs":{"url":"https://github.com/apeiromont/opshop-sdk/issues"},"dist":{"shasum":"bb1db84538e4180df70821c0e60c7b7fadbdff64","tarball":"https://registry.npmjs.org/@apeiromont/opshop-sdk/-/opshop-sdk-3.0.2.tgz","fileCount":96,"integrity":"sha512-ft4jtgq02CHOP2OwaUczf8jsGMEIqyJx12hly9sNnvSxy4EPup/WkHH6NiTaUFjz6mxmGqYK9RASUM2Ow8Gg0w==","signatures":[{"sig":"MEYCIQDXjfr59G8csW1XSm+euteLYcLPrnRm7OPNaHQV5v1iXgIhAO9MN434siDdqfQWCNgQnB91m5xzL9aEsMtLpAzcYpKF","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1083905},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=12.17.0"},"gitHead":"fe3d92addfaaa138470092eb7b2c62b99e562911","scripts":{"dev":"nodemon --watch src -e ts src/examples/${1:-basic}/index.ts","tar":"yarn pack","build":"tsc -p tsconfig.without-examples.json","check":"tsc --noEmit","demo:basic":"node ./dist/examples/basic/index.js"},"_npmUser":{"name":"apeiromontsys","email":"sys@apeiromont.com"},"repository":{"url":"git+https://github.com/apeiromont/opshop-sdk.git","type":"git"},"_npmVersion":"10.8.2","description":"The frontendless framework for high growth companies. Opshop automatically generates apps by inlining the UI in your backend code. It's a faster and more maintainable way to build internal tools, rapid prototypes, and more.","directories":{},"resolutions":{"ts-node":"^10.9.2"},"_nodeVersion":"22.8.0","dependencies":{"ws":"^8.18.0","evt":"^2.5.7","zod":"^3.23.8","uuid":"^9.0.0","superjson":"^1.9.1","cross-fetch":"^3.1.5","@brillout/import":"^0.2.2"},"_hasShrinkwrap":false,"devDependencies":{"dotenv":"^16.3.1","nodemon":"^2.0.20","ts-node":"^10.9.2","@types/ws":"^8.5.12","typescript":"^5.6.3","@types/node":"^22.7.6","@types/uuid":"^10.0.0","@types/dedent":"^0.7.0","@faker-js/faker":"^7.3.0","@aws-sdk/client-s3":"^3.135.0","@aws-sdk/s3-request-presigner":"^3.135.0"},"_npmOperationalInternal":{"tmp":"tmp/opshop-sdk_3.0.2_1729194668211_0.03577441375626789","host":"s3://npm-registry-packages"}},"3.0.3":{"name":"@apeiromont/opshop-sdk","version":"3.0.3","keywords":["internal tool","app","ui","ui builder"],"license":"MIT","_id":"@apeiromont/opshop-sdk@3.0.3","maintainers":[{"name":"apeiromontsys","email":"sys@apeiromont.com"},{"name":"ianatha","email":"ian@atha.io"}],"homepage":"https://opshop.apeiromont.com","bugs":{"url":"https://github.com/apeiromont/opshop-sdk/issues"},"dist":{"shasum":"caa46957e8728622aa67daeb81bd0fa8627db287","tarball":"https://registry.npmjs.org/@apeiromont/opshop-sdk/-/opshop-sdk-3.0.3.tgz","fileCount":96,"integrity":"sha512-gLA1dEGFupB+Jwsz8OmJutK4A4ANn4mupEZcJ0rmICGza4/AZ5cvKfSB2V2Op8dpgvWDaNvY5EHDZ3ehvzQsCw==","signatures":[{"sig":"MEYCIQCQoDMT95WMfSqFRUmVJ8m9BcJFW3MD2yGZwcYHmTPq6QIhAKn5O3GeJI0XfxPbMsfex27n8ZRrUJJKSejKu+jE2hZ7","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1083905},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=12.17.0"},"gitHead":"a40d56b7d6dae6eb35c86d6f300d4c3a6cefcda7","scripts":{"dev":"nodemon --watch src -e ts src/examples/${1:-basic}/index.ts","tar":"yarn pack","build":"tsc -p tsconfig.without-examples.json","check":"tsc --noEmit","demo:basic":"node ./dist/examples/basic/index.js"},"_npmUser":{"name":"apeiromontsys","email":"sys@apeiromont.com"},"repository":{"url":"git+https://github.com/apeiromont/opshop-sdk.git","type":"git"},"_npmVersion":"10.8.2","description":"The frontendless framework for high growth companies. Opshop automatically generates apps by inlining the UI in your backend code. It's a faster and more maintainable way to build internal tools, rapid prototypes, and more.","directories":{},"resolutions":{"ts-node":"^10.9.2"},"_nodeVersion":"22.8.0","dependencies":{"ws":"^8.18.0","evt":"^2.5.7","zod":"^3.23.8","uuid":"^9.0.0","superjson":"^1.9.1","cross-fetch":"^3.1.5","@brillout/import":"^0.2.2"},"_hasShrinkwrap":false,"devDependencies":{"dotenv":"^16.3.1","nodemon":"^2.0.20","ts-node":"^10.9.2","@types/ws":"^8.5.12","typescript":"^5.6.3","@types/node":"^22.7.6","@types/uuid":"^10.0.0","@types/dedent":"^0.7.0","@faker-js/faker":"^7.3.0","@aws-sdk/client-s3":"^3.135.0","@aws-sdk/s3-request-presigner":"^3.135.0"},"_npmOperationalInternal":{"tmp":"tmp/opshop-sdk_3.0.3_1729194778195_0.12408092556380979","host":"s3://npm-registry-packages"}},"3.0.4":{"name":"@apeiromont/opshop-sdk","version":"3.0.4","keywords":["internal tool","app","ui","ui builder"],"license":"MIT","_id":"@apeiromont/opshop-sdk@3.0.4","maintainers":[{"name":"apeiromontsys","email":"sys@apeiromont.com"}],"homepage":"https://opshop.apeiromont.com","bugs":{"url":"https://github.com/apeiromont/opshop-sdk/issues"},"dist":{"shasum":"da2549fa1e959667174bd37481446659158c02df","tarball":"https://registry.npmjs.org/@apeiromont/opshop-sdk/-/opshop-sdk-3.0.4.tgz","fileCount":93,"integrity":"sha512-0Say86xisuOIjyHtCGAm6uLjnhUGYdFdKvM5vToTmnlRyAaya/eeMXlxx8B4Mxn/kePTRY8cfbGK/R8xGuWIlQ==","signatures":[{"sig":"MEUCIQDw7dgZoARVCWq0onUdIlsU5LTSq7B9kKUtzZBXTCwqdQIgBntE7DDjP2y6BlPkmtjWyHsfGL44DP+N/dH5OhwxPuE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1000749},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=12.17.0"},"gitHead":"704430b1b8e6615d22e0cce13a9efeb6f93849fa","scripts":{"dev":"nodemon --watch src -e ts src/examples/${1:-basic}/index.ts","tar":"yarn pack","build":"tsc -p tsconfig.without-examples.json","check":"tsc --noEmit","demo:basic":"node ./dist/examples/basic/index.js"},"_npmUser":{"name":"apeiromontsys","email":"sys@apeiromont.com"},"repository":{"url":"git+https://github.com/apeiromont/opshop-sdk.git","type":"git"},"_npmVersion":"11.5.1","description":"The frontendless framework for high growth companies. Opshop automatically generates apps by inlining the UI in your backend code. It's a faster and more maintainable way to build internal tools, rapid prototypes, and more.","directories":{},"resolutions":{"ts-node":"^10.9.2"},"_nodeVersion":"22.11.0","dependencies":{"ws":"^8.18.0","evt":"^2.5.7","zod":"^3.23.8","uuid":"^9.0.0","superjson":"^1.9.1","cross-fetch":"^3.1.5","@brillout/import":"^0.2.2"},"_hasShrinkwrap":false,"packageManager":"yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e","devDependencies":{"dotenv":"^16.3.1","nodemon":"^2.0.20","ts-node":"^10.9.2","@types/ws":"^8.5.12","typescript":"^5.6.3","@types/node":"^22.7.6","@types/uuid":"^10.0.0","@types/dedent":"^0.7.0","@faker-js/faker":"^7.3.0","@aws-sdk/client-s3":"^3.135.0","@aws-sdk/s3-request-presigner":"^3.135.0"},"_npmOperationalInternal":{"tmp":"tmp/opshop-sdk_3.0.4_1759512836143_0.10303225372283564","host":"s3://npm-registry-packages-npm-production"}},"3.0.5":{"name":"@apeiromont/opshop-sdk","version":"3.0.5","description":"The frontendless framework for high growth companies. Opshop automatically generates apps by inlining the UI in your backend code. It's a faster and more maintainable way to build internal tools, rapid prototypes, and more.","homepage":"https://opshop.apeiromont.com","repository":{"type":"git","url":"git+https://github.com/apeiromont/opshop-sdk.git"},"bugs":{"url":"https://github.com/apeiromont/opshop-sdk/issues"},"keywords":["internal tool","app","ui","ui builder"],"license":"MIT","engines":{"node":">=12.17.0"},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"tar":"yarn pack","check":"tsc --noEmit","build":"tsc -p tsconfig.without-examples.json","demo:basic":"node ./dist/examples/basic/index.js","dev":"nodemon --watch src -e ts src/examples/${1:-basic}/index.ts"},"dependencies":{"@brillout/import":"^0.2.2","cross-fetch":"^3.1.5","evt":"^2.5.7","superjson":"^1.9.1","uuid":"^9.0.0","ws":"^8.18.0","zod":"^3.23.8"},"devDependencies":{"@aws-sdk/client-s3":"^3.135.0","@aws-sdk/s3-request-presigner":"^3.135.0","@faker-js/faker":"^7.3.0","@types/dedent":"^0.7.0","@types/node":"^22.7.6","@types/uuid":"^10.0.0","@types/ws":"^8.5.12","dotenv":"^16.3.1","nodemon":"^2.0.20","ts-node":"^10.9.2","typescript":"^5.6.3"},"resolutions":{"ts-node":"^10.9.2"},"packageManager":"yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e","_id":"@apeiromont/opshop-sdk@3.0.5","gitHead":"15363f8debc14f6cb8804e6dd46938409ee67dca","_nodeVersion":"22.11.0","_npmVersion":"11.5.1","dist":{"integrity":"sha512-G9edZZDzXytBsyIfcCjkz71/CrcFPEMpkIUy9mKgiAgKx61gKRrxkSqdwqIk5rm446u6m6VJlvFs0knhhuJDWA==","shasum":"b906f2a768b5c5f4d38315532d027551462cb434","tarball":"https://registry.npmjs.org/@apeiromont/opshop-sdk/-/opshop-sdk-3.0.5.tgz","fileCount":93,"unpackedSize":1000749,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCuBY4oqrP+qlwAepS7GXX1pYEqhxR4t/0pfeyW8cSICwIhAN09/6lDfj2lT7K4X1SfNaS8Nk4h0801HNZchF++7w8M"}]},"_npmUser":{"name":"apeiromontsys","email":"sys@apeiromont.com"},"directories":{},"maintainers":[{"name":"apeiromontsys","email":"sys@apeiromont.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/opshop-sdk_3.0.5_1759569897074_0.8136268762405598"},"_hasShrinkwrap":false}},"time":{"created":"2024-10-17T19:51:08.107Z","modified":"2025-10-04T09:24:57.579Z","0.0.1":"2024-01-30T02:43:13.653Z","0.0.2":"2024-01-30T02:46:45.849Z","0.0.3":"2024-01-30T02:48:23.954Z","3.0.1":"2024-01-30T14:14:53.103Z","3.0.2":"2024-10-17T19:51:08.487Z","3.0.3":"2024-10-17T19:52:58.473Z","3.0.4":"2025-10-03T17:33:56.342Z","3.0.5":"2025-10-04T09:24:57.356Z"},"bugs":{"url":"https://github.com/apeiromont/opshop-sdk/issues"},"license":"MIT","homepage":"https://opshop.apeiromont.com","keywords":["internal tool","app","ui","ui builder"],"repository":{"type":"git","url":"git+https://github.com/apeiromont/opshop-sdk.git"},"description":"The frontendless framework for high growth companies. Opshop automatically generates apps by inlining the UI in your backend code. It's a faster and more maintainable way to build internal tools, rapid prototypes, and more.","maintainers":[{"name":"apeiromontsys","email":"sys@apeiromont.com"}],"readme":"# Opshop Node.js SDK\n\n[![npm version](https://img.shields.io/npm/v/@apeiromont/opshop-sdk?style=flat)](https://www.npmjs.com/package/@apeiromont/opshop-sdk) [![Documentation](https://img.shields.io/badge/documentation-informational)](https://opshop.apeiromont.com/docs)\n\n[Opshop](https://opshop.apeiromont.com) is a maintained fork of the Interval project. While building upon Interval’s foundation, Opshop aims to enhance flexibility and add new features tailored to teams who want more control within their Node.js codebase for building internal tools.\n\n[Opshop](https://opshop.apeiromont.com) lets you quickly build internal web apps (think: customer support tools, admin panels, etc.) just by writing backend Node.js code.\n\nThis is our Node.js SDK which connects to the opshop.apeiromont.com web app. If you don't have an Opshop account, you can [create one here](https://opshop.apeiromont.com/signup). All core features are free to use.\n\n## Why choose Opshop?\n\n_\"Node code > no-code\"_\n\nOpshop is an alternative to no-code/low-code UI builders. Modern frontend development is inherently complicated, and teams rightfully want to spend minimal engineering resources on internal dashboards. No-code tools attempt to solve this problem by allowing you to build UIs in a web browser without writing any frontend code.\n\nWe don't think this is the right solution. **Building UIs for mission-critical tools in your web browser** — often by non-technical teammates, outside of your codebase, without versioning or code review — **is an anti-pattern.** Apps built in this manner are brittle and break in unexpected ways.\n\nWith Opshop, **all of the code for generating your web UIs lives within your app's codebase.** Tools built with Opshop (we call these [actions](https://opshop.apeiromont.com/docs/concepts/actions)) are just asynchronous functions that run in your backend. Because these are plain old functions, you can access the complete power of your Node app. You can loop, conditionally branch, access shared functions, and so on. When you need to request input or display output, `await` any of our [I/O methods](https://opshop.apeiromont.com/docs/io-methods/) to present a form to the user and your script will pause execution until input is received.\n\nHere's a simple app with a single \"Hello, world\" action:\n\n```ts\nimport Opshop from '@apeiromont/opshop-sdk'\n\nconst opshop = new Opshop({\n  apiKey: '<YOUR API KEY>',\n  actions: {\n    hello_world: async () => {\n      const name = await io.input.text('Your name')\n      return `Hello, ${name}`\n    },\n  },\n})\n\nopshop.listen()\n```\n\nOpshop:\n\n- Makes creating full-stack apps as easy as writing CLI scripts.\n- Can scale from a handful of scripts to robust multi-user dashboards.\n- Lets you build faster than no-code, without leaving your codebase & IDE.\n\nWith Opshop, you do not need to:\n\n- Write REST or GraphQL API endpoints to connect internal functionality to no-code tools.\n- Give Opshop write access to your database (or give us _any_ of your credentials, for that matter).\n- Build web UIs with a drag-and-drop interface.\n\n<img alt=\"An image containing a code sample alongside a screenshot of the Opshop app it generates.\" src=\"https://opshop.apeiromont.com/img/readme-assets/screenshot.png\">\n\n## More about Opshop\n\n- 📖 [Documentation](https://opshop.apeiromont.com/docs)\n- 🌐 [Opshop website](https://opshop.apeiromont.com)\n","readmeFilename":"README.md"}