@zorgo/next 1.1.0 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.mjs CHANGED
@@ -1,2 +1,344 @@
1
1
  #!/usr/bin/env node
2
- const a0_0x23a0a9=a0_0x4728;(function(_0x321818,_0x4934bd){const _0x3a7965=a0_0x4728,_0x534148=_0x321818();while(!![]){try{const _0x20e74b=parseInt(_0x3a7965(0x22b))/0x1*(-parseInt(_0x3a7965(0x210))/0x2)+parseInt(_0x3a7965(0x240))/0x3*(-parseInt(_0x3a7965(0x1e0))/0x4)+-parseInt(_0x3a7965(0x238))/0x5+parseInt(_0x3a7965(0x23d))/0x6+parseInt(_0x3a7965(0x23a))/0x7*(-parseInt(_0x3a7965(0x1cc))/0x8)+-parseInt(_0x3a7965(0x1e9))/0x9+parseInt(_0x3a7965(0x1f2))/0xa*(parseInt(_0x3a7965(0x234))/0xb);if(_0x20e74b===_0x4934bd)break;else _0x534148['push'](_0x534148['shift']());}catch(_0x53ba7c){_0x534148['push'](_0x534148['shift']());}}}(a0_0x47de,0xa6112));import a0_0x1fb3c6 from'path';import{fileURLToPath as a0_0x2281cd}from'url';var z=()=>a0_0x2281cd(import.meta.url),M=()=>a0_0x1fb3c6[a0_0x23a0a9(0x268)](z()),i=M();import{parseArgs as a0_0x182fcc}from'util';import{cp as a0_0x4914a9,rename as a0_0x3cd3e1}from'fs/promises';import{existsSync as a0_0xcb4943}from'fs';import{join as a0_0x34fd9a}from'path';import{writeFileSync as a0_0xd0adae,mkdirSync as a0_0x2708a4}from'fs';import{dirname as a0_0x3af9bd,join as a0_0x5bb327}from'path';function g(_0x3cb0ac,_0x5f58d8,_0x2ede3d){const _0x1f1365=a0_0x23a0a9,_0x246dbe={'cGmMO':function(_0x20a17b,_0x4ccd2d){return _0x20a17b(_0x4ccd2d);}};let _0x48dc0e=a0_0x5bb327(_0x3cb0ac,_0x5f58d8);a0_0x2708a4(_0x246dbe[_0x1f1365(0x214)](a0_0x3af9bd,_0x48dc0e),{'recursive':!0x0}),a0_0xd0adae(_0x48dc0e,_0x2ede3d);}var k=a0_0x23a0a9(0x1e5),U={'@zorgo/next':k,'@cloudflare/kv-asset-handler':a0_0x23a0a9(0x271),'@opennextjs/cloudflare':a0_0x23a0a9(0x27c),'@stripe/react-stripe-js':a0_0x23a0a9(0x1e7),'@stripe/stripe-js':a0_0x23a0a9(0x252),'@supabase/ssr':a0_0x23a0a9(0x216),'@supabase/supabase-js':a0_0x23a0a9(0x1ed),'class-variance-authority':a0_0x23a0a9(0x230),'clsx':'2.1.1','date-fns':'4.1.0','date-fns-tz':a0_0x23a0a9(0x249),'geojson-vt':'4.0.2','gsap':a0_0x23a0a9(0x1f1),'iconoir-react':a0_0x23a0a9(0x1ca),'libphonenumber-js':'1.13.8','lucide-react':a0_0x23a0a9(0x1f6),'promise-timeout':'1.3.0','sharp':a0_0x23a0a9(0x1dc),'stripe':a0_0x23a0a9(0x1fa),'tailwind-merge':a0_0x23a0a9(0x1c7),'tailwindcss-animate':'1.0.7','zod':'4.3.6','next':a0_0x23a0a9(0x1c4),'react':a0_0x23a0a9(0x261),'react-dom':a0_0x23a0a9(0x261)},A={'wrangler':a0_0x23a0a9(0x239),'@tailwindcss/postcss':a0_0x23a0a9(0x1e8),'@types/node':'20.19.43','@types/react':a0_0x23a0a9(0x24a),'@types/react-dom':'19.2.3','babel-plugin-react-compiler':a0_0x23a0a9(0x1fb),'eslint':'9.39.4','eslint-config-next':a0_0x23a0a9(0x1c4),'tailwindcss':a0_0x23a0a9(0x1e8),'typescript':a0_0x23a0a9(0x27b),'tsx':a0_0x23a0a9(0x20a),'@next/env':a0_0x23a0a9(0x1c4)};function f(_0x2b2fac){const _0x50f252=a0_0x23a0a9,_0x158560={'hnood':_0x50f252(0x21c),'avNuc':_0x50f252(0x27a)};return JSON[_0x50f252(0x1cb)]({'name':_0x2b2fac[_0x50f252(0x21e)],'version':_0x50f252(0x1fb),'private':!0x0,'scripts':{'dev':_0x158560[_0x50f252(0x257)],'dev:no-prebuild':_0x50f252(0x265),'prebuild':'tsx\x20scripts/prebuild.ts','build':_0x50f252(0x222),'cloudflare:deploy':_0x50f252(0x23b),'preview':_0x158560['avNuc']},'dependencies':U,'devDependencies':A},null,0x2);}var V={'backgroundBase':a0_0x23a0a9(0x1ef),'primary':a0_0x23a0a9(0x251),'accent':a0_0x23a0a9(0x1da),'fontFamily':a0_0x23a0a9(0x215)},D=a0_0x23a0a9(0x266),Z=a0_0x23a0a9(0x1c9),p=0xf;function a0_0x4728(_0x12d494,_0x2adfe4){_0x12d494=_0x12d494-0x1c1;const _0x47def1=a0_0x47de();let _0x47282d=_0x47def1[_0x12d494];if(a0_0x4728['vciFsO']===undefined){var _0x19e5a0=function(_0x36e99d){const _0x5d05c8='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3acfaa='',_0x4b76bf='';for(let _0x3f438a=0x0,_0xdccdd5,_0x1f2768,_0x216098=0x0;_0x1f2768=_0x36e99d['charAt'](_0x216098++);~_0x1f2768&&(_0xdccdd5=_0x3f438a%0x4?_0xdccdd5*0x40+_0x1f2768:_0x1f2768,_0x3f438a++%0x4)?_0x3acfaa+=String['fromCharCode'](0xff&_0xdccdd5>>(-0x2*_0x3f438a&0x6)):0x0){_0x1f2768=_0x5d05c8['indexOf'](_0x1f2768);}for(let _0x5a733f=0x0,_0x36e957=_0x3acfaa['length'];_0x5a733f<_0x36e957;_0x5a733f++){_0x4b76bf+='%'+('00'+_0x3acfaa['charCodeAt'](_0x5a733f)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4b76bf);};a0_0x4728['ZjscFV']=_0x19e5a0,a0_0x4728['GnYQfh']={},a0_0x4728['vciFsO']=!![];}const _0x1be171=_0x47def1[0x0],_0x4f5728=_0x12d494+_0x1be171,_0x24bf17=a0_0x4728['GnYQfh'][_0x4f5728];return!_0x24bf17?(_0x47282d=a0_0x4728['ZjscFV'](_0x47282d),a0_0x4728['GnYQfh'][_0x4f5728]=_0x47282d):_0x47282d=_0x24bf17,_0x47282d;}function h(_0x2e3a43){const _0x41ad9b=a0_0x23a0a9,_0x5e8c49={'pDrBS':function(_0x42fd93,_0x591d98){return _0x42fd93===_0x591d98;},'aHbDZ':function(_0x393dfa,_0x1efc72){return _0x393dfa!==_0x1efc72;}};let _0x3bbcb1=_0x2e3a43[_0x41ad9b(0x225)]()[_0x41ad9b(0x236)](/^#/,''),_0x1c8901=_0x5e8c49[_0x41ad9b(0x1c2)](_0x3bbcb1[_0x41ad9b(0x255)],0x3)?_0x3bbcb1[_0x41ad9b(0x27e)]('')[_0x41ad9b(0x1fd)](_0x1a1122=>_0x1a1122+_0x1a1122)[_0x41ad9b(0x1db)](''):_0x3bbcb1;return _0x5e8c49['aHbDZ'](_0x1c8901[_0x41ad9b(0x255)],0x6)||Number[_0x41ad9b(0x270)](Number[_0x41ad9b(0x1d6)](_0x1c8901,0x10))?null:{'r':Number[_0x41ad9b(0x1d6)](_0x1c8901[_0x41ad9b(0x250)](0x0,0x2),0x10),'g':Number[_0x41ad9b(0x1d6)](_0x1c8901[_0x41ad9b(0x250)](0x2,0x4),0x10),'b':Number[_0x41ad9b(0x1d6)](_0x1c8901[_0x41ad9b(0x250)](0x4,0x6),0x10)};}function L({r:_0x715f7b,g:_0x2f802a,b:_0x3a611a}){const _0x501cea=a0_0x23a0a9;return'#'+[_0x715f7b,_0x2f802a,_0x3a611a][_0x501cea(0x1fd)](_0x44ceaf=>_0x44ceaf[_0x501cea(0x25d)](0x10)[_0x501cea(0x1f8)](0x2,'0'))[_0x501cea(0x1db)]('');}function y(_0xf39405){const _0x1ca3f6=a0_0x23a0a9,_0x462e08={'skaAQ':function(_0x4a2494,_0x4e25be){return _0x4a2494+_0x4e25be;}};let _0x152c09=h(_0xf39405);return _0x152c09?_0x462e08[_0x1ca3f6(0x253)](0.299*_0x152c09['r']+0.587*_0x152c09['g'],0.114*_0x152c09['b'])/0xff>0.5?D:Z:D;}function Y(_0x26645f){const _0x2ce097=a0_0x23a0a9,_0x2f9197={'OnMKh':function(_0x5e5849,_0x46d2a9){return _0x5e5849(_0x46d2a9);}};let _0x228b43=h(_0x26645f);return _0x228b43?_0x2f9197[_0x2ce097(0x1d8)](L,{'r':Math[_0x2ce097(0x248)](0xff,_0x228b43['r']+p),'g':Math['min'](0xff,_0x228b43['g']+p),'b':Math[_0x2ce097(0x248)](0xff,_0x228b43['b']+p)}):_0x26645f;}function W(_0x403a20){const _0x3305fc=a0_0x23a0a9,_0x2b0d92={'MwUGl':function(_0x5d395d,_0x574fca){return _0x5d395d(_0x574fca);},'kaHHM':function(_0x5fd713,_0x1be391){return _0x5fd713-_0x1be391;}};let _0x35db9e=_0x2b0d92['MwUGl'](h,_0x403a20);return _0x35db9e?L({'r':Math[_0x3305fc(0x1e3)](0x0,_0x2b0d92['kaHHM'](_0x35db9e['r'],p)),'g':Math[_0x3305fc(0x1e3)](0x0,_0x2b0d92[_0x3305fc(0x274)](_0x35db9e['g'],p)),'b':Math['max'](0x0,_0x35db9e['b']-p)}):_0x403a20;}function b(_0x580c5e){const _0x63480d=a0_0x23a0a9,_0x22b635={'TMUBY':function(_0x4ddd38,_0x523235){return _0x4ddd38(_0x523235);}};let _0x7208e6=V,_0x1548d3=_0x7208e6[_0x63480d(0x1cf)]['replace'](/ /g,'+'),_0x4b8964=y(_0x7208e6[_0x63480d(0x1f4)]),_0x7a553e=_0x22b635[_0x63480d(0x211)](y,_0x7208e6['primary']),_0xde2bc5=y(_0x7208e6['accent']),_0x39da0a=Y(_0x7208e6[_0x63480d(0x1f4)]),_0x319f4e=_0x22b635['TMUBY'](W,_0x7208e6[_0x63480d(0x1f4)]);return _0x63480d(0x1e4)+_0x1548d3+':wght@400;700&display=swap\x22);\x0a@import\x20\x22tailwindcss\x22;\x0a/*\x20Tailwind\x20v4\x20skips\x20node_modules;\x20@zorgo/next\x20ships\x20un-obfuscated\x20components\x20so\x0a\x20\x20\x20their\x20class\x20names\x20are\x20scannable\x20here.\x20*/\x0a@source\x20\x22../node_modules/@zorgo/next/dist/components.mjs\x22;\x0a\x0a:root\x20{\x0a\x20\x20--background:\x20'+_0x7208e6[_0x63480d(0x1f4)]+_0x63480d(0x1fc)+_0x39da0a+';\x0a\x20\x20--background-recessed:\x20'+_0x319f4e+';\x0a\x20\x20--foreground:\x20'+_0x4b8964+_0x63480d(0x20d)+_0x7208e6['primary']+_0x63480d(0x231)+_0x7a553e+_0x63480d(0x209)+_0x7208e6['accent']+_0x63480d(0x22e)+_0xde2bc5+_0x63480d(0x200)+_0x7208e6['fontFamily']+_0x63480d(0x201);}function _(_0x311887){const _0x285696=a0_0x23a0a9;return _0x285696(0x1ff)+JSON['stringify'](_0x311887[_0x285696(0x21e)])+_0x285696(0x202)+JSON[_0x285696(0x1cb)](_0x285696(0x24c)+_0x311887[_0x285696(0x21e)])+_0x285696(0x206)+JSON[_0x285696(0x1cb)](_0x285696(0x1f3)+_0x311887[_0x285696(0x21e)]+'.')+',\x0a\x09openGraph:\x20{\x0a\x09\x09type:\x20\x22website\x22,\x0a\x09\x09siteName:\x20'+JSON[_0x285696(0x1cb)](_0x311887[_0x285696(0x21e)])+_0x285696(0x1f9);}function x(_0x1d347b){const _0x402a28=a0_0x23a0a9;return _0x402a28(0x1c8)+_0x1d347b[_0x402a28(0x21e)][_0x402a28(0x25f)](0x0)[_0x402a28(0x1e6)]()+_0x402a28(0x203);}function S(_0x158621){const _0x433e6e=a0_0x23a0a9;return _0x433e6e(0x20e)+_0x158621['projectName'][_0x433e6e(0x25f)](0x0)[_0x433e6e(0x1e6)]()+_0x433e6e(0x273);}function v(_0x4161a9){const _0x153c6a=a0_0x23a0a9;let _0x4bafc6=_0x4161a9[_0x153c6a(0x21e)],_0x4d1ba1=_0x4bafc6[_0x153c6a(0x25f)](0x0)[_0x153c6a(0x1e6)]();return _0x153c6a(0x205)+JSON['stringify'](_0x4bafc6)+_0x153c6a(0x23f)+_0x4d1ba1+'\x0a\x09\x09\x09\x09</div>\x0a\x09\x09\x09\x09<div\x0a\x09\x09\x09\x09\x09style={{\x0a\x09\x09\x09\x09\x09\x09display:\x20\x22flex\x22,\x0a\x09\x09\x09\x09\x09\x09fontSize:\x2072,\x0a\x09\x09\x09\x09\x09\x09fontWeight:\x20700,\x0a\x09\x09\x09\x09\x09\x09letterSpacing:\x20\x22-0.02em\x22,\x0a\x09\x09\x09\x09\x09\x09textAlign:\x20\x22center\x22,\x0a\x09\x09\x09\x09\x09\x09padding:\x20\x220\x2080px\x22,\x0a\x09\x09\x09\x09\x09}}\x0a\x09\x09\x09\x09>\x0a\x09\x09\x09\x09\x09'+_0x4bafc6+_0x153c6a(0x269);}function j(_0x5592b8){const _0x1a90f2=a0_0x23a0a9;let _0x1040b9=_0x5592b8[_0x1a90f2(0x21e)];return _0x1a90f2(0x1fe)+JSON[_0x1a90f2(0x1cb)](_0x1040b9)+_0x1a90f2(0x1dd)+JSON[_0x1a90f2(0x1cb)](_0x1040b9)+_0x1a90f2(0x204)+JSON[_0x1a90f2(0x1cb)](_0x1a90f2(0x1f3)+_0x1040b9+'.')+',\x0a\x09\x09start_url:\x20\x22/\x22,\x0a\x09\x09display:\x20\x22standalone\x22,\x0a\x09\x09background_color:\x20theme?.backgroundBase\x20??\x20\x22#ffffff\x22,\x0a\x09\x09theme_color:\x20theme?.primary\x20??\x20\x22#171717\x22,\x0a\x09\x09icons:\x20[\x0a\x09\x09\x09{\x20src:\x20\x22/icon/192\x22,\x20sizes:\x20\x22192x192\x22,\x20type:\x20\x22image/png\x22\x20},\x0a\x09\x09\x09{\x20src:\x20\x22/icon/512\x22,\x20sizes:\x20\x22512x512\x22,\x20type:\x20\x22image/png\x22\x20},\x0a\x09\x09],\x0a\x09};\x0a}\x0a';}function E(_0x39fc7f){const _0x5a4fe4=a0_0x23a0a9;if(_0x39fc7f['includeTermsPage'])return _0x5a4fe4(0x217);}function N(_0x396ee1){const _0x4fe170=a0_0x23a0a9;if(_0x396ee1[_0x4fe170(0x1ea)])return'export\x20default\x20function\x20PrivacyPage()\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<h1>Privacy\x20Policy</h1>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20)\x0a\x20\x20\x20\x20\x20\x20\x20\x20}';}var C=a0_0x23a0a9(0x1d9),Be=process.env.NEXT_PUBLIC_API_BASE_URL||(process.env.NODE_ENV===a0_0x23a0a9(0x26c)?a0_0x23a0a9(0x226):a0_0x23a0a9(0x1c6));function I(_0x17be80){const _0x40dd2d=a0_0x23a0a9;let _0x5547e7=[_0x40dd2d(0x21a)+_0x17be80[_0x40dd2d(0x1eb)],_0x40dd2d(0x242)+_0x17be80[_0x40dd2d(0x228)],_0x40dd2d(0x223)+_0x17be80['projectUrl'],'NEXT_PUBLIC_SUPABASE_URL='+C,_0x40dd2d(0x213)+_0x17be80[_0x40dd2d(0x21e)]];return _0x17be80[_0x40dd2d(0x1ce)]&&_0x5547e7[_0x40dd2d(0x276)](_0x40dd2d(0x25a)+_0x17be80[_0x40dd2d(0x1ce)]),_0x17be80[_0x40dd2d(0x219)]&&_0x5547e7[_0x40dd2d(0x276)](_0x40dd2d(0x1d5)+_0x17be80[_0x40dd2d(0x219)]),_0x5547e7[_0x40dd2d(0x1db)]('\x0a')+'\x0a';}var te=a0_0x34fd9a(i,'tree'),re=[{'path':a0_0x23a0a9(0x221),'generate':f},{'path':a0_0x23a0a9(0x243),'generate':b},{'path':'app/layout.tsx','generate':_},{'path':a0_0x23a0a9(0x22f),'generate':x},{'path':a0_0x23a0a9(0x279),'generate':S},{'path':a0_0x23a0a9(0x235),'generate':v},{'path':a0_0x23a0a9(0x233),'generate':j},{'path':'app/terms/page.tsx','generate':E},{'path':'app/privacy/page.tsx','generate':N},{'path':a0_0x23a0a9(0x22d),'generate':I}];async function O(_0x39e580,_0x571a37){const _0x518887=a0_0x23a0a9,_0xfb1583={'RolSn':function(_0x1d5e68,_0x2ec780){return _0x1d5e68(_0x2ec780);},'WcXgJ':function(_0x3dc622,_0x33ceba){return _0x3dc622>_0x33ceba;},'cNimB':function(_0xb35e45,_0x17f30e){return _0xb35e45/_0x17f30e;},'fHZoe':function(_0x23632c,_0x26f6ea){return _0x23632c+_0x26f6ea;},'fbBvk':function(_0x119205,_0x5e15f8,_0x53d6fa,_0x5e0c0c){return _0x119205(_0x5e15f8,_0x53d6fa,_0x5e0c0c);},'YIRaR':function(_0x25c94b,_0xbd7eb0,_0x3b2bbb){return _0x25c94b(_0xbd7eb0,_0x3b2bbb);},'GizEp':function(_0x58493b,_0x47fa02){return _0x58493b!==_0x47fa02;},'jgqYY':_0x518887(0x262),'eqmCq':function(_0x52eaf4,_0x26f24c){return _0x52eaf4!==_0x26f24c;},'wYtfD':function(_0x5d8f1e,_0x193236,_0x199a7f,_0x162dc0){return _0x5d8f1e(_0x193236,_0x199a7f,_0x162dc0);}};await _0xfb1583[_0x518887(0x1e1)](a0_0x4914a9,te,_0x39e580,{'recursive':!0x0,'filter':_0x32dc44=>!_0x32dc44[_0x518887(0x1df)](_0x518887(0x1c1))});let _0x24c3a2=_0xfb1583[_0x518887(0x245)](a0_0x34fd9a,_0x39e580,_0x518887(0x275));a0_0xcb4943(_0x24c3a2)&&await a0_0x3cd3e1(_0x24c3a2,a0_0x34fd9a(_0x39e580,_0x518887(0x254)));for(let _0x47f881 of re){if(_0xfb1583[_0x518887(0x22a)](_0x518887(0x263),_0xfb1583['jgqYY'])){let _0xca5a2=_0x47f881[_0x518887(0x1f7)](_0x571a37);_0xfb1583[_0x518887(0x1d1)](_0xca5a2,void 0x0)&&_0xfb1583[_0x518887(0x25c)](g,_0x39e580,_0x47f881[_0x518887(0x1ee)],_0xca5a2);}else{let _0x4ccea6=xxRmPr[_0x518887(0x207)](_0x42811b,_0x2400bf);return _0x4ccea6?xxRmPr[_0x518887(0x26b)](xxRmPr[_0x518887(0x246)](xxRmPr[_0x518887(0x24d)](0.299*_0x4ccea6['r']+0.587*_0x4ccea6['g'],0.114*_0x4ccea6['b']),0xff),0.5)?_0x3b34f3:_0x18fbcc:_0x191a33;}}}import a0_0x443ed6 from'prompts';async function w(_0x309b1f){const _0x32b3a7=a0_0x23a0a9,_0x4c70b4={'JcHZG':function(_0x878404,_0xce45ba,_0x3ad9ee){return _0x878404(_0xce45ba,_0x3ad9ee);},'PJIPa':_0x32b3a7(0x1d4)};try{return(await _0x4c70b4[_0x32b3a7(0x26e)](fetch,l+'/auth/site-token',{'method':_0x4c70b4[_0x32b3a7(0x241)],'headers':{'x-zorgo-site-secret':_0x309b1f}}))['ok'];}catch{return!0x1;}}async function R(_0x4e1e4a){const _0x3e6cc5=a0_0x23a0a9,_0x137e19={'lUrCn':_0x3e6cc5(0x1d4),'TwFpZ':_0x3e6cc5(0x1cd)};try{let _0x39c522=await fetch(l+_0x3e6cc5(0x224),{'method':_0x137e19[_0x3e6cc5(0x1de)],'headers':{'Content-Type':_0x137e19['TwFpZ']},'body':JSON[_0x3e6cc5(0x1cb)]({'publishableKey':_0x4e1e4a})});if(!_0x39c522['ok'])return!0x1;let {valid:_0x2e01ae}=await _0x39c522['json']();return _0x2e01ae===!0x0;}catch{return!0x1;}}var m={'local':a0_0x23a0a9(0x1c6),'staging':a0_0x23a0a9(0x20f),'production':a0_0x23a0a9(0x226)},l=a0_0x23a0a9(0x1c6),{values:n,positionals:T}=a0_0x182fcc({'args':process[a0_0x23a0a9(0x26a)][a0_0x23a0a9(0x250)](0x2),'allowPositionals':!0x0,'options':{'project-url':{'type':a0_0x23a0a9(0x232)},'project-name':{'type':a0_0x23a0a9(0x232)},'terms':{'type':a0_0x23a0a9(0x24e)},'privacy':{'type':a0_0x23a0a9(0x24e)},'environment':{'type':a0_0x23a0a9(0x232)},'stripe-key':{'type':a0_0x23a0a9(0x232)},'website-secret':{'type':a0_0x23a0a9(0x232)},'non-interactive':{'type':a0_0x23a0a9(0x24e)}}}),ie=T[0x0]===a0_0x23a0a9(0x23c)?T[a0_0x23a0a9(0x250)](0x1):T,se=ie[0x0],ae=_0x3c6d89=>_0x3c6d89[a0_0x23a0a9(0x1e2)]()[a0_0x23a0a9(0x225)]()[a0_0x23a0a9(0x236)](/[^a-z0-9]+/g,'-')[a0_0x23a0a9(0x236)](/^-+|-+$/g,'')||a0_0x23a0a9(0x21d);function a0_0x47de(){const _0x374ce7=['BfvYq24','zw5KC1DPDgG','mtaYmZKWogLeDuPPAq','zMjcDMS','Dg9mB3DLCKnHC2u','Bwf4','qgLTCg9YDcb1CMWOiMH0DhbZoI8VzM9UDhmUz29Vz2XLyxbPCY5JB20Vy3nZmJ9Myw1PBhK9','ms4WlJe','Dg9vChbLCKnHC2u','nI43lJa','nc4ZlJi','mtGZntu1owXfwuXLzG','Aw5JBhvKzvbYAxzHy3LqywDL','yxbPqMfZzvvYBa','zxjYB3i','mI40nY41','Cgf0Aa','i0y1rJvgnq','Bvfyve0','mY4XmI43','mtbUu1Dwtxi','t3jKzxiGB25SAw5LigzYB20G','yMfJA2DYB3vUzejHC2u','zxHPDa','ms4YmY4W','z2vUzxjHDgu','CgfKu3rHCNq','laOjcwXVy2fSztOGiMvUx1vtiIWkcx0ScGL0D2L0DgvYoIb7cGKjy2fYzdOGiNn1Bw1HCNLFBgfYz2vFAw1Hz2uIlaOjFsWkFtSkcMv4Cg9YDcbJB25ZDcb2Awv3Cg9YDdOGvMLLD3bVCNqGpsb7cGL3Awr0AdOGiMrLDMLJzs13Awr0AciScGLPBML0AwfSu2nHBgu6ideScN07cGPLEhbVCNqGzgvMyxvSDcbHC3LUyYbMDw5JDgLVBIbsB290tgf5B3v0khSGy2HPBgrYzw4GFtOGEYbJAgLSzhjLBJOGuMvHy3qUuMvHy3roB2rLih0PihSkcxjLDhvYBIaOcGKjpgH0BwWGBgfUzZ0Izw4IpGOjcqK8AgvHzd4kcqKjctXZy3jPChqkcqKjcqL0ExbLpsjHChbSAwnHDgLVBI9SzcTQC29UiGOjcqKjcwrHBMDLCM91C2X5u2v0sw5Uzxjive1mpxT7if9FAhrTBdOGsLnptI5ZDhjPBMDPzNKOCMvZDgf1CMfUDePZB25mzcKGFx0kcqKjcs8+cGKjctWVAgvHzd4kcqKjpgjVzhKGy2XHC3noyw1LpsjTAw4TAc1Zy3jLzw4GzMXLEcbMBgv4lwnVBcbIzY1IywnRz3jVDw5KihrLEhqTzM9YzwDYB3vUzci+cGKjcqK8sgvHzgvYic8+cGKjcqK8BwfPBIbJBgfZC05HBwu9iMzSzxGTmsi+cGKjcqKjE2nOAwXKCMvUFqOjcqKjpc9TywLUpGOjcqKjpezVB3rLCIaVpGOjcqKjpe1VzgfSsg9ZDcaVpGOjcqKjpenVB2TPzunVBNnLBNqGlZ4kcqKjpc9IB2r5pGOjctWVAhrTBd4kcsL9cGO','mtCUnc4W','ms4WlJa','oWOGic0TyMfJA2DYB3vUzc1LBgv2yxrLzdOG','BwfW','Aw1WB3j0ihr5CguGEYbnzxrHzgf0yvjVDxrLih0GzNjVBsaIBMv4Dci7cMLTCg9YDcb7ihjLywrgAwXLu3LUyYb9igzYB20GiMzZiJSkAw1WB3j0ihSGAM9PBIb9igzYB20GiNbHDgGIoWOklY8GqNjHBMqGCgfSzxr0zsbWCMvIDwLSzcbKCM9WCYbHDcbWDwjSAwmVC3r5BgvZl3n0EwXLCY5QC29UlIbozxv0CMfSigzHBgXIywnRigLMcI8VigL0j3mGBwLZC2LUzY4kzNvUy3rPB24GBg9HzfrOzw1LkcKGEWOjDhj5ihSkcqLYzxr1CM4GsLnptI5WyxjZzsGkcqKjCMvHzezPBgvtEw5JkgPVAw4OChjVy2vZCY5JD2qOksWGiNb1yMXPyY9ZDhLSzxmVC3r5BgvZlMPZB24IksWGiNv0zJGIksWkcqKPoWOjFsbJyxrJAcb7cGKjCMv0DxjUig51BgW7cGL9cN0kcMv4Cg9YDcbKzwzHDwX0igz1BMn0Aw9Uig1HBMLMzxn0kcK6ie1LDgfKyxrHuM91DguUtwfUAwzLC3qGEWOjy29UC3qGDgHLBwuGpsbSB2fKvgHLBwuOktSkcxjLDhvYBIb7cGKjBMfTztOG','cMLTCg9YDcb0ExbLihSGtwv0ywrHDgeSifzPzxDWB3j0ih0GzNjVBsaIBMv4Dci7cMLTCg9YDcaIlI9NBg9IywXZlMnZCYi7cMLTCg9YDcb7ieHLywrLCIWGrM9VDgvYlcbnB2rHBeHVC3qGFsbMCM9TiciUl2nVBxbVBMvUDhmIoWPPBxbVCNqGEYbdB29RAwvdB25Zzw50ih0GzNjVBsaIqhPVCMDVl25LEhqVy29TCg9Uzw50CYi7cMLTCg9YDcb7ihjLC3rHDxjHBNrkC29UtgqGFsbMCM9TiciUlI9SAwiVz2vUzxjHDgvKl2PZB25Szci7cMv4Cg9YDcbJB25ZDcbTzxrHzgf0ytOGtwv0ywrHDgeGpsb7cGKVlYbYzxnVBhzLCYbYzwXHDgL2zsbvuKXZicHJyw5VBMLJywXZlcb0AguGyxv0BY1PBMPLy3rLzcbVCgvUz3jHCgGTAw1Hz2uPihrVigfIC29SDxrLcGLTzxrHzgf0yujHC2u6ig5LDYbvuKWOChjVy2vZCY5LBNyUtKvyvf9qvujmsunFu0Lurv9vuKWGpZ8GiMH0Dha6lY9SB2nHBgHVC3q6mZaWmciPlaOjDgL0Bgu6ihSkcqLKzwzHDwX0oIa','oWOGic0TzM9UDc1Zyw5ZoIaI','iIWGC2fUCY1ZzxjPzJSkFqOkqhrOzw1LigLUBgLUzsb7cIaGls1JB2XVCI1IywnRz3jVDw5KoIb2yxiOls1IywnRz3jVDw5KktSkicaTlwnVBg9YlwjHy2TNCM91BMqTzwXLDMf0zwq6ihzHCIGTlwjHy2TNCM91BMqTzwXLDMf0zwqPoWOGic0Ty29SB3iTyMfJA2DYB3vUzc1YzwnLC3nLzdOGDMfYkc0TyMfJA2DYB3vUzc1YzwnLC3nLzcK7cIaGls1JB2XVCI1MB3jLz3jVDw5KoIb2yxiOls1MB3jLz3jVDw5KktSkicaTlwnVBg9YlxbYAw1HCNK6ihzHCIGTlxbYAw1HCNKPoWOGic0Ty29SB3iTChjPBwfYEs1MB3jLz3jVDw5KoIb2yxiOls1WCMLTyxj5lwzVCMvNCM91BMqPoWOGic0Ty29SB3iTywnJzw50oIb2yxiOls1Hy2nLBNqPoWOGic0Ty29SB3iTywnJzw50lwzVCMvNCM91BMq6ihzHCIGTlwfJy2vUDc1MB3jLz3jVDw5KktSkicaTlwzVBNqTC2fUCZOGDMfYkc0TzM9UDc1Zyw5ZktSkFqOkqgXHEwvYigjHC2uGEWOGigj1DhrVBIWkicbBDhLWzt0IyNv0Dg9UiL0ScIaGw3r5Cgu9iNn1yM1PDcjDlaOGifT0ExbLpsjYzxnLDcjDihSkicaGign1CNnVCJOGCg9PBNrLCJSkicb9cGOGigj1DhrVBJPKAxnHyMXLzcWkicbBDhLWzt0IyNv0Dg9UiL06zgLZywjSzwqScIaGw3r5Cgu9iNn1yM1PDcjDoMrPC2fIBgvKlaOGifT0ExbLpsjYzxnLDcjDoMrPC2fIBgvKihSkicaGign1CNnVCJOGBM90lwfSBg93zwq7cIaGFqP9cG','laOjcxrLBxbSyxrLoIa','cGKjctWVzgL2pGOjcsKScGKjEYb3Awr0AdOGzgLTzw5ZAw9UlcbOzwLNAhq6igrPBwvUC2LVBIb9laOjktSkFqO','laOjcwrLC2nYAxb0Aw9UoIa','Aw1WB3j0ihSGsw1Hz2vszxnWB25Zzsb9igzYB20GiM5LEhqVB2CIoWPPBxbVCNqGEYbYzwfKrMLSzvn5BMmGFsbMCM9TicjMCYi7cMLTCg9YDcb7igPVAw4GFsbMCM9TicjWyxrOiJSkcMv4Cg9YDcbJB25ZDcbHBhqGpsa','laOjFsWkcwrLC2nYAxb0Aw9UoIa','uM9Su24','u3rHz2LUzW','oWOGic0TywnJzw50oIa','nc4YmY4W','v2HHDcb3B3vSzcb5B3uGBgLRzsb0BYbUyw1LihrOAxmGChjVAMvJDd8','sw5JBhvKzsbWCML2ywn5ihbHz2u/','oWOGic0TChjPBwfYEtOG','Aw1WB3j0ihSGsw1Hz2vszxnWB25Zzsb9igzYB20GiM5LEhqVB2CIoWPPBxbVCNqGEYbYzwfKrMLSzvn5BMmGFsbMCM9TicjMCYi7cMLTCg9YDcb7igPVAw4GFsbMCM9TicjWyxrOiJSkcMv4Cg9YDcbJB25ZDcbZAxPLid0GEYb3Awr0AdOGmtGWlcbOzwLNAhq6ide4mcb9oWPLEhbVCNqGy29UC3qGy29UDgvUDfr5CguGpsaIAw1Hz2uVCg5NiJSkcI8ViejYyw5KihbHBgv0DguGChjLyNvPBgqGzhjVChmGyxqGChvIBgLJl3n0EwXLCY9ZDhLSzxmUANnVBI4GtMv1DhjHBcbMywXSyMfJAYbPzGOVlYbPDcDZig1PC3nPBMCGC28GDgHLigLJB24GC3rPBgWGCMvUzgvYCY4kzNvUy3rPB24GBg9HzfrOzw1LkcKGEWOjDhj5ihSkcqLYzxr1CM4GsLnptI5WyxjZzsGkcqKjCMvHzezPBgvtEw5JkgPVAw4OChjVy2vZCY5JD2qOksWGiNb1yMXPyY9ZDhLSzxmVC3r5BgvZlMPZB24IksWGiNv0zJGIksWkcqKPoWOjFsbJyxrJAcb7cGKjCMv0DxjUig51BgW7cGL9cN0kcMv4Cg9YDcbKzwzHDwX0igz1BMn0Aw9UiefWCgXLswnVBIGPihSkcwnVBNn0ihrOzw1Lid0GBg9HzfrOzw1LkcK7cGLJB25ZDcbIywnRz3jVDw5Kid0GDgHLBwu/lNbYAw1HCNKGpZ8GiImXnZe3mtCIoWOjy29UC3qGzM9YzwDYB3vUzca9ihrOzw1LpY5WCMLTyxj5rM9YzwDYB3vUzca/pYaIi2zMzMzMzIi7cGLYzxr1CM4GBMv3ieLTywDLuMvZCg9UC2uOcGKjkaOjcqK8zgL2cGKjcqLZDhLSzt17EWOjcqKjcxDPzhrOoIaImtaWjsiScGKjcqKjAgvPz2H0oIaImtaWjsiScGKjcqKjzgLZCgXHEtOGiMzSzxGIlaOjcqKjcwfSAwDUsxrLBxm6icjJzw50zxiIlaOjcqKjcwP1C3rPzNLdB250zw50oIaIy2vUDgvYiIWkcqKjcqLIywnRz3jVDw5KlaOjcqKjcwnVBg9YoIbMB3jLz3jVDw5KlaOjcqKjcwzVBNrtAxPLoIaXmtiScGKjcqKjzM9UDfDLAwDODdOGnZaWlaOjcqKjFx0kcqKjpGOjcqKj','Ahr0CdOVl2fWAs56B3jNBY5HAq','mJe4odyWnNjkAujdzW','ve1vqLK','ChjVAMvJDc1Uyw1L','wK9sr09FufjpsKvdvf9oqu1fpq','y0DTtu8','sw50zxi','mc41lJi','zxHWB3j0igrLzMf1BhqGzNvUy3rPB24GvgvYBxnqywDLkcKGEWOGicaGicaGicaGicbYzxr1CM4GkaOGicaGicaGicaGicaGicaGpgrPDJ4kicaGicaGicaGicaGicaGicaGica8Ade+vgvYBxmGB2yGu2vYDMLJztWVAde+cIaGicaGicaGicaGicaGica8l2rPDJ4kicaGicaGicaGicaGkqOGicaGicaGih0','sw52ywXPzcaTlxn0CMLWzs1RzxK','D2vIC2L0zvnLy3jLDa','tKvyvf9qvujmsunFqvbjx0jbu0vFvvjmpq','Aw5JBhvKzvrLCM1ZugfNzq','Dhn4ihnJCMLWDhmVChjLyNvPBgqUDhmGjIyGBMv4DcbKzxy','EM9Yz28TC2L0zq','ChjVAMvJDe5HBwu','BuXvr2O','Dgv4Da','CgfJA2fNzs5QC29U','Dhn4ihnJCMLWDhmVChjLyNvPBgqUDhmGjIyGBMv4DcbIDwLSza','tKvyvf9qvujmsunFqKftrv9vuKW9','l2f1DgGVDMfSAwrHDguTC3rYAxbLlwTLEq','DhjPBq','Ahr0Chm6lY9HCgKUEM9Yz290zwnOlMnVBq','DgnIEM8','ChjVAMvJDfvYBa','Bg9N','r2L6rxa','mvL6ALLiwq','ChjPDMfJEq','lMvUDG','oWOGic0TywnJzw50lwzVCMvNCM91BMq6ia','yxbWl2LJB24UDhn4','mc43lJe','oWOGic0TChjPBwfYEs1MB3jLz3jVDw5KoIa','C3rYAw5N','yxbWl21HBMLMzxn0lNrZ','ndGWntKZnJn2zMPxugy','yxbWl29Wzw5NCMfWAc1PBwfNzs50C3G','CMvWBgfJzq','ExHNANm','mJKZmtq4nvbOBw9WrG','nc44nI4W','ntK1CeLWzLD1','Dhn4ihnJCMLWDhmVChjLyNvPBgqUDhmGjIyGB3bLBM5LEhrQCY1JBg91zgzSyxjLigj1AwXKicyMihDYyw5NBgvYigrLCgXVEq','Aw5PDa','mtiZndu4nev1D1bAyW','DgvYBxm','oWPLEhbVCNqGy29UC3qGC2L6zsa9ihSGD2LKDgG6ideYmdaSigHLAwDODdOGnJmWih07cMv4Cg9YDcbJB25ZDcbJB250zw50vhLWzsa9icjPBwfNzs9WBMCIoWOklY8GqNjHBMqGCgfSzxr0zsbWCMvIDwLSzcbKCM9WCYbHDcbWDwjSAwmVC3r5BgvZl3n0EwXLCY5QC29UlIbozxv0CMfSigzHBgXIywnRigLMcI8VigL0j3mGBwLZC2LUzYbZBYb0AguGy2fYzcbZDgLSBcbYzw5KzxjZlGPMDw5JDgLVBIbSB2fKvgHLBwuOksb7cGL0CNKGEWOjcxjLDhvYBIbku09olNbHCNnLkaOjcqLYzwfKrMLSzvn5BMmOAM9PBIHWCM9JzxnZlMn3zcGPlcaIChvIBgLJl3n0EwXLCY9ZDhLSzxmUANnVBIiPlcaIDxrMociPlaOjcsK7cGL9ignHDgnOihSkcqLYzxr1CM4GBNvSBdSkcx0kFqOkzxHWB3j0igrLzMf1BhqGzNvUy3rPB24Gt3bLBMDYyxbOsw1Hz2uOksb7cGLJB25ZDcb0AgvTzsa9igXVywruAgvTzsGPoWOjy29UC3qGyMfJA2DYB3vUzca9ihrOzw1LpY5IywnRz3jVDw5KqMfZzsa/pYaIiZe3mtCXnYi7cGLJB25ZDcbMB3jLz3jVDw5Kid0GDgHLBwu/lMzVCMvNCM91BMqGpZ8GiInMzMzMzMyIoWOjy29UC3qGyMfKz2uGpsb0AgvTzt8UChjPBwfYEsa/pYaIi2zMzMzMzIi7cGLJB25ZDcbIywrNzuzVCMvNCM91BMqGpsb0AgvTzt8UChjPBwfYEuzVCMvNCM91BMqGpZ8GiImXnZe3mtCIoWOjCMv0DxjUig5LDYbjBwfNzvjLC3bVBNnLkaOjcsGkcqKjpgrPDGOjcqKjC3r5Bgu9E3SkcqKjcqL3Awr0AdOGiJeWmcuIlaOjcqKjcwHLAwDODdOGiJeWmcuIlaOjcqKjcwrPC3bSyxK6icjMBgv4iIWkcqKjcqLMBgv4rgLYzwn0Aw9UoIaIy29SDw1UiIWkcqKjcqLHBgLNBKL0zw1ZoIaIy2vUDgvYiIWkcqKjcqLQDxn0Awz5q29UDgvUDdOGiMnLBNrLCIiScGKjcqKjyMfJA2DYB3vUzcWkcqKjcqLJB2XVCJOGzM9YzwDYB3vUzcWkcqKjcx19cGKjct4kcqKjctXKAxykcqKjcqLZDhLSzt17EWOjcqKjcqLKAxnWBgf5oIaIzMXLEciScGKjcqKjcwfSAwDUsxrLBxm6icjJzw50zxiIlaOjcqKjcqLQDxn0Awz5q29UDgvUDdOGiMnLBNrLCIiScGKjcqKjcxDPzhrOoIaXndaScGKjcqKjcwHLAwDODdOGmtqWlaOjcqKjcqLIB3jKzxjsywrPDxm6idmYlaOjcqKjcqLIywnRz3jVDw5KoIbIywrNzsWkcqKjcqKjy29SB3i6igjHzgDLrM9YzwDYB3vUzcWkcqKjcqKjzM9UDfnPEMu6idG0laOjcqKjcqLMB250v2vPz2H0oIa3mdaScGKjcqKjcw1HCMDPBKjVDhrVBtOGndGScGKjcqKjFx0kcqKjct4kcqKjcqK','ounxwxDJsW','uePjuge','tKvyvf9qvujmsunFu0Lurv9vuKW9','yxbWl2DSB2jHBhmUy3nZ','C3rYAxbLlwTLEq','wuLsyvi','y05PBui','ChjVAMvJDc11CMW','BwLU','mY4YlJa','mtKUmI4XnW','rw50zxiGwK9sr09Fu0Lurv9trunsrvq','jxmGFca','zKHAB2u','yM9VBgvHBG','iI4GrxHWzwn0zwqGB25Lig9MoIa','C2XPy2u','iZmYnJrgrG','os45lJa','C2THqve','lMDPDgLNBM9Yzq','BgvUz3rO','vgHHDcDZig5VDcbHihzHBgLKifPpuKDpx1njvevFu0vduKvu','Ag5VB2q','BMfTzq','sw5JBhvKzsb0zxjTCYbWywDLpW','tKvyvf9qvujmsunFu1rssvbfx1bvqKXjq19lrvK9','rw50zxiGtKvyvf9qvujmsunFu1rssvbfx1bvqKXjq19lrvK','D1L0zKq','Dg9tDhjPBMC','Bg9JywW','y2HHCKf0','svPNuMK','mtKUmI40','thbNvge','D3Pbtva','tg9JywW','BMv4DcbKzxy','iZbHmgeWyq','zMLSDgvY','zgLYBMfTzq','cGKjcqK8l2rPDJ4kcqKjpc9KAxy+cGKjksWkcqLZAxPLlaOjktSkFqO','yxjNDG','v2nyz0O','ChjVzhvJDgLVBG','D2vIC2L0zs1ZzwnYzxq','sMniwKC','twLZC2LUzYbYzxf1AxjLzcbMBgfNCYbMB3iGBM9UlwLUDgvYywn0AxzLig1Vzgu6ia','Axnoyu4','mc40lJa','igLUDg8G','cGKjctWVzgL2pGOjcsKScGKjC2L6zsWkcsK7cN0k','A2fise0','z2L0AwDUB3jL','ChvZAa','CgfZC3DVCMq','v2HHDcbPCYb0AguGC2L0zsDZifvstd8','yxbWl2fWCgXLlwLJB24UDhn4','Dhn4ihnJCMLWDhmVChjLyNvPBgqUDhmGjIyGB3bLBM5LEhrQCY1JBg91zgzSyxjLigj1AwXKicyMihDYyw5NBgvYigrLDG','ns45lJm','ms4Xos4Xmq','u2nHzMzVBgrLzca','C3bSAxq','lMDLBI50CW','CerYqLm','C2vSzwn0','mtyUmI4Xma','y29UzMLYBq','Ahr0CdOVl2XVy2fSAg9ZDdOZmdaW','mY4WlJe','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','i2y1zJvMnq','nY44lJa','C3rYAw5NAwz5','mte2ota0s3fxBMry','yxbWBgLJyxrPB24VANnVBG','C3rYAxbLuhvIBgLZAgfIBgvlzxK','zM9UDezHBwLSEq','BM9UlwLUDgvYywn0AxzL','zxfTq3e','zw52AxjVBM1LBNq','A2v5CW','ue9tva','wK9sr09Fu0Lurv9trunsrvq9','CgfYC2vjBNq','uhjVzhvJDgLVBG','t25ns2G','Ahr0Chm6lY9KAg5WB3HVCMXSzMrVyNDMDgT5yI5ZDxbHyMfZzs5JBW','iZK2nJrgrG','AM9PBG','mc4Znc41','laOjcxnOB3j0x25HBwu6ia'];a0_0x47de=function(){return _0x374ce7;};return a0_0x47de();}n[a0_0x23a0a9(0x1d2)]&&!(n['environment']in m)&&(console[a0_0x23a0a9(0x1ec)]('Invalid\x20--environment\x20\x22'+n[a0_0x23a0a9(0x1d2)]+a0_0x23a0a9(0x24f)+Object[a0_0x23a0a9(0x1d3)](m)[a0_0x23a0a9(0x1db)](',\x20')),process[a0_0x23a0a9(0x1f5)](0x1)),n['environment']&&(l=m[n[a0_0x23a0a9(0x1d2)]]);var ce=[{'type':a0_0x23a0a9(0x220),'name':a0_0x23a0a9(0x228),'message':a0_0x23a0a9(0x278)},{'type':'text','name':a0_0x23a0a9(0x21e),'message':a0_0x23a0a9(0x20b)},{'type':a0_0x23a0a9(0x1c5),'name':a0_0x23a0a9(0x21b),'message':a0_0x23a0a9(0x259)},{'type':a0_0x23a0a9(0x1c5),'name':a0_0x23a0a9(0x1ea),'message':a0_0x23a0a9(0x20c)},{'type':a0_0x23a0a9(0x1c3),'name':'environment','message':'Which\x20environment\x20are\x20you\x20using?\x20(will\x20change\x20which\x20environment\x20we\x20test\x20keys\x20against)','choices':[{'title':a0_0x23a0a9(0x264),'value':a0_0x23a0a9(0x25e)},{'title':a0_0x23a0a9(0x208),'value':'staging'},{'title':a0_0x23a0a9(0x1d7),'value':a0_0x23a0a9(0x26c)}],'initial':0x0},{'type':a0_0x23a0a9(0x277),'name':a0_0x23a0a9(0x1ce),'message':a0_0x23a0a9(0x25b),'validate':async _0x344b6d=>!_0x344b6d||!await R(_0x344b6d)?'Invalid\x20Stripe\x20publishable\x20key':!0x0},{'type':a0_0x23a0a9(0x277),'name':a0_0x23a0a9(0x219),'message':a0_0x23a0a9(0x24b),'validate':async _0x2c6a60=>_0x2c6a60?await w(_0x2c6a60)?!0x0:a0_0x23a0a9(0x256):'Data\x20cannot\x20be\x20fetched\x20without\x20a\x20secret'}],d={...n[a0_0x23a0a9(0x247)]&&{'projectUrl':n[a0_0x23a0a9(0x247)]},...n[a0_0x23a0a9(0x212)]&&{'projectName':n[a0_0x23a0a9(0x212)]},...n[a0_0x23a0a9(0x23e)]&&{'includeTermsPage':!0x0},...n[a0_0x23a0a9(0x22c)]&&{'includePrivacyPage':!0x0},...n[a0_0x23a0a9(0x1d2)]&&{'environment':n[a0_0x23a0a9(0x1d2)]},...n[a0_0x23a0a9(0x244)]&&{'stripePublishableKey':n[a0_0x23a0a9(0x244)]},...n[a0_0x23a0a9(0x26d)]&&{'websiteSecret':n['website-secret']}};async function pe(){const _0x44a5c1=a0_0x23a0a9,_0x42d8f3={'IZgRi':_0x44a5c1(0x1d2),'mQXTM':function(_0x9c9f17,_0x52ac21){return _0x9c9f17>_0x52ac21;},'mLUGj':_0x44a5c1(0x26d),'LhXZZ':function(_0x463df5,_0x2b075a){return _0x463df5(_0x2b075a);},'tcbzo':function(_0x41f5f7,_0xa4502f){return _0x41f5f7(_0xa4502f);},'yxgjs':function(_0x52cdd3,_0x59b947,_0x10d8de){return _0x52cdd3(_0x59b947,_0x10d8de);}};n['non-interactive']&&(d[_0x44a5c1(0x21b)]??=!0x1,d['includePrivacyPage']??=!0x1,d[_0x44a5c1(0x1d2)]??=_0x44a5c1(0x25e));let _0xbaf6a9=ce[_0x44a5c1(0x267)](_0x1c7b5b=>!(_0x1c7b5b[_0x44a5c1(0x258)]in d));n[_0x44a5c1(0x1d0)]&&_0x42d8f3[_0x44a5c1(0x1f0)](_0xbaf6a9[_0x44a5c1(0x255)],0x0)&&(console[_0x44a5c1(0x1ec)](_0x44a5c1(0x26f)+_0xbaf6a9[_0x44a5c1(0x1fd)](_0x4af1ca=>_0x4af1ca[_0x44a5c1(0x258)])[_0x44a5c1(0x1db)](',\x20')),process['exit'](0x1)),n['stripe-key']&&!await R(n[_0x44a5c1(0x244)])&&(console[_0x44a5c1(0x1ec)](_0x44a5c1(0x218)),process[_0x44a5c1(0x1f5)](0x1)),n[_0x42d8f3['mLUGj']]&&!await _0x42d8f3['LhXZZ'](w,n[_0x42d8f3[_0x44a5c1(0x21f)]])&&(console[_0x44a5c1(0x1ec)]('Invalid\x20--website-secret'),process[_0x44a5c1(0x1f5)](0x1));let _0x1a50cc=_0xbaf6a9[_0x44a5c1(0x255)]?await a0_0x443ed6(_0xbaf6a9,{'onSubmit':async(_0x117377,_0x2b2220)=>{const _0x2311ee=_0x44a5c1;_0x117377[_0x2311ee(0x258)]===_0x42d8f3[_0x2311ee(0x260)]&&(l=m[_0x2b2220]??_0x2311ee(0x1c6));}}):{},_0x124f12={...d,..._0x1a50cc},_0x4dd8de={'projectUrl':_0x124f12[_0x44a5c1(0x228)],'projectName':_0x124f12[_0x44a5c1(0x21e)],'apiBaseUrl':l,'includeTermsPage':_0x124f12['includeTermsPage'],'includePrivacyPage':_0x124f12[_0x44a5c1(0x1ea)],'stripePublishableKey':_0x124f12[_0x44a5c1(0x1ce)],'websiteSecret':_0x124f12['websiteSecret']},_0x5cdcca=se??_0x42d8f3[_0x44a5c1(0x227)](ae,_0x4dd8de[_0x44a5c1(0x21e)]);await _0x42d8f3[_0x44a5c1(0x237)](O,_0x5cdcca,_0x4dd8de),console[_0x44a5c1(0x229)](_0x44a5c1(0x27d)+_0x124f12['projectName']+_0x44a5c1(0x272)+_0x5cdcca);}pe();export{l as ZORGO_API_BASE_URL};
2
+ import $ from"path";import{fileURLToPath as z}from"url";var B=()=>z(import.meta.url),M=()=>$.dirname(B()),i=M();import{parseArgs as ne}from"util";import{cp as X,rename as Q}from"fs/promises";import{existsSync as ee}from"fs";import{join as P}from"path";import{writeFileSync as G,mkdirSync as J}from"fs";import{dirname as q,join as H}from"path";function g(e,t,r){let o=H(e,t);J(q(o),{recursive:!0}),G(o,r)}var k="1.1.1";var U={"@zorgo/next":k,"@cloudflare/kv-asset-handler":"0.4.0","@opennextjs/cloudflare":"1.19.11","@stripe/react-stripe-js":"6.7.0","@stripe/stripe-js":"9.9.0","@supabase/ssr":"0.5.2","@supabase/supabase-js":"2.47.5","class-variance-authority":"0.7.1",clsx:"2.1.1","date-fns":"4.1.0","date-fns-tz":"3.2.0","geojson-vt":"4.0.2",gsap:"3.12.7","iconoir-react":"7.8.0","libphonenumber-js":"1.13.8","lucide-react":"1.23.0","promise-timeout":"1.3.0",sharp:"0.34.5",stripe:"17.4.0","tailwind-merge":"3.0.1","tailwindcss-animate":"1.0.7",zod:"4.3.6",next:"16.2.10",react:"19.2.4","react-dom":"19.2.4"},L={wrangler:"4.86.0","@tailwindcss/postcss":"4.3.2","@types/node":"20.19.43","@types/react":"19.2.17","@types/react-dom":"19.2.3","babel-plugin-react-compiler":"1.0.0",eslint:"9.39.4","eslint-config-next":"16.2.10",tailwindcss:"4.3.2",typescript:"5.9.3",tsx:"4.23.0","@next/env":"16.2.10"};function f(e){return JSON.stringify({name:e.projectName,version:"1.0.0",private:!0,scripts:{dev:"tsx scripts/prebuild.ts && next dev","dev:no-prebuild":"next dev",prebuild:"tsx scripts/prebuild.ts",build:"tsx scripts/prebuild.ts && next build","cloudflare:deploy":"tsx scripts/prebuild.ts && wrangler deploy",preview:"tsx scripts/prebuild.ts && wrangler dev"},dependencies:U,devDependencies:L},null,2)}var V={backgroundBase:"#F5F5F5",primary:"#3264FF",accent:"#9664FF",fontFamily:"Inter"},A="#0a0a0a",Z="#f5f5f5",p=15;function h(e){let t=e.trim().replace(/^#/,""),r=t.length===3?t.split("").map(o=>o+o).join(""):t;return r.length!==6||Number.isNaN(Number.parseInt(r,16))?null:{r:Number.parseInt(r.slice(0,2),16),g:Number.parseInt(r.slice(2,4),16),b:Number.parseInt(r.slice(4,6),16)}}function D({r:e,g:t,b:r}){return`#${[e,t,r].map(o=>o.toString(16).padStart(2,"0")).join("")}`}function y(e){let t=h(e);return t?(.299*t.r+.587*t.g+.114*t.b)/255>.5?A:Z:A}function Y(e){let t=h(e);return t?D({r:Math.min(255,t.r+p),g:Math.min(255,t.g+p),b:Math.min(255,t.b+p)}):e}function W(e){let t=h(e);return t?D({r:Math.max(0,t.r-p),g:Math.max(0,t.g-p),b:Math.max(0,t.b-p)}):e}function b(e){let t=V,r=t.fontFamily.replace(/ /g,"+"),o=y(t.backgroundBase),a=y(t.primary),c=y(t.accent),u=Y(t.backgroundBase),F=W(t.backgroundBase);return`@import url("https://fonts.googleapis.com/css2?family=${r}:wght@400;700&display=swap");
3
+ @import "tailwindcss";
4
+ /* Tailwind v4 skips node_modules; @zorgo/next ships un-obfuscated components so
5
+ their class names are scannable here. */
6
+ @source "../node_modules/@zorgo/next/dist/components.mjs";
7
+
8
+ :root {
9
+ --background: ${t.backgroundBase};
10
+ --background-elevated: ${u};
11
+ --background-recessed: ${F};
12
+ --foreground: ${o};
13
+ --primary: ${t.primary};
14
+ --primary-foreground: ${a};
15
+ --accent: ${t.accent};
16
+ --accent-foreground: ${c};
17
+ --font-sans: "${t.fontFamily}", sans-serif;
18
+ }
19
+
20
+ @theme inline {
21
+ --color-background: var(--background);
22
+ --color-background-elevated: var(--background-elevated);
23
+ --color-background-recessed: var(--background-recessed);
24
+ --color-foreground: var(--foreground);
25
+ --color-primary: var(--primary);
26
+ --color-primary-foreground: var(--primary-foreground);
27
+ --color-accent: var(--accent);
28
+ --color-accent-foreground: var(--accent-foreground);
29
+ --font-sans: var(--font-sans);
30
+ }
31
+
32
+ @layer base {
33
+ button,
34
+ [type="button"],
35
+ [type="submit"],
36
+ [type="reset"] {
37
+ cursor: pointer;
38
+ }
39
+
40
+ button:disabled,
41
+ [type="button"]:disabled,
42
+ [type="submit"]:disabled,
43
+ [type="reset"]:disabled {
44
+ cursor: not-allowed;
45
+ }
46
+ }
47
+ `}function _(e){return`
48
+ import type { Metadata, Viewport } from "next";
49
+ import "./globals.css";
50
+ import { Header, Footer, ModalHost } from "./components";
51
+ import { CookieConsent } from "@zorgo/next/components";
52
+ import { restaurantJsonLd } from "../lib/generated/jsonld";
53
+ export const metadata: Metadata = {
54
+ // resolves relative URLs (canonicals, the auto-injected opengraph-image) to absolute.
55
+ // || (not ??) so an empty NEXT_PUBLIC_SITE_URL \u2014 a site piloted before its URL is
56
+ // set \u2014 falls back too; new URL("") throws and would break the build/deploy.
57
+ metadataBase: new URL(process.env.NEXT_PUBLIC_SITE_URL || "http://localhost:3000"),
58
+ title: {
59
+ default: ${JSON.stringify(e.projectName)},
60
+ template: ${JSON.stringify(`%s | ${e.projectName}`)},
61
+ },
62
+ description: ${JSON.stringify(`Order online from ${e.projectName}.`)},
63
+ openGraph: {
64
+ type: "website",
65
+ siteName: ${JSON.stringify(e.projectName)},
66
+ locale: "en_US",
67
+ },
68
+ twitter: {
69
+ card: "summary_large_image",
70
+ },
71
+ };
72
+
73
+ export const viewport: Viewport = {
74
+ width: "device-width",
75
+ initialScale: 1,
76
+ };
77
+
78
+ export default async function RootLayout({ children }: { children: React.ReactNode }) {
79
+ return (
80
+ <html lang="en">
81
+ <head>
82
+ <script
83
+ type="application/ld+json"
84
+ dangerouslySetInnerHTML={{ __html: JSON.stringify(restaurantJsonLd) }}
85
+ />
86
+ </head>
87
+ <body className="min-h-screen flex flex-col bg-background text-foreground">
88
+ <Header />
89
+ <main className="flex-1">
90
+ {children}
91
+ </main>
92
+ <Footer />
93
+ <ModalHost />
94
+ <CookieConsent />
95
+ </body>
96
+ </html>
97
+ )}
98
+
99
+ `}function x(e){return`import { ImageResponse } from "next/og";
100
+ import { readFileSync } from "fs";
101
+ import { join } from "path";
102
+
103
+ // One PNG per size: 32 for the browser tab/favicon, 192 & 512 for the web
104
+ // manifest (PWA install). generateImageMetadata gives each a stable /icon/<id> URL
105
+ // the manifest references, and all three are prerendered at build.
106
+ export function generateImageMetadata() {
107
+ return [
108
+ { id: "32", size: { width: 32, height: 32 }, contentType: "image/png" },
109
+ { id: "192", size: { width: 192, height: 192 }, contentType: "image/png" },
110
+ { id: "512", size: { width: 512, height: 512 }, contentType: "image/png" },
111
+ ];
112
+ }
113
+
114
+ // Brand palette prebuild drops at public/styles/styles.json. Neutral fallback if
115
+ // it's missing so the icon still renders. primary is the badge fill.
116
+ function loadTheme() {
117
+ try {
118
+ return JSON.parse(
119
+ readFileSync(join(process.cwd(), "public/styles/styles.json"), "utf8"),
120
+ );
121
+ } catch {
122
+ return null;
123
+ }
124
+ }
125
+
126
+ // Prebuild drops the franchise logo at public/images/logo.png. Use it as the
127
+ // icon when it's a real image; the magic-byte sniff both picks the data-URI mime
128
+ // and rejects a 404 JSON body (no logo) so we cleanly fall back to the letter.
129
+ function loadLogo(): string | null {
130
+ try {
131
+ const buf = readFileSync(join(process.cwd(), "public/images/logo.png"));
132
+ const mime =
133
+ buf[0] === 0x89 && buf[1] === 0x50
134
+ ? "image/png"
135
+ : buf[0] === 0xff && buf[1] === 0xd8
136
+ ? "image/jpeg"
137
+ : null;
138
+ if (!mime) return null;
139
+ return \`data:\${mime};base64,\${buf.toString("base64")}\`;
140
+ } catch {
141
+ return null;
142
+ }
143
+ }
144
+
145
+ export default async function Icon({ id }: { id: Promise<string> }) {
146
+ const dimension = Number(await id);
147
+ const logo = loadLogo();
148
+ const theme = loadTheme();
149
+ const background = theme?.primary ?? "#171717";
150
+ const foreground = theme?.primaryForeground ?? "#ffffff";
151
+ return new ImageResponse(
152
+ logo ? (
153
+ <img
154
+ src={logo}
155
+ width={dimension}
156
+ height={dimension}
157
+ style={{ objectFit: "contain" }}
158
+ />
159
+ ) : (
160
+ <div
161
+ style={{
162
+ width: "100%",
163
+ height: "100%",
164
+ display: "flex",
165
+ alignItems: "center",
166
+ justifyContent: "center",
167
+ background,
168
+ color: foreground,
169
+ fontSize: dimension * 0.625,
170
+ fontWeight: 700,
171
+ }}
172
+ >
173
+ ${e.projectName.charAt(0).toUpperCase()}
174
+ </div>
175
+ ),
176
+ { width: dimension, height: dimension },
177
+ );
178
+ }
179
+ `}function S(e){return`import { ImageResponse } from "next/og";
180
+ import { readFileSync } from "fs";
181
+ import { join } from "path";
182
+
183
+ export const size = { width: 180, height: 180 };
184
+ export const contentType = "image/png";
185
+
186
+ // Brand palette prebuild drops at public/styles/styles.json. Neutral fallback if
187
+ // it's missing so the icon still renders.
188
+ function loadTheme() {
189
+ try {
190
+ return JSON.parse(
191
+ readFileSync(join(process.cwd(), "public/styles/styles.json"), "utf8"),
192
+ );
193
+ } catch {
194
+ return null;
195
+ }
196
+ }
197
+
198
+ export default function AppleIcon() {
199
+ const theme = loadTheme();
200
+ const background = theme?.primary ?? "#171717";
201
+ const foreground = theme?.primaryForeground ?? "#ffffff";
202
+ return new ImageResponse(
203
+ (
204
+ <div
205
+ style={{
206
+ width: "100%",
207
+ height: "100%",
208
+ display: "flex",
209
+ alignItems: "center",
210
+ justifyContent: "center",
211
+ background,
212
+ color: foreground,
213
+ fontSize: 112,
214
+ fontWeight: 700,
215
+ }}
216
+ >
217
+ ${e.projectName.charAt(0).toUpperCase()}
218
+ </div>
219
+ ),
220
+ size,
221
+ );
222
+ }
223
+ `}function v(e){let t=e.projectName,r=t.charAt(0).toUpperCase();return`import { ImageResponse } from "next/og";
224
+ import { readFileSync } from "fs";
225
+ import { join } from "path";
226
+
227
+ export const alt = ${JSON.stringify(t)};
228
+ export const size = { width: 1200, height: 630 };
229
+ export const contentType = "image/png";
230
+
231
+ // Brand palette prebuild drops at public/styles/styles.json. Neutral fallback if
232
+ // it's missing so the card still renders.
233
+ function loadTheme() {
234
+ try {
235
+ return JSON.parse(
236
+ readFileSync(join(process.cwd(), "public/styles/styles.json"), "utf8"),
237
+ );
238
+ } catch {
239
+ return null;
240
+ }
241
+ }
242
+
243
+ export default function OpengraphImage() {
244
+ const theme = loadTheme();
245
+ const background = theme?.backgroundBase ?? "#171717";
246
+ const foreground = theme?.foreground ?? "#ffffff";
247
+ const badge = theme?.primary ?? "#ffffff";
248
+ const badgeForeground = theme?.primaryForeground ?? "#171717";
249
+ return new ImageResponse(
250
+ (
251
+ <div
252
+ style={{
253
+ width: "100%",
254
+ height: "100%",
255
+ display: "flex",
256
+ flexDirection: "column",
257
+ alignItems: "center",
258
+ justifyContent: "center",
259
+ background,
260
+ color: foreground,
261
+ }}
262
+ >
263
+ <div
264
+ style={{
265
+ display: "flex",
266
+ alignItems: "center",
267
+ justifyContent: "center",
268
+ width: 140,
269
+ height: 140,
270
+ borderRadius: 32,
271
+ background: badge,
272
+ color: badgeForeground,
273
+ fontSize: 84,
274
+ fontWeight: 700,
275
+ marginBottom: 48,
276
+ }}
277
+ >
278
+ ${r}
279
+ </div>
280
+ <div
281
+ style={{
282
+ display: "flex",
283
+ fontSize: 72,
284
+ fontWeight: 700,
285
+ letterSpacing: "-0.02em",
286
+ textAlign: "center",
287
+ padding: "0 80px",
288
+ }}
289
+ >
290
+ ${t}
291
+ </div>
292
+ </div>
293
+ ),
294
+ size,
295
+ );
296
+ }
297
+ `}function j(e){let t=e.projectName;return`import type { MetadataRoute } from "next";
298
+ import { readFileSync } from "fs";
299
+ import { join } from "path";
300
+
301
+ // Brand palette prebuild drops at public/styles/styles.json. Neutral fallback if
302
+ // it's missing.
303
+ function loadTheme() {
304
+ try {
305
+ return JSON.parse(
306
+ readFileSync(join(process.cwd(), "public/styles/styles.json"), "utf8"),
307
+ );
308
+ } catch {
309
+ return null;
310
+ }
311
+ }
312
+
313
+ export default function manifest(): MetadataRoute.Manifest {
314
+ const theme = loadTheme();
315
+ return {
316
+ name: ${JSON.stringify(t)},
317
+ short_name: ${JSON.stringify(t)},
318
+ description: ${JSON.stringify(`Order online from ${t}.`)},
319
+ start_url: "/",
320
+ display: "standalone",
321
+ background_color: theme?.backgroundBase ?? "#ffffff",
322
+ theme_color: theme?.primary ?? "#171717",
323
+ icons: [
324
+ { src: "/icon/192", sizes: "192x192", type: "image/png" },
325
+ { src: "/icon/512", sizes: "512x512", type: "image/png" },
326
+ ],
327
+ };
328
+ }
329
+ `}function E(e){if(e.includeTermsPage)return`export default function TermsPage() {
330
+ return (
331
+ <div>
332
+ <h1>Terms of Service</h1>
333
+ </div>
334
+ )
335
+ }`}function N(e){if(e.includePrivacyPage)return`export default function PrivacyPage() {
336
+ return (
337
+ <div>
338
+ <h1>Privacy Policy</h1>
339
+ </div>
340
+ )
341
+ }`}var C="https://dhnpoxorllfdobwftkyb.supabase.co";var ze=process.env.NODE_ENV==="production"?"https://api.zorgotech.com":"https://staging.zorgo.ai";function I(e){let t=[`NEXT_PUBLIC_API_BASE_URL=${e.apiBaseUrl}`,`NEXT_PUBLIC_SITE_URL=${e.projectUrl}`,`NEXT_PUBLIC_BASE_URL=${e.projectUrl}`,`NEXT_PUBLIC_SUPABASE_URL=${C}`,`ZORGO_PROJECT_NAME=${e.projectName}`];return e.stripePublishableKey&&t.push(`NEXT_PUBLIC_STRIPE_PUBLIC_KEY=${e.stripePublishableKey}`),e.websiteSecret&&t.push(`ZORGO_SITE_SECRET=${e.websiteSecret}`),t.join(`
342
+ `)+`
343
+ `}var te=P(i,"tree"),re=[{path:"package.json",generate:f},{path:"app/globals.css",generate:b},{path:"app/layout.tsx",generate:_},{path:"app/icon.tsx",generate:x},{path:"app/apple-icon.tsx",generate:S},{path:"app/opengraph-image.tsx",generate:v},{path:"app/manifest.ts",generate:j},{path:"app/terms/page.tsx",generate:E},{path:"app/privacy/page.tsx",generate:N},{path:".env",generate:I}];async function O(e,t){await X(te,e,{recursive:!0,filter:o=>!o.endsWith(".gen.ts")});let r=P(e,"gitignore");ee(r)&&await Q(r,P(e,".gitignore"));for(let o of re){let a=o.generate(t);a!==void 0&&g(e,o.path,a)}}import oe from"prompts";async function w(e){try{return(await fetch(`${l}/auth/site-token`,{method:"POST",headers:{"x-zorgo-site-secret":e}})).ok}catch{return!1}}async function R(e){try{let t=await fetch(`${l}/auth/validate-stripe-key`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({publishableKey:e})});if(!t.ok)return!1;let{valid:r}=await t.json();return r===!0}catch{return!1}}var m={local:"http://localhost:3000",staging:"http://api.zorgo.ai",production:"https://api.zorgotech.com"},l="http://localhost:3000",{values:n,positionals:T}=ne({args:process.argv.slice(2),allowPositionals:!0,options:{"project-url":{type:"string"},"project-name":{type:"string"},terms:{type:"boolean"},privacy:{type:"boolean"},environment:{type:"string"},"stripe-key":{type:"string"},"website-secret":{type:"string"},"non-interactive":{type:"boolean"}}}),ie=T[0]==="init"?T.slice(1):T,se=ie[0],ae=e=>e.toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"zorgo-site";n.environment&&!(n.environment in m)&&(console.error(`Invalid --environment "${n.environment}". Expected one of: ${Object.keys(m).join(", ")}`),process.exit(1));n.environment&&(l=m[n.environment]);var ce=[{type:"text",name:"projectUrl",message:"What is the site's URL?"},{type:"text",name:"projectName",message:"What would you like to name this project?"},{type:"confirm",name:"includeTermsPage",message:"Include terms page?"},{type:"confirm",name:"includePrivacyPage",message:"Include privacy page?"},{type:"select",name:"environment",message:"Which environment are you using? (will change which environment we test keys against)",choices:[{title:"Local",value:"local"},{title:"Staging",value:"staging"},{title:"Production",value:"production"}],initial:0},{type:"password",name:"stripePublishableKey",message:"Enter NEXT_PUBLIC_STRIPE_PUBLIC_KEY",validate:async e=>!e||!await R(e)?"Invalid Stripe publishable key":!0},{type:"password",name:"websiteSecret",message:"Enter ZORGO_SITE_SECRET",validate:async e=>e?await w(e)?!0:"That's not a valid ZORGO_SITE_SECRET":"Data cannot be fetched without a secret"}],d={...n["project-url"]&&{projectUrl:n["project-url"]},...n["project-name"]&&{projectName:n["project-name"]},...n.terms&&{includeTermsPage:!0},...n.privacy&&{includePrivacyPage:!0},...n.environment&&{environment:n.environment},...n["stripe-key"]&&{stripePublishableKey:n["stripe-key"]},...n["website-secret"]&&{websiteSecret:n["website-secret"]}};async function pe(){n["non-interactive"]&&(d.includeTermsPage??=!1,d.includePrivacyPage??=!1,d.environment??="local");let e=ce.filter(c=>!(c.name in d));n["non-interactive"]&&e.length>0&&(console.error(`Missing required flags for non-interactive mode: ${e.map(c=>c.name).join(", ")}`),process.exit(1)),n["stripe-key"]&&!await R(n["stripe-key"])&&(console.error("Invalid --stripe-key"),process.exit(1)),n["website-secret"]&&!await w(n["website-secret"])&&(console.error("Invalid --website-secret"),process.exit(1));let t=e.length?await oe(e,{onSubmit:async(c,u)=>{c.name==="environment"&&(l=m[u]??"http://localhost:3000")}}):{},r={...d,...t},o={projectUrl:r.projectUrl,projectName:r.projectName,apiBaseUrl:l,includeTermsPage:r.includeTermsPage,includePrivacyPage:r.includePrivacyPage,stripePublishableKey:r.stripePublishableKey,websiteSecret:r.websiteSecret},a=se??ae(o.projectName);await O(a,o),console.log(`Scaffolded ${r.projectName} into ${a}`)}pe();export{l as ZORGO_API_BASE_URL};
344
+ //# sourceMappingURL=cli.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../node_modules/tsup/assets/esm_shims.js","../src/cli.ts","../src/internal/scaffold/scaffold.ts","../src/internal/scaffold/write-file.ts","../package.json","../src/internal/config-registry.ts","../src/internal/scaffold/templates/tree/package.json.gen.ts","../src/internal/scaffold/templates/tree/app/globals.css.gen.ts","../src/internal/scaffold/templates/tree/app/layout.tsx.gen.ts","../src/internal/scaffold/templates/tree/app/icon.tsx.gen.ts","../src/internal/scaffold/templates/tree/app/apple-icon.tsx.gen.ts","../src/internal/scaffold/templates/tree/app/opengraph-image.tsx.gen.ts","../src/internal/scaffold/templates/tree/app/manifest.ts.gen.ts","../src/internal/scaffold/templates/tree/app/terms/page.tsx.gen.ts","../src/internal/scaffold/templates/tree/app/privacy/page.tsx.gen.ts","../../zorgo/universal/constants.ts","../src/internal/scaffold/templates/tree/.env.gen.ts","../src/utils.ts"],"sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","import readline from \"node:readline\";\nimport { spawn } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { parseArgs } from \"node:util\";\nimport { ScaffoldOptions } from \"./internal/scaffold/types\";\nimport scaffold from \"./internal/scaffold/scaffold\";\nimport prompts from \"prompts\";\nimport {\n\tvalidateStripePublicKey,\n\tvalidateWebsiteSecret,\n} from \"./utils\";\nimport { Environments } from \"@zorgo/universal/constants\";\n\n// todo: single url\nconst ENV_URLS: Record<string, Environments> = {\n\tlocal: Environments.Development,\n\tstaging: Environments.Staging,\n\tproduction: Environments.Production,\n};\n\nexport let ZORGO_API_BASE_URL = Environments.Development;\n\n\nconst {\n\tvalues: flags,\n\tpositionals\n} = parseArgs({\n\targs: process.argv.slice(2),\n\tallowPositionals: true,\n\toptions: {\n\t\t\"project-url\": { type: \"string\" },\n\t\t\"project-name\": { type: \"string\" },\n\t\t\"terms\": { type: \"boolean\" },\n\t\t\"privacy\": { type: \"boolean\" },\n\t\t\"environment\": { type: \"string\" },\n\t\t\"stripe-key\": { type: \"string\" },\n\t\t\"website-secret\": { type: \"string\" },\n\t\t\"non-interactive\": { type: \"boolean\" },\n\t},\n});\n\n// usage: `zorgo init [targetDir]` — the `init` verb is optional/eaten here so\n// both `npx zorgo init my-site` and `zorgo my-site` work. targetDir is optional;\n// when omitted it defaults to a slug of the project name (computed in main()).\nconst args = positionals[0] === \"init\" ? positionals.slice(1) : positionals;\nconst targetDirArg = args[0];\n\n// ponytail: inline slug, not worth a dep or shared util for one call site\nconst slugify = (s: string) =>\n\ts.toLowerCase().trim().replace(/[^a-z0-9]+/g, \"-\").replace(/^-+|-+$/g, \"\") || \"zorgo-site\";\n\nif (flags[\"environment\"] && !(flags[\"environment\"] in ENV_URLS)) {\n\tconsole.error(`Invalid --environment \"${flags[\"environment\"]}\". Expected one of: ${Object.keys(ENV_URLS).join(\", \")}`);\n\tprocess.exit(1);\n}\nif (flags[\"environment\"]) {\n\t// guarded by the `in ENV_URLS` check above, so the lookup is defined.\n\tZORGO_API_BASE_URL = ENV_URLS[flags[\"environment\"]]!;\n}\n\n// a question for every property of ScaffoldOptions\nconst questions = [\n\t{\n\t\ttype: \"text\",\n\t\tname: \"projectUrl\",\n\t\tmessage: \"What is the site's URL?\",\n\t},\n\t{\n\t\ttype: \"text\",\n\t\tname: \"projectName\",\n\t\tmessage: \"What would you like to name this project?\",\n\t},\n\t{\n\t\ttype: \"confirm\",\n\t\tname: \"includeTermsPage\",\n\t\tmessage: \"Include terms page?\",\n\t},\n\t{\n\t\ttype: \"confirm\",\n\t\tname: \"includePrivacyPage\",\n\t\tmessage: \"Include privacy page?\",\n\t},\n\t{\n\t\ttype: \"select\",\n\t\tname: \"environment\",\n\t\tmessage: \"Which environment are you using? (will change which environment we test keys against)\",\n\t\tchoices: [\n\t\t\t{ title: \"Local\", value: \"local\" },\n\t\t\t{ title: \"Staging\", value: \"staging\" },\n\t\t\t{ title: \"Production\", value: \"production\" },\n\t\t],\n\t\tinitial: 0,\n\t},\n\t{\n\t\ttype: \"password\",\n\t\tname: \"stripePublishableKey\",\n\t\tmessage: \"Enter NEXT_PUBLIC_STRIPE_PUBLIC_KEY\",\n\t\tvalidate: async (value: string) => {\n\t\t\tif (!value) {\n\t\t\t\treturn \"Invalid Stripe publishable key\";\n\t\t\t}\n\t\t\tif (!(await validateStripePublicKey(value))) {\n\t\t\t\treturn \"Invalid Stripe publishable key\";\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t},\n\t{\n\t\ttype: \"password\",\n\t\tname: \"websiteSecret\",\n\t\tmessage: \"Enter ZORGO_SITE_SECRET\",\n\t\tvalidate: async (value: string) => {\n\t\t\tif (!value) {\n\t\t\t\treturn \"Data cannot be fetched without a secret\";\n\t\t\t}\n\t\t\tif (!(await validateWebsiteSecret(value))) {\n\t\t\t\treturn \"That's not a valid ZORGO_SITE_SECRET\";\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t}\n\n]\n\n// extract answers from cli flags\nconst flagAnswers: Partial<ScaffoldOptions> & { environment?: string } = {\n\t...(flags[\"project-url\"] && { projectUrl: flags[\"project-url\"] }),\n\t...(flags[\"project-name\"] && { projectName: flags[\"project-name\"] }),\n\t...(flags[\"terms\"] && { includeTermsPage: true }),\n\t...(flags[\"privacy\"] && { includePrivacyPage: true }),\n\t...(flags[\"environment\"] && { environment: flags[\"environment\"] }),\n\t...(flags[\"stripe-key\"] && { stripePublishableKey: flags[\"stripe-key\"] }),\n\t...(flags[\"website-secret\"] && { websiteSecret: flags[\"website-secret\"] }),\n};\n\nasync function main() {\n\t// --non-interactive has sensible defaults for the boolean/environment toggles\n\tif (flags[\"non-interactive\"]) {\n\t\tflagAnswers.includeTermsPage ??= false;\n\t\tflagAnswers.includePrivacyPage ??= false;\n\t\tflagAnswers.environment ??= \"local\";\n\t}\n\n\tconst remainingQuestions = questions.filter((q) => !(q.name in flagAnswers));\n\n\tif (flags[\"non-interactive\"] && remainingQuestions.length > 0) {\n\t\tconsole.error(\n\t\t\t`Missing required flags for non-interactive mode: ${remainingQuestions.map((q) => q.name).join(\", \")}`\n\t\t);\n\t\tprocess.exit(1);\n\t}\n\n\t// validate secrets passed directly via flags (prompts only validates what it asks)\n\tif (flags[\"stripe-key\"] && !(await validateStripePublicKey(flags[\"stripe-key\"]))) {\n\t\tconsole.error(\"Invalid --stripe-key\");\n\t\tprocess.exit(1);\n\t}\n\tif (flags[\"website-secret\"] && !(await validateWebsiteSecret(flags[\"website-secret\"]))) {\n\t\tconsole.error(\"Invalid --website-secret\");\n\t\tprocess.exit(1);\n\t}\n\n\t// extract answers from cli\n\tconst promptedAnswers = remainingQuestions.length\n\t\t? await prompts(remainingQuestions, {\n\t\t\tonSubmit: async (question, answer) => { // point key validation at the chosen env's API\n\t\t\t\tif (question.name === \"environment\") {\n\t\t\t\t\tZORGO_API_BASE_URL = ENV_URLS[answer as string] ?? Environments.Development;\n\t\t\t\t}\n\t\t\t},\n\t\t})\n\t\t: {};\n\n\tconst answers: Partial<ScaffoldOptions> = { ...flagAnswers, ...promptedAnswers };\n\n\t// pass opts object into scaffold function\n\t// (missing a required ScaffoldOptions field here is a compile error)\n\tconst opts: ScaffoldOptions = {\n\t\tprojectUrl: answers.projectUrl!,\n\t\tprojectName: answers.projectName!,\n\t\tapiBaseUrl: ZORGO_API_BASE_URL,\n\t\tincludeTermsPage: answers.includeTermsPage!,\n\t\tincludePrivacyPage: answers.includePrivacyPage!,\n\t\tstripePublishableKey: answers.stripePublishableKey,\n\t\twebsiteSecret: answers.websiteSecret,\n\t};\n\n\t// default the output dir to a slug of the project name when not given\n\tconst targetDir = targetDirArg ?? slugify(opts.projectName);\n\n\t// generate project\n\tawait scaffold(targetDir, opts);\n\tconsole.log(`Scaffolded ${answers.projectName} into ${targetDir}`);\n}\n\n\nmain();\n","import { cp, rename } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport writeGeneratedFile from \"./write-file\";\nimport type { ScaffoldOptions } from \"./types\";\n\nimport generatePackageJson from \"./templates/tree/package.json.gen\";\nimport generateGlobalsCss from \"./templates/tree/app/globals.css.gen\";\nimport generateLayout from \"./templates/tree/app/layout.tsx.gen\";\nimport generateIcon from \"./templates/tree/app/icon.tsx.gen\";\nimport generateAppleIcon from \"./templates/tree/app/apple-icon.tsx.gen\";\nimport generateOpengraphImage from \"./templates/tree/app/opengraph-image.tsx.gen\";\nimport generateManifest from \"./templates/tree/app/manifest.ts.gen\";\nimport generateTermsPage from \"./templates/tree/app/terms/page.tsx.gen\";\nimport generatePrivacyPage from \"./templates/tree/app/privacy/page.tsx.gen\";\nimport generateEnvFile from \"./templates/tree/.env.gen\";\n\n// static + generated files live side by side under templates/tree, mirroring\n// the scaffolded project's own layout; \"templates/\" itself only exists so\n// tsup's publicDir has a single folder to copy into dist as \"tree\"\nconst TREE_DIR = join(__dirname, \"tree\");\n\n// dynamic files, keyed by their output path relative to the target directory\nconst GENERATED_FILES: {\n\tpath: string;\n\tgenerate: (opts: ScaffoldOptions) => string | undefined\n}[] = [\n\t\t{ path: \"package.json\", generate: generatePackageJson },\n\t\t// wrangler.toml is generated by scripts/prebuild.ts from .env (its source\n\t\t// of truth), not here — see prebuild.ts writeWranglerToml().\n\t\t{ path: \"app/globals.css\", generate: generateGlobalsCss },\n\t\t{ path: \"app/layout.tsx\", generate: generateLayout },\n\t\t{ path: \"app/icon.tsx\", generate: generateIcon },\n\t\t{ path: \"app/apple-icon.tsx\", generate: generateAppleIcon },\n\t\t{ path: \"app/opengraph-image.tsx\", generate: generateOpengraphImage },\n\t\t{ path: \"app/manifest.ts\", generate: generateManifest },\n\t\t{ path: \"app/terms/page.tsx\", generate: generateTermsPage },\n\t\t{ path: \"app/privacy/page.tsx\", generate: generatePrivacyPage },\n\t\t{ path: \".env\", generate: generateEnvFile },\n\t];\n\nexport default async function scaffold(\n\ttargetDir: string,\n\topts: ScaffoldOptions\n) {\n\t// copy non-generated files\n\tawait cp(TREE_DIR, targetDir, {\n\t\trecursive: true,\n\t\tfilter: (src) => !src.endsWith(\".gen.ts\"),\n\t});\n\n\t// rename gitignore to .gitignore\n\tconst gitignore = join(targetDir, \"gitignore\");\n\tif (existsSync(gitignore)) {\n\t\tawait rename(gitignore, join(targetDir, \".gitignore\"));\n\t}\n\n\t// generate all dynamic files\n\tfor (const file of GENERATED_FILES) {\n\t\tconst content = file.generate(opts);\n\t\tif (content !== undefined) {\n\t\t\twriteGeneratedFile(targetDir, file.path, content);\n\t\t}\n\t}\n}\n","import { writeFileSync, mkdirSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\n\nexport default function writeGeneratedFile(targetDir: string, relativePath: string, content: string) {\n\tconst fullPath = join(targetDir, relativePath);\n\tmkdirSync(dirname(fullPath), { recursive: true });\n\twriteFileSync(fullPath, content);\n}\n","{\n\t\"name\": \"@zorgo/next\",\n\t\"version\": \"1.1.1\",\n\t\"main\": \"./src/index.ts\",\n\t\"types\": \"./src/index.ts\",\n\t\"bin\": {\n\t\t\"zorgo\": \"./dist/cli.js\"\n\t},\n\t\"sideEffects\": [\n\t\t\"./dist/index.mjs\",\n\t\t\"./dist/index.js\",\n\t\t\"./dist/components.mjs\",\n\t\t\"./dist/components.js\",\n\t\t\"./src/index.ts\"\n\t],\n\t\"files\": [\n\t\t\"dist\"\n\t],\n\t\"scripts\": {\n\t\t\"build\": \"tsup && tsx scripts/obfuscate.ts\",\n\t\t\"release\": \"node scripts/publish.mjs\",\n\t\t\"ship\": \"changeset && changeset version && node scripts/publish.mjs\",\n\t\t\"dev\": \"echo \\\"No build step. Consumers transpile TS sources.\\\"\",\n\t\t\"generate:test\": \"tsup && tsx --env-file=.env scripts/test-scaffold.ts\",\n\t\t\"env:init\": \"tsx scripts/init-env.ts\"\n\t},\n\t\"publishConfig\": {\n\t\t\"name\": \"@zorgo/next\",\n\t\t\"registry\": \"https://registry.npmjs.org/\",\n\t\t\"access\": \"public\",\n\t\t\"main\": \"./dist/index.js\",\n\t\t\"types\": \"./dist/index.d.ts\",\n\t\t\"exports\": {\n\t\t\t\".\": {\n\t\t\t\t\"import\": \"./dist/index.mjs\",\n\t\t\t\t\"require\": \"./dist/index.js\",\n\t\t\t\t\"types\": \"./dist/index.d.ts\"\n\t\t\t},\n\t\t\t\"./components\": {\n\t\t\t\t\"import\": \"./dist/components.mjs\",\n\t\t\t\t\"require\": \"./dist/components.js\",\n\t\t\t\t\"types\": \"./dist/components.d.ts\"\n\t\t\t},\n\t\t\t\"./slugs\": {\n\t\t\t\t\"import\": \"./dist/slugs.mjs\",\n\t\t\t\t\"require\": \"./dist/slugs.js\",\n\t\t\t\t\"types\": \"./dist/slugs.d.ts\"\n\t\t\t},\n\t\t\t\"./seo\": {\n\t\t\t\t\"import\": \"./dist/seo.mjs\",\n\t\t\t\t\"require\": \"./dist/seo.js\",\n\t\t\t\t\"types\": \"./dist/seo.d.ts\"\n\t\t\t},\n\t\t\t\"./server\": {\n\t\t\t\t\"import\": \"./dist/server.mjs\",\n\t\t\t\t\"require\": \"./dist/server.js\",\n\t\t\t\t\"types\": \"./dist/server.d.ts\"\n\t\t\t},\n\t\t\t\"./cli\": {\n\t\t\t\t\"import\": \"./dist/cli.mjs\",\n\t\t\t\t\"require\": \"./dist/cli.js\",\n\t\t\t\t\"types\": \"./dist/cli.d.ts\"\n\t\t\t},\n\t\t\t\"./package.json\": \"./package.json\"\n\t\t}\n\t},\n\t\"peerDependencies\": {\n\t\t\"react\": \"*\",\n\t\t\"react-dom\": \"*\",\n\t\t\"next\": \"^14.x.x || ^15.x.x || ^16.x.x\",\n\t\t\"lucide-react\": \"*\",\n\t\t\"@stripe/react-stripe-js\": \"*\",\n\t\t\"zod\": \"^4.x.x\",\n\t\t\"@next/env\": \"*\"\n\t},\n\t\"peerDependenciesMeta\": {\n\t\t\"zod\": {\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"@next/env\": {\n\t\t\t\"optional\": true\n\t\t}\n\t},\n\t\"devDependencies\": {\n\t\t\"@changesets/cli\": \"^2.31.0\",\n\t\t\"@config/typescript-config\": \"workspace:*\",\n\t\t\"@types/node\": \"^22.15.21\",\n\t\t\"@types/react\": \"^18.x.x\",\n\t\t\"@zorgo\": \"workspace:*\",\n\t\t\"dts-bundle-generator\": \"^9.5.1\",\n\t\t\"javascript-obfuscator\": \"^5.4.3\",\n\t\t\"next\": \"^15.x.x\",\n\t\t\"tsup\": \"^8.0.0\",\n\t\t\"tsx\": \"^4.19.2\",\n\t\t\"typescript\": \"^5.3.3\"\n\t},\n\t\"exports\": {\n\t\t\".\": {\n\t\t\t\"types\": \"./dist/index.d.ts\",\n\t\t\t\"import\": \"./dist/index.mjs\",\n\t\t\t\"require\": \"./dist/index.js\"\n\t\t},\n\t\t\"./components\": {\n\t\t\t\"types\": \"./dist/components.d.ts\",\n\t\t\t\"import\": \"./dist/components.mjs\",\n\t\t\t\"require\": \"./dist/components.js\"\n\t\t},\n\t\t\"./slugs\": {\n\t\t\t\"types\": \"./dist/slugs.d.ts\",\n\t\t\t\"import\": \"./dist/slugs.mjs\",\n\t\t\t\"require\": \"./dist/slugs.js\"\n\t\t},\n\t\t\"./seo\": {\n\t\t\t\"types\": \"./dist/seo.d.ts\",\n\t\t\t\"import\": \"./dist/seo.mjs\",\n\t\t\t\"require\": \"./dist/seo.js\"\n\t\t},\n\t\t\"./server\": {\n\t\t\t\"types\": \"./dist/server.d.ts\",\n\t\t\t\"import\": \"./dist/server.mjs\",\n\t\t\t\"require\": \"./dist/server.js\"\n\t\t},\n\t\t\"./cli\": {\n\t\t\t\"types\": \"./dist/cli.d.ts\",\n\t\t\t\"import\": \"./dist/cli.mjs\",\n\t\t\t\"require\": \"./dist/cli.js\"\n\t\t},\n\t\t\"./package.json\": \"./package.json\"\n\t},\n\t\"dependencies\": {\n\t\t\"immer\": \"^10.0.0\",\n\t\t\"prompts\": \"^2.4.2\",\n\t\t\"zustand\": \"^4.x.x\"\n\t}\n}\n","// pinned versions that the package is built with\n\nimport { version as zorgoNextVersion } from \"../../package.json\";\n\nexport const PINNED_VERSIONS = {\n\t// tracks this package's own version so scaffolded sites can't drift onto an\n\t// unpublished pin\n\t\"@zorgo/next\": zorgoNextVersion,\n\t\"@cloudflare/kv-asset-handler\": \"0.4.0\",\n\t\"@opennextjs/cloudflare\": \"1.19.11\",\n\t\"@stripe/react-stripe-js\": \"6.7.0\",\n\t\"@stripe/stripe-js\": \"9.9.0\",\n\t\"@supabase/ssr\": \"0.5.2\",\n\t\"@supabase/supabase-js\": \"2.47.5\",\n\t\"class-variance-authority\": \"0.7.1\",\n\t\"clsx\": \"2.1.1\",\n\t\"date-fns\": \"4.1.0\",\n\t\"date-fns-tz\": \"3.2.0\",\n\t\"geojson-vt\": \"4.0.2\",\n\t\"gsap\": \"3.12.7\",\n\t\"iconoir-react\": \"7.8.0\",\n\t\"libphonenumber-js\": \"1.13.8\",\n\t\"lucide-react\": \"1.23.0\",\n\t\"promise-timeout\": \"1.3.0\",\n\t\"sharp\": \"0.34.5\",\n\t\"stripe\": \"17.4.0\",\n\t\"tailwind-merge\": \"3.0.1\",\n\t\"tailwindcss-animate\": \"1.0.7\",\n\t\"zod\": \"4.3.6\",\n\n\t\"next\": \"16.2.10\",\n\t\"react\": \"19.2.4\",\n\t\"react-dom\": \"19.2.4\"\n\n};\n\nexport const DEV_DEPENDENCIES = {\n\t\"wrangler\": \"4.86.0\",\n\t\"@tailwindcss/postcss\": \"4.3.2\",\n\t\"@types/node\": \"20.19.43\",\n\t\"@types/react\": \"19.2.17\",\n\t\"@types/react-dom\": \"19.2.3\",\n\t\"babel-plugin-react-compiler\": \"1.0.0\",\n\t\"eslint\": \"9.39.4\",\n\t\"eslint-config-next\": \"16.2.10\",\n\t\"tailwindcss\": \"4.3.2\",\n\t\"typescript\": \"5.9.3\",\n\t\"tsx\": \"4.23.0\",\n\t\"@next/env\": \"16.2.10\"\n}\n\nexport type PinnedPackage = keyof typeof PINNED_VERSIONS;\n","import { PINNED_VERSIONS, DEV_DEPENDENCIES } from \"../../../config-registry\";\nimport type { ScaffoldOptions } from \"../../types\";\n\nexport default function generatePackageJson(opts: ScaffoldOptions): string {\n\treturn JSON.stringify(\n\t\t{\n\t\t\tname: opts.projectName,\n\t\t\tversion: \"1.0.0\",\n\t\t\tprivate: true,\n\t\t\tscripts: {\n\t\t\t\t\"dev\": \"tsx scripts/prebuild.ts && next dev\",\n\t\t\t\t\"dev:no-prebuild\": \"next dev\",\n\t\t\t\t\"prebuild\": \"tsx scripts/prebuild.ts\",\n\t\t\t\t\"build\": \"tsx scripts/prebuild.ts && next build\",\n\t\t\t\t\"cloudflare:deploy\": \"tsx scripts/prebuild.ts && wrangler deploy\",\n\t\t\t\t\"preview\": \"tsx scripts/prebuild.ts && wrangler dev\",\n\t\t\t},\n\t\t\tdependencies: PINNED_VERSIONS,\n\t\t\tdevDependencies: DEV_DEPENDENCIES,\n\t\t},\n\t\tnull,\n\t\t2,\n\t);\n}\n","import type { ScaffoldOptions } from \"../../../types\";\n\n/** Keep in sync with scripts/prebuild.ts HARDCODED_BRANDING until DB branding lands. */\nconst HARDCODED_BRANDING = {\n\tbackgroundBase: \"#F5F5F5\",\n\tprimary: \"#3264FF\",\n\taccent: \"#9664FF\",\n\tfontFamily: \"Inter\",\n};\n\nconst FONT_ON_LIGHT = \"#0a0a0a\";\nconst FONT_ON_DARK = \"#f5f5f5\";\n/** Channel delta toward white (elevated) / black (recessed). */\nconst BACKGROUND_SURFACE_DELTA = 15;\n\nfunction parseHexRgb(\n\tbackground: string,\n): { r: number; g: number; b: number } | null {\n\tconst hex = background.trim().replace(/^#/, \"\");\n\tconst full =\n\t\thex.length === 3\n\t\t\t? hex\n\t\t\t\t\t.split(\"\")\n\t\t\t\t\t.map((c) => c + c)\n\t\t\t\t\t.join(\"\")\n\t\t\t: hex;\n\tif (full.length !== 6 || Number.isNaN(Number.parseInt(full, 16))) {\n\t\treturn null;\n\t}\n\treturn {\n\t\tr: Number.parseInt(full.slice(0, 2), 16),\n\t\tg: Number.parseInt(full.slice(2, 4), 16),\n\t\tb: Number.parseInt(full.slice(4, 6), 16),\n\t};\n}\n\nfunction toHex({ r, g, b }: { r: number; g: number; b: number }): string {\n\treturn `#${[r, g, b].map((c) => c.toString(16).padStart(2, \"0\")).join(\"\")}`;\n}\n\nfunction deriveFontColor(background: string): string {\n\tconst rgb = parseHexRgb(background);\n\tif (!rgb) return FONT_ON_LIGHT;\n\tconst luminance = (0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b) / 255;\n\treturn luminance > 0.5 ? FONT_ON_LIGHT : FONT_ON_DARK;\n}\n\nfunction deriveElevatedBackground(background: string): string {\n\tconst rgb = parseHexRgb(background);\n\tif (!rgb) return background;\n\treturn toHex({\n\t\tr: Math.min(255, rgb.r + BACKGROUND_SURFACE_DELTA),\n\t\tg: Math.min(255, rgb.g + BACKGROUND_SURFACE_DELTA),\n\t\tb: Math.min(255, rgb.b + BACKGROUND_SURFACE_DELTA),\n\t});\n}\n\nfunction deriveRecessedBackground(background: string): string {\n\tconst rgb = parseHexRgb(background);\n\tif (!rgb) return background;\n\treturn toHex({\n\t\tr: Math.max(0, rgb.r - BACKGROUND_SURFACE_DELTA),\n\t\tg: Math.max(0, rgb.g - BACKGROUND_SURFACE_DELTA),\n\t\tb: Math.max(0, rgb.b - BACKGROUND_SURFACE_DELTA),\n\t});\n}\n\nexport default function generateGlobalsCss(_opts: ScaffoldOptions): string {\n\tconst branding = HARDCODED_BRANDING;\n\tconst fontFamilyParam = branding.fontFamily.replace(/ /g, \"+\");\n\tconst foreground = deriveFontColor(branding.backgroundBase);\n\tconst primaryForeground = deriveFontColor(branding.primary);\n\tconst accentForeground = deriveFontColor(branding.accent);\n\tconst backgroundElevated = deriveElevatedBackground(branding.backgroundBase);\n\tconst backgroundRecessed = deriveRecessedBackground(branding.backgroundBase);\n\n\treturn `@import url(\"https://fonts.googleapis.com/css2?family=${fontFamilyParam}:wght@400;700&display=swap\");\n@import \"tailwindcss\";\n/* Tailwind v4 skips node_modules; @zorgo/next ships un-obfuscated components so\n their class names are scannable here. */\n@source \"../node_modules/@zorgo/next/dist/components.mjs\";\n\n:root {\n --background: ${branding.backgroundBase};\n --background-elevated: ${backgroundElevated};\n --background-recessed: ${backgroundRecessed};\n --foreground: ${foreground};\n --primary: ${branding.primary};\n --primary-foreground: ${primaryForeground};\n --accent: ${branding.accent};\n --accent-foreground: ${accentForeground};\n --font-sans: \"${branding.fontFamily}\", sans-serif;\n}\n\n@theme inline {\n --color-background: var(--background);\n --color-background-elevated: var(--background-elevated);\n --color-background-recessed: var(--background-recessed);\n --color-foreground: var(--foreground);\n --color-primary: var(--primary);\n --color-primary-foreground: var(--primary-foreground);\n --color-accent: var(--accent);\n --color-accent-foreground: var(--accent-foreground);\n --font-sans: var(--font-sans);\n}\n\n@layer base {\n button,\n [type=\"button\"],\n [type=\"submit\"],\n [type=\"reset\"] {\n cursor: pointer;\n }\n\n button:disabled,\n [type=\"button\"]:disabled,\n [type=\"submit\"]:disabled,\n [type=\"reset\"]:disabled {\n cursor: not-allowed;\n }\n}\n`;\n}\n","import type { ScaffoldOptions } from \"../../../types\";\n\nexport default function generateLayout(opts: ScaffoldOptions): string {\n\treturn `\nimport type { Metadata, Viewport } from \"next\";\nimport \"./globals.css\";\nimport { Header, Footer, ModalHost } from \"./components\";\nimport { CookieConsent } from \"@zorgo/next/components\";\nimport { restaurantJsonLd } from \"../lib/generated/jsonld\";\nexport const metadata: Metadata = {\n\t// resolves relative URLs (canonicals, the auto-injected opengraph-image) to absolute.\n\t// || (not ??) so an empty NEXT_PUBLIC_SITE_URL — a site piloted before its URL is\n\t// set — falls back too; new URL(\"\") throws and would break the build/deploy.\n\tmetadataBase: new URL(process.env.NEXT_PUBLIC_SITE_URL || \"http://localhost:3000\"),\n\ttitle: {\n\t\tdefault: ${JSON.stringify(opts.projectName)},\n\t\ttemplate: ${JSON.stringify(`%s | ${opts.projectName}`)},\n\t},\n\tdescription: ${JSON.stringify(`Order online from ${opts.projectName}.`)},\n\topenGraph: {\n\t\ttype: \"website\",\n\t\tsiteName: ${JSON.stringify(opts.projectName)},\n\t\tlocale: \"en_US\",\n\t},\n\ttwitter: {\n\t\tcard: \"summary_large_image\",\n\t},\n};\n\nexport const viewport: Viewport = {\n\twidth: \"device-width\",\n\tinitialScale: 1,\n};\n\nexport default async function RootLayout({ children }: { children: React.ReactNode }) {\n\treturn (\n\t\t<html lang=\"en\">\n\t\t\t<head>\n\t\t\t\t<script\n\t\t\t\t\ttype=\"application/ld+json\"\n\t\t\t\t\tdangerouslySetInnerHTML={{ __html: JSON.stringify(restaurantJsonLd) }}\n\t\t\t\t/>\n\t\t\t</head>\n\t\t\t<body className=\"min-h-screen flex flex-col bg-background text-foreground\">\n\t\t\t\t<Header />\n\t\t\t\t<main className=\"flex-1\">\n\t\t\t\t\t{children}\n\t\t\t\t</main>\n\t\t\t\t<Footer />\n\t\t\t\t<ModalHost />\n\t\t\t\t<CookieConsent />\n\t\t\t</body>\n\t\t</html>\n\t)}\n\n`;\n}\n","import type { ScaffoldOptions } from \"../../../types\";\n\nexport default function generateIcon(opts: ScaffoldOptions): string {\n\tconst letter = opts.projectName.charAt(0).toUpperCase();\n\n\treturn `import { ImageResponse } from \"next/og\";\nimport { readFileSync } from \"fs\";\nimport { join } from \"path\";\n\n// One PNG per size: 32 for the browser tab/favicon, 192 & 512 for the web\n// manifest (PWA install). generateImageMetadata gives each a stable /icon/<id> URL\n// the manifest references, and all three are prerendered at build.\nexport function generateImageMetadata() {\n\treturn [\n\t\t{ id: \"32\", size: { width: 32, height: 32 }, contentType: \"image/png\" },\n\t\t{ id: \"192\", size: { width: 192, height: 192 }, contentType: \"image/png\" },\n\t\t{ id: \"512\", size: { width: 512, height: 512 }, contentType: \"image/png\" },\n\t];\n}\n\n// Brand palette prebuild drops at public/styles/styles.json. Neutral fallback if\n// it's missing so the icon still renders. primary is the badge fill.\nfunction loadTheme() {\n\ttry {\n\t\treturn JSON.parse(\n\t\t\treadFileSync(join(process.cwd(), \"public/styles/styles.json\"), \"utf8\"),\n\t\t);\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n// Prebuild drops the franchise logo at public/images/logo.png. Use it as the\n// icon when it's a real image; the magic-byte sniff both picks the data-URI mime\n// and rejects a 404 JSON body (no logo) so we cleanly fall back to the letter.\nfunction loadLogo(): string | null {\n\ttry {\n\t\tconst buf = readFileSync(join(process.cwd(), \"public/images/logo.png\"));\n\t\tconst mime =\n\t\t\tbuf[0] === 0x89 && buf[1] === 0x50\n\t\t\t\t? \"image/png\"\n\t\t\t\t: buf[0] === 0xff && buf[1] === 0xd8\n\t\t\t\t\t? \"image/jpeg\"\n\t\t\t\t\t: null;\n\t\tif (!mime) return null;\n\t\treturn \\`data:\\${mime};base64,\\${buf.toString(\"base64\")}\\`;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport default async function Icon({ id }: { id: Promise<string> }) {\n\tconst dimension = Number(await id);\n\tconst logo = loadLogo();\n\tconst theme = loadTheme();\n\tconst background = theme?.primary ?? \"#171717\";\n\tconst foreground = theme?.primaryForeground ?? \"#ffffff\";\n\treturn new ImageResponse(\n\t\tlogo ? (\n\t\t\t<img\n\t\t\t\tsrc={logo}\n\t\t\t\twidth={dimension}\n\t\t\t\theight={dimension}\n\t\t\t\tstyle={{ objectFit: \"contain\" }}\n\t\t\t/>\n\t\t) : (\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\theight: \"100%\",\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\tbackground,\n\t\t\t\t\tcolor: foreground,\n\t\t\t\t\tfontSize: dimension * 0.625,\n\t\t\t\t\tfontWeight: 700,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t${letter}\n\t\t\t</div>\n\t\t),\n\t\t{ width: dimension, height: dimension },\n\t);\n}\n`;\n}\n","import type { ScaffoldOptions } from \"../../../types\";\n\n// Mirrors icon.tsx.gen.ts but at the 180x180 Apple touch-icon size iOS uses for\n// \"Add to Home Screen\". Kept as its own file because Next.js maps the\n// `apple-icon` convention to <link rel=\"apple-touch-icon\"> separately from `icon`.\nexport default function generateAppleIcon(opts: ScaffoldOptions): string {\n\tconst letter = opts.projectName.charAt(0).toUpperCase();\n\n\treturn `import { ImageResponse } from \"next/og\";\nimport { readFileSync } from \"fs\";\nimport { join } from \"path\";\n\nexport const size = { width: 180, height: 180 };\nexport const contentType = \"image/png\";\n\n// Brand palette prebuild drops at public/styles/styles.json. Neutral fallback if\n// it's missing so the icon still renders.\nfunction loadTheme() {\n\ttry {\n\t\treturn JSON.parse(\n\t\t\treadFileSync(join(process.cwd(), \"public/styles/styles.json\"), \"utf8\"),\n\t\t);\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport default function AppleIcon() {\n\tconst theme = loadTheme();\n\tconst background = theme?.primary ?? \"#171717\";\n\tconst foreground = theme?.primaryForeground ?? \"#ffffff\";\n\treturn new ImageResponse(\n\t\t(\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\theight: \"100%\",\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\tbackground,\n\t\t\t\t\tcolor: foreground,\n\t\t\t\t\tfontSize: 112,\n\t\t\t\t\tfontWeight: 700,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t${letter}\n\t\t\t</div>\n\t\t),\n\t\tsize,\n\t);\n}\n`;\n}\n","import type { ScaffoldOptions } from \"../../../types\";\n\nexport default function generateOpengraphImage(opts: ScaffoldOptions): string {\n\tconst projectName = opts.projectName;\n\tconst letter = projectName.charAt(0).toUpperCase();\n\n\treturn `import { ImageResponse } from \"next/og\";\nimport { readFileSync } from \"fs\";\nimport { join } from \"path\";\n\nexport const alt = ${JSON.stringify(projectName)};\nexport const size = { width: 1200, height: 630 };\nexport const contentType = \"image/png\";\n\n// Brand palette prebuild drops at public/styles/styles.json. Neutral fallback if\n// it's missing so the card still renders.\nfunction loadTheme() {\n\ttry {\n\t\treturn JSON.parse(\n\t\t\treadFileSync(join(process.cwd(), \"public/styles/styles.json\"), \"utf8\"),\n\t\t);\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport default function OpengraphImage() {\n\tconst theme = loadTheme();\n\tconst background = theme?.backgroundBase ?? \"#171717\";\n\tconst foreground = theme?.foreground ?? \"#ffffff\";\n\tconst badge = theme?.primary ?? \"#ffffff\";\n\tconst badgeForeground = theme?.primaryForeground ?? \"#171717\";\n\treturn new ImageResponse(\n\t\t(\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\theight: \"100%\",\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\tbackground,\n\t\t\t\t\tcolor: foreground,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\twidth: 140,\n\t\t\t\t\t\theight: 140,\n\t\t\t\t\t\tborderRadius: 32,\n\t\t\t\t\t\tbackground: badge,\n\t\t\t\t\t\tcolor: badgeForeground,\n\t\t\t\t\t\tfontSize: 84,\n\t\t\t\t\t\tfontWeight: 700,\n\t\t\t\t\t\tmarginBottom: 48,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t${letter}\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\tfontSize: 72,\n\t\t\t\t\t\tfontWeight: 700,\n\t\t\t\t\t\tletterSpacing: \"-0.02em\",\n\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t\tpadding: \"0 80px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t${projectName}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t),\n\t\tsize,\n\t);\n}\n`;\n}\n","import type { ScaffoldOptions } from \"../../../types\";\n\nexport default function generateManifest(opts: ScaffoldOptions): string {\n\tconst name = opts.projectName;\n\n\treturn `import type { MetadataRoute } from \"next\";\nimport { readFileSync } from \"fs\";\nimport { join } from \"path\";\n\n// Brand palette prebuild drops at public/styles/styles.json. Neutral fallback if\n// it's missing.\nfunction loadTheme() {\n\ttry {\n\t\treturn JSON.parse(\n\t\t\treadFileSync(join(process.cwd(), \"public/styles/styles.json\"), \"utf8\"),\n\t\t);\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport default function manifest(): MetadataRoute.Manifest {\n\tconst theme = loadTheme();\n\treturn {\n\t\tname: ${JSON.stringify(name)},\n\t\tshort_name: ${JSON.stringify(name)},\n\t\tdescription: ${JSON.stringify(`Order online from ${name}.`)},\n\t\tstart_url: \"/\",\n\t\tdisplay: \"standalone\",\n\t\tbackground_color: theme?.backgroundBase ?? \"#ffffff\",\n\t\ttheme_color: theme?.primary ?? \"#171717\",\n\t\ticons: [\n\t\t\t{ src: \"/icon/192\", sizes: \"192x192\", type: \"image/png\" },\n\t\t\t{ src: \"/icon/512\", sizes: \"512x512\", type: \"image/png\" },\n\t\t],\n\t};\n}\n`;\n}\n","import type { ScaffoldOptions } from \"../../../../types\";\n\n// add bullshit tos here\nexport default function generateTermsPage(opts: ScaffoldOptions) {\n\n if (opts.includeTermsPage) {\n return `export default function TermsPage() {\n return (\n <div>\n <h1>Terms of Service</h1>\n </div>\n )\n }`;\n }\n\n}\n","import type { ScaffoldOptions } from \"../../../../types\";\n\nexport default function generatePrivacyPage(opts: ScaffoldOptions) {\n\n if (opts.includePrivacyPage) {\n return `export default function PrivacyPage() {\n return (\n <div>\n <h1>Privacy Policy</h1>\n </div>\n )\n }`;\n }\n\n}\n","export const SUPABASE_URL = \"https://dhnpoxorllfdobwftkyb.supabase.co\";\n\nexport const SUPABASE_ANON_KEY =\n\t\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImRobnBveG9ybGxmZG9id2Z0a3liIiwicm9sZSI6ImFub24iLCJpYXQiOjE3MzkwNTQxMDgsImV4cCI6MjA1NDYzMDEwOH0.zI8PwbgKwijHZ1QmxJqmaPrFvg02w1vOY2Qcs7SddzI\";\nexport const ZORGO_PURPLE = \"rgb(153,67,233)\";\n\nexport const expoGoGoogleClientId =\n\t\"959654249401-dm6nbi27rj605ul1nkt8o2imb8f7daff.apps.googleusercontent.com\";\n\nexport const API_BASE_URL =\n\tprocess.env.NODE_ENV === \"production\"\n\t\t? \"https://api.zorgotech.com\"\n\t\t: \"https://staging.zorgo.ai\";\n\n\n// replace instances of API_BASE_URL with env enum\nexport enum Environments {\n\tProduction = \"https://api.zorgotech.com\",\n\tStaging = \"http://api.zorgo.ai\",\n\tDevelopment = \"http://localhost:3000\",\n}\n/** Emails allowed to access developer-only metrics (e.g. /performance/developer). */\nexport const DEVELOPER_EMAILS = [\"clawsorgo@gmail.com\", \"gmandwee@gmail.com\"] as const;\n\nexport function isDeveloperEmail(email?: string | null): boolean {\n\treturn !!email && (DEVELOPER_EMAILS as readonly string[]).includes(email);\n}\n\nexport const ORDER_STORE_CONSTANTS = {\n\tDEFAULTS: {\n\t\tPREP_MINUTES: 20, // default amount of time for prep\n\t\tPAST_HOURS: 24, // hours into the past orders are fetched for\n\t\tFUTURE_HOURS: 72 // hours into the future orders are fetched for \n\t},\n\tORDER_STATUS: {\n\t\tSTAGING: 10,\n\t\tPENDING: 1,\n\t\tCOMPLETED: 2,\n\t\tCANCELLED: 4,\n\t\tPAID: 6,\n\t\tPARTIALLY_PAID: 7,\n\t\tKITCHEN_DONE: 9,\n\t\tCONFIRMED: 11,\n\t\tPREPARING: 12,\n\t},\n\tPOS_METHOD_ID: 3,\n\tORDER_TYPE: {\n\t\tDINE_IN: 1,\n\t\tTAKEOUT: 2,\n\t\tDELIVERY: 3\n\t},\n\t/** KDS edit highlight duration after a POS modification. */\n\tMODIFICATION_HIGHLIGHT_MS: 8_000,\n\t/** POS order realtime: refetch + recycle postgres_changes channel on this cadence. */\n\tLISTENER_SYNC_INTERVAL_MS: 60_000,\n\tORDER_SELECT: `\n\t*,\n\n\tcharges (\n\t\t*\n\t),\n\n\tcustomers\n\t (customer_id, first_name, last_name, phone_number, email),\n\n\torder_items\n\t (\n\t\torder_item_id, item_id, quantity, price_at_order, order_id, comments, status, applied_promo_id, discount_amount,\n\t\titems (\n\t\t\titem_id, name, price,\n\t\t\tbase_items (\n\t\t\t\tbase_item_id, category_id, name,\n\t\t\t\tcategories (category_id, name, is_catering)\n\t\t\t)\n\t\t),\n\t\torder_item_selected_items (\n\t\t\torder_item_id, rule_id, item_id, quantity, upcharge_price,\n\t\t\titems (\n\t\t\t\titem_id, name, price,\n\t\t\t\tbase_items (\n\t\t\t\t\tbase_item_id, category_id, name,\n\t\t\t\t\tcategories (category_id, name, is_catering)\n\t\t\t\t)\n\t\t\t),\n\t\t\titem_rules (rule_id, group_name)\n\t\t),\n\t\torder_item_selected_components (\n\t\t\torder_item_id, rule_id, component_id, quantity, upcharge_price,\n\t\t\tcomponents (id, name, component_type_id), item_rules (rule_id, group_name)\n\t\t),\n\t\torder_item_components (\n\t\t\torder_item_id, component_id, quantity_servings, is_base,\n\t\t\tcomponents (id, name, component_type_id)\n\t\t)\n\t)\n`,\n};\n\nexport const CHARGE_STATUSES = {\n\tSUCCESS: 1,\n\tPENDING: 2,\n\tREFUNDED: 3,\n\tVOIDED: 4,\n\tPAYMENT_QUEUED: 5,\n\tFAILED: 6\n}\n","import { SUPABASE_URL } from \"@zorgo/universal/constants\";\nimport type { ScaffoldOptions } from \"../../types\";\n\n// .env is the single source of truth for this site. Everything that varies per\n// project (which API environment, the site URL, the worker name) lives here;\n// scripts/prebuild.ts reads these back to regenerate wrangler.toml on every\n// build, so wrangler.toml is a build artifact — edit .env, not it.\nexport default function generateEnvFile(opts: ScaffoldOptions): string {\n\tconst lines = [\n\t\t// which Zorgo API this site talks to (an Environments enum value). read by\n\t\t// @zorgo constants (client), scripts/prebuild.ts, and lib/zorgoSiteToken.ts.\n\t\t`NEXT_PUBLIC_API_BASE_URL=${opts.apiBaseUrl}`,\n\t\t// the site's own origin — read by sitemap.ts, robots.ts, layout, stores.\n\t\t`NEXT_PUBLIC_SITE_URL=${opts.projectUrl}`,\n\t\t`NEXT_PUBLIC_BASE_URL=${opts.projectUrl}`,\n\t\t`NEXT_PUBLIC_SUPABASE_URL=${SUPABASE_URL}`,\n\t\t// worker name for the generated wrangler.toml.\n\t\t`ZORGO_PROJECT_NAME=${opts.projectName}`,\n\t];\n\tif (opts.stripePublishableKey) {\n\t\tlines.push(`NEXT_PUBLIC_STRIPE_PUBLIC_KEY=${opts.stripePublishableKey}`);\n\t}\n\tif (opts.websiteSecret) {\n\t\tlines.push(`ZORGO_SITE_SECRET=${opts.websiteSecret}`);\n\t}\n\treturn lines.join(\"\\n\") + \"\\n\";\n}\n","import { ZORGO_API_BASE_URL } from \"./cli\";\n\nexport async function validateWebsiteSecret(value: string): Promise<boolean> {\n try {\n const res = await fetch(`${ZORGO_API_BASE_URL}/auth/site-token`, {\n method: \"POST\",\n headers: { \"x-zorgo-site-secret\": value },\n });\n return res.ok;\n } catch {\n return false;\n }\n}\n\nexport async function validateStripePublicKey(key: string): Promise<boolean> {\n try {\n const res = await fetch(`${ZORGO_API_BASE_URL}/auth/validate-stripe-key`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ publishableKey: key }),\n });\n if (!res.ok) return false;\n const { valid } = await res.json();\n return valid === true;\n } catch {\n return false;\n }\n}\n\nexport function formatProjectName(value: string) {\n return value.toLowerCase().trim().replace(/ /g, \"-\");\n}\n"],"mappings":"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","names":["path","fileURLToPath","getFilename","getDirname","__dirname","parseArgs","cp","rename","existsSync","join","writeFileSync","mkdirSync","dirname","join","writeGeneratedFile","targetDir","relativePath","content","fullPath","version","PINNED_VERSIONS","version","DEV_DEPENDENCIES","generatePackageJson","opts","PINNED_VERSIONS","DEV_DEPENDENCIES","HARDCODED_BRANDING","FONT_ON_LIGHT","FONT_ON_DARK","BACKGROUND_SURFACE_DELTA","parseHexRgb","background","hex","full","c","toHex","r","g","b","deriveFontColor","rgb","deriveElevatedBackground","deriveRecessedBackground","generateGlobalsCss","_opts","branding","fontFamilyParam","foreground","primaryForeground","accentForeground","backgroundElevated","backgroundRecessed","generateLayout","opts","generateIcon","opts","generateAppleIcon","opts","generateOpengraphImage","opts","projectName","letter","generateManifest","opts","name","generateTermsPage","opts","generatePrivacyPage","opts","SUPABASE_URL","API_BASE_URL","generateEnvFile","opts","lines","SUPABASE_URL","TREE_DIR","join","__dirname","GENERATED_FILES","generatePackageJson","generateGlobalsCss","generateLayout","generateIcon","generateAppleIcon","generateOpengraphImage","generateManifest","generateTermsPage","generatePrivacyPage","generateEnvFile","scaffold","targetDir","opts","cp","src","gitignore","existsSync","rename","file","content","writeGeneratedFile","prompts","validateWebsiteSecret","value","ZORGO_API_BASE_URL","validateStripePublicKey","key","res","valid","ENV_URLS","ZORGO_API_BASE_URL","flags","positionals","parseArgs","args","targetDirArg","slugify","s","questions","value","validateStripePublicKey","validateWebsiteSecret","flagAnswers","main","remainingQuestions","q","promptedAnswers","prompts","question","answer","answers","opts","targetDir","scaffold"]}