{"_id":"@blotout/qinto-sdk-app","_rev":"24-cb1a828e2f585c9aeb81e2d7c093cddf","name":"@blotout/qinto-sdk-app","dist-tags":{"latest":"0.1.23"},"versions":{"0.1.0":{"name":"@blotout/qinto-sdk-app","version":"0.1.0","_id":"@blotout/qinto-sdk-app@0.1.0","maintainers":[{"name":"nejc-blotout","email":"nejc@blotout.io"}],"dist":{"shasum":"4f020d6291e74774542715d9f60765b1da824573","tarball":"https://registry.npmjs.org/@blotout/qinto-sdk-app/-/qinto-sdk-app-0.1.0.tgz","fileCount":11,"integrity":"sha512-ymkOGbJTqsc1dyQjqZwxlyxnw9Uz+yruJOA9l8VI/SlXJXrhi8xkffzof7lU9RS9DJ81GfC2Rb+D9qHoQoRseQ==","signatures":[{"sig":"MEQCIFEqt/yHkjN5jjrY0JLWFW7lxk6M+1OX0YIpzQjd2KQuAiB+qDjK/FFJ3iHVDvFkvLKIin3+Mt+rcJvAn426f0t/UQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72897},"type":"module","exports":{"./ui":{"types":"./dist/ui.d.ts","import":"./dist/ui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"test":"vitest run","build":"vite build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate:schema":"tsx scripts/generate-schema.ts"},"_npmUser":{"name":"nejc-blotout","email":"nejc@blotout.io"},"repository":{"url":"git+https://github.com/blotoutio/qinto.git","type":"git","directory":"projects/app/sdk"},"description":"Qinto app SDK: the authoring surfaces for Qinto platform apps — defineApp (server) and defineBrowserApp (browser) plus their hook, context, and action types. Zero runtime dependencies.","directories":{},"sideEffects":false,"_nodeVersion":"24.12.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.1","vite":"^8.0.0","vitest":"4.1.10","typescript":"6.0.3","@types/node":"25.6.0","vite-plugin-dts":"5.0.3","@qinto/app-manifest":"0.0.0","@vitest/coverage-v8":"4.1.10","@qinto/docs-contract":"0.0.0","@microsoft/api-extractor":"7.58.12"},"_npmOperationalInternal":{"tmp":"tmp/qinto-sdk-app_0.1.0_1787650159586_0.9025117800779003","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@blotout/qinto-sdk-app","version":"0.1.1","_id":"@blotout/qinto-sdk-app@0.1.1","maintainers":[{"name":"nejc-blotout","email":"nejc@blotout.io"}],"homepage":"https://github.com/blotoutio/qinto#readme","bugs":{"url":"https://github.com/blotoutio/qinto/issues"},"dist":{"shasum":"3def325619fab87cb04a19edab074809349ac5db","tarball":"https://registry.npmjs.org/@blotout/qinto-sdk-app/-/qinto-sdk-app-0.1.1.tgz","fileCount":12,"integrity":"sha512-wDQzkqCG5aC3pMZo3+OJJgvd9fdWUVYLE4QTJzP+s+aTSnVuoz+QipZ+fhMklZul+AXs32UddHkUZqmy0irqmw==","signatures":[{"sig":"MEUCIQC0oQzzPwSZ5lU4qT0utIDNaW204H+dKmQpuAX4q8/1zAIgMU02DXVFE5RVjXUrCMyTXm6UgloRIsG/alNvMUJo9s8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":85242},"type":"module","_from":"file:/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.1.tgz","exports":{"./ui":{"types":"./dist/ui.d.ts","import":"./dist/ui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"test":"vitest run","build":"vite build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate:schema":"tsx scripts/generate-schema.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3bec5d36-0c2c-49b5-95de-349f174da9dc"}},"_resolved":"/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.1.tgz","_integrity":"sha512-wDQzkqCG5aC3pMZo3+OJJgvd9fdWUVYLE4QTJzP+s+aTSnVuoz+QipZ+fhMklZul+AXs32UddHkUZqmy0irqmw==","repository":{"url":"git+https://github.com/blotoutio/qinto.git","type":"git","directory":"projects/app/sdk"},"_npmVersion":"11.6.1","description":"Qinto app SDK: the authoring surfaces for Qinto platform apps — defineApp (server) and defineBrowserApp (browser) plus their hook, context, and action types. Zero runtime dependencies.","directories":{},"sideEffects":false,"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.1","vite":"^8.0.0","vitest":"4.1.10","typescript":"6.0.3","@types/node":"25.6.0","vite-plugin-dts":"5.0.3","@qinto/app-manifest":"0.0.0","@vitest/coverage-v8":"4.1.10","@qinto/docs-contract":"0.0.0","@microsoft/api-extractor":"7.58.12"},"_npmOperationalInternal":{"tmp":"tmp/qinto-sdk-app_0.1.1_1787653103217_0.25519838182219057","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@blotout/qinto-sdk-app","version":"0.1.2","_id":"@blotout/qinto-sdk-app@0.1.2","maintainers":[{"name":"nejc-blotout","email":"nejc@blotout.io"}],"homepage":"https://github.com/blotoutio/qinto#readme","bugs":{"url":"https://github.com/blotoutio/qinto/issues"},"dist":{"shasum":"62ff07441dc4ffd5f20808d2577b1a6ac763a397","tarball":"https://registry.npmjs.org/@blotout/qinto-sdk-app/-/qinto-sdk-app-0.1.2.tgz","fileCount":12,"integrity":"sha512-dHmsSOCTWKdbBk6W43qxxSLR1lubs2kUGy8i1hU8k7ZgbnV9hWQHDm8MMj7oI1q7QjhfXwh79teXiD2KNixy2g==","signatures":[{"sig":"MEQCIB3TrIagxH4vxLND3pbtuY+AmYXCxI3i+/FmsLUr9EEyAiBjq/5W5WkEO3ZdVL37/NrvxLpnHsbXHaZMLtetu+kT3g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":89266},"type":"module","_from":"file:/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.2.tgz","exports":{"./ui":{"types":"./dist/ui.d.ts","import":"./dist/ui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"test":"vitest run","build":"vite build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate:schema":"tsx scripts/generate-schema.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3bec5d36-0c2c-49b5-95de-349f174da9dc"}},"_resolved":"/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.2.tgz","_integrity":"sha512-dHmsSOCTWKdbBk6W43qxxSLR1lubs2kUGy8i1hU8k7ZgbnV9hWQHDm8MMj7oI1q7QjhfXwh79teXiD2KNixy2g==","repository":{"url":"git+https://github.com/blotoutio/qinto.git","type":"git","directory":"projects/app/sdk"},"_npmVersion":"11.6.1","description":"Qinto app SDK: the authoring surfaces for Qinto platform apps — defineApp (server) and defineBrowserApp (browser) plus their hook, context, and action types. Zero runtime dependencies.","directories":{},"sideEffects":false,"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.1","vite":"^8.0.0","vitest":"4.1.10","typescript":"6.0.3","@types/node":"25.6.0","vite-plugin-dts":"5.0.3","@qinto/app-manifest":"0.0.0","@vitest/coverage-v8":"4.1.10","@qinto/docs-contract":"0.0.0","@microsoft/api-extractor":"7.58.12"},"_npmOperationalInternal":{"tmp":"tmp/qinto-sdk-app_0.1.2_1787684343095_0.15071165296128863","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@blotout/qinto-sdk-app","version":"0.1.3","_id":"@blotout/qinto-sdk-app@0.1.3","maintainers":[{"name":"nejc-blotout","email":"nejc@blotout.io"}],"homepage":"https://github.com/blotoutio/qinto#readme","bugs":{"url":"https://github.com/blotoutio/qinto/issues"},"dist":{"shasum":"f563931386636360e425646e02e1ffb97010daac","tarball":"https://registry.npmjs.org/@blotout/qinto-sdk-app/-/qinto-sdk-app-0.1.3.tgz","fileCount":12,"integrity":"sha512-bnul6Deo5rUKjxNxKM8HJeQdryWPbYdBHTHvtNPZ/4tL4HLFpGV7gPGBcrf3mMgJO4OfKHV+9ZrNM0J0V40cnw==","signatures":[{"sig":"MEUCIBQhp+rPVG46chSsKZc0mibSVRVheI/br0JJnXBwGIgGAiEAtecC3YMY0qYlyMREo/aIpugapbMCegowAFPD9KgdY9w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":96918},"type":"module","_from":"file:/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.3.tgz","exports":{"./ui":{"types":"./dist/ui.d.ts","import":"./dist/ui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"test":"vitest run","build":"vite build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate:schema":"tsx scripts/generate-schema.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3bec5d36-0c2c-49b5-95de-349f174da9dc"}},"_resolved":"/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.3.tgz","_integrity":"sha512-bnul6Deo5rUKjxNxKM8HJeQdryWPbYdBHTHvtNPZ/4tL4HLFpGV7gPGBcrf3mMgJO4OfKHV+9ZrNM0J0V40cnw==","repository":{"url":"git+https://github.com/blotoutio/qinto.git","type":"git","directory":"projects/app/sdk"},"_npmVersion":"11.6.1","description":"Qinto app SDK: the authoring surfaces for Qinto platform apps — defineApp (server) and defineBrowserApp (browser) plus their hook, context, and action types. Zero runtime dependencies.","directories":{},"sideEffects":false,"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.1","vite":"^8.0.0","vitest":"4.1.10","typescript":"6.0.3","@types/node":"25.6.0","vite-plugin-dts":"5.0.3","@qinto/app-manifest":"0.0.0","@vitest/coverage-v8":"4.1.10","@qinto/docs-contract":"0.0.0","@microsoft/api-extractor":"7.58.12"},"_npmOperationalInternal":{"tmp":"tmp/qinto-sdk-app_0.1.3_1787721252635_0.45353575166713234","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@blotout/qinto-sdk-app","version":"0.1.4","_id":"@blotout/qinto-sdk-app@0.1.4","maintainers":[{"name":"nejc-blotout","email":"nejc@blotout.io"}],"homepage":"https://github.com/blotoutio/qinto#readme","bugs":{"url":"https://github.com/blotoutio/qinto/issues"},"dist":{"shasum":"7afc8023b14f1769443c584a29870d5ee5182e9b","tarball":"https://registry.npmjs.org/@blotout/qinto-sdk-app/-/qinto-sdk-app-0.1.4.tgz","fileCount":12,"integrity":"sha512-qVYzDCrxluhbHwNOb+vqXIcXyTMp9BAIAq0vbqDd2HxlUY0H9iF5Nr4bT+mPq1qtSkbGKAZ9rhqSmKA0M8BPfg==","signatures":[{"sig":"MEQCIESQckvpJZ7kLBpS4u1IqG3AVNE6zOZSWzDkG5EMuD+KAiBxRNFV0dWBKmVEZr5dZ9Qruzvo2SPt6A15qMcAAELKVg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":96918},"type":"module","_from":"file:/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.4.tgz","exports":{"./ui":{"types":"./dist/ui.d.ts","import":"./dist/ui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"test":"vitest run","build":"vite build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate:schema":"tsx scripts/generate-schema.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3bec5d36-0c2c-49b5-95de-349f174da9dc"}},"_resolved":"/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.4.tgz","_integrity":"sha512-qVYzDCrxluhbHwNOb+vqXIcXyTMp9BAIAq0vbqDd2HxlUY0H9iF5Nr4bT+mPq1qtSkbGKAZ9rhqSmKA0M8BPfg==","repository":{"url":"git+https://github.com/blotoutio/qinto.git","type":"git","directory":"projects/app/sdk"},"_npmVersion":"11.6.1","description":"Qinto app SDK: the authoring surfaces for Qinto platform apps — defineApp (server) and defineBrowserApp (browser) plus their hook, context, and action types. Zero runtime dependencies.","directories":{},"sideEffects":false,"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.1","vite":"^8.0.0","vitest":"4.1.10","typescript":"6.0.3","@types/node":"25.6.0","vite-plugin-dts":"5.0.3","@qinto/app-manifest":"0.0.0","@vitest/coverage-v8":"4.1.10","@qinto/docs-contract":"0.0.0","@microsoft/api-extractor":"7.58.12"},"_npmOperationalInternal":{"tmp":"tmp/qinto-sdk-app_0.1.4_1787727699107_0.4924605508153246","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@blotout/qinto-sdk-app","version":"0.1.5","_id":"@blotout/qinto-sdk-app@0.1.5","maintainers":[{"name":"nejc-blotout","email":"nejc@blotout.io"}],"homepage":"https://github.com/blotoutio/qinto#readme","bugs":{"url":"https://github.com/blotoutio/qinto/issues"},"dist":{"shasum":"3db58c11bab8042c6d64b335b1bdcb2addae1b77","tarball":"https://registry.npmjs.org/@blotout/qinto-sdk-app/-/qinto-sdk-app-0.1.5.tgz","fileCount":12,"integrity":"sha512-OvIZIn/ftvGKdYZsdI2w3twxquWaGBPPsp/NwTUq3rb6hq13e37OktI0cvu4bfyPjC0JfRgHosb4zMZc4Vmxiw==","signatures":[{"sig":"MEUCIQCOsPpQYGpkWkJEWTLeKzJjNNJWYXZ+Ct8tFhe/8QynYgIgIkVOzCO81a3vAJSkerGqakdHgt8A39enjXEV2OVQNIo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":98671},"type":"module","_from":"file:/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.5.tgz","exports":{"./ui":{"types":"./dist/ui.d.ts","import":"./dist/ui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"test":"vitest run","build":"vite build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate:schema":"tsx scripts/generate-schema.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3bec5d36-0c2c-49b5-95de-349f174da9dc"}},"_resolved":"/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.5.tgz","_integrity":"sha512-OvIZIn/ftvGKdYZsdI2w3twxquWaGBPPsp/NwTUq3rb6hq13e37OktI0cvu4bfyPjC0JfRgHosb4zMZc4Vmxiw==","repository":{"url":"git+https://github.com/blotoutio/qinto.git","type":"git","directory":"projects/app/sdk"},"_npmVersion":"11.6.1","description":"Qinto app SDK: the authoring surfaces for Qinto platform apps — defineApp (server) and defineBrowserApp (browser) plus their hook, context, and action types. Zero runtime dependencies.","directories":{},"sideEffects":false,"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.1","vite":"^8.0.0","vitest":"4.1.10","typescript":"6.0.3","@types/node":"25.6.0","vite-plugin-dts":"5.0.3","@qinto/app-manifest":"0.0.0","@vitest/coverage-v8":"4.1.10","@qinto/docs-contract":"0.0.0","@microsoft/api-extractor":"7.58.12"},"_npmOperationalInternal":{"tmp":"tmp/qinto-sdk-app_0.1.5_1787764588188_0.7217418216951699","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@blotout/qinto-sdk-app","version":"0.1.6","_id":"@blotout/qinto-sdk-app@0.1.6","maintainers":[{"name":"nejc-blotout","email":"nejc@blotout.io"}],"homepage":"https://github.com/blotoutio/qinto#readme","bugs":{"url":"https://github.com/blotoutio/qinto/issues"},"dist":{"shasum":"999f03684f1c9497952f71298429ced86a2fa542","tarball":"https://registry.npmjs.org/@blotout/qinto-sdk-app/-/qinto-sdk-app-0.1.6.tgz","fileCount":12,"integrity":"sha512-NQdENb4vaF8JzxPAc+p7kUOpmIn1kb3KSdnrZmCQC+oaB2LOcw3A53ItziVE9LfN2XIKgvKyP2K2ruYU9Na2mQ==","signatures":[{"sig":"MEUCIQDKhU3OY757rKE4vSBhjh/W62RBqYP/XfouJDG1l8+3sgIgLG45hg+H9xMA+DFJmPTByxtJ1LKJ1QiH23PA9k8fgdQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":620843},"type":"module","_from":"file:/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.6.tgz","exports":{"./ui":{"types":"./dist/ui.d.ts","import":"./dist/ui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"test":"vitest run","build":"vite build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate:schema":"tsx scripts/generate-schema.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3bec5d36-0c2c-49b5-95de-349f174da9dc"}},"_resolved":"/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.6.tgz","_integrity":"sha512-NQdENb4vaF8JzxPAc+p7kUOpmIn1kb3KSdnrZmCQC+oaB2LOcw3A53ItziVE9LfN2XIKgvKyP2K2ruYU9Na2mQ==","repository":{"url":"git+https://github.com/blotoutio/qinto.git","type":"git","directory":"projects/app/sdk"},"_npmVersion":"11.6.1","description":"Qinto app SDK: the authoring surfaces for Qinto platform apps — defineApp (server) and defineBrowserApp (browser) plus their hook, context, and action types. Zero runtime dependencies.","directories":{},"sideEffects":false,"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.1","vite":"^8.0.0","vitest":"4.1.10","typescript":"6.0.3","@types/node":"25.6.0","vite-plugin-dts":"5.0.3","@qinto/app-envelope":"0.0.0","@qinto/app-manifest":"0.0.0","@vitest/coverage-v8":"4.1.10","@qinto/docs-contract":"0.0.0","@microsoft/api-extractor":"7.58.12"},"_npmOperationalInternal":{"tmp":"tmp/qinto-sdk-app_0.1.6_1787814763818_0.15971142959731277","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@blotout/qinto-sdk-app","version":"0.1.7","_id":"@blotout/qinto-sdk-app@0.1.7","maintainers":[{"name":"nejc-blotout","email":"nejc@blotout.io"}],"homepage":"https://github.com/blotoutio/qinto#readme","bugs":{"url":"https://github.com/blotoutio/qinto/issues"},"dist":{"shasum":"c66cc0e7442cfd10e8d08c4be6ecc2170ae27b2d","tarball":"https://registry.npmjs.org/@blotout/qinto-sdk-app/-/qinto-sdk-app-0.1.7.tgz","fileCount":12,"integrity":"sha512-gdcQGQUyQUn7sW36dsh17sJo6zC5/4XKEluNMrWJMZBK9kqqybqepaHM+jX+dVsSPC/rACaocDj/O8emdTTRVA==","signatures":[{"sig":"MEUCIFgveosVPtgOhloyA9S3diPxjdIl9XLQ13SbgPdj6ljoAiEAowvkpWpVoaR/f868PblMztTa7TvOltSWJn6YDeyrnW0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":645666},"type":"module","_from":"file:/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.7.tgz","exports":{"./ui":{"types":"./dist/ui.d.ts","import":"./dist/ui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"test":"vitest run","build":"vite build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate:schema":"tsx scripts/generate-schema.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3bec5d36-0c2c-49b5-95de-349f174da9dc"}},"_resolved":"/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.7.tgz","_integrity":"sha512-gdcQGQUyQUn7sW36dsh17sJo6zC5/4XKEluNMrWJMZBK9kqqybqepaHM+jX+dVsSPC/rACaocDj/O8emdTTRVA==","repository":{"url":"git+https://github.com/blotoutio/qinto.git","type":"git","directory":"projects/app/sdk"},"_npmVersion":"11.6.1","description":"Qinto app SDK: the authoring surfaces for Qinto platform apps — defineApp (server) and defineBrowserApp (browser) plus their hook, context, and action types. Zero runtime dependencies.","directories":{},"sideEffects":false,"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.1","vite":"^8.0.0","vitest":"4.1.10","typescript":"6.0.3","@types/node":"25.6.0","vite-plugin-dts":"5.0.3","@qinto/app-envelope":"0.0.0","@qinto/app-manifest":"0.0.0","@vitest/coverage-v8":"4.1.10","@qinto/docs-contract":"0.0.0","@microsoft/api-extractor":"7.58.12"},"_npmOperationalInternal":{"tmp":"tmp/qinto-sdk-app_0.1.7_1787938065405_0.16417967864042438","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@blotout/qinto-sdk-app","version":"0.1.8","_id":"@blotout/qinto-sdk-app@0.1.8","maintainers":[{"name":"nejc-blotout","email":"nejc@blotout.io"}],"homepage":"https://github.com/blotoutio/qinto#readme","bugs":{"url":"https://github.com/blotoutio/qinto/issues"},"dist":{"shasum":"9a6fe7d8bd0280bb98e25e3b4e2b7db04b44045c","tarball":"https://registry.npmjs.org/@blotout/qinto-sdk-app/-/qinto-sdk-app-0.1.8.tgz","fileCount":12,"integrity":"sha512-Fx7OEryE1P6e76EcknX6Ca41RpiyUj7/DdcTYHXXDcYfvQ3KvaaBqEpCdfnmmWtpveNq/flMfR0gMMOTt6ml8A==","signatures":[{"sig":"MEUCIC6+rdUa9SF2UVLRwfpygO+Q4qpK0dOSacVRIicNquMVAiEA+TUsE0LZyCD70MtCxt6GlaIpgkL5RauJzZ19LC67Ddc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":665257},"type":"module","_from":"file:/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.8.tgz","exports":{"./ui":{"types":"./dist/ui.d.ts","import":"./dist/ui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"test":"vitest run","build":"vite build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate:schema":"tsx scripts/generate-schema.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3bec5d36-0c2c-49b5-95de-349f174da9dc"}},"_resolved":"/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.8.tgz","_integrity":"sha512-Fx7OEryE1P6e76EcknX6Ca41RpiyUj7/DdcTYHXXDcYfvQ3KvaaBqEpCdfnmmWtpveNq/flMfR0gMMOTt6ml8A==","repository":{"url":"git+https://github.com/blotoutio/qinto.git","type":"git","directory":"projects/app/sdk"},"_npmVersion":"11.6.1","description":"Qinto app SDK: the authoring surfaces for Qinto platform apps — defineApp (server) and defineBrowserApp (browser) plus their hook, context, and action types. Zero runtime dependencies.","directories":{},"sideEffects":false,"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.1","vite":"^8.0.0","vitest":"4.1.10","typescript":"6.0.3","@types/node":"25.6.0","vite-plugin-dts":"5.0.3","@qinto/app-envelope":"0.0.0","@qinto/app-manifest":"0.0.0","@vitest/coverage-v8":"4.1.10","@qinto/docs-contract":"0.0.0","@microsoft/api-extractor":"7.58.12"},"_npmOperationalInternal":{"tmp":"tmp/qinto-sdk-app_0.1.8_1788004529324_0.9373581813114782","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@blotout/qinto-sdk-app","version":"0.1.9","_id":"@blotout/qinto-sdk-app@0.1.9","maintainers":[{"name":"nejc-blotout","email":"nejc@blotout.io"}],"homepage":"https://github.com/blotoutio/qinto#readme","bugs":{"url":"https://github.com/blotoutio/qinto/issues"},"dist":{"shasum":"f3bcdfda0c6c46728c5e659fafc4a0f249d32c42","tarball":"https://registry.npmjs.org/@blotout/qinto-sdk-app/-/qinto-sdk-app-0.1.9.tgz","fileCount":12,"integrity":"sha512-MN3IBPQNNhTK62AdyDVotz4NUDkOsmOak25VFDk0ktKrjyipaU43L9+7lN/ISC/p1UaWX4cVdsEytWP2rVgPfw==","signatures":[{"sig":"MEUCIQC9SNjX3kVpDW98rAEEHO4Bqqlj6ZLFta2FbhN0mmxWagIgE+QqhmNFAPU5lzHiSoctcNPm/Q05HNtnSIzeuZ1991E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":669049},"type":"module","_from":"file:/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.9.tgz","exports":{"./ui":{"types":"./dist/ui.d.ts","import":"./dist/ui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"test":"vitest run","build":"vite build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate:schema":"tsx scripts/generate-schema.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3bec5d36-0c2c-49b5-95de-349f174da9dc"}},"_resolved":"/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.9.tgz","_integrity":"sha512-MN3IBPQNNhTK62AdyDVotz4NUDkOsmOak25VFDk0ktKrjyipaU43L9+7lN/ISC/p1UaWX4cVdsEytWP2rVgPfw==","repository":{"url":"git+https://github.com/blotoutio/qinto.git","type":"git","directory":"projects/app/sdk"},"_npmVersion":"11.6.1","description":"Qinto app SDK: the authoring surfaces for Qinto platform apps — defineApp (server) and defineBrowserApp (browser) plus their hook, context, and action types. Zero runtime dependencies.","directories":{},"sideEffects":false,"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.1","vite":"^8.0.0","vitest":"4.1.10","typescript":"6.0.3","@types/node":"25.6.0","vite-plugin-dts":"5.0.3","@qinto/app-envelope":"0.0.0","@qinto/app-manifest":"0.0.0","@vitest/coverage-v8":"4.1.10","@qinto/docs-contract":"0.0.0","@microsoft/api-extractor":"7.58.12"},"_npmOperationalInternal":{"tmp":"tmp/qinto-sdk-app_0.1.9_1788169193009_0.6149768555023203","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"@blotout/qinto-sdk-app","version":"0.1.10","_id":"@blotout/qinto-sdk-app@0.1.10","maintainers":[{"name":"nejc-blotout","email":"nejc@blotout.io"}],"homepage":"https://github.com/blotoutio/qinto#readme","bugs":{"url":"https://github.com/blotoutio/qinto/issues"},"dist":{"shasum":"5ca527d7355d85ace7b05ddf923f84ebacfd2917","tarball":"https://registry.npmjs.org/@blotout/qinto-sdk-app/-/qinto-sdk-app-0.1.10.tgz","fileCount":12,"integrity":"sha512-pzKFSdyOORe0GADimGMgcVMBRyH37/Z0myaOwmWsasMfZulmMPcKHpQ0BOHta/XZvfnODKr2RNMIDlZdAogR5g==","signatures":[{"sig":"MEUCIBL1b10iA8c8H+MsqIZnWiVxiLi5HW9j+PxJKLd//nWKAiEAi9y1cvgL6Zm1NP++NGAdThAtYw7jloMzsYo266f6UB4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":669050},"type":"module","_from":"file:/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.10.tgz","exports":{"./ui":{"types":"./dist/ui.d.ts","import":"./dist/ui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"test":"vitest run","build":"vite build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate:schema":"tsx scripts/generate-schema.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3bec5d36-0c2c-49b5-95de-349f174da9dc"}},"_resolved":"/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.10.tgz","_integrity":"sha512-pzKFSdyOORe0GADimGMgcVMBRyH37/Z0myaOwmWsasMfZulmMPcKHpQ0BOHta/XZvfnODKr2RNMIDlZdAogR5g==","repository":{"url":"git+https://github.com/blotoutio/qinto.git","type":"git","directory":"projects/app/sdk"},"_npmVersion":"11.6.1","description":"Qinto app SDK: the authoring surfaces for Qinto platform apps — defineApp (server) and defineBrowserApp (browser) plus their hook, context, and action types. Zero runtime dependencies.","directories":{},"sideEffects":false,"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.1","vite":"^8.0.0","vitest":"4.1.10","typescript":"6.0.3","@types/node":"25.6.0","vite-plugin-dts":"5.0.3","@qinto/app-envelope":"0.0.0","@qinto/app-manifest":"0.0.0","@vitest/coverage-v8":"4.1.10","@qinto/docs-contract":"0.0.0","@microsoft/api-extractor":"7.58.12"},"_npmOperationalInternal":{"tmp":"tmp/qinto-sdk-app_0.1.10_1788286210332_0.07380175127910338","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@blotout/qinto-sdk-app","version":"0.1.11","_id":"@blotout/qinto-sdk-app@0.1.11","maintainers":[{"name":"nejc-blotout","email":"nejc@blotout.io"}],"homepage":"https://github.com/blotoutio/qinto#readme","bugs":{"url":"https://github.com/blotoutio/qinto/issues"},"dist":{"shasum":"d7bcabd799e604dab1e07c7fe5c8e08a07f98eb7","tarball":"https://registry.npmjs.org/@blotout/qinto-sdk-app/-/qinto-sdk-app-0.1.11.tgz","fileCount":12,"integrity":"sha512-hHQdIDC7wx/qwh12Eq7RDT4O6hNqWph2rqhd6DZiDoV6scpwVwPx2jLmDHGPA+6zcUwDmkqS8bMubvCIXjy7DQ==","signatures":[{"sig":"MEYCIQDJSIHahROQ0Dru4zmLNBDHTLoLPWC1IHPV1uKi2ydycgIhAOTl3WtMLknRn6g5FfU/pUYNRGd71cRcLZPKDnrm4ld2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIF0iRHCR9Qo2PCr/Z+3C7cQ3tvKDVNprbTO9FMT4fnhzAiEAxS73LN4DkSxuRQfn7TMF35HXzN4ml77E/zdR27TEVb8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":671174},"type":"module","_from":"file:/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.11.tgz","exports":{"./ui":{"types":"./dist/ui.d.ts","import":"./dist/ui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"test":"vitest run","build":"vite build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate:schema":"tsx scripts/generate-schema.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3bec5d36-0c2c-49b5-95de-349f174da9dc"}},"_resolved":"/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.11.tgz","_integrity":"sha512-hHQdIDC7wx/qwh12Eq7RDT4O6hNqWph2rqhd6DZiDoV6scpwVwPx2jLmDHGPA+6zcUwDmkqS8bMubvCIXjy7DQ==","repository":{"url":"git+https://github.com/blotoutio/qinto.git","type":"git","directory":"projects/app/sdk"},"_npmVersion":"11.6.1","description":"Qinto app SDK: the authoring surfaces for Qinto platform apps — defineApp (server) and defineBrowserApp (browser) plus their hook, context, and action types. Zero runtime dependencies.","directories":{},"sideEffects":false,"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.1","vite":"^8.0.0","vitest":"4.1.10","typescript":"6.0.3","@types/node":"25.6.0","vite-plugin-dts":"5.0.3","@qinto/app-envelope":"0.0.0","@qinto/app-manifest":"0.0.0","@vitest/coverage-v8":"4.1.10","@qinto/docs-contract":"0.0.0","@microsoft/api-extractor":"7.58.12"},"_npmOperationalInternal":{"tmp":"tmp/qinto-sdk-app_0.1.11_1788518699375_0.13847360891104876","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"@blotout/qinto-sdk-app","version":"0.1.12","_id":"@blotout/qinto-sdk-app@0.1.12","maintainers":[{"name":"nejc-blotout","email":"nejc@blotout.io"}],"homepage":"https://github.com/blotoutio/qinto#readme","bugs":{"url":"https://github.com/blotoutio/qinto/issues"},"dist":{"shasum":"f8d1ad2a0107e0d867d9e90f7703d5bb49f6cb2d","tarball":"https://registry.npmjs.org/@blotout/qinto-sdk-app/-/qinto-sdk-app-0.1.12.tgz","fileCount":12,"integrity":"sha512-JZGtCS8xozEFYDxFH5VyFpxsyIcJx7Gfxlcnutt97HjPyI0cuv25EpVDaV3sy5cdQmjFbE0uYXJy+d2XwfDy+g==","signatures":[{"sig":"MEYCIQDZSCxjmomMueo8RHMf+jyQewXfJybT8jCYQRhFjuNU1gIhAOXwHWjLevlJB834GDMux1EZjcM/WotZQSCAcj7ROtWr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIEli58m4Zu1A8Zv2fK/DLiobk22gSl2qxyPJXbQ0MMhbAiAl3Uta/Hoc7LuSZtWZwgenwu3jgxm4g4Y/91YKC+aV7A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":684304},"type":"module","_from":"file:/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.12.tgz","exports":{"./ui":{"types":"./dist/ui.d.ts","import":"./dist/ui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"test":"vitest run","build":"vite build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate:schema":"tsx scripts/generate-schema.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3bec5d36-0c2c-49b5-95de-349f174da9dc"}},"_resolved":"/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.12.tgz","_integrity":"sha512-JZGtCS8xozEFYDxFH5VyFpxsyIcJx7Gfxlcnutt97HjPyI0cuv25EpVDaV3sy5cdQmjFbE0uYXJy+d2XwfDy+g==","repository":{"url":"git+https://github.com/blotoutio/qinto.git","type":"git","directory":"projects/app/sdk"},"_npmVersion":"11.6.1","description":"Qinto app SDK: the authoring surfaces for Qinto platform apps — defineApp (server) and defineBrowserApp (browser) plus their hook, context, and action types. Zero runtime dependencies.","directories":{},"sideEffects":false,"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.1","vite":"^8.0.0","vitest":"4.1.10","typescript":"6.0.3","@types/node":"25.6.0","vite-plugin-dts":"5.0.3","@qinto/app-envelope":"0.0.0","@qinto/app-manifest":"0.0.0","@vitest/coverage-v8":"4.1.10","@qinto/docs-contract":"0.0.0","@microsoft/api-extractor":"7.58.12"},"_npmOperationalInternal":{"tmp":"tmp/qinto-sdk-app_0.1.12_1788552931552_0.7131333558150705","host":"s3://npm-registry-packages-npm-production"}},"0.1.13":{"name":"@blotout/qinto-sdk-app","version":"0.1.13","_id":"@blotout/qinto-sdk-app@0.1.13","maintainers":[{"name":"nejc-blotout","email":"nejc@blotout.io"}],"homepage":"https://github.com/blotoutio/qinto#readme","bugs":{"url":"https://github.com/blotoutio/qinto/issues"},"dist":{"shasum":"23bc8b04a4cde840484b678d41e774d8d1fd874f","tarball":"https://registry.npmjs.org/@blotout/qinto-sdk-app/-/qinto-sdk-app-0.1.13.tgz","fileCount":12,"integrity":"sha512-ZKJiSd79m0OfLZKA4AceC26h5fvoZ7YeF9di5ZhV7xr5qgPTvm82kIaiDjuZoIKK9FaZKzFSUnVtI7BJ+E83Tg==","signatures":[{"sig":"MEUCICVEsh0rYQQr8JVyZgzCq2JQKoLHWBWymZTCtLfycc7PAiEAhroeat2DrHf3JBY7ctA7wmmEZ9OPvXG9NLvT19o9H+w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCcyjLj10y4xrQO2/BY7vJ+mWRPKKwm2jt9nyzHeMaG1QIgI1umvZ3/8gdBnV054BHdlEah4Bo/n/p/i30MPrGb2T8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":807099},"type":"module","_from":"file:/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.13.tgz","exports":{"./ui":{"types":"./dist/ui.d.ts","import":"./dist/ui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"test":"vitest run","build":"vite build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate:schema":"tsx scripts/generate-schema.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3bec5d36-0c2c-49b5-95de-349f174da9dc"}},"_resolved":"/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.13.tgz","_integrity":"sha512-ZKJiSd79m0OfLZKA4AceC26h5fvoZ7YeF9di5ZhV7xr5qgPTvm82kIaiDjuZoIKK9FaZKzFSUnVtI7BJ+E83Tg==","repository":{"url":"git+https://github.com/blotoutio/qinto.git","type":"git","directory":"projects/app/sdk"},"_npmVersion":"11.6.1","description":"Qinto app SDK: the authoring surfaces for Qinto platform apps — defineApp (server) and defineBrowserApp (browser) plus their hook, context, and action types. Zero runtime dependencies.","directories":{},"sideEffects":false,"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.13","vite":"8.2.2","vitest":"4.1.11","typescript":"6.0.3","@types/node":"25.9.5","vite-plugin-dts":"5.1.0","@qinto/app-envelope":"0.0.0","@qinto/app-manifest":"0.0.0","@vitest/coverage-v8":"4.1.11","@qinto/docs-contract":"0.0.0","@microsoft/api-extractor":"7.59.0"},"_npmOperationalInternal":{"tmp":"tmp/qinto-sdk-app_0.1.13_1788687589171_0.15255874218575638","host":"s3://npm-registry-packages-npm-production"}},"0.1.14":{"name":"@blotout/qinto-sdk-app","version":"0.1.14","_id":"@blotout/qinto-sdk-app@0.1.14","maintainers":[{"name":"nejc-blotout","email":"nejc@blotout.io"}],"homepage":"https://github.com/blotoutio/qinto#readme","bugs":{"url":"https://github.com/blotoutio/qinto/issues"},"dist":{"shasum":"e6a79e97f64a84ced684869759dac04968cc474a","tarball":"https://registry.npmjs.org/@blotout/qinto-sdk-app/-/qinto-sdk-app-0.1.14.tgz","fileCount":12,"integrity":"sha512-bvmTe+QXqPbl4B4EGX5FXHhxIu1gs9PRKle+O3WecjkU6lA39jeiPIqLVKOZULRzWswYCCU3f9N9D3qF1DtGyA==","signatures":[{"sig":"MEUCIHmldqGgb19Q/JIr667PmMsIivmusOZo5kKueDnsh0++AiEA/MZqwjQpbfrGIOT8kLIXIkEfncfgxGc/EO5CZJlGqeQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDxXGySmVnboClbhiwG4yqHf1vBO0uRRiAtx3DPTzy9ZQIhAJWOqU7vWzRg1hz1QO7F7kBazdhV1wLbbqI8JfBYnQwL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":952219},"type":"module","_from":"file:/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.14.tgz","exports":{"./ui":{"types":"./dist/ui.d.ts","import":"./dist/ui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"test":"vitest run","build":"vite build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate:schema":"tsx scripts/generate-schema.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3bec5d36-0c2c-49b5-95de-349f174da9dc"}},"_resolved":"/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.14.tgz","_integrity":"sha512-bvmTe+QXqPbl4B4EGX5FXHhxIu1gs9PRKle+O3WecjkU6lA39jeiPIqLVKOZULRzWswYCCU3f9N9D3qF1DtGyA==","repository":{"url":"git+https://github.com/blotoutio/qinto.git","type":"git","directory":"projects/app/sdk"},"_npmVersion":"11.6.1","description":"Qinto app SDK: the authoring surfaces for Qinto platform apps — defineApp (server) and defineBrowserApp (browser) plus their hook, context, and action types. Zero runtime dependencies.","directories":{},"sideEffects":false,"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.13","vite":"8.2.2","vitest":"4.1.11","typescript":"6.0.3","@types/node":"25.9.5","vite-plugin-dts":"5.1.0","@qinto/app-envelope":"0.0.0","@qinto/app-manifest":"0.0.0","@vitest/coverage-v8":"4.1.11","@qinto/docs-contract":"0.0.0","@microsoft/api-extractor":"7.59.0"},"_npmOperationalInternal":{"tmp":"tmp/qinto-sdk-app_0.1.14_1789389062593_0.5520806586404923","host":"s3://npm-registry-packages-npm-production"}},"0.1.15":{"name":"@blotout/qinto-sdk-app","version":"0.1.15","_id":"@blotout/qinto-sdk-app@0.1.15","maintainers":[{"name":"nejc-blotout","email":"nejc@blotout.io"}],"homepage":"https://github.com/blotoutio/qinto#readme","bugs":{"url":"https://github.com/blotoutio/qinto/issues"},"dist":{"shasum":"dd12ca52cbc76d3e22620b3442505918aca0d15d","tarball":"https://registry.npmjs.org/@blotout/qinto-sdk-app/-/qinto-sdk-app-0.1.15.tgz","fileCount":12,"integrity":"sha512-I6Hifb5REiKixhP9I46uug1ek6sq8ilPhubzLVedDGKS/bJfC3+tZXxTGCiS5ww9qJ8sthDwkL2bEtr6BZyfwA==","signatures":[{"sig":"MEUCIQCcY6AVjU0JqilGi8/7a2k/WQ9Tsdd361YcwW+GmqFJ7wIgfPAONnBAWF9PY7djYh+CBnJc8Baf3rQNGrBv1+N+yYE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDqMTSVvxlSEZNgJqTtsNBM/j5BhxC2c7wUKIj/40vqwAiA7vfxmQq0P8zEj9396ZBSS93EgqZAfUbYXwm5Ghe1WRw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":963141},"type":"module","_from":"file:/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.15.tgz","exports":{"./ui":{"types":"./dist/ui.d.ts","import":"./dist/ui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"test":"vitest run","build":"vite build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate:schema":"tsx scripts/generate-schema.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3bec5d36-0c2c-49b5-95de-349f174da9dc"}},"_resolved":"/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.15.tgz","_integrity":"sha512-I6Hifb5REiKixhP9I46uug1ek6sq8ilPhubzLVedDGKS/bJfC3+tZXxTGCiS5ww9qJ8sthDwkL2bEtr6BZyfwA==","repository":{"url":"git+https://github.com/blotoutio/qinto.git","type":"git","directory":"projects/app/sdk"},"_npmVersion":"11.6.1","description":"Qinto app SDK: the authoring surfaces for Qinto platform apps — defineApp (server) and defineBrowserApp (browser) plus their hook, context, and action types. Zero runtime dependencies.","directories":{},"sideEffects":false,"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.13","zod":"4.5.4","vite":"8.2.2","vitest":"4.1.11","typescript":"6.0.3","@types/node":"25.9.5","vite-plugin-dts":"5.1.0","@qinto/app-envelope":"0.0.0","@qinto/app-manifest":"0.0.0","@vitest/coverage-v8":"4.1.11","@qinto/docs-contract":"0.0.0","@microsoft/api-extractor":"7.59.0"},"_npmOperationalInternal":{"tmp":"tmp/qinto-sdk-app_0.1.15_1789994353356_0.402825799804732","host":"s3://npm-registry-packages-npm-production"}},"0.1.16":{"name":"@blotout/qinto-sdk-app","version":"0.1.16","_id":"@blotout/qinto-sdk-app@0.1.16","maintainers":[{"name":"nejc-blotout","email":"nejc@blotout.io"}],"homepage":"https://github.com/blotoutio/qinto#readme","bugs":{"url":"https://github.com/blotoutio/qinto/issues"},"dist":{"shasum":"b53d08981890dbae8af1255d7d78b0946be9bdc3","tarball":"https://registry.npmjs.org/@blotout/qinto-sdk-app/-/qinto-sdk-app-0.1.16.tgz","fileCount":12,"integrity":"sha512-k+FmeM/0NB3o/rk0Wtu9X6BAJBRbHvx2mb+Vg+72dkhoW9yHHd/p2itPMWSblPTTFoaJTY8Hnqzx3+c7Q7/77Q==","signatures":[{"sig":"MEUCIAUnegziWG0QFCRN3oohwssMcGnLXzm3bF6Gwt8TD2nwAiEA0FUyld3/5JdIqvggQjk9Uh65t6RkEYKGCL2JEmFVMXk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIDtrFPngwU8R1W/NUlh9trpFJsVM9SsTQRZYnfqthaeRAiEAtJOU2kwpkmJpDu6lOyfzVUpXKwQ3zG1hk2Rfo/ve7o8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":969581},"type":"module","_from":"file:/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.16.tgz","exports":{"./ui":{"types":"./dist/ui.d.ts","import":"./dist/ui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"test":"vitest run","build":"vite build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate:schema":"tsx scripts/generate-schema.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3bec5d36-0c2c-49b5-95de-349f174da9dc"}},"_resolved":"/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.16.tgz","_integrity":"sha512-k+FmeM/0NB3o/rk0Wtu9X6BAJBRbHvx2mb+Vg+72dkhoW9yHHd/p2itPMWSblPTTFoaJTY8Hnqzx3+c7Q7/77Q==","repository":{"url":"git+https://github.com/blotoutio/qinto.git","type":"git","directory":"projects/app/sdk"},"_npmVersion":"11.6.1","description":"Qinto app SDK: the authoring surfaces for Qinto platform apps — defineApp (server) and defineBrowserApp (browser) plus their hook, context, and action types. Zero runtime dependencies.","directories":{},"sideEffects":false,"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.13","zod":"4.5.4","vite":"8.2.2","vitest":"4.1.11","typescript":"6.0.3","@types/node":"25.9.5","vite-plugin-dts":"5.1.0","@qinto/app-envelope":"0.0.0","@qinto/app-manifest":"0.0.0","@vitest/coverage-v8":"4.1.11","@qinto/docs-contract":"0.0.0","@microsoft/api-extractor":"7.59.0"},"_npmOperationalInternal":{"tmp":"tmp/qinto-sdk-app_0.1.16_1790178124492_0.41014914118859047","host":"s3://npm-registry-packages-npm-production"}},"0.1.17":{"name":"@blotout/qinto-sdk-app","version":"0.1.17","_id":"@blotout/qinto-sdk-app@0.1.17","maintainers":[{"name":"nejc-blotout","email":"nejc@blotout.io"}],"homepage":"https://github.com/blotoutio/qinto#readme","bugs":{"url":"https://github.com/blotoutio/qinto/issues"},"dist":{"shasum":"49002423a8c29caba5a4412755df8dfada3e63be","tarball":"https://registry.npmjs.org/@blotout/qinto-sdk-app/-/qinto-sdk-app-0.1.17.tgz","fileCount":12,"integrity":"sha512-q9GXVXK62IEKZ9yapLoxDYkeHyCvVYM2X0GMNmlfBSAGu/7Ju59D3zL+oWVPwTn8XUHoDrI6AGpSTWnEiphQaA==","signatures":[{"sig":"MEQCID7GkJlkr4g1e0SCgldL0x3Rh8U9D+HaXaVg+PjO1PhkAiB/nTo9W69Km8pS/m3eB2BLu3VT8PDaFT22kXkq6j0kZw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIEXaaupnL8zxwFs7svTc66k5m2J9/7gfzpDJb80hTKK9AiEAqpDDVskuil+eK7ZuWgPZmsHvS9Sm7Bc31YdF9/A/Lbw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":973403},"type":"module","_from":"file:/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.17.tgz","exports":{"./ui":{"types":"./dist/ui.d.ts","import":"./dist/ui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"test":"vitest run","build":"vite build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate:schema":"tsx scripts/generate-schema.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3bec5d36-0c2c-49b5-95de-349f174da9dc"}},"_resolved":"/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.17.tgz","_integrity":"sha512-q9GXVXK62IEKZ9yapLoxDYkeHyCvVYM2X0GMNmlfBSAGu/7Ju59D3zL+oWVPwTn8XUHoDrI6AGpSTWnEiphQaA==","repository":{"url":"git+https://github.com/blotoutio/qinto.git","type":"git","directory":"projects/app/sdk"},"_npmVersion":"11.6.1","description":"Qinto app SDK: the authoring surfaces for Qinto platform apps — defineApp (server) and defineBrowserApp (browser) plus their hook, context, and action types. Zero runtime dependencies.","directories":{},"sideEffects":false,"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.13","zod":"4.5.4","vite":"8.2.2","vitest":"4.1.11","typescript":"6.0.3","@types/node":"25.9.5","vite-plugin-dts":"5.1.0","@qinto/app-envelope":"0.0.0","@qinto/app-manifest":"0.0.0","@vitest/coverage-v8":"4.1.11","@qinto/docs-contract":"0.0.0","@microsoft/api-extractor":"7.59.0"},"_npmOperationalInternal":{"tmp":"tmp/qinto-sdk-app_0.1.17_1790260558514_0.15800103792403153","host":"s3://npm-registry-packages-npm-production"}},"0.1.18":{"name":"@blotout/qinto-sdk-app","version":"0.1.18","_id":"@blotout/qinto-sdk-app@0.1.18","maintainers":[{"name":"nejc-blotout","email":"nejc@blotout.io"}],"homepage":"https://github.com/blotoutio/qinto#readme","bugs":{"url":"https://github.com/blotoutio/qinto/issues"},"dist":{"shasum":"5dfd32590089831f4048072fff34cc987b7a2e01","tarball":"https://registry.npmjs.org/@blotout/qinto-sdk-app/-/qinto-sdk-app-0.1.18.tgz","fileCount":12,"integrity":"sha512-ojFyr8awvbVFIgYG3pjIUNqK1ixG6R9CtH+QLEI/JId5U6JLxUMlihTBI1++s49n+maYgXbaXJVGpDlZDWLkLw==","signatures":[{"sig":"MEQCIF15r4Q33noy76jL5GaAsYWUSD4jw/Ge9XlkQT/Iwv5qAiBr1kPm6rLKFjcFPwf2qv/oZi6V6vfCK58rL35CRbIMpg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCXBeoVxoV23HptRLALtOcCy6HbfkznZw+5yLpDFDCitwIhAJE1uMQCxL3Ps7jnGKnQx4xDpd2EAYe39m7ivDYfz92U","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":973979},"type":"module","_from":"file:/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.18.tgz","exports":{"./ui":{"types":"./dist/ui.d.ts","import":"./dist/ui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"test":"vitest run","build":"vite build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate:schema":"tsx scripts/generate-schema.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3bec5d36-0c2c-49b5-95de-349f174da9dc"}},"_resolved":"/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.18.tgz","_integrity":"sha512-ojFyr8awvbVFIgYG3pjIUNqK1ixG6R9CtH+QLEI/JId5U6JLxUMlihTBI1++s49n+maYgXbaXJVGpDlZDWLkLw==","repository":{"url":"git+https://github.com/blotoutio/qinto.git","type":"git","directory":"projects/app/sdk"},"_npmVersion":"11.6.1","description":"Qinto app SDK: the authoring surfaces for Qinto platform apps — defineApp (server) and defineBrowserApp (browser) plus their hook, context, and action types. Zero runtime dependencies.","directories":{},"sideEffects":false,"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.13","zod":"4.5.4","vite":"8.2.2","vitest":"4.1.11","typescript":"6.0.3","@types/node":"25.9.5","vite-plugin-dts":"5.1.0","@qinto/app-envelope":"0.0.0","@qinto/app-manifest":"0.0.0","@vitest/coverage-v8":"4.1.11","@qinto/docs-contract":"0.0.0","@microsoft/api-extractor":"7.59.0"},"_npmOperationalInternal":{"tmp":"tmp/qinto-sdk-app_0.1.18_1790281619986_0.10101540630547068","host":"s3://npm-registry-packages-npm-production"}},"0.1.19":{"name":"@blotout/qinto-sdk-app","version":"0.1.19","_id":"@blotout/qinto-sdk-app@0.1.19","maintainers":[{"name":"nejc-blotout","email":"nejc@blotout.io"}],"homepage":"https://github.com/blotoutio/qinto#readme","bugs":{"url":"https://github.com/blotoutio/qinto/issues"},"dist":{"shasum":"aa168fb652eadbd5d80c446afffe2df8018b6388","tarball":"https://registry.npmjs.org/@blotout/qinto-sdk-app/-/qinto-sdk-app-0.1.19.tgz","fileCount":14,"integrity":"sha512-P3BiGr5vGFhN+tWTafGIO9ImzItuMg1ogfwChSn3yqIyQnRs7YamMqB9KJv41o1gMxQ1rCOzcnG8lZEoZ022GQ==","signatures":[{"sig":"MEQCIEsB3uuqkRyudHvdvvIqQooRBodUwfKvntyxQH5rqJebAiBylE1LiirA0aEcL8R/GcJ2A/xvHup0P/jYRr5W0rTJVg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIELT9o8H87RkwyJSc/75GcjDutkwS/t8C7B6DkPA8CmmAiAgH8V7kNKaFeXAmd1YUnM0IxPLakQw37fsIPy87Yah5g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":985861},"type":"module","_from":"file:/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.19.tgz","exports":{"./ui":{"types":"./dist/ui.d.ts","import":"./dist/ui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"test":"vitest run","build":"vite build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate:schema":"tsx scripts/generate-schema.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3bec5d36-0c2c-49b5-95de-349f174da9dc"}},"_resolved":"/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.19.tgz","_integrity":"sha512-P3BiGr5vGFhN+tWTafGIO9ImzItuMg1ogfwChSn3yqIyQnRs7YamMqB9KJv41o1gMxQ1rCOzcnG8lZEoZ022GQ==","repository":{"url":"git+https://github.com/blotoutio/qinto.git","type":"git","directory":"projects/app/sdk"},"_npmVersion":"11.6.1","description":"Qinto app SDK: the authoring surfaces for Qinto platform apps — defineApp (server) and defineBrowserApp (browser) plus their hook, context, and action types. Zero runtime dependencies.","directories":{},"sideEffects":false,"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.13","zod":"4.5.4","vite":"8.2.2","vitest":"4.1.11","typescript":"6.0.3","@types/node":"25.9.5","vite-plugin-dts":"5.1.0","@qinto/app-envelope":"0.0.0","@qinto/app-manifest":"0.0.0","@vitest/coverage-v8":"4.1.11","@qinto/docs-contract":"0.0.0","@microsoft/api-extractor":"7.59.0"},"_npmOperationalInternal":{"tmp":"tmp/qinto-sdk-app_0.1.19_1790570573723_0.9022453300835385","host":"s3://npm-registry-packages-npm-production"}},"0.1.20":{"name":"@blotout/qinto-sdk-app","version":"0.1.20","_id":"@blotout/qinto-sdk-app@0.1.20","maintainers":[{"name":"nejc-blotout","email":"nejc@blotout.io"}],"homepage":"https://github.com/blotoutio/qinto#readme","bugs":{"url":"https://github.com/blotoutio/qinto/issues"},"dist":{"shasum":"aa8ce6945f26889584f050270855adb2592d6368","tarball":"https://registry.npmjs.org/@blotout/qinto-sdk-app/-/qinto-sdk-app-0.1.20.tgz","fileCount":14,"integrity":"sha512-DAQIX9LmmlGzrRAAUUfZU0ZYjDlfJCZptRGXg5vFwYSB1qSz5MYEStp2GJDkl5vrjz8GciK82VbJtKmUCNJyLg==","signatures":[{"sig":"MEUCIDm9HGcbq2UzYqt1x/QHCE3xBydbjVGVDlc6aZjcr7zpAiEAoQvieqbNXpiM3jctpfZdYjkjG90U3q2Heqp/PzXpsmw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIH4NiLJxOQ28RUxkKNt43AN3tFXdM+7i7bGAEEJn0dPkAiEAsvOGe1bl+FZDWceamGkfaqy7WtAKOWzx0roeFH6/xxg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":992566},"type":"module","_from":"file:/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.20.tgz","exports":{"./ui":{"types":"./dist/ui.d.ts","import":"./dist/ui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"test":"vitest run","build":"vite build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate:schema":"tsx scripts/generate-schema.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"3bec5d36-0c2c-49b5-95de-349f174da9dc"}},"_resolved":"/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.20.tgz","_integrity":"sha512-DAQIX9LmmlGzrRAAUUfZU0ZYjDlfJCZptRGXg5vFwYSB1qSz5MYEStp2GJDkl5vrjz8GciK82VbJtKmUCNJyLg==","repository":{"url":"git+https://github.com/blotoutio/qinto.git","type":"git","directory":"projects/app/sdk"},"_npmVersion":"11.6.1","description":"Qinto app SDK: the authoring surfaces for Qinto platform apps — defineApp (server) and defineBrowserApp (browser) plus their hook, context, and action types. Zero runtime dependencies.","directories":{},"sideEffects":false,"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.13","zod":"4.5.4","vite":"8.2.2","vitest":"4.1.11","typescript":"6.0.3","@types/node":"25.9.5","vite-plugin-dts":"5.1.0","@qinto/app-envelope":"0.0.0","@qinto/app-manifest":"0.0.0","@vitest/coverage-v8":"4.1.11","@qinto/docs-contract":"0.0.0","@microsoft/api-extractor":"7.59.0"},"_npmOperationalInternal":{"tmp":"tmp/qinto-sdk-app_0.1.20_1790688104289_0.26666069654080027","host":"s3://npm-registry-packages-npm-production"}},"0.1.21":{"name":"@blotout/qinto-sdk-app","version":"0.1.21","_id":"@blotout/qinto-sdk-app@0.1.21","maintainers":[{"name":"nejc-blotout","email":"nejc@blotout.io"}],"homepage":"https://github.com/blotoutio/qinto#readme","bugs":{"url":"https://github.com/blotoutio/qinto/issues"},"dist":{"shasum":"5bce88f644c731b6aff8324421608a790357f036","tarball":"https://registry.npmjs.org/@blotout/qinto-sdk-app/-/qinto-sdk-app-0.1.21.tgz","fileCount":14,"integrity":"sha512-bJKFj8teQwUcLrCMdBDPiYJIOCvkZc5TFwgDO+2VnSHn7zP7WVupYo6qEYfMKuKf4tp0/1HY8bglD2v3DNDp2A==","signatures":[{"sig":"MEUCIG9VTlHh5HPYFM2I+DKNoDhdL1SrzEJR2FiTDTuANncVAiEAl/RDs9Hdt8DSmuSyN0/MSDjneY5J4Gl4s43Ay3QMexg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCe7BJrFjyvtbA+OssZrjZ4o6mljX2CAIi3lQ+iygYXWgIhAIcGYNO0P1NRHG9qnea32l7izfcQxTAKoAgF9GdG32YR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":992614},"type":"module","_from":"file:/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.21.tgz","exports":{"./ui":{"types":"./dist/ui.d.ts","import":"./dist/ui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"test":"vitest run","build":"vite build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate:schema":"tsx scripts/generate-schema.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"3bec5d36-0c2c-49b5-95de-349f174da9dc"}},"_resolved":"/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.21.tgz","_integrity":"sha512-bJKFj8teQwUcLrCMdBDPiYJIOCvkZc5TFwgDO+2VnSHn7zP7WVupYo6qEYfMKuKf4tp0/1HY8bglD2v3DNDp2A==","repository":{"url":"git+https://github.com/blotoutio/qinto.git","type":"git","directory":"projects/app/sdk"},"_npmVersion":"11.6.1","description":"Qinto app SDK: the authoring surfaces for Qinto platform apps — defineApp (server) and defineBrowserApp (browser) plus their hook, context, and action types. Zero runtime dependencies.","directories":{},"sideEffects":false,"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.13","zod":"4.5.4","vite":"8.2.2","vitest":"4.1.11","typescript":"6.0.3","@types/node":"25.9.5","vite-plugin-dts":"5.1.0","@qinto/app-envelope":"0.0.0","@qinto/app-manifest":"0.0.0","@vitest/coverage-v8":"4.1.11","@qinto/docs-contract":"0.0.0","@microsoft/api-extractor":"7.59.0"},"_npmOperationalInternal":{"tmp":"tmp/qinto-sdk-app_0.1.21_1790775937192_0.5586183189927594","host":"s3://npm-registry-packages-npm-production"}},"0.1.22":{"name":"@blotout/qinto-sdk-app","version":"0.1.22","_id":"@blotout/qinto-sdk-app@0.1.22","maintainers":[{"name":"nejc-blotout","email":"nejc@blotout.io"}],"homepage":"https://github.com/blotoutio/qinto#readme","bugs":{"url":"https://github.com/blotoutio/qinto/issues"},"dist":{"shasum":"5d14e6fd692fd925bd27db717bea4fc5d3729bec","tarball":"https://registry.npmjs.org/@blotout/qinto-sdk-app/-/qinto-sdk-app-0.1.22.tgz","fileCount":14,"integrity":"sha512-PpiVr5oE/MJvVLElX/FjBNaYwipdd7BfNV/21c0zN5oU7RvtqQIBiYuIjRMo7usEMIeuPlq+WceYngnEAlWo/Q==","signatures":[{"sig":"MEUCIQCYd/jbWt+7adr8UVJtfuYmzQr0aY5oGo4nA6qJOcKoZAIgbQm5WRZNR6BYSTQS4d0g7oqKUzdifTRw9JRwKp1R5/I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDYMsTxKCPwLQ9ysl2gl1t7V2BJP8fbbRvllb6nwIpbSQIgeUTp2zpEvirOPUdQ82t2FfhViLJjzrhDiOVFf2IVK2w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1006460},"type":"module","_from":"file:/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.22.tgz","exports":{"./ui":{"types":"./dist/ui.d.ts","import":"./dist/ui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"test":"vitest run","build":"vite build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate:schema":"tsx scripts/generate-schema.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"3bec5d36-0c2c-49b5-95de-349f174da9dc"}},"_resolved":"/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.22.tgz","_integrity":"sha512-PpiVr5oE/MJvVLElX/FjBNaYwipdd7BfNV/21c0zN5oU7RvtqQIBiYuIjRMo7usEMIeuPlq+WceYngnEAlWo/Q==","repository":{"url":"git+https://github.com/blotoutio/qinto.git","type":"git","directory":"projects/app/sdk"},"_npmVersion":"11.6.1","description":"Qinto app SDK: the authoring surfaces for Qinto platform apps — defineApp (server) and defineBrowserApp (browser) plus their hook, context, and action types. Zero runtime dependencies.","directories":{},"sideEffects":false,"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.13","zod":"4.5.4","vite":"8.2.2","vitest":"4.1.11","typescript":"6.0.3","@types/node":"25.9.5","vite-plugin-dts":"5.1.0","@qinto/app-envelope":"0.0.0","@qinto/app-manifest":"0.0.0","@vitest/coverage-v8":"4.1.11","@qinto/docs-contract":"0.0.0","@microsoft/api-extractor":"7.59.0"},"_npmOperationalInternal":{"tmp":"tmp/qinto-sdk-app_0.1.22_1790844119988_0.2609095081495567","host":"s3://npm-registry-packages-npm-production"}},"0.1.23":{"_id":"@blotout/qinto-sdk-app@0.1.23","bugs":{"url":"https://github.com/blotoutio/qinto/issues"},"dist":{"shasum":"6adea5fbc11989f6c697f12dbc15642c190f144c","tarball":"https://registry.npmjs.org/@blotout/qinto-sdk-app/-/qinto-sdk-app-0.1.23.tgz","fileCount":14,"integrity":"sha512-QF6fibKcyekqfCl8yVsu3wK/znaimHloDn//0Qy7er4Inp1w/ULtXvZcchQhDAX10yNw+mE5vzNekVHSuyqVAQ==","signatures":[{"sig":"MEUCIQD+ng0qsBA3FUwyuOAf77D/eRpMXQN69ejY7CoXFzfkZQIgVgPOjYo3JhSVuKDEjdCb/dTJBEh1CfiRQvuH0otShd4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFmFhriPNhT/d/lWNXOnPytbu/lCn5HOgyGUlE8wR5gYAiEA6X0DdWSwBDiHlXqWOhaEaNpkTpcDWjeUJGIJ7bAigAs="}],"unpackedSize":1006802},"name":"@blotout/qinto-sdk-app","type":"module","_from":"file:/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.23.tgz","exports":{"./ui":{"types":"./dist/ui.d.ts","import":"./dist/ui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"test":"vitest run","build":"vite build","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate:schema":"tsx scripts/generate-schema.ts"},"version":"0.1.23","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"3bec5d36-0c2c-49b5-95de-349f174da9dc"}},"homepage":"https://github.com/blotoutio/qinto#readme","_resolved":"/home/runner/work/_temp/pack/blotout-qinto-sdk-app-0.1.23.tgz","_integrity":"sha512-QF6fibKcyekqfCl8yVsu3wK/znaimHloDn//0Qy7er4Inp1w/ULtXvZcchQhDAX10yNw+mE5vzNekVHSuyqVAQ==","repository":{"url":"git+https://github.com/blotoutio/qinto.git","type":"git","directory":"projects/app/sdk"},"_npmVersion":"11.6.1","description":"Qinto app SDK: the authoring surfaces for Qinto platform apps — defineApp (server) and defineBrowserApp (browser) plus their hook, context, and action types. Zero runtime dependencies.","directories":{},"maintainers":[{"name":"nejc-blotout","email":"nejc@blotout.io"}],"sideEffects":false,"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.13","zod":"4.5.4","vite":"8.2.2","vitest":"4.1.11","typescript":"6.0.3","@types/node":"25.9.5","vite-plugin-dts":"5.1.0","@qinto/app-envelope":"0.0.0","@qinto/app-manifest":"0.0.0","@vitest/coverage-v8":"4.1.11","@qinto/docs-contract":"0.0.0","@microsoft/api-extractor":"7.59.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/qinto-sdk-app_0.1.23_1790928086197_0.8452347897618904"}}},"time":{"created":"2026-08-25T09:29:19.324Z","modified":"2026-10-02T08:01:26.499Z","0.1.0":"2026-08-25T09:29:19.719Z","0.1.1":"2026-08-25T10:18:23.358Z","0.1.2":"2026-08-25T18:59:03.252Z","0.1.3":"2026-08-26T05:14:12.770Z","0.1.4":"2026-08-26T07:01:39.397Z","0.1.5":"2026-08-26T17:16:28.335Z","0.1.6":"2026-08-27T07:12:43.984Z","0.1.7":"2026-08-28T17:27:45.527Z","0.1.8":"2026-08-29T11:55:29.455Z","0.1.9":"2026-08-31T09:39:53.127Z","0.1.10":"2026-09-01T18:10:10.492Z","0.1.11":"2026-09-04T10:44:59.523Z","0.1.12":"2026-09-04T20:15:31.664Z","0.1.13":"2026-09-06T09:39:49.277Z","0.1.14":"2026-09-14T12:31:02.683Z","0.1.15":"2026-09-21T12:39:13.484Z","0.1.16":"2026-09-23T15:42:04.590Z","0.1.17":"2026-09-24T14:35:58.641Z","0.1.18":"2026-09-24T20:27:00.099Z","0.1.19":"2026-09-28T04:42:53.822Z","0.1.20":"2026-09-29T13:21:44.409Z","0.1.21":"2026-09-30T13:45:37.292Z","0.1.22":"2026-10-01T08:42:00.072Z","0.1.23":"2026-10-02T08:01:26.281Z"},"bugs":{"url":"https://github.com/blotoutio/qinto/issues"},"homepage":"https://github.com/blotoutio/qinto#readme","repository":{"url":"git+https://github.com/blotoutio/qinto.git","type":"git","directory":"projects/app/sdk"},"description":"Qinto app SDK: the authoring surfaces for Qinto platform apps — defineApp (server) and defineBrowserApp (browser) plus their hook, context, and action types. Zero runtime dependencies.","maintainers":[{"name":"nejc-blotout","email":"nejc@blotout.io"}],"readme":"# @blotout/qinto-sdk-app\n\nThe authoring surface for Qinto platform apps: `defineApp` for the server, `defineBrowserApp` for the page,\n`createAppUi` for the settings panel, and the types each one hands your handlers. Zero runtime dependencies.\n\n## Why we built it\n\nA Qinto app is code that runs **on the platform**, inside the site's own edge. A site sends each visitor action once,\nand every app installed on it receives that action server-side: a **transform** app rewrites, enriches, or drops the\nevent before destinations see it, and a **destination** app forwards it onward. The site's own tracking code never\nchanges when a site adds your app.\n\nThat is a very different place to write code than either end you are used to:\n\n- **It is not a server you host.** There is no origin to run, scale, or pay for. You declare what your app needs in\n  `qinto.app.jsonc` — a KV namespace, a D1 database, a workflow, an HTTP endpoint, a cron schedule — and the platform\n  builds the Worker, provisions the bindings, and dispatches into your handlers.\n- **It is not a script in the customer's page.** The event reaches you one hop from where it was recorded, with the\n  visitor already resolved to an identity, the site's consent already applied, and the site's settings already filled\n  in. You never ask a customer to paste anything.\n- **Everything your app can do is declared.** Capabilities, captured names, published topics, and settings\n  a panel may write are what a site manager reads and accepts before installing — and again whenever a later version\n  widens them.\n\nThis package is the contract between your handlers and that runtime. It exists as a package, rather than as a shape you\nguess at, for three reasons:\n\n- **The types are the documentation.** What a `transform` hook may return, what rides on `ctx` in a scheduled run\n  versus a visitor action, which context is a value and which is a call — all of it is on hover.\n- **It ships `app.schema.json`.** Point your manifest's `$schema` at it and your editor completes and validates\n  `qinto.app.jsonc` offline, against the exact SDK version you installed.\n- **The definitions are checked before you publish.** `defineApp` records which hooks you actually declared, and the\n  CLI compares that against the manifest at `publish` and at `dev` — so a hook the manifest promises and the bundle\n  does not export fails on your machine, not at dispatch on a customer's site.\n\n## Install\n\n```sh\nnpm i @blotout/qinto-sdk-app\nnpm i -g @blotout/qinto-cli\n```\n\nUsually you do not: `qinto app create my-app` scaffolds a manifest, a server entry, and this dependency for you, and\noffers to register the app under your organization.\n\n## What you import\n\n| Entry | Exports | Runs |\n| --- | --- | --- |\n| `@blotout/qinto-sdk-app/server` | `defineApp`, `defineRpc`, `defineVisitorEndpoint`, `defineWorkflow`, `runAi`, `runAiBytes`, `atLeast` | In your app's Worker, on the platform. |\n| `@blotout/qinto-sdk-app/browser` | `defineBrowserApp` | In the visitor's page, inside the site's tag. |\n| `@blotout/qinto-sdk-app/ui` | `createAppUi`, `atLeast` | In your settings panel, framed by the Qinto platform. |\n\nThe package also ships `app.schema.json` for your manifest's `$schema`.\n\n## The server app\n\n```ts\nimport { defineApp } from '@blotout/qinto-sdk-app/server'\n\ntype Env = { PURCHASES: D1Database }\n\nexport default defineApp<Env>({\n  transform: {\n    track: async (action, ctx) => {\n      if (action.payload.event === 'Blocked Event') {\n        return ctx.drop()\n      }\n\n      return ctx.replace({ ...action.payload, properties: { ...action.payload.properties, siteTag: ctx.variables.SITE_TAG } })\n    }\n  },\n  onEvent: {\n    track: async (action, ctx) => {\n      const response = await fetch(String(ctx.variables.ENDPOINT_URL), {\n        method: 'POST',\n        headers: { 'content-type': 'application/json', authorization: `Bearer ${ctx.secrets.API_KEY}` },\n        body: JSON.stringify({ event: action.payload.event, properties: action.payload.properties, userId: action.userId })\n      })\n      if (!response.ok) {\n        ctx.observability.error('delivery refused', undefined, { status: response.status })\n\n        return\n      }\n\n      ctx.observability.log('track delivered', { event: action.payload.event })\n    }\n  },\n  onDeleteRequest: async (event, ctx) => {\n    await ctx.env.PURCHASES.prepare('DELETE FROM purchases WHERE anon_id IN (SELECT value FROM json_each(?))')\n      .bind(JSON.stringify(event.anonIds))\n      .run()\n  }\n})\n```\n\n`defineApp` takes one object. Every key below is optional except `onDeleteRequest`, and an unknown key is refused rather\nthan ignored.\n\nEvery visitor action includes `receivedAt` and `source` — where it came from: `website` (the browser SDK),\n`api` (the site's own server), `app` (an app's `emit` or install-token call), or `scheduled`, `webhook`, `tool`\nor `workflow` (an app handler's `ctx.track`). `source` is `undefined` only on a site whose worker predates the\nfield. `action.context` additionally carries `occurredAt`,\nsource/page/network data, and a browser session as `{ id, isNew, startedAt }` when available.\nA session ends after 30 minutes with no page load or reconnect. All tabs of a visitor on one site\nshare it. `isNew` is `true` only on its first action, and `startedAt` is fixed when Qinto starts the\nsession, so destinations can make stable session-cutoff decisions.\n\n| Key | What it is for |\n| --- | --- |\n| `transform` | `track` and `identify` hooks that run **before** destinations, and return `ctx.pass()`, `ctx.drop()`, or `ctx.replace(payload)`. A `track` transform can pass `{ installs: { mode, installIds } }` as the last argument of `pass` or `replace` to keep the event from some installs, with the same rule `ctx.track` takes. Every transform's rule and the one on the action apply together: an install receives the event only if every rule allows it. Every install still runs its own transform. |\n| `onEvent` | `track`, `identify`, and `consent` hooks that run after the transform chain — where a destination does its work. |\n| `onConnect` | Runs once when a visitor's page connects, before any action. `ctx.page` names that page when the manifest declares the `eventContext` data bucket. |\n| `onLifecycle` | Advisory notices that the install changed: `installed`, `configurationChanged`, `enabled`, `disabled`, `versionChanged`, `uninstalled`. They observe; they never approve. |\n| `onDeleteRequest` | Required. The manifest declares nothing for it, and the build refuses a bundle without it. Erases a person after a site manager handles a delete request: one delivery per install, disabled installs included, with the person id, every linked anon id, and the raw identifiers when the manifest declares the `pii` data bucket. A throw is retried with backoff, so the handler must be safe to run twice. |\n| `schedules` | Cron handlers, keyed by the ids the manifest declares. |\n| `endpoints` | HTTP handlers served at `https://<site>/app/<slug><path>`. Webhooks have a 60-second total deadline; API handlers must return headers within 60 seconds and may then stream for up to five minutes, with a 150-second idle deadline. An `auth: \"visitor\"` endpoint is built with `defineVisitorEndpoint` and called from your browser code with `app.fetch`. |\n| `rpc` | Functions other apps on the same site may call, each built with `defineRpc` and keyed by the name the manifest's `rpc.exposes` declares. |\n| `ui` | The server side of your settings panel, reached at `<siteOrigin>/apps/<slug>/ui<path>`. |\n| `workflows` | Durable runs built with `defineWorkflow`, keyed by the class name the manifest declares. |\n| `migrations` | Resumable backfill handlers named by a D1 migration. |\n\n### What each handler is handed\n\nYou name none of these for a handler written inline — `defineApp` infers every one. They are the names to\nreach for when a handler is lifted into its own function or file:\n\n| Hook | Handler receives | Must return |\n| --- | --- | --- |\n| `transform.track` | `AppTrackAction`, `AppTransformContext<Env, AppTrackPayload>` | `TransformResult` |\n| `transform.identify` | `AppIdentifyAction`, `AppTransformContext<Env, AppIdentifyPayload>` | `TransformResult` |\n| `onEvent.track` | `AppTrackAction`, `AppContext<Env>` | nothing |\n| `onEvent.identify` | `AppIdentifyAction`, `AppContext<Env>` | nothing |\n| `onEvent.consent` | `AppConsentAction`, `AppContext<Env>` | nothing |\n| `onConnect` | `AppConnectContext<Env>` | nothing |\n| `onLifecycle.<type>` | that type's event — `AppInstalledEvent`, `AppConfigurationChangedEvent`, `AppEnabledEvent`, `AppDisabledEvent`, `AppVersionChangedEvent`, `AppUninstalledEvent` — and `AppLifecycleContext<Env>` | nothing |\n| `onDeleteRequest` | `AppDeleteRequestEvent`, `AppLifecycleContext<Env>` | nothing |\n| `schedules.<id>` | `AppScheduleEvent`, `AppScheduleContext<Env>` | nothing |\n| `endpoints.<path>` | `Request`, `AppEndpointContext<Env>` | `Response`, or `ctx.skip()` as `EndpointSkip` |\n| `endpoints.<path>` built with `defineVisitorEndpoint` | `Request`, `AppVisitorEndpointContext<Env>`, whose `user` is the calling visitor | `Response` |\n| `tools.<name>` | the validated arguments as `Record<string, unknown>`, `AppToolContext<Env>` | `AppToolResult`, or `ctx.fail()` as `AppToolFailure` |\n| `rpc.<fn>` | the caller's arguments, parsed by the `input` schema `defineRpc` was given, and `AppRpcContext<Env>` | a value the `output` schema accepts |\n| `ui` | `Request`, `AppUiContext<Env>` | `Response` |\n| `migrations.<id>` | `{ id, checkpoint }`, `AppMigrationContext<Env>` | `AppMigrationResult` |\n| `workflows.<Class>` | `AppWorkflowEvent<Params>`, `AppWorkflowStep`, `AppWorkflowContext<Env>` | anything |\n\nA transform context is the one that takes a second argument: `replace` accepts the payload of the action being\ntransformed, so a track handler and an identify handler carry different contexts and neither can be written\nagainst both. Only the track context's `pass` and `replace` take `AppTransformOptions`. A workflow event takes the\npayload you declare, which `defineWorkflow<Env, Params>` supplies.\n\n### What rides on `ctx`\n\n| | |\n| --- | --- |\n| `ctx.env` | The bindings your manifest's `resources` declared — typed by the `Env` you pass to `defineApp<Env>`. A pipeline binding's `send` is retried for you on a transient Cloudflare failure; the manifest reference says what that means for a sink. |\n| `ctx.variables`, `ctx.secrets` | This install's settings, filled in by the site manager. |\n| `ctx.appVariables`, `ctx.appSecrets` | Your own settings, one value for every site that installs the app. |\n| `ctx.install`, `ctx.site` | Which install this invocation is for, and which site it is on: `site.origin` is the customer's site (`https://<root domain>`), `site.domain` the first-party hostname the site's worker answers on, `site.devUrl` the origin of its workers.dev development URL or null. |\n| `ctx.geo` | The current request's complete Cloudflare `cf` object when the app declares the `geo` data capability. On an endpoint this describes the endpoint caller, not a stored visitor. |\n| `ctx.user` | The visitor: `anonId`, `globalId`, `createdAt` (first seen, epoch ms; hooks only), stored `properties`, and geo when granted. |\n| `ctx.consent` | `{ enabled, categories, apps }`, when `consentState` is granted. Your manifest's category is already enforced before you are called. |\n| `ctx.emit` | Emit a `track` of your own back into the pipeline. Your app never receives its own emission. Pass `{ installs: { mode, installIds } }` as a second argument to pick the installs that receive it, with the same rules as `ctx.track`. |\n| `ctx.push` | Send a message down the visitor's live connection, to your browser code. |\n| `ctx.captures` | Read the click ids and cookies your manifest captures for this visitor, typed `attribution` or `identity`, and write derived ones. |\n| `ctx.facts` | Read stable, paginated retained visitor facts with `list(filters)` and opaque continuation cursors; requires the `facts` data capability. A transform sees the last committed page, not the event it is rewriting. |\n| `ctx.currency` | Exchange rates, the same on every site: `convert(amount, from, to)`, `rate(from, to)`, `list()` and `updatedAt()`, all async. Codes are trimmed and uppercased, an unknown code gives `null`, and `convert` does not round. The first call in an invocation reads the rates from the site, and the calls after it are local. When the platform has no rates, every call rejects, and the next call asks the site again. On transforms, `onEvent`, `onConnect`, rpc, schedules, lifecycle and delete request hooks, migrations, tools, endpoints, workflows and the `ui` handler. Not in your Durable Objects. Needs no capability. |\n| `ctx.context` | Per-visitor state your app keeps: a `private` level only you read, and a `shared` level every app on the site can. |\n| `ctx.apps` | Call another installed app's exposed rpc functions through the site's broker. Arguments the callee's `input` schema rejects reject the call with `invalid_arguments: <path>: <message>`. Not on transforms — an RPC from inside the ingest turn would wait on work queued behind itself. |\n| `ctx.track` | On a scheduled run, an endpoint, a tool and a workflow step: record a track for a visitor you name by `anon_…` id. It arrives at every app on the site, yours included, with `action.source` naming the handler kind. Pass `{ installs: { mode, installIds } }` as a third argument to pick the installs that receive it: `except` keeps it from the listed installs, `only` sends it to them alone. An id that names no install is ignored, and `{ mode: 'only', installIds: [] }` reaches no install while the event is still stored. |\n| `ctx.startWorkflow` | Start one of your declared workflows, carrying this install — and the visitor — into the run. |\n| `ctx.observability` | `log`, `error`, and `span`. Everything you record shows up in the site's real-time console, next to the platform's own spans; a plain `fetch` is traced for you. |\n\nA scheduled run, MCP tool, endpoint, and workflow step carry a narrower context — they have no visitor, so there is no\n`user`, `consent`, or `emit` there. `track(userId, event)` names its subject instead, and on a scheduled run and an\nendpoint so do `push` and `context`. An endpoint still carries\nthe current caller's `cf` object in `ctx.geo` when the app declares the `geo` data capability. Scheduled runs and MCP\ntools can query a catalog-enabled R2 resource with `ctx.query.catalog(resourceIdentifier, sql)` and an Analytics Engine\ndataset with `ctx.query.analytics(resourceIdentifier, sql)` — name the dataset by its resource identifier in `FROM`;\nQinto keeps the physical bucket, the dataset name, and the credential out of the app worker. The types say which\ncapability is available where.\n\n`ctx.context(userId)` takes an `anon_…` id. Context is stored per device, so to act for a person you know only by an\nidentifier, resolve it (this needs the `identity` data capability) and write to each session. A session that links to\nthe person later does not receive an earlier write.\n\n```ts\nlet cursor: string | undefined\ndo {\n  const person = await ctx.identity.resolve('jane@example.com', { cursor })\n  for (const anonId of person.anonIds) {\n    await ctx.context(anonId).shared.set({ kv: { tier: 'gold' } })\n    await ctx.track(anonId, { type: 'track', payload: { event: 'Tier Upgraded', properties: { tier: 'gold' } } })\n  }\n\n  cursor = person.nextCursor ?? undefined\n} while (cursor !== undefined)\n```\n\nTo attribute a server-side event to someone the graph may not know yet, such as the buyer of an order, call\n`ctx.identity.upsert` with their identifiers and PII. It resolves through the email, then the phone, then the custom\nid, creates a new anon id when that identifier has none (`created: true`), and links the other identifiers unless\nanother person already owns them. Transforms run on it as on any identify, but no app receives an identify for it. A new anon has no\nconsent yet, so on a site that enforces consent only `necessary` apps receive its events.\n\n```ts\nconst { anonId } = await ctx.identity.upsert({ email: order.email, phone: order.phone, firstName: order.firstName, observedAt: order.createdAt })\nawait ctx.track(anonId, { type: 'track', occurredAt: order.createdAt, payload: { event: 'Purchase', properties: { eventId: order.id, value: order.total } } })\n```\n\n### Functions for other apps\n\n```ts\nimport { defineApp, defineRpc } from '@blotout/qinto-sdk-app/server'\nimport { z } from 'zod'\n\nexport default defineApp<Env>({\n  onDeleteRequest: async () => {},\n  rpc: {\n    send: defineRpc({\n      input: z.object({ to: z.email(), subject: z.string() }),\n      output: z.object({ id: z.string() }),\n      handler: async (args, ctx) => {\n        return { id: await deliver(args, ctx.secrets.API_KEY) }\n      }\n    })\n  }\n})\n```\n\n`input` and `output` are any schemas implementing the Standard Schema and Standard JSON Schema interfaces — zod 4 does.\nThe handler receives the parsed arguments and its result is parsed before it reaches the caller; a result the `output`\nschema rejects fails the call on the callee's side. `qinto app publish` extracts both schemas as JSON Schema into the\nversion's RPC contract, which is what `qinto app dev` turns into a typed mock for the apps that call you.\n\n### Durable work\n\n```ts\nimport { defineApp, defineWorkflow } from '@blotout/qinto-sdk-app/server'\n\nexport default defineApp<Env>({\n  onDeleteRequest: async () => {},\n  endpoints: {\n    '/webhook': async (request, ctx) => {\n      await ctx.startWorkflow(ctx.env.ORDER_SYNC, { orderId: '123' }, { id: 'order-123' })\n\n      return new Response('queued', { status: 202 })\n    }\n  },\n  workflows: {\n    OrderSync: defineWorkflow<Env, { orderId: string }>(async (event, step, ctx) => {\n      const order = await step.do('fetch', async () => {\n        return fetchOrder(event.payload.orderId, ctx.secrets.API_KEY)\n      })\n\n      await step.sleep('settle', '1 hour')\n      await step.do('notify', async () => {\n        await ctx.push({ topic: 'order:synced', data: order })\n      })\n    })\n  }\n})\n```\n\nCloudflare owns the retries, the sleeps, and the per-step persistence, so a destination does not hand-roll its own\nretry loop. Passing `options.id` names the instance, which is how a retried vendor webhook avoids starting a second run.\n\n### Workers AI\n\nQinto hands out no `AI` binding: a binding would spend the hosting account's inference allowance with no way to\nattribute or cap it. `runAi` calls Cloudflare's `/ai/run` endpoint with a token **you** supply, so the run bills\nyour account.\n\n```ts\nimport { runAi } from '@blotout/qinto-sdk-app/server'\n\nconst { response } = await runAi<{ response: string }>({\n  accountId: ctx.appVariables.CF_ACCOUNT_ID,\n  apiToken: ctx.appSecrets.CF_AI_TOKEN,\n  model: '@cf/meta/llama-3.1-8b-instruct',\n  input: { prompt: 'Summarise this basket' }\n})\n```\n\nThe token needs **Account → Workers AI → Read**; one holding only an AI Gateway permission is refused, and `runAi`\nsays so rather than passing on Cloudflare's bare `Authentication error`. It also unwraps the response envelope and\nraises the refusals Cloudflare returns under HTTP 200.\n\nSome models answer bytes rather than an envelope — `@cf/myshell-ai/melotts` documents both `application/json` and a\nraw `audio/mpeg` body, and picks per run. `runAiBytes` reads those, returning the content type alongside the bytes:\n\n```ts\nconst { contentType, bytes } = await runAiBytes({\n  accountId: ctx.appVariables.CF_ACCOUNT_ID,\n  apiToken: ctx.appSecrets.CF_AI_TOKEN,\n  model: '@cf/myshell-ai/melotts',\n  input: { prompt: 'Your order has shipped', lang: 'en' }\n})\n```\n\nThe two read the same run and disagree only about the body, so each says which one the answer wanted: `runAi` raises\n`ai_invalid_response` naming the content type it got, and `runAiBytes` raises `ai_json_response` when the run\nanswered an envelope after all. Refusals map to the same errors from either.\n\nBoth read one buffered answer, so both refuse `input.stream: true` rather than sending a run whose server-sent\nevents neither can parse — the refusal comes before the request, so a stream you meant to consume is never billed.\nCall `/ai/run` yourself when you want to stream.\n\nCloudflare refuses a `@cf/` model that names no gateway, so `runAi` sends `default` for one — the single gateway id\nCloudflare creates on first use, with logging on, caching off, and Standard billing. Pass `gatewayId` to route\nthrough one of your own instead, which is where spend limits and per-model settings live; any id other than\n`default` must exist before you use it. A third-party model (`openai/…`, `anthropic/…`) needs no gateway and gets\nno header.\n\nDeclare both values in the manifest's `appVariables` so they are yours and set once, not asked of every site that\ninstalls the app — the token with `qinto app secret set`, the account id with `qinto app var set`.\n\nFor chat completions, point the OpenAI SDK at the account's `/ai/v1/chat/completions` instead; that path is\nOpenAI-compatible and needs nothing from us. The gateway rule still applies there, so a `@cf/` model needs the\nheader set on the client:\n\n```ts\nconst client = new OpenAI({\n  apiKey: ctx.appSecrets.CF_AI_TOKEN,\n  baseURL: `https://api.cloudflare.com/client/v4/accounts/${ctx.appVariables.CF_ACCOUNT_ID}/ai/v1`,\n  defaultHeaders: { 'cf-aig-gateway-id': 'default' }\n})\n```\n\n## The browser app\n\nAn app may also ship code that runs in the page, inside the site's tag. The factory runs once per active install, and\nonly for a visitor whose consent covers your app.\n\n```ts\nimport { defineBrowserApp } from '@blotout/qinto-sdk-app/browser'\n\nexport default defineBrowserApp((app) => {\n  app.onEvent((event) => {\n    return { observedAt: Date.now(), siteTag: app.variables.SITE_TAG }\n  })\n\n  app.onPush((message) => {\n    console.info('server push', message.from, message.topic, message.data)\n  })\n})\n```\n\nThe factory receives `BrowserAppApi`:\n\n| | | Type |\n| --- | --- | --- |\n| `app.variables`, `app.install` | This install's browser-exposed plain settings, and which install it is. Secrets never reach the page. | `BrowserAppInstall` |\n| `app.getSession` | The current `anonId` and linked `globalId`. Apps declaring the `geo` data capability also receive the server-observed `ip` and `geo: { country, region, state, isEU }`; otherwise both location fields are `null`. | `BrowserAppSession` |\n| `app.onEvent` | Every action on the page. What you return reaches your own server hook for that same action as `action.browser`, when the manifest allows it — treat it as untrusted page input. | `BrowserAppEvent` |\n| `app.onTransform` | A synchronous hook on every page `track`, before any install's `onEvent`. It receives the track and the page URL. Return nothing to let the event through, `{ installs }` to keep the installs that rule excludes from running `onEvent` (the event is still sent), or `false` to cancel the event on the page. A hook that throws lets the event through, and two transform installs combine by intersection. Identify, consent and an app's own `track` skip it. Needs `flows: [\"transform\"]` and `browser.hooks: [\"transform\"]`. The server never reads the result. | `BrowserTrackEvent`, `BrowserTransformResult` |\n| `app.onConsent` | The visitor's consent, on connect and on every change. | `BrowserConsentState` |\n| `app.onPush` | Messages your server code sent with `ctx.push`. A page that was closed missed them; pushes are never replayed. | `BrowserPushMessage` |\n| `app.onSharedContext` | What every contributing app knows about this visitor, where both sides declared the capability. | `BrowserSharedContext` |\n| `app.track` | Send an event of your own. | — |\n| `app.fetch` | Call one of your own `auth: \"visitor\"` endpoints as this visitor and install: `app.fetch('/ask', { method: 'POST', body })`. The response may stream; the body is capped at 2 MiB. | `Response` |\n\n## The settings panel\n\nA panel is a static page the Qinto platform frames when a site manager configures your app. `createAppUi` is the bridge\nto the page around it.\n\n```ts\nimport { createAppUi } from '@blotout/qinto-sdk-app/ui'\n\nconst ui = createAppUi()\nconst context = await ui.getContext()\n\nconst response = await ui.fetch('/analytics', {\n  method: 'POST',\n  headers: { 'content-type': 'application/json' },\n  body: JSON.stringify({ installId: context.appInstallId })\n})\n\nconst events = await ui.query.catalog(\n  'lake',\n  'SELECT event_name, event_timestamp FROM lake.events ORDER BY event_timestamp DESC LIMIT 100'\n)\n\nconst usage = await ui.query.analytics(\n  'events',\n  'SELECT blob1 AS name, SUM(_sample_interval) AS count FROM events WHERE timestamp > NOW() - INTERVAL \\'1\\' DAY GROUP BY name'\n)\n```\n\n`createAppUi` returns `AppUi`:\n\n| | | Resolves to |\n| --- | --- | --- |\n| `getContext()` | The team, the site (its origin and worker hostname, plus the origin this panel fetches from), your app and version, the install the panel was opened for, every live install with its plain variables, the viewer's time zone, and the theme. | `AppUiPanelContext` |\n| `getToken()` | The current panel token, renewed before it expires. | `string` |\n| `fetch(path, init?)` | Calls your own `ui` server handler with that token attached, and returns the raw `Response`. Parse it, and decide yourself what a 429 or a 5xx means. | `Response` |\n| `query.catalog(resourceIdentifier, sql)` | Runs R2 SQL against a catalog-enabled R2 resource in the version serving this panel. The same method is available on scheduled-run and MCP-tool contexts. Qinto keeps the physical bucket and host credential server-side and returns `{ rows, meta }`. | `AppCatalogQueryResult` |\n| `query.analytics(resourceIdentifier, sql)` | Runs one single-table `SELECT` against an `analytics_engine` resource in the version serving this panel; name the dataset by its resource identifier in `FROM`. Also on scheduled-run and MCP-tool contexts. Qinto substitutes the real dataset name server-side and returns `{ rows }`; a never-written dataset returns none. | `AppAnalyticsQueryResult` |\n\nThe two sides of a panel each have a context, and they are different objects: `AppUiPanelContext` is what\n`getContext()` gives the page, and `AppUiContext<Env>` is what your own `ui` handler receives on the other\nend of `fetch`. The page one carries no secret and no binding; the server one carries both.\n\n`appRole` is the viewer's app role on this site — `full` or a role your manifest's `roles` declares. Use\n`atLeast(context, 'editor')` to show or hide features, buttons and navigation, and refuse on the server with\n`atLeast(ctx.viewer, 'editor')` in your `ui` handler: the panel runs in the viewer's browser, so a check made only there\nis not security. `full` passes every `atLeast`.\n\n`siteInstalls` lists the other apps' enabled installs on the site as `{ id, appSlug, appName, label }`, on both\n`getContext()` and the server handler's `ctx`. It is there only when your manifest declares the `siteInstalls` data\ncapability, and absent otherwise. Use it to let the site manager pick installs, then pass their ids to `ctx.track` in its\n`installs` rule. Check a posted id against `ctx.siteInstalls` on the server, as with `ctx.installs`.\n\n`timeZone` is the IANA zone the viewing user set in their Qinto profile (`UTC` until they have one). Format\ntimes with it — `new Intl.DateTimeFormat(undefined, { timeZone })` — instead of shipping a zone picker of your own.\n\nThe platform gives the panel the whole area under the site's header and nothing else — size your page to it and let it\nscroll inside, the way any page in a window does.\n\nA link to another site opens a new tab: give it `target=\"_blank\"`, or call `window.open`. The tab is a normal one,\noutside the sandbox. The frame itself stays on your panel's own origin — the platform refuses any other origin inside\nit, and it never leaves the page on the panel's behalf except through `connect`.\n\nYour panel runs in the viewer's browser, so it never receives a secret. The install id it posts is input, not\nauthority — resolve it against `ctx.installs` in the server handler, which the platform built from the site's own\nregistry.\n\n## The manifest\n\n`qinto.app.jsonc` is the app: it names it, says where it plugs into the pipeline, and declares everything it may reach.\nPoint `$schema` at the file this package ships and your editor does the rest:\n\n```jsonc\n{\n  \"$schema\": \"./node_modules/@blotout/qinto-sdk-app/app.schema.json\",\n  \"slug\": \"my-app\",\n  \"name\": \"My App\",\n  \"flows\": [\"destination\"],\n  \"consent\": { \"category\": \"analytics\" },\n  \"legal\": { \"termsUrl\": \"https://example.com/terms\", \"privacyUrl\": \"https://example.com/privacy\" },\n  \"server\": {\n    \"entry\": \"src/server.ts\",\n    \"hooks\": { \"transform\": [], \"onEvent\": [\"track\"], \"onConnect\": false }\n  }\n}\n```\n\nThe manifest is authoritative: `server.hooks` must match the hooks your entry exports, every declared schedule,\nworkflow class, and backfill handler must exist, and a `ui` block needs a `ui` handler. The CLI checks all of it before\nanything is uploaded.\n\n## The loop\n\n```sh\nqinto app create my-app      # scaffold, install, register\nqinto app dev                # run it against a local Qinto — real platform bundles, no account, no login\nqinto app publish            # build, upload, and publish an immutable version\nqinto app install my-app --site example.com\nqinto app status my-app --site example.com\n```\n\n`qinto app dev` boots the released site worker and app runtime in workerd, with a console, a demo site, and a live\ntrace of every request — so the transform chain, the consent gate, and the dispatch into your hooks are the real ones.\n\n## Documentation\n\nThe manifest reference, the app limits, the standard events, and the CLI are at [docs.blotout.io](https://docs.blotout.io).\n","readmeFilename":"README.md"}