{"_id":"@terreno/admin-spa","_rev":"30-bb665809e2f5f32230076b8ca540f728","name":"@terreno/admin-spa","dist-tags":{"beta":"57.0.0-beta.1","latest":"57.7.0"},"versions":{"0.17.0":{"name":"@terreno/admin-spa","version":"0.17.0","keywords":["admin","api","expo","express","spa","terreno"],"author":{"name":"Josh Gachnang"},"license":"Apache-2.0","_id":"@terreno/admin-spa@0.17.0","maintainers":[{"name":"ashflourishing","email":"ashutosh@flourish.health"},{"name":"servercobra","email":"josh@nang.io"}],"homepage":"https://github.com/FlourishHealth/terreno#readme","bugs":{"url":"https://github.com/FlourishHealth/terreno/issues"},"dist":{"shasum":"00be2b7b65d08ae44c30a4fee97e9294d29db2a2","tarball":"https://registry.npmjs.org/@terreno/admin-spa/-/admin-spa-0.17.0.tgz","fileCount":106,"integrity":"sha512-38cIzAG/r1J3RFKwfryuZG8ujyWWsqANwbZXerHOlyitR0SqXONs144e47uAnCSqbSFlCHiya1v93waSVAz/Uw==","signatures":[{"sig":"MEYCIQCr6xvBo2psSOJFBEltDDKMbcsZvvGTmaAF3zmGi2c+ZgIhAP+psOJBhUHUeTYUVc/p+xnytY5MFbJi9vexttibXInQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14239296},"main":"expo-router/entry","types":"./src/dist/index.d.ts","exports":{".":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./serve":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./package.json":"./package.json"},"gitHead":"22f08353c4c3491a3a1cdfe0dd06915910776610","scripts":{"dev":"expo start --web --port 8083","web":"expo start --web --port 8083","lint":"biome check ./src ./app ./store ./components ./e2e playwright.config.ts","test":"bun test ./src","smoke":"bun e2e/smoke.ts","start":"expo start","compile":"tsc -p tsconfig.server.json","test:ci":"bun test ./src","lint:fix":"biome check --write ./src ./app ./store ./components ./e2e playwright.config.ts","test:e2e":"playwright test","build:web":"expo export --platform web --output-dir dist","compile:watch":"tsc -p tsconfig.server.json -w"},"_npmUser":{"name":"servercobra","email":"josh@nang.io"},"repository":{"url":"git+ssh://git@github.com/FlourishHealth/terreno.git","type":"git"},"_npmVersion":"10.9.8","description":"Opt-in admin SPA (Expo Router web app) plus an Express plugin that serves it from a Terreno backend","directories":{},"_nodeVersion":"22.22.3","dependencies":{"expo":"~54.0.29","luxon":"^3.7.2","react":"19.1.0","express":"^5.2.1","expo-font":"~14.0.10","react-dom":"19.1.0","@terreno/ui":"0.17.0","better-auth":"^1.2.8","expo-router":"~6.0.19","react-redux":"^9.2.0","@terreno/rtk":"0.17.0","expo-linking":"~8.0.10","react-native":"0.81.5","redux-persist":"^6.0.0","expo-constants":"~18.0.12","expo-status-bar":"~3.0.9","@reduxjs/toolkit":"^2.11.1","react-native-web":"~0.21.0","@expo/vector-icons":"^15.0.3","expo-splash-screen":"~31.0.12","react-native-screens":"~4.16.0","http-proxy-middleware":"^3.0.3","react-native-worklets":"~0.7.","@terreno/admin-frontend":"0.17.0","react-native-reanimated":"~4.1.1","@react-navigation/native":"^7.1.8","react-native-gesture-handler":"~2.28.0","react-native-safe-area-context":"~5.6.0","@react-native-async-storage/async-storage":"2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"supertest":"^7.0.0","@types/bun":"^1.2.4","typescript":"~5.9.2","@terreno/api":"0.17.0","@types/luxon":"^3.7.1","@types/react":"~19.1.10","@biomejs/biome":"^2.3.6","@types/express":"^5.0.6","@playwright/test":"^1.58.2","@types/supertest":"^6.0.2","babel-preset-expo":"~54.0.10"},"peerDependencies":{"@terreno/api":"0.17.0"},"_npmOperationalInternal":{"tmp":"tmp/admin-spa_0.17.0_1780598593904_0.4035994538678982","host":"s3://npm-registry-packages-npm-production"}},"0.18.0":{"name":"@terreno/admin-spa","version":"0.18.0","keywords":["admin","api","expo","express","spa","terreno"],"author":{"name":"Josh Gachnang"},"license":"Apache-2.0","_id":"@terreno/admin-spa@0.18.0","maintainers":[{"name":"ashflourishing","email":"ashutosh@flourish.health"},{"name":"servercobra","email":"josh@nang.io"}],"homepage":"https://github.com/FlourishHealth/terreno#readme","bugs":{"url":"https://github.com/FlourishHealth/terreno/issues"},"dist":{"shasum":"1c0040bfcde6e6b71fb0d75a492ea0fa8ebf4fd9","tarball":"https://registry.npmjs.org/@terreno/admin-spa/-/admin-spa-0.18.0.tgz","fileCount":106,"integrity":"sha512-XYvfSESw+hQro3rQnuPCka3lODWeM6Si/lAIpvjxys/wB7yJ5t1HBnsxevg/xbvF1CAnt8h+TA6MP9mBGYlUBw==","signatures":[{"sig":"MEUCIEFGM9cEoIHEHYtnP72gXt2nNkAZnSjWdWzt4SnRfHWmAiEAjevVYR46hRF5rky0j/aWTEGBGR0+EHE9CQG9SXaiVlM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14240760},"main":"expo-router/entry","types":"./src/dist/index.d.ts","exports":{".":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./serve":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./package.json":"./package.json"},"gitHead":"ca900ce19a816bc48e2076c03b99c91b0d983eb2","scripts":{"dev":"expo start --web --port 8083","web":"expo start --web --port 8083","lint":"biome check ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test":"bun test ./src","smoke":"bun e2e/smoke.ts","start":"expo start","compile":"tsc -p tsconfig.server.json","test:ci":"bun test ./src","lint:fix":"biome check --write ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test:e2e":"playwright test","build:web":"expo export --platform web --output-dir dist","compile:watch":"tsc -p tsconfig.server.json -w","test:integration":"playwright test --config playwright.integration.config.ts"},"_npmUser":{"name":"servercobra","email":"josh@nang.io"},"repository":{"url":"git+ssh://git@github.com/FlourishHealth/terreno.git","type":"git"},"_npmVersion":"10.9.8","description":"Opt-in admin SPA (Expo Router web app) plus an Express plugin that serves it from a Terreno backend","directories":{},"_nodeVersion":"22.22.3","dependencies":{"expo":"~54.0.29","luxon":"^3.7.2","react":"19.1.0","express":"^5.2.1","expo-font":"~14.0.10","react-dom":"19.1.0","@terreno/ui":"0.18.0","better-auth":"^1.2.8","expo-router":"~6.0.19","react-redux":"^9.2.0","@terreno/rtk":"0.18.0","expo-linking":"~8.0.10","react-native":"0.81.5","redux-persist":"^6.0.0","expo-constants":"~18.0.12","expo-status-bar":"~3.0.9","@reduxjs/toolkit":"^2.11.1","react-native-web":"~0.21.0","@expo/vector-icons":"^15.0.3","expo-splash-screen":"~31.0.12","react-native-screens":"~4.16.0","http-proxy-middleware":"^3.0.3","react-native-worklets":"~0.7.","@terreno/admin-frontend":"0.18.0","react-native-reanimated":"~4.1.1","@react-navigation/native":"^7.1.8","react-native-gesture-handler":"~2.28.0","react-native-safe-area-context":"~5.6.0","@react-native-async-storage/async-storage":"2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"supertest":"^7.0.0","@types/bun":"^1.2.4","typescript":"~5.9.2","@terreno/api":"0.18.0","@types/luxon":"^3.7.1","@types/react":"~19.1.10","@biomejs/biome":"^2.3.6","@types/express":"^5.0.6","@playwright/test":"^1.58.2","@types/supertest":"^6.0.2","babel-preset-expo":"~54.0.10"},"peerDependencies":{"@terreno/api":"0.18.0"},"_npmOperationalInternal":{"tmp":"tmp/admin-spa_0.18.0_1781154673908_0.5310686141439975","host":"s3://npm-registry-packages-npm-production"}},"0.19.0":{"name":"@terreno/admin-spa","version":"0.19.0","keywords":["admin","api","expo","express","spa","terreno"],"author":{"name":"Josh Gachnang"},"license":"Apache-2.0","_id":"@terreno/admin-spa@0.19.0","maintainers":[{"name":"ashflourishing","email":"ashutosh@flourish.health"},{"name":"servercobra","email":"josh@nang.io"}],"homepage":"https://github.com/FlourishHealth/terreno#readme","bugs":{"url":"https://github.com/FlourishHealth/terreno/issues"},"dist":{"shasum":"f25cdb4fd86b239c5dd2a1622f0dda0d7a56aa60","tarball":"https://registry.npmjs.org/@terreno/admin-spa/-/admin-spa-0.19.0.tgz","fileCount":106,"integrity":"sha512-DKMJGDoIqqP0hUpuRy5vxQestmduPd4mI6f5sDWcwyoyLlK3DVFRMPvWI7HzdgFd7Rsk9A8W0r8TeJMWtNRayQ==","signatures":[{"sig":"MEQCID1DGWr4UefQeD9kP9M66r5+PGHKM00+S4K15ZkwsG4EAiAAk+Pg+mlS1yCJJqFNGSAwvMACRk15Ud9/Ey/zMqooDw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14240760},"main":"expo-router/entry","types":"./src/dist/index.d.ts","exports":{".":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./serve":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./package.json":"./package.json"},"gitHead":"b8fdcd19bac1e62be35e6c03cb02112c69f527be","scripts":{"dev":"expo start --web --port 8083","web":"expo start --web --port 8083","lint":"biome check ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test":"bun test ./src","smoke":"bun e2e/smoke.ts","start":"expo start","compile":"tsc -p tsconfig.server.json","test:ci":"bun test ./src","lint:fix":"biome check --write ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test:e2e":"playwright test","build:web":"expo export --platform web --output-dir dist","compile:watch":"tsc -p tsconfig.server.json -w","test:integration":"playwright test --config playwright.integration.config.ts"},"_npmUser":{"name":"servercobra","email":"josh@nang.io"},"repository":{"url":"git+ssh://git@github.com/FlourishHealth/terreno.git","type":"git"},"_npmVersion":"10.9.8","description":"Opt-in admin SPA (Expo Router web app) plus an Express plugin that serves it from a Terreno backend","directories":{},"_nodeVersion":"22.22.3","dependencies":{"expo":"~54.0.29","luxon":"^3.7.2","react":"19.1.0","express":"^5.2.1","expo-font":"~14.0.10","react-dom":"19.1.0","@terreno/ui":"0.19.0","better-auth":"^1.2.8","expo-router":"~6.0.19","react-redux":"^9.2.0","@terreno/rtk":"0.19.0","expo-linking":"~8.0.10","react-native":"0.81.5","redux-persist":"^6.0.0","expo-constants":"~18.0.12","expo-status-bar":"~3.0.9","@reduxjs/toolkit":"^2.11.1","react-native-web":"~0.21.0","@expo/vector-icons":"^15.0.3","expo-splash-screen":"~31.0.12","react-native-screens":"~4.16.0","http-proxy-middleware":"^3.0.3","react-native-worklets":"~0.7.","@terreno/admin-frontend":"0.19.0","react-native-reanimated":"~4.1.1","@react-navigation/native":"^7.1.8","react-native-gesture-handler":"~2.28.0","react-native-safe-area-context":"~5.6.0","@react-native-async-storage/async-storage":"2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"supertest":"^7.0.0","@types/bun":"^1.2.4","typescript":"~5.9.2","@terreno/api":"0.19.0","@types/luxon":"^3.7.1","@types/react":"~19.1.10","@biomejs/biome":"^2.3.6","@types/express":"^5.0.6","@playwright/test":"^1.58.2","@types/supertest":"^6.0.2","babel-preset-expo":"~54.0.10"},"peerDependencies":{"@terreno/api":"0.19.0"},"_npmOperationalInternal":{"tmp":"tmp/admin-spa_0.19.0_1781459774884_0.8300683641012074","host":"s3://npm-registry-packages-npm-production"}},"0.20.0":{"name":"@terreno/admin-spa","version":"0.20.0","keywords":["admin","api","expo","express","spa","terreno"],"author":{"name":"Josh Gachnang"},"license":"Apache-2.0","_id":"@terreno/admin-spa@0.20.0","maintainers":[{"name":"ashflourishing","email":"ashutosh@flourish.health"},{"name":"servercobra","email":"josh@nang.io"}],"homepage":"https://github.com/FlourishHealth/terreno#readme","bugs":{"url":"https://github.com/FlourishHealth/terreno/issues"},"dist":{"shasum":"9fcea05e3dbc9c0ba7ea038435591b05c519410d","tarball":"https://registry.npmjs.org/@terreno/admin-spa/-/admin-spa-0.20.0.tgz","fileCount":106,"integrity":"sha512-7G1ch7i6Yv4yO6NFS5MgGNZRounuTqbju47IBdyHdqQ4xOtp/+BoWelqE0HONUaDX57De3VRKH6e67kUYwW25A==","signatures":[{"sig":"MEYCIQDMxG0cTdPBufXWNT7Jf6LELdvrPhP+uwDndlqB0cYEmwIhAKwvINp/FhyPnhHXAbuNC4k5ALE7gCR0ywdXTpguxVUf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14287789},"main":"expo-router/entry","types":"./src/dist/index.d.ts","exports":{".":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./serve":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./package.json":"./package.json"},"gitHead":"bb3fe04947d8a7a8da37ce4637b9d87ef4dee6bd","scripts":{"dev":"expo start --web --port 8083","web":"expo start --web --port 8083","lint":"biome check ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test":"bun test ./src","smoke":"bun e2e/smoke.ts","start":"expo start","compile":"tsc -p tsconfig.server.json","test:ci":"bun test ./src","lint:fix":"biome check --write ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test:e2e":"playwright test","build:web":"expo export --platform web --output-dir dist","compile:watch":"tsc -p tsconfig.server.json -w","test:integration":"playwright test --config playwright.integration.config.ts"},"_npmUser":{"name":"servercobra","email":"josh@nang.io"},"repository":{"url":"git+ssh://git@github.com/FlourishHealth/terreno.git","type":"git"},"_npmVersion":"10.9.8","description":"Opt-in admin SPA (Expo Router web app) plus an Express plugin that serves it from a Terreno backend","directories":{},"_nodeVersion":"22.22.3","dependencies":{"expo":"~54.0.29","luxon":"^3.7.2","react":"19.1.0","express":"^5.2.1","expo-font":"~14.0.10","react-dom":"19.1.0","@terreno/ui":"0.20.0","better-auth":"^1.2.8","expo-router":"~6.0.19","react-redux":"^9.2.0","@terreno/rtk":"0.20.0","expo-linking":"~8.0.10","react-native":"0.81.5","redux-persist":"^6.0.0","expo-constants":"~18.0.12","expo-status-bar":"~3.0.9","@reduxjs/toolkit":"^2.11.1","react-native-web":"~0.21.0","@expo/vector-icons":"^15.0.3","expo-splash-screen":"~31.0.12","react-native-screens":"~4.16.0","http-proxy-middleware":"^3.0.3","react-native-worklets":"~0.7.","@terreno/admin-frontend":"0.20.0","react-native-reanimated":"~4.1.1","@react-navigation/native":"^7.1.8","react-native-gesture-handler":"~2.28.0","react-native-safe-area-context":"~5.6.0","@react-native-async-storage/async-storage":"2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"supertest":"^7.0.0","@types/bun":"^1.2.4","typescript":"~5.9.2","@terreno/api":"0.20.0","@types/luxon":"^3.7.1","@types/react":"~19.1.10","@biomejs/biome":"^2.3.6","@types/express":"^5.0.6","@playwright/test":"^1.58.2","@types/supertest":"^6.0.2","babel-preset-expo":"~54.0.10"},"peerDependencies":{"@terreno/api":"0.20.0"},"_npmOperationalInternal":{"tmp":"tmp/admin-spa_0.20.0_1781472887873_0.29861325320951915","host":"s3://npm-registry-packages-npm-production"}},"0.20.1":{"name":"@terreno/admin-spa","version":"0.20.1","keywords":["admin","api","expo","express","spa","terreno"],"author":{"name":"Josh Gachnang"},"license":"Apache-2.0","_id":"@terreno/admin-spa@0.20.1","maintainers":[{"name":"ashflourishing","email":"ashutosh@flourish.health"},{"name":"servercobra","email":"josh@nang.io"}],"homepage":"https://github.com/FlourishHealth/terreno#readme","bugs":{"url":"https://github.com/FlourishHealth/terreno/issues"},"dist":{"shasum":"1d395b1241527d04d99df2063a90633824e910e5","tarball":"https://registry.npmjs.org/@terreno/admin-spa/-/admin-spa-0.20.1.tgz","fileCount":106,"integrity":"sha512-2RKQy93smRrQlBnbLZlwMugkDBJV9YxTc2w5rZX0yYujbtknrCC6bf80FPBD2ZQ1+AaqQ5nJcF6s5gsUh2rP3Q==","signatures":[{"sig":"MEUCIFIQfvHjzpeRDJhUFcMqlu7+3STsNHcCtpohhj+mUiq1AiEAlxdzL6Syci/D665DZ0DoA08eekCHp+/I0SkSgsXHe4A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14295256},"main":"expo-router/entry","types":"./src/dist/index.d.ts","exports":{".":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./serve":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./package.json":"./package.json"},"gitHead":"4e2998b8a6d46c8ac7549e131917e20ba16face2","scripts":{"dev":"expo start --web --port 8083","web":"expo start --web --port 8083","lint":"biome check ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test":"bun test ./src","smoke":"bun e2e/smoke.ts","start":"expo start","compile":"tsc -p tsconfig.server.json","test:ci":"bun test ./src","lint:fix":"biome check --write ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test:e2e":"playwright test","build:web":"expo export --platform web --output-dir dist","compile:watch":"tsc -p tsconfig.server.json -w","test:integration":"playwright test --config playwright.integration.config.ts"},"_npmUser":{"name":"servercobra","email":"josh@nang.io"},"repository":{"url":"git+ssh://git@github.com/FlourishHealth/terreno.git","type":"git"},"_npmVersion":"10.9.8","description":"Opt-in admin SPA (Expo Router web app) plus an Express plugin that serves it from a Terreno backend","directories":{},"_nodeVersion":"22.22.3","dependencies":{"expo":"~54.0.29","luxon":"^3.7.2","react":"19.1.0","express":"^5.2.1","expo-font":"~14.0.10","react-dom":"19.1.0","@terreno/ui":"0.20.1","better-auth":"^1.2.8","expo-router":"~6.0.19","react-redux":"^9.2.0","@terreno/rtk":"0.20.1","expo-linking":"~8.0.10","react-native":"0.81.5","redux-persist":"^6.0.0","expo-constants":"~18.0.12","expo-status-bar":"~3.0.9","@reduxjs/toolkit":"^2.11.1","react-native-web":"~0.21.0","@expo/vector-icons":"^15.0.3","expo-splash-screen":"~31.0.12","react-native-screens":"~4.16.0","http-proxy-middleware":"^3.0.3","react-native-worklets":"~0.7.","@terreno/admin-frontend":"0.20.1","react-native-reanimated":"~4.1.1","@react-navigation/native":"^7.1.8","react-native-gesture-handler":"~2.28.0","react-native-safe-area-context":"~5.6.0","@react-native-async-storage/async-storage":"2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"supertest":"^7.0.0","@types/bun":"^1.2.4","typescript":"~5.9.2","@terreno/api":"0.20.1","@types/luxon":"^3.7.1","@types/react":"~19.1.10","@biomejs/biome":"^2.3.6","@types/express":"^5.0.6","@playwright/test":"^1.58.2","@types/supertest":"^6.0.2","babel-preset-expo":"~54.0.10"},"peerDependencies":{"@terreno/api":"0.20.1"},"_npmOperationalInternal":{"tmp":"tmp/admin-spa_0.20.1_1781651704427_0.3804632245989259","host":"s3://npm-registry-packages-npm-production"}},"0.20.2":{"name":"@terreno/admin-spa","version":"0.20.2","keywords":["admin","api","expo","express","spa","terreno"],"author":{"name":"Josh Gachnang"},"license":"Apache-2.0","_id":"@terreno/admin-spa@0.20.2","maintainers":[{"name":"ashflourishing","email":"ashutosh@flourish.health"},{"name":"servercobra","email":"josh@nang.io"}],"homepage":"https://github.com/FlourishHealth/terreno#readme","bugs":{"url":"https://github.com/FlourishHealth/terreno/issues"},"dist":{"shasum":"4d710d1d78911998839a8e3d60f3867186e423cc","tarball":"https://registry.npmjs.org/@terreno/admin-spa/-/admin-spa-0.20.2.tgz","fileCount":106,"integrity":"sha512-3tTJHw/xY+G1MEz54ZjcN9fRbwAFto4Tzk/Kx8zeyEjm20vaG1swJCR/NQ5BEf3JOJEpE7aBP/SB3hwdHPMfNg==","signatures":[{"sig":"MEQCIG0aeeLzkZCFz2+2uPgWYqxiqOu70yBU62nFFBcha/dOAiA8IA2J/pmeBFm6ZXBj8wM3GfMV17fUicDcXQEu8M7bYQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14295118},"main":"expo-router/entry","types":"./src/dist/index.d.ts","exports":{".":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./serve":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./package.json":"./package.json"},"gitHead":"0b2360f603a4abf406adbc84bff4c7f67a117e12","scripts":{"dev":"expo start --web --port 8083","web":"expo start --web --port 8083","lint":"biome check ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test":"bun test ./src","smoke":"bun e2e/smoke.ts","start":"expo start","compile":"tsc -p tsconfig.server.json","test:ci":"bun test ./src","lint:fix":"biome check --write ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test:e2e":"playwright test","build:web":"expo export --platform web --output-dir dist","compile:watch":"tsc -p tsconfig.server.json -w","test:integration":"playwright test --config playwright.integration.config.ts"},"_npmUser":{"name":"servercobra","email":"josh@nang.io"},"repository":{"url":"git+ssh://git@github.com/FlourishHealth/terreno.git","type":"git"},"_npmVersion":"10.9.8","description":"Opt-in admin SPA (Expo Router web app) plus an Express plugin that serves it from a Terreno backend","directories":{},"_nodeVersion":"22.22.3","dependencies":{"expo":"~54.0.29","luxon":"^3.7.2","react":"19.1.0","express":"^5.2.1","expo-font":"~14.0.10","react-dom":"19.1.0","@terreno/ui":"0.20.2","better-auth":"^1.2.8","expo-router":"~6.0.19","react-redux":"^9.2.0","@terreno/rtk":"0.20.2","expo-linking":"~8.0.10","react-native":"0.81.5","redux-persist":"^6.0.0","expo-constants":"~18.0.12","expo-status-bar":"~3.0.9","@reduxjs/toolkit":"^2.11.1","react-native-web":"~0.21.0","@expo/vector-icons":"^15.0.3","expo-splash-screen":"~31.0.12","react-native-screens":"~4.16.0","http-proxy-middleware":"^3.0.3","react-native-worklets":"~0.7.","@terreno/admin-frontend":"0.20.2","react-native-reanimated":"~4.1.1","@react-navigation/native":"^7.1.8","react-native-gesture-handler":"~2.28.0","react-native-safe-area-context":"~5.6.0","@react-native-async-storage/async-storage":"2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"supertest":"^7.0.0","@types/bun":"^1.2.4","typescript":"~5.9.2","@terreno/api":"0.20.2","@types/luxon":"^3.7.1","@types/react":"~19.1.10","@biomejs/biome":"^2.3.6","@types/express":"^5.0.6","@playwright/test":"^1.58.2","@types/supertest":"^6.0.2","babel-preset-expo":"~54.0.10"},"peerDependencies":{"@terreno/api":"0.20.2"},"_npmOperationalInternal":{"tmp":"tmp/admin-spa_0.20.2_1781732418793_0.5554467812491948","host":"s3://npm-registry-packages-npm-production"}},"0.21.0":{"name":"@terreno/admin-spa","version":"0.21.0","keywords":["admin","api","expo","express","spa","terreno"],"author":{"name":"Josh Gachnang"},"license":"Apache-2.0","_id":"@terreno/admin-spa@0.21.0","maintainers":[{"name":"ashflourishing","email":"ashutosh@flourish.health"},{"name":"servercobra","email":"josh@nang.io"}],"homepage":"https://github.com/FlourishHealth/terreno#readme","bugs":{"url":"https://github.com/FlourishHealth/terreno/issues"},"dist":{"shasum":"30669ac67c2bf37c26967cdc460cc2d06c8d82dd","tarball":"https://registry.npmjs.org/@terreno/admin-spa/-/admin-spa-0.21.0.tgz","fileCount":106,"integrity":"sha512-b6lBSO9lm+T5l2ai+3Q/wtqo6nAdkf0LsU2ToNHmnFWwZn+iURciVUDzoebB1q4/eNSQ9yEMcWoootUlD/AsVA==","signatures":[{"sig":"MEQCIBXwICig1uyafeQu7AjLcSHjI2YK21KWehnUqYWgrGupAiA/J/+JrrnZ3hWWzk4cNKGqUeAqe0wJzqkUePw6WdKlPA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14349121},"main":"expo-router/entry","types":"./src/dist/index.d.ts","exports":{".":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./serve":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./package.json":"./package.json"},"gitHead":"8870614c7fff4934ee332f4718ecfa721faa18ae","scripts":{"dev":"expo start --web --port 8083","web":"expo start --web --port 8083","lint":"biome check ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test":"bun test ./src","smoke":"bun e2e/smoke.ts","start":"expo start","compile":"tsc -p tsconfig.server.json","test:ci":"bun test ./src","lint:fix":"biome check --write ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test:e2e":"playwright test","build:web":"expo export --platform web --output-dir dist","compile:watch":"tsc -p tsconfig.server.json -w","test:integration":"playwright test --config playwright.integration.config.ts"},"_npmUser":{"name":"servercobra","email":"josh@nang.io"},"repository":{"url":"git+ssh://git@github.com/FlourishHealth/terreno.git","type":"git"},"_npmVersion":"10.9.8","description":"Opt-in admin SPA (Expo Router web app) plus an Express plugin that serves it from a Terreno backend","directories":{},"_nodeVersion":"22.22.3","dependencies":{"expo":"~54.0.29","luxon":"^3.7.2","react":"19.1.0","express":"^5.2.1","expo-font":"~14.0.10","react-dom":"19.1.0","@terreno/ui":"0.21.0","better-auth":"^1.2.8","expo-router":"~6.0.19","react-redux":"^9.2.0","@terreno/rtk":"0.21.0","expo-linking":"~8.0.10","react-native":"0.81.5","redux-persist":"^6.0.0","expo-constants":"~18.0.12","expo-status-bar":"~3.0.9","@reduxjs/toolkit":"^2.11.1","react-native-web":"~0.21.0","@expo/vector-icons":"^15.0.3","expo-splash-screen":"~31.0.12","react-native-screens":"~4.16.0","http-proxy-middleware":"^3.0.3","react-native-worklets":"~0.7.","@terreno/admin-frontend":"0.21.0","react-native-reanimated":"~4.1.1","@react-navigation/native":"^7.1.8","react-native-gesture-handler":"~2.28.0","react-native-safe-area-context":"~5.6.0","@react-native-async-storage/async-storage":"2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"supertest":"^7.0.0","@types/bun":"^1.2.4","typescript":"~5.9.2","@terreno/api":"0.21.0","@types/luxon":"^3.7.1","@types/react":"~19.1.10","@biomejs/biome":"^2.3.6","@types/express":"^5.0.6","@playwright/test":"^1.58.2","@types/supertest":"^6.0.2","babel-preset-expo":"~54.0.10"},"peerDependencies":{"@terreno/api":"0.21.0"},"_npmOperationalInternal":{"tmp":"tmp/admin-spa_0.21.0_1782171911148_0.2744321824777569","host":"s3://npm-registry-packages-npm-production"}},"0.22.0":{"name":"@terreno/admin-spa","version":"0.22.0","keywords":["admin","api","expo","express","spa","terreno"],"author":{"name":"Josh Gachnang"},"license":"Apache-2.0","_id":"@terreno/admin-spa@0.22.0","maintainers":[{"name":"ashflourishing","email":"ashutosh@flourish.health"},{"name":"servercobra","email":"josh@nang.io"}],"homepage":"https://github.com/FlourishHealth/terreno#readme","bugs":{"url":"https://github.com/FlourishHealth/terreno/issues"},"dist":{"shasum":"94836cf4f20141d552a1f55a1e4a6f7c41dad563","tarball":"https://registry.npmjs.org/@terreno/admin-spa/-/admin-spa-0.22.0.tgz","fileCount":106,"integrity":"sha512-6v9q8kbk+Eh8LgYMKVbB4OnilEiwsMPgaBl1MOJUp1I2GMrR5ioolvYc7OmDdqpVncRMeWo6QpuvqkpeT8SFYw==","signatures":[{"sig":"MEQCIAeaNx14ouvrlPDP7s86tNYBO7VZSnzxmsU0NJEsB8DoAiAIA73dboVEyOnDD1OiguOEc2toWYcUMd0dlRYftnMqaQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14349231},"main":"expo-router/entry","types":"./src/dist/index.d.ts","exports":{".":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./serve":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./package.json":"./package.json"},"gitHead":"16fb1c97532dbc330cfa74fe1de2dd06de83e6f5","scripts":{"dev":"expo start --web --port 8083","web":"expo start --web --port 8083","lint":"biome check ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test":"bun test ./src","smoke":"bun e2e/smoke.ts","start":"expo start","compile":"tsc -p tsconfig.server.json","test:ci":"bun test ./src","lint:fix":"biome check --write ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test:e2e":"playwright test","build:web":"expo export --platform web --output-dir dist","compile:watch":"tsc -p tsconfig.server.json -w","test:integration":"playwright test --config playwright.integration.config.ts"},"_npmUser":{"name":"servercobra","email":"josh@nang.io"},"repository":{"url":"git+ssh://git@github.com/FlourishHealth/terreno.git","type":"git"},"_npmVersion":"10.9.8","description":"Opt-in admin SPA (Expo Router web app) plus an Express plugin that serves it from a Terreno backend","directories":{},"_nodeVersion":"22.22.3","dependencies":{"expo":"~54.0.29","luxon":"^3.7.2","react":"19.1.0","express":"^5.2.1","expo-font":"~14.0.10","react-dom":"19.1.0","@terreno/ui":"0.22.0","better-auth":"^1.2.8","expo-router":"~6.0.19","react-redux":"^9.2.0","@terreno/rtk":"0.22.0","expo-linking":"~8.0.10","react-native":"0.81.5","redux-persist":"^6.0.0","expo-constants":"~18.0.12","expo-status-bar":"~3.0.9","@reduxjs/toolkit":"^2.11.1","react-native-web":"~0.21.0","@expo/vector-icons":"^15.0.3","expo-splash-screen":"~31.0.12","react-native-screens":"~4.16.0","http-proxy-middleware":"^3.0.3","react-native-worklets":"~0.7.","@terreno/admin-frontend":"0.22.0","react-native-reanimated":"~4.1.1","@react-navigation/native":"^7.1.8","react-native-gesture-handler":"~2.28.0","react-native-safe-area-context":"~5.6.0","@react-native-async-storage/async-storage":"2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"supertest":"^7.0.0","@types/bun":"^1.2.4","typescript":"~5.9.2","@terreno/api":"0.22.0","@types/luxon":"^3.7.1","@types/react":"~19.1.10","@biomejs/biome":"^2.3.6","@types/express":"^5.0.6","@playwright/test":"^1.58.2","@types/supertest":"^6.0.2","babel-preset-expo":"~54.0.10"},"peerDependencies":{"@terreno/api":"0.22.0"},"_npmOperationalInternal":{"tmp":"tmp/admin-spa_0.22.0_1782337355903_0.4300850461546797","host":"s3://npm-registry-packages-npm-production"}},"0.22.1":{"name":"@terreno/admin-spa","version":"0.22.1","keywords":["admin","api","expo","express","spa","terreno"],"author":{"name":"Josh Gachnang"},"license":"Apache-2.0","_id":"@terreno/admin-spa@0.22.1","maintainers":[{"name":"ashflourishing","email":"ashutosh@flourish.health"},{"name":"servercobra","email":"josh@nang.io"}],"homepage":"https://github.com/FlourishHealth/terreno#readme","bugs":{"url":"https://github.com/FlourishHealth/terreno/issues"},"dist":{"shasum":"972236d389a23a7847b66fe1cde2c35a0f1ea295","tarball":"https://registry.npmjs.org/@terreno/admin-spa/-/admin-spa-0.22.1.tgz","fileCount":106,"integrity":"sha512-5PeBBKuL5vxAYhCP4qy6aw76zX1Lw4Gng2mooBj3DyoNYzRMS8D4tyIu+SRfCr+K+bcjxkxrtfPhFzZWutvM3w==","signatures":[{"sig":"MEYCIQCp/5LEo+EhBRwJ0G5fpNuSsXF4xSl4fywdYyQIJuRK1wIhAPnmOwO74tx1GuvXe6wOTfUR2z5F0XEFNRFfg4TKUiYd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14349231},"main":"expo-router/entry","types":"./src/dist/index.d.ts","exports":{".":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./serve":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./package.json":"./package.json"},"gitHead":"21d2c0d3374a2e5c51e5894462de5a0a3626c1b9","scripts":{"dev":"expo start --web --port 8083","web":"expo start --web --port 8083","lint":"biome check ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test":"bun test ./src","smoke":"bun e2e/smoke.ts","start":"expo start","compile":"tsc -p tsconfig.server.json","test:ci":"bun test ./src","lint:fix":"biome check --write ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test:e2e":"playwright test","build:web":"expo export --platform web --output-dir dist","compile:watch":"tsc -p tsconfig.server.json -w","test:integration":"playwright test --config playwright.integration.config.ts"},"_npmUser":{"name":"servercobra","email":"josh@nang.io"},"repository":{"url":"git+ssh://git@github.com/FlourishHealth/terreno.git","type":"git"},"_npmVersion":"10.9.8","description":"Opt-in admin SPA (Expo Router web app) plus an Express plugin that serves it from a Terreno backend","directories":{},"_nodeVersion":"22.23.0","dependencies":{"expo":"~54.0.29","luxon":"^3.7.2","react":"19.1.0","express":"^5.2.1","expo-font":"~14.0.10","react-dom":"19.1.0","@terreno/ui":"0.22.1","better-auth":"^1.2.8","expo-router":"~6.0.19","react-redux":"^9.2.0","@terreno/rtk":"0.22.1","expo-linking":"~8.0.10","react-native":"0.81.5","redux-persist":"^6.0.0","expo-constants":"~18.0.12","expo-status-bar":"~3.0.9","@reduxjs/toolkit":"^2.11.1","react-native-web":"~0.21.0","@expo/vector-icons":"^15.0.3","expo-splash-screen":"~31.0.12","react-native-screens":"~4.16.0","http-proxy-middleware":"^3.0.3","react-native-worklets":"~0.7.","@terreno/admin-frontend":"0.22.1","react-native-reanimated":"~4.1.1","@react-navigation/native":"^7.1.8","react-native-gesture-handler":"~2.28.0","react-native-safe-area-context":"~5.6.0","@react-native-async-storage/async-storage":"2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"supertest":"^7.0.0","@types/bun":"^1.2.4","typescript":"~5.9.2","@terreno/api":"0.22.1","@types/luxon":"^3.7.1","@types/react":"~19.1.10","@biomejs/biome":"^2.3.6","@types/express":"^5.0.6","@playwright/test":"^1.58.2","@types/supertest":"^6.0.2","babel-preset-expo":"~54.0.10"},"peerDependencies":{"@terreno/api":"0.22.1"},"_npmOperationalInternal":{"tmp":"tmp/admin-spa_0.22.1_1782339774441_0.1103443959614363","host":"s3://npm-registry-packages-npm-production"}},"0.22.2":{"name":"@terreno/admin-spa","version":"0.22.2","keywords":["admin","api","expo","express","spa","terreno"],"author":{"name":"Josh Gachnang"},"license":"Apache-2.0","_id":"@terreno/admin-spa@0.22.2","maintainers":[{"name":"ashflourishing","email":"ashutosh@flourish.health"},{"name":"servercobra","email":"josh@nang.io"}],"homepage":"https://github.com/FlourishHealth/terreno#readme","bugs":{"url":"https://github.com/FlourishHealth/terreno/issues"},"dist":{"shasum":"d29d4151ddbf21884b852f4e0a7d87f84c054160","tarball":"https://registry.npmjs.org/@terreno/admin-spa/-/admin-spa-0.22.2.tgz","fileCount":106,"integrity":"sha512-Tw5lFmoFquWXJgAyMYDkU6uSqd6sPjeaTHHg32Xw03CXnxbR1NYDgD4cNX/JHxiPuchET4dJJ9T6jxNA1ZTtUQ==","signatures":[{"sig":"MEQCICIlMVbRvd+GQj36vmPpIznmGb23/QlxoQTAp1/6FO3wAiAHSk0971Vbq4HJduC8ifUiBVkIYtZVq6VZZdUd/2Qgrg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14349231},"main":"expo-router/entry","types":"./src/dist/index.d.ts","exports":{".":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./serve":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./package.json":"./package.json"},"gitHead":"e1dece3bfe19b58b43f49d186db28c6a21fe4c65","scripts":{"dev":"expo start --web --port 8083","web":"expo start --web --port 8083","lint":"biome check ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test":"bun test ./src","smoke":"bun e2e/smoke.ts","start":"expo start","compile":"tsc -p tsconfig.server.json","test:ci":"bun test ./src","lint:fix":"biome check --write ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test:e2e":"playwright test","build:web":"expo export --platform web --output-dir dist","compile:watch":"tsc -p tsconfig.server.json -w","test:integration":"playwright test --config playwright.integration.config.ts"},"_npmUser":{"name":"servercobra","email":"josh@nang.io"},"repository":{"url":"git+ssh://git@github.com/FlourishHealth/terreno.git","type":"git"},"_npmVersion":"10.9.8","description":"Opt-in admin SPA (Expo Router web app) plus an Express plugin that serves it from a Terreno backend","directories":{},"_nodeVersion":"22.22.3","dependencies":{"expo":"~54.0.29","luxon":"^3.7.2","react":"19.1.0","express":"^5.2.1","expo-font":"~14.0.10","react-dom":"19.1.0","@terreno/ui":"0.22.2","better-auth":"^1.2.8","expo-router":"~6.0.19","react-redux":"^9.2.0","@terreno/rtk":"0.22.2","expo-linking":"~8.0.10","react-native":"0.81.5","redux-persist":"^6.0.0","expo-constants":"~18.0.12","expo-status-bar":"~3.0.9","@reduxjs/toolkit":"^2.11.1","react-native-web":"~0.21.0","@expo/vector-icons":"^15.0.3","expo-splash-screen":"~31.0.12","react-native-screens":"~4.16.0","http-proxy-middleware":"^3.0.3","react-native-worklets":"~0.7.","@terreno/admin-frontend":"0.22.2","react-native-reanimated":"~4.1.1","@react-navigation/native":"^7.1.8","react-native-gesture-handler":"~2.28.0","react-native-safe-area-context":"~5.6.0","@react-native-async-storage/async-storage":"2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"supertest":"^7.0.0","@types/bun":"^1.2.4","typescript":"~5.9.2","@terreno/api":"0.22.2","@types/luxon":"^3.7.1","@types/react":"~19.1.10","@biomejs/biome":"^2.3.6","@types/express":"^5.0.6","@playwright/test":"^1.58.2","@types/supertest":"^6.0.2","babel-preset-expo":"~54.0.10"},"peerDependencies":{"@terreno/api":"0.22.2"},"_npmOperationalInternal":{"tmp":"tmp/admin-spa_0.22.2_1782342822775_0.2615614108809605","host":"s3://npm-registry-packages-npm-production"}},"0.23.0":{"name":"@terreno/admin-spa","version":"0.23.0","keywords":["admin","api","expo","express","spa","terreno"],"author":{"name":"Josh Gachnang"},"license":"Apache-2.0","_id":"@terreno/admin-spa@0.23.0","maintainers":[{"name":"ashflourishing","email":"ashutosh@flourish.health"},{"name":"servercobra","email":"josh@nang.io"}],"homepage":"https://github.com/FlourishHealth/terreno#readme","bugs":{"url":"https://github.com/FlourishHealth/terreno/issues"},"dist":{"shasum":"1029bc2ca773a95ac4b48fbbdb95e93deb584971","tarball":"https://registry.npmjs.org/@terreno/admin-spa/-/admin-spa-0.23.0.tgz","fileCount":106,"integrity":"sha512-zJDgiU4cvRBa0++wQXe3cnXoibIamw+5ZKHYY+d2lVNLOmYWkcscyWjlNWaVTAVZ6kcQqho6OCxgW/Q1oTPj9g==","signatures":[{"sig":"MEYCIQC+ej/O/necmhm4s0k0Kvy1vdSkc191Gc3DJESoskYN5wIhAOvvHaF3ZxkhU9kbj94aNBGOOEVMw30XN3t1z3LaMIut","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14357254},"main":"expo-router/entry","types":"./src/dist/index.d.ts","exports":{".":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./serve":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./package.json":"./package.json"},"gitHead":"a0d55ab7c9663636444da31b78cee84a63c05736","scripts":{"dev":"expo start --web --port 8083","web":"expo start --web --port 8083","lint":"biome check ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test":"bun test ./src","smoke":"bun e2e/smoke.ts","start":"expo start","compile":"tsc -p tsconfig.server.json","test:ci":"bun test ./src","lint:fix":"biome check --write ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test:e2e":"playwright test","build:web":"expo export --platform web --output-dir dist","compile:watch":"tsc -p tsconfig.server.json -w","test:integration":"playwright test --config playwright.integration.config.ts"},"_npmUser":{"name":"servercobra","email":"josh@nang.io"},"repository":{"url":"git+ssh://git@github.com/FlourishHealth/terreno.git","type":"git"},"_npmVersion":"10.9.8","description":"Opt-in admin SPA (Expo Router web app) plus an Express plugin that serves it from a Terreno backend","directories":{},"_nodeVersion":"22.23.0","dependencies":{"expo":"~54.0.29","luxon":"^3.7.2","react":"19.1.0","express":"^5.2.1","expo-font":"~14.0.10","react-dom":"19.1.0","@terreno/ui":"0.23.0","better-auth":"^1.2.8","expo-router":"~6.0.19","react-redux":"^9.2.0","@terreno/rtk":"0.23.0","expo-linking":"~8.0.10","react-native":"0.81.5","redux-persist":"^6.0.0","expo-constants":"~18.0.12","expo-status-bar":"~3.0.9","@reduxjs/toolkit":"^2.11.1","react-native-web":"~0.21.0","@expo/vector-icons":"^15.0.3","expo-splash-screen":"~31.0.12","react-native-screens":"~4.16.0","http-proxy-middleware":"^3.0.3","react-native-worklets":"~0.7.","@terreno/admin-frontend":"0.23.0","react-native-reanimated":"~4.1.1","@react-navigation/native":"^7.1.8","react-native-gesture-handler":"~2.28.0","react-native-safe-area-context":"~5.6.0","@react-native-async-storage/async-storage":"2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"supertest":"^7.0.0","@types/bun":"^1.2.4","typescript":"~5.9.2","@terreno/api":"0.23.0","@types/luxon":"^3.7.1","@types/react":"~19.1.10","@biomejs/biome":"^2.3.6","@types/express":"^5.0.6","@playwright/test":"^1.58.2","@types/supertest":"^6.0.2","babel-preset-expo":"~54.0.10"},"peerDependencies":{"@terreno/api":"0.23.0"},"_npmOperationalInternal":{"tmp":"tmp/admin-spa_0.23.0_1782501499589_0.8716050893176344","host":"s3://npm-registry-packages-npm-production"}},"0.23.1":{"name":"@terreno/admin-spa","version":"0.23.1","keywords":["admin","api","expo","express","spa","terreno"],"author":{"name":"Josh Gachnang"},"license":"Apache-2.0","_id":"@terreno/admin-spa@0.23.1","maintainers":[{"name":"ashflourishing","email":"ashutosh@flourish.health"},{"name":"servercobra","email":"josh@nang.io"}],"homepage":"https://github.com/FlourishHealth/terreno#readme","bugs":{"url":"https://github.com/FlourishHealth/terreno/issues"},"dist":{"shasum":"323b66251b0ebc9d97c09e66a98c8362077ae442","tarball":"https://registry.npmjs.org/@terreno/admin-spa/-/admin-spa-0.23.1.tgz","fileCount":106,"integrity":"sha512-gwpj0TRAhVQSet2L/oCekJfocytZ9dewnCP1temfMPyscNl634hCMpgHU6AUBWCJG7ujQZ2SmBVwDKc0Hp6Uag==","signatures":[{"sig":"MEYCIQDQw/v0hxGHRRU/WAwEP4yV+mcK+GEwt+rXNoZcFHOFOAIhAKKd4O/bajmpLIK0K2c0elJjC3tPJ6hps1m7qKObQqvz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14357904},"main":"expo-router/entry","types":"./src/dist/index.d.ts","exports":{".":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./serve":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./package.json":"./package.json"},"gitHead":"1d6d53b9967287be12dec6c805fe69f2428dc546","scripts":{"dev":"expo start --web --port 8083","web":"expo start --web --port 8083","lint":"biome check ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test":"bun test ./src","smoke":"bun e2e/smoke.ts","start":"expo start","compile":"tsc -p tsconfig.server.json","test:ci":"bun test ./src","lint:fix":"biome check --write ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test:e2e":"playwright test","build:web":"expo export --platform web --output-dir dist","compile:watch":"tsc -p tsconfig.server.json -w","test:integration":"playwright test --config playwright.integration.config.ts"},"_npmUser":{"name":"servercobra","email":"josh@nang.io"},"repository":{"url":"git+ssh://git@github.com/FlourishHealth/terreno.git","type":"git"},"_npmVersion":"10.9.8","description":"Opt-in admin SPA (Expo Router web app) plus an Express plugin that serves it from a Terreno backend","directories":{},"_nodeVersion":"22.23.1","dependencies":{"expo":"~54.0.29","luxon":"^3.7.2","react":"19.1.0","express":"^5.2.1","expo-font":"~14.0.10","react-dom":"19.1.0","@terreno/ui":"0.23.1","better-auth":"^1.2.8","expo-router":"~6.0.19","react-redux":"^9.2.0","@terreno/rtk":"0.23.1","expo-linking":"~8.0.10","react-native":"0.81.5","redux-persist":"^6.0.0","expo-constants":"~18.0.12","expo-status-bar":"~3.0.9","@reduxjs/toolkit":"^2.11.1","react-native-web":"~0.21.0","@expo/vector-icons":"^15.0.3","expo-splash-screen":"~31.0.12","react-native-screens":"~4.16.0","http-proxy-middleware":"^3.0.3","react-native-worklets":"~0.7.","@terreno/admin-frontend":"0.23.1","react-native-reanimated":"~4.1.1","@react-navigation/native":"^7.1.8","react-native-gesture-handler":"~2.28.0","react-native-safe-area-context":"~5.6.0","@react-native-async-storage/async-storage":"2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"supertest":"^7.2.2","@types/bun":"^1.3.8","typescript":"~5.9.2","@terreno/api":"0.23.1","@types/luxon":"^3.7.1","@types/react":"~19.1.10","@biomejs/biome":"^2.3.6","@types/express":"^5.0.6","@playwright/test":"^1.58.2","@types/supertest":"^7.2.0","babel-preset-expo":"~54.0.10"},"peerDependencies":{"@terreno/api":"0.23.1"},"_npmOperationalInternal":{"tmp":"tmp/admin-spa_0.23.1_1783036658006_0.07028161734445226","host":"s3://npm-registry-packages-npm-production"}},"0.24.0":{"name":"@terreno/admin-spa","version":"0.24.0","keywords":["admin","api","expo","express","spa","terreno"],"author":{"name":"Josh Gachnang"},"license":"Apache-2.0","_id":"@terreno/admin-spa@0.24.0","maintainers":[{"name":"ashflourishing","email":"ashutosh@flourish.health"},{"name":"servercobra","email":"josh@nang.io"}],"homepage":"https://github.com/FlourishHealth/terreno#readme","bugs":{"url":"https://github.com/FlourishHealth/terreno/issues"},"dist":{"shasum":"2cf1721c93ba141dd4396bc54b4eed29c46b3129","tarball":"https://registry.npmjs.org/@terreno/admin-spa/-/admin-spa-0.24.0.tgz","fileCount":106,"integrity":"sha512-L+HxYSo9xfGWKTVxMKR8WwodU6Dn0dy03MR51Ikf9jW0Y4k5cBIRkVsfs8mC58Ou0/tUG/QrM2GVknA25p/CAg==","signatures":[{"sig":"MEUCIDzfxhplzyahp1bDkWkQ4IZl7wEeMQf+pzVdeEwjHbOAAiEA8JnwR3O5Mx+gWDEXBZv7E8DymP0FaN0fuV0LxUNCTco=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14358210},"main":"expo-router/entry","types":"./src/dist/index.d.ts","exports":{".":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./serve":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./package.json":"./package.json"},"gitHead":"04ade5cbdce942009e7ac5d61c77e367e92a9759","scripts":{"dev":"expo start --web --port 8083","web":"expo start --web --port 8083","lint":"biome check ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test":"bun test ./src","smoke":"bun e2e/smoke.ts","start":"expo start","compile":"tsc -p tsconfig.server.json","test:ci":"bun test ./src","lint:fix":"biome check --write ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test:e2e":"playwright test","build:web":"expo export --platform web --output-dir dist","compile:watch":"tsc -p tsconfig.server.json -w","test:integration":"playwright test --config playwright.integration.config.ts"},"_npmUser":{"name":"servercobra","email":"josh@nang.io"},"repository":{"url":"git+ssh://git@github.com/FlourishHealth/terreno.git","type":"git"},"_npmVersion":"10.9.8","description":"Opt-in admin SPA (Expo Router web app) plus an Express plugin that serves it from a Terreno backend","directories":{},"_nodeVersion":"22.23.1","dependencies":{"expo":"~54.0.29","luxon":"^3.7.2","react":"19.1.0","express":"^5.2.1","expo-font":"~14.0.10","react-dom":"19.1.0","@terreno/ui":"0.24.0","better-auth":"^1.2.8","expo-router":"~6.0.19","react-redux":"^9.2.0","@terreno/rtk":"0.24.0","expo-linking":"~8.0.10","react-native":"0.81.5","redux-persist":"^6.0.0","expo-constants":"~18.0.12","expo-status-bar":"~3.0.9","@reduxjs/toolkit":"^2.11.1","react-native-web":"~0.21.0","@expo/vector-icons":"^15.0.3","expo-splash-screen":"~31.0.12","react-native-screens":"~4.16.0","http-proxy-middleware":"^3.0.3","react-native-worklets":"~0.7.","@terreno/admin-frontend":"0.24.0","react-native-reanimated":"~4.1.1","@react-navigation/native":"^7.1.8","react-native-gesture-handler":"~2.28.0","react-native-safe-area-context":"~5.6.0","@react-native-async-storage/async-storage":"2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"supertest":"^7.2.2","@types/bun":"^1.3.8","typescript":"~5.9.2","@terreno/api":"0.24.0","@types/luxon":"^3.7.1","@types/react":"~19.1.10","@biomejs/biome":"^2.3.6","@types/express":"^5.0.6","@playwright/test":"^1.58.2","@types/supertest":"^7.2.0","babel-preset-expo":"~54.0.10"},"peerDependencies":{"@terreno/api":"0.24.0"},"_npmOperationalInternal":{"tmp":"tmp/admin-spa_0.24.0_1783114821885_0.7557371291097628","host":"s3://npm-registry-packages-npm-production"}},"0.25.0":{"name":"@terreno/admin-spa","version":"0.25.0","keywords":["admin","api","expo","express","spa","terreno"],"author":{"name":"Josh Gachnang"},"license":"Apache-2.0","_id":"@terreno/admin-spa@0.25.0","maintainers":[{"name":"ashflourishing","email":"ashutosh@flourish.health"},{"name":"servercobra","email":"josh@nang.io"}],"homepage":"https://github.com/FlourishHealth/terreno#readme","bugs":{"url":"https://github.com/FlourishHealth/terreno/issues"},"dist":{"shasum":"7edc65abe6efcced3e32876befee52c9439dcc6e","tarball":"https://registry.npmjs.org/@terreno/admin-spa/-/admin-spa-0.25.0.tgz","fileCount":106,"integrity":"sha512-vFGUFTf9exY5skVYuUekKVdAMzIw1LnVeIL7glg5dOwpv8c8JUSEopRZ33+FCxKyU1t7GD5Ii+Eih58xRfIWBA==","signatures":[{"sig":"MEQCIFTXkfh62fhR99zD2zZnFl7qOgsfvvq5HFZom78DB2dPAiAyq/ZXXMzXwG0URYiBsOXi+g0aQ0pDL/X6T1SHZWx90A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14366153},"main":"expo-router/entry","types":"./src/dist/index.d.ts","exports":{".":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./serve":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./package.json":"./package.json"},"gitHead":"d6a620f0a8a580a83de5f58e2a99290887ac9f49","scripts":{"dev":"expo start --web --port 8083","web":"expo start --web --port 8083","lint":"biome check ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test":"bun test ./src","smoke":"bun e2e/smoke.ts","start":"expo start","compile":"tsc -p tsconfig.server.json","test:ci":"bun test ./src","lint:fix":"biome check --write ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test:e2e":"playwright test","build:web":"expo export --platform web --output-dir dist","compile:watch":"tsc -p tsconfig.server.json -w","test:integration":"playwright test --config playwright.integration.config.ts"},"_npmUser":{"name":"servercobra","email":"josh@nang.io"},"repository":{"url":"git+ssh://git@github.com/FlourishHealth/terreno.git","type":"git"},"_npmVersion":"10.9.8","description":"Opt-in admin SPA (Expo Router web app) plus an Express plugin that serves it from a Terreno backend","directories":{},"_nodeVersion":"22.23.1","dependencies":{"expo":"~54.0.29","luxon":"^3.7.2","react":"19.1.0","express":"^5.2.1","expo-font":"~14.0.10","react-dom":"19.1.0","@terreno/ui":"0.25.0","better-auth":"^1.2.8","expo-router":"~6.0.19","react-redux":"^9.2.0","@terreno/rtk":"0.25.0","expo-linking":"~8.0.10","react-native":"0.81.5","redux-persist":"^6.0.0","expo-constants":"~18.0.12","expo-status-bar":"~3.0.9","@reduxjs/toolkit":"^2.11.1","react-native-web":"~0.21.0","@expo/vector-icons":"^15.0.3","expo-splash-screen":"~31.0.12","react-native-screens":"~4.16.0","http-proxy-middleware":"^3.0.3","react-native-worklets":"~0.7.","@terreno/admin-frontend":"0.25.0","react-native-reanimated":"~4.1.1","@react-navigation/native":"^7.1.8","react-native-gesture-handler":"~2.28.0","react-native-safe-area-context":"~5.6.0","@react-native-async-storage/async-storage":"2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"supertest":"^7.2.2","@types/bun":"^1.3.8","typescript":"~5.9.2","@terreno/api":"0.25.0","@types/luxon":"^3.7.1","@types/react":"~19.1.10","@biomejs/biome":"^2.3.6","@types/express":"^5.0.6","@playwright/test":"^1.58.2","@types/supertest":"^7.2.0","babel-preset-expo":"~54.0.10"},"peerDependencies":{"@terreno/api":"0.25.0"},"_npmOperationalInternal":{"tmp":"tmp/admin-spa_0.25.0_1783899403503_0.1034850924786681","host":"s3://npm-registry-packages-npm-production"}},"0.26.0":{"name":"@terreno/admin-spa","version":"0.26.0","keywords":["admin","api","expo","express","spa","terreno"],"author":{"name":"Josh Gachnang"},"license":"Apache-2.0","_id":"@terreno/admin-spa@0.26.0","maintainers":[{"name":"ashflourishing","email":"ashutosh@flourish.health"},{"name":"servercobra","email":"josh@nang.io"}],"homepage":"https://github.com/FlourishHealth/terreno#readme","bugs":{"url":"https://github.com/FlourishHealth/terreno/issues"},"dist":{"shasum":"7655d47bab3ffe5c026ffd33c9352428d82eda2c","tarball":"https://registry.npmjs.org/@terreno/admin-spa/-/admin-spa-0.26.0.tgz","fileCount":106,"integrity":"sha512-bP1XA6zvd0NEab38VWgi2tfrMuA0nqjeBWWxW8F+bSCAJJ6ODHDAZrwD/f3zm45aPERRtPEzuBZzc+HZ24Z1Ow==","signatures":[{"sig":"MEUCIGAkMy6zpEUHFBEVapF4ZgIvXMNqMNXtSz2/R8aiamExAiEAsi/bq7h6qgIaRe4jgMACCBKlmKhEFJKH+m+/hhhf6ag=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14363914},"main":"expo-router/entry","types":"./src/dist/index.d.ts","exports":{".":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./serve":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./package.json":"./package.json"},"gitHead":"c707efe572d979c76c376213e54e39f37f55f737","scripts":{"dev":"expo start --web --port 8083","web":"expo start --web --port 8083","lint":"biome check ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test":"bun test ./src","smoke":"bun e2e/smoke.ts","start":"expo start","compile":"tsc -p tsconfig.server.json","test:ci":"bun test ./src","lint:fix":"biome check --write ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test:e2e":"playwright test","build:web":"expo export --platform web --output-dir dist","compile:watch":"tsc -p tsconfig.server.json -w","test:integration":"playwright test --config playwright.integration.config.ts"},"_npmUser":{"name":"servercobra","email":"josh@nang.io"},"repository":{"url":"git+ssh://git@github.com/FlourishHealth/terreno.git","type":"git"},"_npmVersion":"10.9.8","description":"Opt-in admin SPA (Expo Router web app) plus an Express plugin that serves it from a Terreno backend","directories":{},"_nodeVersion":"22.23.1","dependencies":{"expo":"~54.0.29","luxon":"^3.7.2","react":"19.1.0","express":"^5.2.1","expo-font":"~14.0.10","react-dom":"19.1.0","@terreno/ui":"0.26.0","better-auth":"^1.2.8","expo-router":"~6.0.19","react-redux":"^9.2.0","@terreno/rtk":"0.26.0","expo-linking":"~8.0.10","react-native":"0.81.5","redux-persist":"^6.0.0","expo-constants":"~18.0.12","expo-status-bar":"~3.0.9","@reduxjs/toolkit":"^2.11.1","react-native-web":"~0.21.0","@expo/vector-icons":"^15.0.3","expo-splash-screen":"~31.0.12","react-native-screens":"~4.16.0","http-proxy-middleware":"^3.0.3","react-native-worklets":"~0.7.","@terreno/admin-frontend":"0.26.0","react-native-reanimated":"~4.1.1","@react-navigation/native":"^7.1.8","react-native-gesture-handler":"~2.28.0","react-native-safe-area-context":"~5.6.0","@react-native-async-storage/async-storage":"2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"supertest":"^7.2.2","@types/bun":"^1.3.8","typescript":"~5.9.2","@terreno/api":"0.26.0","@types/luxon":"^3.7.1","@types/react":"~19.1.10","@biomejs/biome":"^2.3.6","@types/express":"^5.0.6","@playwright/test":"^1.58.2","@types/supertest":"^7.2.0","babel-preset-expo":"~54.0.10"},"peerDependencies":{"@terreno/api":"0.26.0"},"_npmOperationalInternal":{"tmp":"tmp/admin-spa_0.26.0_1784152902006_0.3322015622331189","host":"s3://npm-registry-packages-npm-production"}},"0.27.0":{"name":"@terreno/admin-spa","version":"0.27.0","keywords":["admin","api","expo","express","spa","terreno"],"author":{"name":"Josh Gachnang"},"license":"Apache-2.0","_id":"@terreno/admin-spa@0.27.0","maintainers":[{"name":"ashflourishing","email":"ashutosh@flourish.health"},{"name":"servercobra","email":"josh@nang.io"}],"homepage":"https://github.com/FlourishHealth/terreno#readme","bugs":{"url":"https://github.com/FlourishHealth/terreno/issues"},"dist":{"shasum":"42597413f8f4afec848758f56cb4598682244b92","tarball":"https://registry.npmjs.org/@terreno/admin-spa/-/admin-spa-0.27.0.tgz","fileCount":106,"integrity":"sha512-830i3oL7lb0cSzjVc45OasLzVgWd2kEupVLHpm7r8oIcmvZZokv51o2TZRISofTqEyET5O1Clh1ouMO5WI+xyg==","signatures":[{"sig":"MEYCIQC+Jhp+/qIf43eppRKKzrdEP4oUUiW9WW3T6aLUpyxkWQIhAI1A9/yb0w8pUuZaeurtHzCsrELjXj8Sx8cUivhLG3iQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14365794},"main":"expo-router/entry","types":"./src/dist/index.d.ts","exports":{".":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./serve":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./package.json":"./package.json"},"gitHead":"83c74a20563bb9d70faef897ccaa246551585ae1","scripts":{"dev":"expo start --web --port 8083","web":"expo start --web --port 8083","lint":"biome check ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test":"bun test ./src","smoke":"bun e2e/smoke.ts","start":"expo start","compile":"tsc -p tsconfig.server.json","test:ci":"bun test ./src","lint:fix":"biome check --write ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test:e2e":"playwright test","build:web":"expo export --platform web --output-dir dist","compile:watch":"tsc -p tsconfig.server.json -w","test:integration":"playwright test --config playwright.integration.config.ts"},"_npmUser":{"name":"servercobra","email":"josh@nang.io"},"repository":{"url":"git+ssh://git@github.com/FlourishHealth/terreno.git","type":"git"},"_npmVersion":"10.9.8","description":"Opt-in admin SPA (Expo Router web app) plus an Express plugin that serves it from a Terreno backend","directories":{},"_nodeVersion":"22.23.1","dependencies":{"expo":"~54.0.29","luxon":"^3.7.2","react":"19.1.0","express":"^5.2.1","expo-font":"~14.0.10","react-dom":"19.1.0","@terreno/ui":"0.27.0","better-auth":"^1.2.8","expo-router":"~6.0.19","react-redux":"^9.2.0","@terreno/rtk":"0.27.0","expo-linking":"~8.0.10","react-native":"0.81.5","redux-persist":"^6.0.0","expo-constants":"~18.0.12","expo-status-bar":"~3.0.9","@reduxjs/toolkit":"^2.11.1","react-native-web":"~0.21.0","@expo/vector-icons":"^15.0.3","expo-splash-screen":"~31.0.12","react-native-screens":"~4.16.0","http-proxy-middleware":"^3.0.3","react-native-worklets":"~0.7.","@terreno/admin-frontend":"0.27.0","react-native-reanimated":"~4.1.1","@react-navigation/native":"^7.1.8","react-native-gesture-handler":"~2.28.0","react-native-safe-area-context":"~5.6.0","@react-native-async-storage/async-storage":"2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"supertest":"^7.2.2","@types/bun":"^1.3.8","typescript":"~5.9.2","@terreno/api":"0.27.0","@types/luxon":"^3.7.1","@types/react":"~19.1.10","@biomejs/biome":"^2.3.6","@types/express":"^5.0.6","@playwright/test":"^1.58.2","@types/supertest":"^7.2.0","babel-preset-expo":"~54.0.10"},"peerDependencies":{"@terreno/api":"0.27.0"},"_npmOperationalInternal":{"tmp":"tmp/admin-spa_0.27.0_1785291132864_0.3915091701787623","host":"s3://npm-registry-packages-npm-production"}},"0.28.0":{"name":"@terreno/admin-spa","version":"0.28.0","keywords":["admin","api","expo","express","spa","terreno"],"author":{"name":"Josh Gachnang"},"license":"Apache-2.0","_id":"@terreno/admin-spa@0.28.0","maintainers":[{"name":"ashflourishing","email":"ashutosh@flourish.health"},{"name":"servercobra","email":"josh@nang.io"}],"homepage":"https://github.com/FlourishHealth/terreno#readme","bugs":{"url":"https://github.com/FlourishHealth/terreno/issues"},"dist":{"shasum":"3d06ecb42eae5184eaad862755aad8a06bae0363","tarball":"https://registry.npmjs.org/@terreno/admin-spa/-/admin-spa-0.28.0.tgz","fileCount":106,"integrity":"sha512-Y1tpTegEMtPQkHQvQwh5jxrI6A8TiSH0gT/MdDoYhlqg/ZgcmB9qJjogdi/ojhGHyvKKiqg6EHxk1wdxwd/FeQ==","signatures":[{"sig":"MEUCIQD8O/7oCmyLsoCAsgs5NAs/f1GXlC4AX1QiezU3h8zp8wIgSZZXAingyg1LGeCXcy3MntSd4WO0gR/K81RDgFuW/Y8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14364920},"main":"expo-router/entry","types":"./src/dist/index.d.ts","exports":{".":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./serve":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./package.json":"./package.json"},"gitHead":"adde07d43c1b431216513eb21f54c6d644af7cd9","scripts":{"dev":"expo start --web --port 8083","web":"expo start --web --port 8083","lint":"biome check ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test":"bun test ./src","smoke":"bun e2e/smoke.ts","start":"expo start","compile":"tsc -p tsconfig.server.json","test:ci":"bun test ./src","lint:fix":"biome check --write ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test:e2e":"playwright test","build:web":"expo export --platform web --output-dir dist","compile:watch":"tsc -p tsconfig.server.json -w","test:integration":"playwright test --config playwright.integration.config.ts"},"_npmUser":{"name":"servercobra","email":"josh@nang.io"},"repository":{"url":"git+ssh://git@github.com/FlourishHealth/terreno.git","type":"git"},"_npmVersion":"10.9.8","description":"Opt-in admin SPA (Expo Router web app) plus an Express plugin that serves it from a Terreno backend","directories":{},"_nodeVersion":"22.23.1","dependencies":{"expo":"~54.0.29","luxon":"^3.7.2","react":"19.1.0","express":"^5.2.1","expo-font":"~14.0.10","react-dom":"19.1.0","@terreno/ui":"0.28.0","better-auth":"^1.2.8","expo-router":"~6.0.19","react-redux":"^9.2.0","@terreno/rtk":"0.28.0","expo-linking":"~8.0.10","react-native":"0.81.5","redux-persist":"^6.0.0","expo-constants":"~18.0.12","expo-status-bar":"~3.0.9","@reduxjs/toolkit":"^2.11.1","react-native-web":"~0.21.0","@expo/vector-icons":"^15.0.3","expo-splash-screen":"~31.0.12","react-native-screens":"~4.16.0","http-proxy-middleware":"^3.0.3","react-native-worklets":"~0.7.","@terreno/admin-frontend":"0.28.0","react-native-reanimated":"~4.1.1","@react-navigation/native":"^7.1.8","react-native-gesture-handler":"~2.28.0","react-native-safe-area-context":"~5.6.0","@react-native-async-storage/async-storage":"2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"supertest":"^7.2.2","@types/bun":"^1.3.8","typescript":"~5.9.2","@terreno/api":"0.28.0","@types/luxon":"^3.7.1","@types/react":"~19.1.10","@biomejs/biome":"^2.3.6","@types/express":"^5.0.6","@playwright/test":"^1.58.2","@types/supertest":"^7.2.0","babel-preset-expo":"~54.0.10"},"peerDependencies":{"@terreno/api":"0.28.0"},"_npmOperationalInternal":{"tmp":"tmp/admin-spa_0.28.0_1785444411135_0.08624777596921973","host":"s3://npm-registry-packages-npm-production"}},"0.29.0":{"name":"@terreno/admin-spa","version":"0.29.0","keywords":["admin","api","expo","express","spa","terreno"],"author":{"name":"Josh Gachnang"},"license":"Apache-2.0","_id":"@terreno/admin-spa@0.29.0","maintainers":[{"name":"ashflourishing","email":"ashutosh@flourish.health"},{"name":"servercobra","email":"josh@nang.io"}],"homepage":"https://github.com/FlourishHealth/terreno#readme","bugs":{"url":"https://github.com/FlourishHealth/terreno/issues"},"dist":{"shasum":"7b1478ac8e196599cb16c1616fed0f18fcbebee7","tarball":"https://registry.npmjs.org/@terreno/admin-spa/-/admin-spa-0.29.0.tgz","fileCount":116,"integrity":"sha512-eroHpoFONuci5Y5cuRrh2flJEGQKlVdPkXqi8sLoU75YVpdtBy1p9DLrq6hr3WKG3ebghd0LM24qMls1quObPg==","signatures":[{"sig":"MEQCIDHwLuV+9ycBSvibx0+p1fsIAi1kUYrPYhZop51x9FJBAiBBzxfusaYlEW1KuNorAXyd7ILRJcGqfk3DdrMfiLfVsQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16246731},"main":"expo-router/entry","types":"./src/dist/index.d.ts","exports":{".":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./serve":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./package.json":"./package.json"},"gitHead":"6a79485108e2de22d90b6351b73605e82d73d6cf","scripts":{"dev":"expo start --web --port 8083","web":"expo start --web --port 8083","lint":"biome check ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test":"bun test ./src","smoke":"bun e2e/smoke.ts","start":"expo start","compile":"tsc -p tsconfig.server.json","test:ci":"bun test ./src","lint:fix":"biome check --write ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test:e2e":"playwright test","build:web":"expo export --platform web --output-dir dist","compile:watch":"tsc -p tsconfig.server.json -w","test:integration":"playwright test --config playwright.integration.config.ts"},"_npmUser":{"name":"servercobra","email":"josh@nang.io"},"repository":{"url":"git+ssh://git@github.com/FlourishHealth/terreno.git","type":"git"},"_npmVersion":"10.9.8","description":"Opt-in admin SPA (Expo Router web app) plus an Express plugin that serves it from a Terreno backend","directories":{},"_nodeVersion":"22.23.1","dependencies":{"expo":"~54.0.29","luxon":"^3.7.2","react":"19.1.0","express":"^5.2.1","expo-font":"~14.0.10","react-dom":"19.1.0","@terreno/ui":"0.29.0","better-auth":"^1.2.8","expo-router":"~6.0.19","react-redux":"^9.2.0","@terreno/rtk":"0.29.0","expo-linking":"~8.0.10","react-native":"0.81.5","redux-persist":"^6.0.0","expo-constants":"~18.0.12","expo-status-bar":"~3.0.9","@reduxjs/toolkit":"^2.11.1","react-native-web":"~0.21.0","@expo/vector-icons":"^15.0.3","expo-splash-screen":"~31.0.12","react-native-screens":"~4.16.0","http-proxy-middleware":"^3.0.3","react-native-worklets":"~0.7.","@terreno/admin-frontend":"0.29.0","react-native-reanimated":"~4.1.1","@react-navigation/native":"^7.1.8","react-native-gesture-handler":"~2.28.0","react-native-safe-area-context":"~5.6.0","@react-native-async-storage/async-storage":"2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"supertest":"^7.2.2","@types/bun":"^1.3.8","typescript":"~5.9.2","@terreno/api":"0.29.0","@types/luxon":"^3.7.1","@types/react":"~19.1.10","@biomejs/biome":"^2.3.6","@types/express":"^5.0.6","@playwright/test":"^1.58.2","@types/supertest":"^7.2.0","babel-preset-expo":"~54.0.10"},"peerDependencies":{"@terreno/api":"0.29.0"},"_npmOperationalInternal":{"tmp":"tmp/admin-spa_0.29.0_1785479785151_0.7237985438888153","host":"s3://npm-registry-packages-npm-production"}},"0.30.0":{"name":"@terreno/admin-spa","version":"0.30.0","keywords":["admin","api","expo","express","spa","terreno"],"author":{"name":"Josh Gachnang"},"license":"Apache-2.0","_id":"@terreno/admin-spa@0.30.0","maintainers":[{"name":"ashflourishing","email":"ashutosh@flourish.health"},{"name":"servercobra","email":"josh@nang.io"}],"homepage":"https://github.com/FlourishHealth/terreno#readme","bugs":{"url":"https://github.com/FlourishHealth/terreno/issues"},"dist":{"shasum":"c8984031cdd3a4528dd86827a1f14244f6417b17","tarball":"https://registry.npmjs.org/@terreno/admin-spa/-/admin-spa-0.30.0.tgz","fileCount":116,"integrity":"sha512-5NFvZ2Al3hwvYAS3Gkzd3cAJK1Vd+78pr2fdjeh/KhcFfx46fn25xAn5Vz1PRMPWcExhwT05Yucw+GGXuLZx6Q==","signatures":[{"sig":"MEYCIQD/hQgAA1OeR6oTNC8ZMqxRQq5zb2al7LmdZPc6J3Hy0QIhAJFPOEO9ZZHJLh+wunrtaJOHNfk/eNKRh9ZqK+GFaFjn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16247998},"main":"expo-router/entry","types":"./src/dist/index.d.ts","exports":{".":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./serve":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./package.json":"./package.json"},"gitHead":"de4a319ecbaf3199e0ef38ddb5f0dde3a7efcf24","scripts":{"dev":"expo start --web --port 8083","web":"expo start --web --port 8083","lint":"biome check ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test":"bun test ./src","smoke":"bun e2e/smoke.ts","start":"expo start","compile":"tsc -p tsconfig.server.json","test:ci":"bun test ./src","lint:fix":"biome check --write ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test:e2e":"playwright test","build:web":"expo export --platform web --output-dir dist","compile:watch":"tsc -p tsconfig.server.json -w","test:integration":"playwright test --config playwright.integration.config.ts"},"_npmUser":{"name":"servercobra","email":"josh@nang.io"},"repository":{"url":"git+ssh://git@github.com/FlourishHealth/terreno.git","type":"git"},"_npmVersion":"10.9.8","description":"Opt-in admin SPA (Expo Router web app) plus an Express plugin that serves it from a Terreno backend","directories":{},"_nodeVersion":"22.23.1","dependencies":{"expo":"~54.0.29","luxon":"^3.7.2","react":"19.1.0","express":"^5.2.1","expo-font":"~14.0.10","react-dom":"19.1.0","@terreno/ui":"0.30.0","better-auth":"^1.2.8","expo-router":"~6.0.19","react-redux":"^9.2.0","@terreno/rtk":"0.30.0","expo-linking":"~8.0.10","react-native":"0.81.5","redux-persist":"^6.0.0","expo-constants":"~18.0.12","expo-status-bar":"~3.0.9","@reduxjs/toolkit":"^2.11.1","react-native-web":"~0.21.0","@expo/vector-icons":"^15.0.3","expo-splash-screen":"~31.0.12","react-native-screens":"~4.16.0","http-proxy-middleware":"^3.0.3","react-native-worklets":"~0.7.","@terreno/admin-frontend":"0.30.0","react-native-reanimated":"~4.1.1","@react-navigation/native":"^7.1.8","react-native-gesture-handler":"~2.28.0","react-native-safe-area-context":"~5.6.0","@react-native-async-storage/async-storage":"2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"supertest":"^7.2.2","@types/bun":"^1.3.8","typescript":"~5.9.2","@terreno/api":"0.30.0","@types/luxon":"^3.7.1","@types/react":"~19.1.10","@biomejs/biome":"^2.3.6","@types/express":"^5.0.6","@playwright/test":"^1.58.2","@types/supertest":"^7.2.0","babel-preset-expo":"~54.0.10"},"peerDependencies":{"@terreno/api":"0.30.0"},"_npmOperationalInternal":{"tmp":"tmp/admin-spa_0.30.0_1785789264562_0.6887717425939595","host":"s3://npm-registry-packages-npm-production"}},"0.31.0":{"name":"@terreno/admin-spa","version":"0.31.0","keywords":["admin","api","expo","express","spa","terreno"],"author":{"name":"Josh Gachnang"},"license":"MIT","_id":"@terreno/admin-spa@0.31.0","maintainers":[{"name":"ashflourishing","email":"ashutosh@flourish.health"},{"name":"servercobra","email":"josh@nang.io"}],"homepage":"https://github.com/FlourishHealth/terreno#readme","bugs":{"url":"https://github.com/FlourishHealth/terreno/issues"},"dist":{"shasum":"72415bd25fc01d20f248838b4fdb289a53c025ea","tarball":"https://registry.npmjs.org/@terreno/admin-spa/-/admin-spa-0.31.0.tgz","fileCount":117,"integrity":"sha512-/cw/t6KlAMW+uZcbbSNIhelYAbSsw2iItncKTxEhBcpO8yDnyjic7T6OFqVDjgOqM06XQOTRkytW8A8hljogbw==","signatures":[{"sig":"MEQCIEoJO2JnTk4SxhkPK30dluGfeC5hZKPzKaMA/ai6SB8aAiAJ3f/bS/1DfP8s9mEgdTuJIfANAj0RrpRdDQz41ruXNA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16251137},"main":"expo-router/entry","types":"./src/dist/index.d.ts","exports":{".":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./serve":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./package.json":"./package.json"},"gitHead":"6543745be4a4f95eed1afe18724bf4cf97ad252b","scripts":{"dev":"expo start --web --port 8083","web":"expo start --web --port 8083","lint":"biome check ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test":"bun test ./src","smoke":"bun e2e/smoke.ts","start":"expo start","compile":"tsc -p tsconfig.server.json","test:ci":"bun test ./src","lint:fix":"biome check --write ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test:e2e":"playwright test","build:web":"expo export --platform web --output-dir dist","compile:watch":"tsc -p tsconfig.server.json -w","test:integration":"playwright test --config playwright.integration.config.ts"},"_npmUser":{"name":"servercobra","email":"josh@nang.io"},"repository":{"url":"git+ssh://git@github.com/FlourishHealth/terreno.git","type":"git"},"_npmVersion":"10.9.8","description":"Opt-in admin SPA (Expo Router web app) plus an Express plugin that serves it from a Terreno backend","directories":{},"_nodeVersion":"22.23.2","dependencies":{"expo":"~54.0.29","luxon":"^3.7.2","react":"19.1.0","express":"^5.2.1","expo-font":"~14.0.10","react-dom":"19.1.0","@terreno/ui":"0.31.0","better-auth":"^1.2.8","expo-router":"~6.0.19","react-redux":"^9.2.0","@terreno/rtk":"0.31.0","expo-linking":"~8.0.10","react-native":"0.81.5","redux-persist":"^6.0.0","expo-constants":"~18.0.12","expo-status-bar":"~3.0.9","@reduxjs/toolkit":"^2.11.1","react-native-web":"~0.21.0","@expo/vector-icons":"^15.0.3","expo-splash-screen":"~31.0.12","react-native-screens":"~4.16.0","http-proxy-middleware":"^3.0.3","react-native-worklets":"~0.7.","@terreno/admin-frontend":"0.31.0","react-native-reanimated":"~4.1.1","@react-navigation/native":"^7.1.8","react-native-gesture-handler":"~2.28.0","react-native-safe-area-context":"~5.6.0","@react-native-async-storage/async-storage":"2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"supertest":"^7.2.2","@types/bun":"^1.3.8","typescript":"~5.9.2","@terreno/api":"0.31.0","@types/luxon":"^3.7.1","@types/react":"~19.1.10","@biomejs/biome":"^2.3.6","@types/express":"^5.0.6","@playwright/test":"^1.58.2","@types/supertest":"^7.2.0","babel-preset-expo":"~54.0.10"},"peerDependencies":{"@terreno/api":"0.31.0"},"_npmOperationalInternal":{"tmp":"tmp/admin-spa_0.31.0_1786473055859_0.29824507265542843","host":"s3://npm-registry-packages-npm-production"}},"56.0.0-beta.2":{"name":"@terreno/admin-spa","version":"56.0.0-beta.2","keywords":["admin","api","expo","express","spa","terreno"],"author":{"name":"Josh Gachnang"},"license":"MIT","_id":"@terreno/admin-spa@56.0.0-beta.2","maintainers":[{"name":"ashflourishing","email":"ashutosh@flourish.health"},{"name":"servercobra","email":"josh@nang.io"}],"homepage":"https://github.com/FlourishHealth/terreno#readme","bugs":{"url":"https://github.com/FlourishHealth/terreno/issues"},"dist":{"shasum":"5499ccbb419d7c699e543ba09801520419c122ac","tarball":"https://registry.npmjs.org/@terreno/admin-spa/-/admin-spa-56.0.0-beta.2.tgz","fileCount":120,"integrity":"sha512-YHcRtRduMvY4QD3ilFbmTgrzofZTjVv4Tst9pEqnbl2NGR/M9a0+ADMcvhWGsci50wPlKxgbU4PN1hy+swkPYQ==","signatures":[{"sig":"MEUCIQCbLb673bofUqMyBlNnwN6W+D0XCbrXPjcP1BbQrOmJzgIgaNbqWo8WyGoPXtBohBP1qaZdv6qhBYpbI/hmYMeXvGM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16441580},"main":"expo-router/entry","types":"./src/dist/index.d.ts","exports":{".":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./serve":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./package.json":"./package.json"},"gitHead":"cbe77c94804508fc383b1dccd250d235d95ec77c","scripts":{"dev":"expo start --web --port 8083","web":"expo start --web --port 8083","lint":"biome check ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test":"bun test ./src","smoke":"bun e2e/smoke.ts","start":"expo start","compile":"tsc -p tsconfig.server.json","test:ci":"bun test ./src","lint:fix":"biome check --write ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test:e2e":"playwright test","build:web":"expo export --platform web --output-dir dist","compile:watch":"tsc -p tsconfig.server.json -w","test:integration":"playwright test --config playwright.integration.config.ts"},"_npmUser":{"name":"servercobra","email":"josh@nang.io"},"repository":{"url":"git+ssh://git@github.com/FlourishHealth/terreno.git","type":"git"},"_npmVersion":"10.9.8","description":"Opt-in admin SPA (Expo Router web app) plus an Express plugin that serves it from a Terreno backend","directories":{},"_nodeVersion":"22.23.2","dependencies":{"expo":"~56.0.12","luxon":"^3.7.2","react":"19.2.3","express":"^5.2.1","expo-font":"~56.0.7","react-dom":"19.2.3","@terreno/ui":"56.0.0-beta.2","better-auth":"^1.6.25","expo-router":"~56.2.11","react-redux":"^9.2.0","@terreno/rtk":"56.0.0-beta.2","expo-linking":"~56.0.14","react-native":"0.85.3","redux-persist":"^6.0.0","expo-constants":"~56.0.18","expo-status-bar":"~56.0.4","@reduxjs/toolkit":"^2.11.1","react-native-web":"^0.21.2","@expo/vector-icons":"^15.1.1","expo-splash-screen":"~56.0.10","react-native-screens":"4.25.2","http-proxy-middleware":"^3.0.3","react-native-worklets":"0.8.3","@terreno/admin-frontend":"56.0.0-beta.2","react-native-reanimated":"4.3.1","react-native-gesture-handler":"~2.31.1","react-native-safe-area-context":"~5.7.0","@react-native-async-storage/async-storage":"2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"supertest":"^7.2.2","@types/bun":"^1.3.8","typescript":"~6.0.3","@terreno/api":"56.0.0-beta.2","@types/luxon":"^3.7.1","@types/react":"~19.2.14","@biomejs/biome":"^2.3.6","@types/express":"^5.0.6","@playwright/test":"^1.58.2","@types/supertest":"^7.2.0","babel-preset-expo":"~56.0.15"},"peerDependencies":{"@terreno/api":"56.0.0-beta.2"},"_npmOperationalInternal":{"tmp":"tmp/admin-spa_56.0.0-beta.2_1787006756175_0.4092366715141009","host":"s3://npm-registry-packages-npm-production"}},"57.0.0-beta.1":{"name":"@terreno/admin-spa","version":"57.0.0-beta.1","keywords":["admin","api","expo","express","spa","terreno"],"author":{"name":"Josh Gachnang"},"license":"MIT","_id":"@terreno/admin-spa@57.0.0-beta.1","maintainers":[{"name":"ashflourishing","email":"ashutosh@flourish.health"},{"name":"servercobra","email":"josh@nang.io"}],"homepage":"https://github.com/FlourishHealth/terreno#readme","bugs":{"url":"https://github.com/FlourishHealth/terreno/issues"},"dist":{"shasum":"e852d272b09bd8e3a5731d71f9f45bab0ad4f3df","tarball":"https://registry.npmjs.org/@terreno/admin-spa/-/admin-spa-57.0.0-beta.1.tgz","fileCount":120,"integrity":"sha512-s8dmGkuA2AXiIBB1REes2ckIQ6wMDhZZlb4txXh2K0cZa3MTdPI9UJNM0lJSOIHyQQ1TbaEeAXGDaQWyH9yrsg==","signatures":[{"sig":"MEYCIQDfPCxVUSN+aqpqqiEjWPy67HoPu9R18f46rwf15q8C/AIhAKTYl9h/DjEsI5kmWgda8pkxSmM3JwGGfBo0u+l9t7sF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16519201},"main":"expo-router/entry","types":"./src/dist/index.d.ts","exports":{".":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./serve":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./package.json":"./package.json"},"gitHead":"c4f619568af291f1177717422d2b3c30f140cb64","scripts":{"dev":"expo start --web --port 8083","web":"expo start --web --port 8083","lint":"biome check ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test":"bun test ./src","smoke":"bun e2e/smoke.ts","start":"expo start","compile":"tsc -p tsconfig.server.json","test:ci":"bun test ./src","lint:fix":"biome check --write ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test:e2e":"playwright test","build:web":"expo export --platform web --output-dir dist","compile:watch":"tsc -p tsconfig.server.json -w","test:integration":"playwright test --config playwright.integration.config.ts"},"_npmUser":{"name":"servercobra","email":"josh@nang.io"},"repository":{"url":"git+ssh://git@github.com/FlourishHealth/terreno.git","type":"git"},"_npmVersion":"10.9.8","description":"Opt-in admin SPA (Expo Router web app) plus an Express plugin that serves it from a Terreno backend","directories":{},"_nodeVersion":"22.23.2","dependencies":{"expo":"~57.0.14","luxon":"^3.7.2","react":"19.2.3","express":"^5.2.1","expo-font":"~57.0.1","react-dom":"19.2.3","@terreno/ui":"57.0.0-beta.1","better-auth":"^1.6.25","expo-router":"~57.0.14","react-redux":"^9.2.0","@terreno/rtk":"57.0.0-beta.1","expo-linking":"~57.0.6","react-native":"0.86.2","redux-persist":"^6.0.0","expo-constants":"~57.0.12","expo-status-bar":"~57.0.1","@reduxjs/toolkit":"^2.11.1","react-native-web":"^0.21.2","@expo/vector-icons":"^15.1.1","expo-splash-screen":"~57.0.7","react-native-screens":"4.26.2","http-proxy-middleware":"^3.0.3","react-native-worklets":"0.10.1","@terreno/admin-frontend":"57.0.0-beta.1","react-native-reanimated":"4.5.1","react-native-gesture-handler":"~2.32.0","react-native-safe-area-context":"~5.7.0","@react-native-async-storage/async-storage":"2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"supertest":"^7.2.2","@types/bun":"^1.3.8","typescript":"~6.0.3","@terreno/api":"57.0.0-beta.1","@types/luxon":"^3.7.1","@types/react":"~19.2.14","@biomejs/biome":"^2.3.6","@types/express":"^5.0.6","@playwright/test":"^1.58.2","@types/supertest":"^7.2.0","babel-preset-expo":"~57.0.7"},"peerDependencies":{"@terreno/api":"57.0.0-beta.1"},"_npmOperationalInternal":{"tmp":"tmp/admin-spa_57.0.0-beta.1_1787193226738_0.19634214960806196","host":"s3://npm-registry-packages-npm-production"}},"57.0.0":{"name":"@terreno/admin-spa","version":"57.0.0","keywords":["admin","api","expo","express","spa","terreno"],"author":{"name":"Josh Gachnang"},"license":"MIT","_id":"@terreno/admin-spa@57.0.0","maintainers":[{"name":"ashflourishing","email":"ashutosh@flourish.health"},{"name":"servercobra","email":"josh@nang.io"}],"homepage":"https://github.com/FlourishHealth/terreno#readme","bugs":{"url":"https://github.com/FlourishHealth/terreno/issues"},"dist":{"shasum":"085614ecd0611af69a282a6dc122e6fb4ab308bb","tarball":"https://registry.npmjs.org/@terreno/admin-spa/-/admin-spa-57.0.0.tgz","fileCount":120,"integrity":"sha512-4EioYdf0qlwbNKeGYW9OHZmb7/n6XkMXaTO+1Me02wuzlH6YarsRuQkqAJewEySLdOGiWugFTPYQapssobRUQQ==","signatures":[{"sig":"MEUCIQDz6P5w4PQQtlNzq9MLXuujgrQcCA9yD1yzvuf383JlLQIgYAAG0WXwx7tPLwCczhfcdU++8wWulVFr1SlKs8ZJ7Qw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16519199},"main":"expo-router/entry","types":"./src/dist/index.d.ts","exports":{".":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./serve":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./package.json":"./package.json"},"gitHead":"fd48a40ac9047a0781187e70764232dc2f6e16ad","scripts":{"dev":"expo start --web --port 8083","web":"expo start --web --port 8083","lint":"biome check ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test":"bun test ./src","smoke":"bun e2e/smoke.ts","start":"expo start","compile":"tsc -p tsconfig.server.json","test:ci":"bun test ./src","lint:fix":"biome check --write ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test:e2e":"playwright test","build:web":"expo export --platform web --output-dir dist","compile:watch":"tsc -p tsconfig.server.json -w","test:integration":"playwright test --config playwright.integration.config.ts"},"_npmUser":{"name":"servercobra","email":"josh@nang.io"},"repository":{"url":"git+ssh://git@github.com/FlourishHealth/terreno.git","type":"git"},"_npmVersion":"10.9.8","description":"Opt-in admin SPA (Expo Router web app) plus an Express plugin that serves it from a Terreno backend","directories":{},"_nodeVersion":"22.23.2","dependencies":{"expo":"~57.0.14","luxon":"^3.7.2","react":"19.2.3","express":"^5.2.1","expo-font":"~57.0.1","react-dom":"19.2.3","@terreno/ui":"57.0.0","better-auth":"^1.6.25","expo-router":"~57.0.14","react-redux":"^9.2.0","@terreno/rtk":"57.0.0","expo-linking":"~57.0.6","react-native":"0.86.2","redux-persist":"^6.0.0","expo-constants":"~57.0.12","expo-status-bar":"~57.0.1","@reduxjs/toolkit":"^2.11.1","react-native-web":"^0.21.2","@expo/vector-icons":"^15.1.1","expo-splash-screen":"~57.0.7","react-native-screens":"4.26.2","http-proxy-middleware":"^3.0.3","react-native-worklets":"0.10.1","@terreno/admin-frontend":"57.0.0","react-native-reanimated":"4.5.1","react-native-gesture-handler":"~2.32.0","react-native-safe-area-context":"~5.7.0","@react-native-async-storage/async-storage":"2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"supertest":"^7.2.2","@types/bun":"^1.3.8","typescript":"~6.0.3","@terreno/api":"57.0.0","@types/luxon":"^3.7.1","@types/react":"~19.2.14","@biomejs/biome":"^2.3.6","@types/express":"^5.0.6","@playwright/test":"^1.58.2","@types/supertest":"^7.2.0","babel-preset-expo":"~57.0.7"},"peerDependencies":{"@terreno/api":"57.0.0"},"_npmOperationalInternal":{"tmp":"tmp/admin-spa_57.0.0_1787201549106_0.15949052029235267","host":"s3://npm-registry-packages-npm-production"}},"57.1.0":{"name":"@terreno/admin-spa","version":"57.1.0","keywords":["admin","api","expo","express","spa","terreno"],"author":{"name":"Josh Gachnang"},"license":"MIT","_id":"@terreno/admin-spa@57.1.0","maintainers":[{"name":"ashflourishing","email":"ashutosh@flourish.health"},{"name":"servercobra","email":"josh@nang.io"}],"homepage":"https://github.com/FlourishHealth/terreno#readme","bugs":{"url":"https://github.com/FlourishHealth/terreno/issues"},"dist":{"shasum":"cdf3752451d31e4235c28d375ce39e812e3672b3","tarball":"https://registry.npmjs.org/@terreno/admin-spa/-/admin-spa-57.1.0.tgz","fileCount":121,"integrity":"sha512-uet+75cArU5NduNZarVERUOu4E3xS91JiCLBeMiGEqm0fzZxvKkWR2kTIoVMn9IcVSmdq8aX9uF0+qojh71UZQ==","signatures":[{"sig":"MEUCIQDmBJBAVm5qfV0ed2gChH1GvMHrTZf43NG0NyoliX0WeAIgLzb+1LFWs3+us3grPSllItamxJc6NtpUkaMPDdGrhso=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17449770},"main":"expo-router/entry","types":"./src/dist/index.d.ts","exports":{".":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./serve":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./package.json":"./package.json"},"gitHead":"7fa6a6d7e3a8c7fbe248355801067ece3ca7ac22","scripts":{"dev":"expo start --web --port 8083","web":"expo start --web --port 8083","lint":"biome check ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test":"bun test ./src","smoke":"bun e2e/smoke.ts","start":"expo start","compile":"tsc -p tsconfig.server.json","test:ci":"bun test ./src","lint:fix":"biome check --write ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test:e2e":"playwright test","build:web":"expo export --platform web --output-dir dist","test:agent":"AGENT=1 bun test --only-failures ./src","compile:watch":"tsc -p tsconfig.server.json -w","test:integration":"playwright test --config playwright.integration.config.ts"},"_npmUser":{"name":"servercobra","email":"josh@nang.io"},"repository":{"url":"git+ssh://git@github.com/FlourishHealth/terreno.git","type":"git"},"_npmVersion":"10.9.8","description":"Opt-in admin SPA (Expo Router web app) plus an Express plugin that serves it from a Terreno backend","directories":{},"_nodeVersion":"22.23.2","dependencies":{"expo":"~57.0.14","luxon":"^3.7.2","react":"19.2.3","express":"^5.2.1","expo-font":"~57.0.1","react-dom":"19.2.3","@terreno/ui":"57.1.0","better-auth":"^1.6.25","expo-router":"~57.0.14","react-redux":"^9.2.0","@terreno/rtk":"57.1.0","expo-linking":"~57.0.6","react-native":"0.86.2","redux-persist":"^6.0.0","expo-constants":"~57.0.12","expo-status-bar":"~57.0.1","@reduxjs/toolkit":"^2.11.1","react-native-web":"^0.21.2","@expo/vector-icons":"^15.1.1","expo-splash-screen":"~57.0.7","react-native-screens":"4.26.2","http-proxy-middleware":"^3.0.3","react-native-worklets":"0.10.1","@terreno/admin-frontend":"57.1.0","react-native-reanimated":"4.5.1","react-native-gesture-handler":"~2.32.0","react-native-safe-area-context":"~5.7.0","@react-native-async-storage/async-storage":"2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"supertest":"^7.2.2","@types/bun":"^1.3.8","typescript":"~6.0.3","@terreno/api":"57.1.0","@types/luxon":"^3.7.1","@types/react":"~19.2.14","@biomejs/biome":"^2.3.6","@types/express":"^5.0.6","@playwright/test":"^1.58.2","@types/supertest":"^7.2.0","babel-preset-expo":"~57.0.7"},"peerDependencies":{"@terreno/api":"57.1.0"},"_npmOperationalInternal":{"tmp":"tmp/admin-spa_57.1.0_1787446739341_0.41969470251406626","host":"s3://npm-registry-packages-npm-production"}},"57.2.0":{"name":"@terreno/admin-spa","version":"57.2.0","keywords":["admin","api","expo","express","spa","terreno"],"author":{"name":"Josh Gachnang"},"license":"MIT","_id":"@terreno/admin-spa@57.2.0","maintainers":[{"name":"ashflourishing","email":"ashutosh@flourish.health"},{"name":"servercobra","email":"josh@nang.io"}],"homepage":"https://github.com/FlourishHealth/terreno#readme","bugs":{"url":"https://github.com/FlourishHealth/terreno/issues"},"dist":{"shasum":"ac63325dc3d4a9720d3ce913ef701e03876a44d1","tarball":"https://registry.npmjs.org/@terreno/admin-spa/-/admin-spa-57.2.0.tgz","fileCount":121,"integrity":"sha512-9mR5ROnI025BvCe8XPJSMm+H0eK7NGbIg1iddz+0UxNMDRqhJKk3n5upZpJH0x5WO6VR5LocBGgVpqB0JPiMrA==","signatures":[{"sig":"MEUCIQChcpmbbeJODGoTy6Dp1UMma3THlPw2Rn0QcQ8VqHcJxAIgMvJLCXyGZPt7uLIY6F72vMf2GDU2nFwFMxc9n8QIGh0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17453238},"main":"expo-router/entry","types":"./src/dist/index.d.ts","exports":{".":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./serve":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./package.json":"./package.json"},"gitHead":"3caddf6f21e294db4e14ef19ea822f4a2dd9dd07","scripts":{"dev":"expo start --web --port 8083","web":"expo start --web --port 8083","lint":"biome check ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test":"bun test ./src","smoke":"bun e2e/smoke.ts","start":"expo start","compile":"tsc -p tsconfig.server.json","test:ci":"bun test ./src","lint:fix":"biome check --write ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test:e2e":"playwright test","build:web":"expo export --platform web --output-dir dist","test:agent":"AGENT=1 bun test --only-failures ./src","compile:watch":"tsc -p tsconfig.server.json -w","test:integration":"playwright test --config playwright.integration.config.ts"},"_npmUser":{"name":"servercobra","email":"josh@nang.io"},"repository":{"url":"git+ssh://git@github.com/FlourishHealth/terreno.git","type":"git"},"_npmVersion":"10.9.8","description":"Opt-in admin SPA (Expo Router web app) plus an Express plugin that serves it from a Terreno backend","directories":{},"_nodeVersion":"22.23.2","dependencies":{"expo":"~57.0.14","luxon":"^3.7.2","react":"19.2.3","express":"^5.2.1","expo-font":"~57.0.1","react-dom":"19.2.3","@terreno/ui":"57.2.0","better-auth":"^1.6.25","expo-router":"~57.0.14","react-redux":"^9.2.0","@terreno/rtk":"57.2.0","expo-linking":"~57.0.6","react-native":"0.86.2","redux-persist":"^6.0.0","expo-constants":"~57.0.12","expo-status-bar":"~57.0.1","@reduxjs/toolkit":"^2.11.1","react-native-web":"^0.21.2","@expo/vector-icons":"^15.1.1","expo-splash-screen":"~57.0.7","react-native-screens":"4.26.2","http-proxy-middleware":"^3.0.3","react-native-worklets":"0.10.1","@terreno/admin-frontend":"57.2.0","react-native-reanimated":"4.5.1","react-native-gesture-handler":"~2.32.0","react-native-safe-area-context":"~5.7.0","@react-native-async-storage/async-storage":"2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"supertest":"^7.2.2","@types/bun":"^1.4.0","typescript":"~6.0.3","@terreno/api":"57.2.0","@types/luxon":"^3.7.1","@types/react":"~19.2.14","@biomejs/biome":"^2.3.6","@types/express":"^5.0.6","@playwright/test":"^1.58.2","@types/supertest":"^7.2.0","babel-preset-expo":"~57.0.7"},"peerDependencies":{"@terreno/api":"57.2.0"},"_npmOperationalInternal":{"tmp":"tmp/admin-spa_57.2.0_1787546256717_0.7576216514547525","host":"s3://npm-registry-packages-npm-production"}},"57.3.0":{"name":"@terreno/admin-spa","version":"57.3.0","keywords":["admin","api","expo","express","spa","terreno"],"author":{"name":"Josh Gachnang"},"license":"MIT","_id":"@terreno/admin-spa@57.3.0","maintainers":[{"name":"ashflourishing","email":"ashutosh@flourish.health"},{"name":"servercobra","email":"josh@nang.io"}],"homepage":"https://github.com/FlourishHealth/terreno#readme","bugs":{"url":"https://github.com/FlourishHealth/terreno/issues"},"dist":{"shasum":"a64493801f22f019a694aab4b0fe9d0f68c8a61f","tarball":"https://registry.npmjs.org/@terreno/admin-spa/-/admin-spa-57.3.0.tgz","fileCount":9,"integrity":"sha512-kJ1lb14aht7wa97DozenonaFM7pdU8Snk+BzY1fgtWxzG0b26J9uYY9a7419jOYYbehHuYjbRpBPO2lQtFyfbQ==","signatures":[{"sig":"MEQCIEtlFVLkYlkC96HMtVCCkzl/F7Qnu5nzEkrge3myR+q9AiAyfhAEB4FDRfDgcGFMBPSPjCHOKkisAMkRYvA2dTYDdA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20597},"main":"expo-router/entry","types":"./src/dist/index.d.ts","exports":{".":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./serve":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./package.json":"./package.json"},"gitHead":"fadb8fba85094e66e6c64d2f0532f650d338293f","scripts":{"dev":"expo start --web --port 8083","web":"expo start --web --port 8083","lint":"biome check ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test":"bun test ./src","smoke":"bun e2e/smoke.ts","start":"expo start","compile":"tsc -p tsconfig.server.json","test:ci":"bun test ./src","lint:fix":"biome check --write ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test:e2e":"playwright test","build:web":"expo export --platform web --output-dir dist","test:agent":"AGENT=1 bun test --only-failures ./src","compile:watch":"tsc -p tsconfig.server.json -w","test:integration":"playwright test --config playwright.integration.config.ts"},"_npmUser":{"name":"servercobra","email":"josh@nang.io"},"repository":{"url":"git+ssh://git@github.com/FlourishHealth/terreno.git","type":"git"},"_npmVersion":"10.9.0","description":"Standalone admin SPA (Expo Router web) plus Express serve plugin — part of Terreno, the batteries-included TypeScript framework for universal apps.","directories":{},"_nodeVersion":"22.11.0","dependencies":{"expo":"~57.0.14","luxon":"^3.7.2","react":"19.2.3","express":"^5.2.1","expo-font":"~57.0.1","react-dom":"19.2.3","@terreno/ui":"57.3.0","better-auth":"^1.6.25","expo-router":"~57.0.14","react-redux":"^9.2.0","@terreno/rtk":"57.3.0","expo-linking":"~57.0.6","react-native":"0.86.2","redux-persist":"^6.0.0","expo-constants":"~57.0.12","expo-status-bar":"~57.0.1","@reduxjs/toolkit":"^2.11.1","react-native-web":"^0.21.2","@expo/vector-icons":"^15.1.1","expo-splash-screen":"~57.0.7","react-native-screens":"4.26.2","http-proxy-middleware":"^3.0.3","react-native-worklets":"0.10.1","@terreno/admin-frontend":"57.3.0","react-native-reanimated":"4.5.1","react-native-gesture-handler":"~2.32.0","react-native-safe-area-context":"~5.7.0","@react-native-async-storage/async-storage":"2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"supertest":"^7.2.2","@types/bun":"^1.4.0","typescript":"~6.0.3","@terreno/api":"57.3.0","@types/luxon":"^3.7.1","@types/react":"~19.2.14","@biomejs/biome":"^2.3.6","@types/express":"^5.0.6","@playwright/test":"^1.58.2","@types/supertest":"^7.2.0","babel-preset-expo":"~57.0.7"},"peerDependencies":{"@terreno/api":"57.3.0"},"_npmOperationalInternal":{"tmp":"tmp/admin-spa_57.3.0_1788999217791_0.07152619311187514","host":"s3://npm-registry-packages-npm-production"}},"57.4.0":{"name":"@terreno/admin-spa","version":"57.4.0","keywords":["admin","api","expo","express","spa","terreno"],"author":{"name":"Josh Gachnang"},"license":"MIT","_id":"@terreno/admin-spa@57.4.0","maintainers":[{"name":"ashflourishing","email":"ashutosh@flourish.health"},{"name":"servercobra","email":"josh@nang.io"}],"homepage":"https://github.com/FlourishHealth/terreno#readme","bugs":{"url":"https://github.com/FlourishHealth/terreno/issues"},"dist":{"shasum":"244bfbaa2c491408dee4c9f70b681322ec7b823c","tarball":"https://registry.npmjs.org/@terreno/admin-spa/-/admin-spa-57.4.0.tgz","fileCount":9,"integrity":"sha512-nxy2n1Q6o5lJwWVdTFi2epI6cTa6kmTJLg9JS1EftdWZuvjzKa4a7AfC1Fgw2PvbLisZVWw7Qa0eOACgg5q0IA==","signatures":[{"sig":"MEUCIGrH8OY5ticWh2fCAjPl1F9ISTyfUVRMn4ZXJGUigXq5AiEA7CXG89hjapnLMdLPM3RSCzM4tXb/PCwakgplf6W8RsI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCkfwiDBoIaHhjLY2Ox9sAikhXbnHLXX1ApPsXvAJjppQIhAKeNW1xuPHy1JiQi2m/5xwaeKTBRWfyrUTGUpH6SKmL/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20754},"main":"expo-router/entry","types":"./src/dist/index.d.ts","exports":{".":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./serve":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./package.json":"./package.json"},"gitHead":"6a6a66b55b5fe62619c3bcbaac6c14adc4a7fd3f","scripts":{"dev":"expo start --web --port 8083","web":"expo start --web --port 8083","lint":"biome check ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test":"bun test ./src ./store ./components","smoke":"bun e2e/smoke.ts","start":"expo start","compile":"tsc -p tsconfig.server.json","test:ci":"bun test ./src ./store ./components","lint:fix":"biome check --write ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test:e2e":"playwright test","build:web":"expo export --platform web --output-dir dist","test:agent":"AGENT=1 bun test --only-failures ./src ./store ./components","compile:watch":"tsc -p tsconfig.server.json -w","test:coverage":"bun run ../scripts/check-coverage.ts","test:integration":"playwright test --config playwright.integration.config.ts"},"_npmUser":{"name":"servercobra","email":"josh@nang.io"},"repository":{"url":"git+ssh://git@github.com/FlourishHealth/terreno.git","type":"git"},"_npmVersion":"10.9.0","description":"Standalone admin SPA (Expo Router web) plus Express serve plugin — part of Terreno, the batteries-included TypeScript framework for universal apps.","directories":{},"_nodeVersion":"22.11.0","dependencies":{"expo":"~57.0.14","react":"19.2.3","express":"^5.2.1","expo-font":"~57.0.1","react-dom":"19.2.3","@terreno/ui":"57.4.0","better-auth":"^1.6.25","expo-router":"~57.0.14","react-redux":"^9.2.0","@terreno/rtk":"57.4.0","expo-linking":"~57.0.6","react-native":"0.86.2","redux-persist":"^6.0.0","expo-constants":"~57.0.12","@terreno/syncdb":"57.4.0","expo-status-bar":"~57.0.1","@reduxjs/toolkit":"^2.11.1","react-native-web":"^0.21.2","@expo/vector-icons":"^15.1.1","expo-splash-screen":"~57.0.7","react-native-screens":"4.26.2","http-proxy-middleware":"^3.0.3","react-native-worklets":"0.10.1","@terreno/admin-frontend":"57.4.0","react-native-reanimated":"4.5.1","react-native-gesture-handler":"~2.32.0","react-native-safe-area-context":"~5.7.0","@react-native-async-storage/async-storage":"2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"luxon":"^3.7.2","supertest":"^7.2.2","@types/bun":"^1.4.0","typescript":"~6.0.3","@terreno/api":"57.4.0","@types/luxon":"^3.7.1","@types/react":"~19.2.14","@biomejs/biome":"^2.3.6","@types/express":"^5.0.6","@playwright/test":"^1.58.2","@types/supertest":"^7.2.0","babel-preset-expo":"~57.0.7"},"peerDependencies":{"@terreno/api":"57.4.0"},"_npmOperationalInternal":{"tmp":"tmp/admin-spa_57.4.0_1790099978077_0.01577076644217512","host":"s3://npm-registry-packages-npm-production"}},"57.6.0":{"name":"@terreno/admin-spa","version":"57.6.0","keywords":["admin","api","expo","express","spa","terreno"],"author":{"name":"Josh Gachnang"},"license":"MIT","_id":"@terreno/admin-spa@57.6.0","maintainers":[{"name":"ashflourishing","email":"ashutosh@flourish.health"},{"name":"servercobra","email":"josh@nang.io"}],"homepage":"https://github.com/TerrenoLabs/terreno#readme","bugs":{"url":"https://github.com/TerrenoLabs/terreno/issues"},"dist":{"shasum":"2a8114c793a2106ba05185dee29e1491412a9e18","tarball":"https://registry.npmjs.org/@terreno/admin-spa/-/admin-spa-57.6.0.tgz","fileCount":9,"integrity":"sha512-hjuAgUsrxga9QDOUipjGyeF31AkwAaXwzBuORULm0UIdryxifN3rb+GK0fGTUrwfUBuoYnPB9DzwVk48zunmkg==","signatures":[{"sig":"MEYCIQCrqrMmKcdMO3xbRj9DQKyVxydJNu5yBAMtA1fuFFzqrgIhAM7UDenx/pbsC68nBCJHpDPtVV0W5Buwn7R1zTAAqJkH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDKy54RpLwrrmXCJEhn5GLMtOWcfB1EjvwGdka9DRorwwIhAJ+0LbNo7eX4tRWyLDyRsB+XcnXuZ5f5yKXY69oRRHbK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20736},"main":"expo-router/entry","types":"./src/dist/index.d.ts","exports":{".":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./serve":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./package.json":"./package.json"},"gitHead":"1fb4e144aa5ab69584fe37cdc4e06473ce36276c","scripts":{"dev":"expo start --web --port 8083","web":"expo start --web --port 8083","lint":"biome check ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test":"bun test ./src ./store ./components","smoke":"bun e2e/smoke.ts","start":"expo start","compile":"tsc -p tsconfig.server.json","test:ci":"bun test ./src ./store ./components","lint:fix":"biome check --write ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test:e2e":"playwright test","build:web":"expo export --platform web --output-dir dist","test:agent":"AGENT=1 bun test --only-failures ./src ./store ./components","compile:watch":"tsc -p tsconfig.server.json -w","test:coverage":"bun run ../scripts/check-coverage.ts","test:integration":"playwright test --config playwright.integration.config.ts"},"_npmUser":{"name":"servercobra","email":"josh@nang.io"},"repository":{"url":"git+ssh://git@github.com/TerrenoLabs/terreno.git","type":"git"},"_npmVersion":"10.9.0","description":"Standalone admin SPA (Expo Router web) plus Express serve plugin — part of Terreno, the batteries-included TypeScript framework for universal apps.","directories":{},"_nodeVersion":"22.11.0","dependencies":{"expo":"~57.0.14","react":"19.2.3","express":"^5.2.1","expo-font":"~57.0.1","react-dom":"19.2.3","@terreno/ui":"57.6.0","better-auth":"^1.6.25","expo-router":"~57.0.14","react-redux":"^9.2.0","@terreno/rtk":"57.6.0","expo-linking":"~57.0.6","react-native":"0.86.2","redux-persist":"^6.0.0","expo-constants":"~57.0.12","@terreno/syncdb":"57.6.0","expo-status-bar":"~57.0.1","@reduxjs/toolkit":"^2.11.1","react-native-web":"^0.21.2","@expo/vector-icons":"^15.1.1","expo-splash-screen":"~57.0.7","react-native-screens":"4.26.2","http-proxy-middleware":"^3.0.3","react-native-worklets":"0.10.1","@terreno/admin-frontend":"57.6.0","react-native-reanimated":"4.5.1","react-native-gesture-handler":"~2.32.0","react-native-safe-area-context":"~5.7.0","@react-native-async-storage/async-storage":"2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"luxon":"^3.7.2","supertest":"^7.2.2","@types/bun":"^1.4.0","typescript":"~6.0.3","@terreno/api":"57.6.0","@types/luxon":"^3.7.1","@types/react":"~19.2.14","@biomejs/biome":"^2.3.6","@types/express":"^5.0.6","@playwright/test":"^1.58.2","@types/supertest":"^7.2.0","babel-preset-expo":"~57.0.7"},"peerDependencies":{"@terreno/api":"57.6.0"},"_npmOperationalInternal":{"tmp":"tmp/admin-spa_57.6.0_1790227578536_0.7402229748085782","host":"s3://npm-registry-packages-npm-production"}},"57.6.1":{"name":"@terreno/admin-spa","version":"57.6.1","keywords":["admin","api","expo","express","spa","terreno"],"author":{"name":"Josh Gachnang"},"license":"MIT","_id":"@terreno/admin-spa@57.6.1","maintainers":[{"name":"ashflourishing","email":"ashutosh@flourish.health"},{"name":"servercobra","email":"josh@nang.io"}],"homepage":"https://github.com/TerrenoLabs/terreno#readme","bugs":{"url":"https://github.com/TerrenoLabs/terreno/issues"},"dist":{"shasum":"4d17a40e0e9b6f84c7fe050798a8a83bfa577c0e","tarball":"https://registry.npmjs.org/@terreno/admin-spa/-/admin-spa-57.6.1.tgz","fileCount":9,"integrity":"sha512-ibZ/DYAL5thfL2Dsl6IoP/R6iEPBd9Glr3NnFhB7hCqf6ZfFwfHZ15zF28j88PrW/M9bCxTGDXrUDiFpHh0KLQ==","signatures":[{"sig":"MEUCIQDdb8H8whk+tMpCbRvY4M6N2sYKH3ufWKOG4pcJVpXTSwIgPxMnWHxqGqqDKjEeAfU1zcJPGD+Yr6BHrb6ueWM73gY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIEjxyUiaMpexN05r4PviRh+PDPJTs8qw0Hpghl+qj2ehAiBjELLa1Y8x6trbHVp5+BeKlqmT2PFaw0wfqT+3l1sApQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20736},"main":"expo-router/entry","types":"./src/dist/index.d.ts","exports":{".":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./serve":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./package.json":"./package.json"},"gitHead":"8a9e61f0e28e67b1add287e7b69fa61f7f8c6185","scripts":{"dev":"expo start --web --port 8083","web":"expo start --web --port 8083","lint":"biome check ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test":"bun test ./src ./store ./components","smoke":"bun e2e/smoke.ts","start":"expo start","compile":"tsc -p tsconfig.server.json","test:ci":"bun test ./src ./store ./components","lint:fix":"biome check --write ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test:e2e":"playwright test","build:web":"expo export --platform web --output-dir dist","test:agent":"AGENT=1 bun test --only-failures ./src ./store ./components","compile:watch":"tsc -p tsconfig.server.json -w","test:coverage":"bun run ../scripts/check-coverage.ts","test:integration":"playwright test --config playwright.integration.config.ts"},"_npmUser":{"name":"servercobra","email":"josh@nang.io"},"repository":{"url":"git+ssh://git@github.com/TerrenoLabs/terreno.git","type":"git"},"_npmVersion":"10.9.0","description":"Standalone admin SPA (Expo Router web) plus Express serve plugin — part of Terreno, the batteries-included TypeScript framework for universal apps.","directories":{},"_nodeVersion":"22.11.0","dependencies":{"expo":"~57.0.14","react":"19.2.3","express":"^5.2.1","expo-font":"~57.0.1","react-dom":"19.2.3","@terreno/ui":"57.6.1","better-auth":"^1.6.25","expo-router":"~57.0.14","react-redux":"^9.2.0","@terreno/rtk":"57.6.1","expo-linking":"~57.0.6","react-native":"0.86.2","redux-persist":"^6.0.0","expo-constants":"~57.0.12","@terreno/syncdb":"57.6.1","expo-status-bar":"~57.0.1","@reduxjs/toolkit":"^2.11.1","react-native-web":"^0.21.2","@expo/vector-icons":"^15.1.1","expo-splash-screen":"~57.0.7","react-native-screens":"4.26.2","http-proxy-middleware":"^3.0.3","react-native-worklets":"0.10.1","@terreno/admin-frontend":"57.6.1","react-native-reanimated":"4.5.1","react-native-gesture-handler":"~2.32.0","react-native-safe-area-context":"~5.7.0","@react-native-async-storage/async-storage":"2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"luxon":"^3.7.2","supertest":"^7.2.2","@types/bun":"^1.4.0","typescript":"~6.0.3","@terreno/api":"57.6.1","@types/luxon":"^3.7.1","@types/react":"~19.2.14","@biomejs/biome":"^2.3.6","@types/express":"^5.0.6","@playwright/test":"^1.58.2","@types/supertest":"^7.2.0","babel-preset-expo":"~57.0.7"},"peerDependencies":{"@terreno/api":"57.6.1"},"_npmOperationalInternal":{"tmp":"tmp/admin-spa_57.6.1_1790364849069_0.23626916859844105","host":"s3://npm-registry-packages-npm-production"}},"57.7.0":{"_id":"@terreno/admin-spa@57.7.0","bugs":{"url":"https://github.com/TerrenoLabs/terreno/issues"},"dist":{"shasum":"39545f11158ce23bfdf11579cc7287958334e82a","tarball":"https://registry.npmjs.org/@terreno/admin-spa/-/admin-spa-57.7.0.tgz","fileCount":9,"integrity":"sha512-MtNiKidr8XLYUa05D3oLhYvE5fVb40OzXd1aSIgHX564O+TwzMpdg9BCkEkXLV5yudqUO3CdPZjX8In/HcMBJQ==","signatures":[{"sig":"MEYCIQCVr87rT4kFNqDtoLSy3fs3MOzoWW6cb++h37mxvMa15QIhAIZeJfXRwjFt+lPecrsSI5oSty/VXcl74GL38wui5zgo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICvQWRhObOl6HVhc1N5A7DSxFTSCofEAO4U4LAvS+usBAiA3zmG548taWWREjK2D7WCDivhGHNfwGVjHtECY6twecg=="}],"unpackedSize":20736},"main":"expo-router/entry","name":"@terreno/admin-spa","types":"./src/dist/index.d.ts","author":{"name":"Josh Gachnang"},"exports":{".":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./serve":{"types":"./src/dist/index.d.ts","default":"./src/dist/index.js"},"./package.json":"./package.json"},"gitHead":"9c86da95ac663fe5f2b2c212fa25d01ab8e55060","license":"MIT","scripts":{"dev":"expo start --web --port 8083","web":"expo start --web --port 8083","lint":"biome check ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test":"bun test ./src ./store ./components","smoke":"bun e2e/smoke.ts","start":"expo start","compile":"tsc -p tsconfig.server.json","test:ci":"bun test ./src ./store ./components","lint:fix":"biome check --write ./src ./app ./store ./components ./e2e playwright.config.ts playwright.integration.config.ts","test:e2e":"playwright test","build:web":"expo export --platform web --output-dir dist","test:agent":"AGENT=1 bun test --only-failures ./src ./store ./components","compile:watch":"tsc -p tsconfig.server.json -w","test:coverage":"bun run ../scripts/check-coverage.ts","test:integration":"playwright test --config playwright.integration.config.ts"},"version":"57.7.0","_npmUser":{"name":"servercobra","email":"josh@nang.io"},"homepage":"https://github.com/TerrenoLabs/terreno#readme","keywords":["admin","api","expo","express","spa","terreno"],"repository":{"url":"git+ssh://git@github.com/TerrenoLabs/terreno.git","type":"git"},"_npmVersion":"10.9.0","description":"Standalone admin SPA (Expo Router web) plus Express serve plugin — part of Terreno, the batteries-included TypeScript framework for universal apps.","directories":{},"maintainers":[{"name":"ashflourishing","email":"ashutosh@flourish.health"},{"name":"servercobra","email":"josh@nang.io"}],"_nodeVersion":"22.11.0","dependencies":{"expo":"~57.0.14","react":"19.2.3","express":"^5.2.1","expo-font":"~57.0.1","react-dom":"19.2.3","@terreno/ui":"57.7.0","better-auth":"^1.6.25","expo-router":"~57.0.14","react-redux":"^9.2.0","@terreno/rtk":"57.7.0","expo-linking":"~57.0.6","react-native":"0.86.2","redux-persist":"^6.0.0","expo-constants":"~57.0.12","@terreno/syncdb":"57.7.0","expo-status-bar":"~57.0.1","@reduxjs/toolkit":"^2.11.1","react-native-web":"^0.21.2","@expo/vector-icons":"^15.1.1","expo-splash-screen":"~57.0.7","react-native-screens":"4.26.2","http-proxy-middleware":"^3.0.3","react-native-worklets":"0.10.1","@terreno/admin-frontend":"57.7.0","react-native-reanimated":"4.5.1","react-native-gesture-handler":"~2.32.0","react-native-safe-area-context":"~5.7.0","@react-native-async-storage/async-storage":"2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"luxon":"^3.7.2","supertest":"^7.2.2","@types/bun":"^1.4.0","typescript":"~6.0.3","@terreno/api":"57.7.0","@types/luxon":"^3.7.1","@types/react":"~19.2.14","@biomejs/biome":"^2.3.6","@types/express":"^5.0.6","@playwright/test":"^1.58.2","@types/supertest":"^7.2.0","babel-preset-expo":"~57.0.7"},"peerDependencies":{"@terreno/api":"57.7.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/admin-spa_57.7.0_1790638430032_0.5906648172737348"}}},"time":{"created":"2026-06-04T18:43:13.734Z","modified":"2026-09-28T23:33:50.333Z","0.17.0":"2026-06-04T18:43:14.180Z","0.18.0":"2026-06-11T05:11:14.171Z","0.19.0":"2026-06-14T17:56:15.166Z","0.20.0":"2026-06-14T21:34:48.143Z","0.20.1":"2026-06-16T23:15:04.722Z","0.20.2":"2026-06-17T21:40:19.066Z","0.21.0":"2026-06-22T23:45:11.418Z","0.22.0":"2026-06-24T21:42:36.182Z","0.22.1":"2026-06-24T22:22:54.710Z","0.22.2":"2026-06-24T23:13:43.027Z","0.23.0":"2026-06-26T19:18:19.908Z","0.23.1":"2026-07-02T23:57:38.236Z","0.24.0":"2026-07-03T21:40:22.188Z","0.25.0":"2026-07-12T23:36:43.744Z","0.26.0":"2026-07-15T22:01:42.256Z","0.27.0":"2026-07-29T02:12:13.148Z","0.28.0":"2026-07-30T20:46:51.397Z","0.29.0":"2026-07-31T06:36:25.467Z","0.30.0":"2026-08-03T20:34:24.847Z","0.31.0":"2026-08-11T18:30:56.155Z","56.0.0-beta.2":"2026-08-17T22:45:56.456Z","57.0.0-beta.1":"2026-08-20T02:33:47.009Z","57.0.0":"2026-08-20T04:52:29.385Z","57.1.0":"2026-08-23T00:58:59.592Z","57.2.0":"2026-08-24T04:37:36.986Z","57.3.0":"2026-09-10T00:13:37.981Z","57.4.0":"2026-09-22T17:59:38.177Z","57.6.0":"2026-09-24T05:26:18.622Z","57.6.1":"2026-09-25T19:34:09.149Z","57.7.0":"2026-09-28T23:33:50.130Z"},"bugs":{"url":"https://github.com/TerrenoLabs/terreno/issues"},"author":{"name":"Josh Gachnang"},"license":"MIT","homepage":"https://github.com/TerrenoLabs/terreno#readme","keywords":["admin","api","expo","express","spa","terreno"],"repository":{"url":"git+ssh://git@github.com/TerrenoLabs/terreno.git","type":"git"},"description":"Standalone admin SPA (Expo Router web) plus Express serve plugin — part of Terreno, the batteries-included TypeScript framework for universal apps.","maintainers":[{"name":"ashflourishing","email":"ashutosh@flourish.health"},{"name":"servercobra","email":"josh@nang.io"}],"readme":"# @terreno/admin-spa\n\nOpt-in admin SPA (Expo Router web app) plus an Express plugin that serves it from a Terreno backend.\n\nOpt-in package that lets any Terreno backend serve a pre-built admin SPA from the\nsame Node process — no separate static-site deploy to GCS/Netlify/Cloudflare Pages.\n\nThe default backend image stays small: React/Expo assets only ship in the npm\ntarball for consumers who actually register the plugin. The embedded admin use case\n(admin screens inside a consumer's main Expo app, as `example-frontend/app/admin/*`\ndoes) remains supported and unchanged.\n\n## What's here\n\n- **Backend serving plugin** (`src/`, `AdminSpaServeApp`): serves the pre-built Expo\n  Router static export (`dist/`) and a runtime `app-config.json` from a Terreno backend.\n- **The SPA frontend** (`app/`, `store/`, `components/`): an Expo Router web app that\n  wires `@terreno/admin-frontend`'s screens with a Better-Auth session gate. It uses the\n  `@terreno/admin-frontend` `apiBase`/`routeBase` prop split so API calls go to `/admin`\n  while in-app navigation stays inside the SPA.\n\nBoot flow: `AppConfigGate` fetches `app-config.json` → `StoreProvider` builds the\nBetter-Auth client + Redux store → `AdminGate` syncs the session and redirects\nanonymous users to `/login` and non-admins (admin API returns 403) to `/forbidden`.\n\n## Install\n\n```bash\nbun add @terreno/admin-spa\n```\n\n`@terreno/api` is a peer dependency.\n\n## Register with a backend\n\n```typescript\nimport {AdminSpaServeApp} from \"@terreno/admin-spa\";\nimport {AdminApp} from \"@terreno/admin-backend\";\nimport {BetterAuthApp, TerrenoApp} from \"@terreno/api\";\n\nnew TerrenoApp({userModel: User})\n  .register(new BetterAuthApp({config: betterAuthConfig, userModel: User}))\n  .register(new AdminApp({models: [...]}))\n  .register(\n    new AdminSpaServeApp({\n      basePath: \"/console\", // default; non-breaking with the /admin API\n      appConfig: {\n        brandName: \"Acme Admin\",\n        logoUrl: \"/static/logo.svg\",\n        primaryColor: \"#FF6B35\",\n        providers: [\"email\", \"google\"],\n      },\n    })\n  )\n  .start();\n```\n\nOpen `https://api.acme.com/console/` → admin UI. Same-origin → Better-Auth session\ncookies attach automatically, no CORS.\n\n## Options (`AdminSpaServeOptions`)\n\n| Option | Default | Description |\n|---|---|---|\n| `basePath` | `/console` | Path the SPA mounts at. The `/admin` API is untouched. |\n| `appConfig` | see below | Runtime config served at `${basePath}/app-config.json`. Merged over defaults. |\n| `distDir` | `<pkg>/dist` | Override the pre-built bundle directory (tests / custom builds). |\n| `devProxyTarget` | — | In dev, proxy all SPA paths to a running `expo start --web`, e.g. `http://localhost:8083`. |\n\n### App config\n\n`app-config.json` lets a single pre-built bundle be themed and pointed at the right\nauth/admin API paths per consumer without rebuilding. Defaults:\n\n```typescript\n{\n  brandName: \"Terreno Admin\",\n  primaryColor: \"#2563EB\",\n  providers: [\"email\"],\n  authBasePath: \"/api/auth\",\n  adminApiBasePath: \"/admin\",\n}\n```\n\n## How serving works\n\n- `${basePath}/_expo` and `${basePath}/assets` are served with\n  `Cache-Control: public, max-age=31536000, immutable`.\n- `${basePath}/app-config.json` and `index.html` are served with\n  `Cache-Control: no-store`.\n- `index.html`'s absolute `/_expo/` and `/assets/` references are rewritten once at\n  boot to `${basePath}/...` (a no-op when the bundle was already built for that base).\n- The serve plugin injects `window.__ADMIN_SPA_BASE__ = \"${basePath}\"` into `index.html`\n  so the SPA can resolve `app-config.json` on deep refreshes.\n- SPA fallback: both the bare `${basePath}` and `${basePath}/*splat` return\n  `index.html` (Express 5 named-splat convention).\n\n### Mount path / `baseUrl`\n\nClient-side routing under a sub-path requires the bundle to be built with a matching\nrouter base. `app.json` sets `experiments.baseUrl: \"/console\"`, so the default build is\nserved at `/console` and `basePath` must match. To mount elsewhere, rebuild with the\nmatching base (e.g. `EXPO_BASE_URL=/admin-ui bun run build:web`) and set `basePath`\naccordingly. Mounting at the origin root (`basePath: \"/\"`) needs no base.\n\n## Develop, build, and test\n\n```bash\nbun run compile      # compile the server plugin (src/ -> src/dist, CommonJS)\nbun run build:web    # produce the static export in dist/\nbun run dev          # expo start --web for local SPA development\nbun run test:ci      # serve-plugin unit tests (supertest)\nbun run smoke        # backend-free smoke over the built dist/\nbun run test:e2e     # Playwright e2e (anonymous -> login) over the built dist/\n```\n\n`dist/` is produced by `bun run build:web` and shipped via\n`files: [\"src/dist/**\", \"dist/**\"]`. The `publish-on-tag` CI job runs both the server\ncompile and the web export before `npm publish`, so the published tarball's `dist/` is\npopulated.\n\n## Comparison with embedded admin-frontend\n\n| | Standalone SPA (`@terreno/admin-spa`) | Embedded (`@terreno/admin-frontend`) |\n|---|---|---|\n| Deploy | Served by the API process at `/console` | Bundled into the consumer's Expo app |\n| Backend footprint | Opt-in; no React in default image | n/a |\n| Auth | Better-Auth same-origin cookies | Consumer's existing auth |\n\n## Documentation\n\nFull API reference: [docs/reference/admin-spa.md](https://github.com/TerrenoLabs/terreno/blob/master/docs/reference/admin-spa.md)\n\n## License and Contributing\n\nLicensed under the [MIT License](https://github.com/TerrenoLabs/terreno/blob/master/LICENSE). See [CONTRIBUTING.md](https://github.com/TerrenoLabs/terreno/blob/master/CONTRIBUTING.md) for contribution guidelines.\n","readmeFilename":"README.md"}