@zorgo/next 1.1.1 → 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/server.js CHANGED
@@ -1 +1,459 @@
1
- 'use strict';const a0_0x2d967d=a0_0x3f44;(function(_0x46b523,_0x47d9c6){const _0x2069a4=a0_0x3f44,_0x3bfc77=_0x46b523();while(!![]){try{const _0x1ed94d=parseInt(_0x2069a4(0x14e))/0x1*(-parseInt(_0x2069a4(0x10d))/0x2)+-parseInt(_0x2069a4(0x11e))/0x3+-parseInt(_0x2069a4(0xbc))/0x4+-parseInt(_0x2069a4(0xa5))/0x5*(parseInt(_0x2069a4(0xf7))/0x6)+-parseInt(_0x2069a4(0xb8))/0x7+-parseInt(_0x2069a4(0x108))/0x8+-parseInt(_0x2069a4(0xe6))/0x9*(-parseInt(_0x2069a4(0xcc))/0xa);if(_0x1ed94d===_0x47d9c6)break;else _0x3bfc77['push'](_0x3bfc77['shift']());}catch(_0x561785){_0x3bfc77['push'](_0x3bfc77['shift']());}}}(a0_0x591d,0x45b70));function a0_0x591d(){const _0x5f23c9=['AxrLBxm','ChjPBwfYEq','C3bSAxq','t2zMzxi','zNjVBq','Dgv4Da','BgLIl2DLBMvYyxrLzc8','C3rYAw5NAwz5','C3r5BgvZlMPZB24','AM9PBG','ENbWuhe','iZbHmgeWyq','zgvMyxvSDa','rwTpqMC','cKbPBxbVCNqGDxjSkcjODhrWCZOVl2zVBNrZlMDVB2DSzwfWAxmUy29Tl2nZCZi/zMfTAwX5pq','EM9Yz28TC2L0zq','ANnVBKXKigzHAwXLzdO','Dg9tDhjPBMC','lIbuAgLZihvZDwfSBhKGBwvHBNmGwK9sr09Fu0Lurv9trunsrvqGAxmGD3jVBMCGzM9YihrOAxmGzw52AxjVBM1LBNqU','y2f0y2G','t1LNB0y','v1fHy3q','qg5LEhqVzw52','iIWGC2fUCY1ZzxjPzJSkFqOkqhrOzw1LigLUBgLUzsb7cIaGls1JB2XVCI1IywnRz3jVDw5KoIb2yxiOls1IywnRz3jVDw5KktSkicaTlwnVBg9YlwjHy2TNCM91BMqTzwXLDMf0zwq6ihzHCIGTlwjHy2TNCM91BMqTzwXLDMf0zwqPoWOGic0Ty29SB3iTyMfJA2DYB3vUzc1YzwnLC3nLzdOGDMfYkc0TyMfJA2DYB3vUzc1YzwnLC3nLzcK7cIaGls1JB2XVCI1MB3jLz3jVDw5KoIb2yxiOls1MB3jLz3jVDw5KktSkicaTlwnVBg9YlxbYAw1HCNK6ihzHCIGTlxbYAw1HCNKPoWOGic0Ty29SB3iTChjPBwfYEs1MB3jLz3jVDw5KoIb2yxiOls1WCMLTyxj5lwzVCMvNCM91BMqPoWOGic0Ty29SB3iTywnJzw50oIb2yxiOls1Hy2nLBNqPoWOGic0Ty29SB3iTywnJzw50lwzVCMvNCM91BMq6ihzHCIGTlwfJy2vUDc1MB3jLz3jVDw5KktSkicaTlwzVBNqTC2fUCZOGDMfYkc0TzM9UDc1Zyw5ZktSkFqOkqgXHEwvYigjHC2uGEWOGigj1DhrVBIWkicbBDhLWzt0IyNv0Dg9UiL0ScIaGw3r5Cgu9iNn1yM1PDcjDlaOGifT0ExbLpsjYzxnLDcjDihSkicaGign1CNnVCJOGCg9PBNrLCJSkicb9cGOGigj1DhrVBJPKAxnHyMXLzcWkicbBDhLWzt0IyNv0Dg9UiL06zgLZywjSzwqScIaGw3r5Cgu9iNn1yM1PDcjDoMrPC2fIBgvKlaOGifT0ExbLpsjYzxnLDcjDoMrPC2fIBgvKihSkicaGign1CNnVCJOGBM90lwfSBg93zwq7cIaGFqP9cG','mtaYnte5owr5vezKwq','BwfW','zgvZy3jPChrPB24','Ahr0Chm6lY9Zy2HLBweUB3jN','uNH2ENC','yMfZzty0DxjS','CgfKu3rHCNq','ue9tva','zxjYB3i','igzHAwXLzcWGDxnPBMCGzgvMyxvSDhm6','v1LqtM8','C3rHDhvZ','u1vWtw0','v0j1zeS','rNnhwvi','AgfZtwvUDuL0zw0','q291BgqGBM90ihjLywnOihrOzsbZAxrLlxrVA2vUigvUzhbVAw50igf0ia','mJu4nM1ItNzdwa','iZK2otzgrG','DhjPBq','Bg9HzevUDKnVBMzPzW','EgjSDui','BwLU','C2vYDMvZq3vPC2LUzq','yMfJA2DYB3vUzejHC2u','iGPTywLUid0GiI5VCgvUlw5LEhqVD29YA2vYlMPZiGPJB21WyxrPyMLSAxr5x2rHDguGpsaImJaYnc0Wos0YmYiky29TCgf0AwjPBgL0Ev9MBgfNCYa9ifSIBM9KzwPZx2nVBxbHDcjDcGOJiej1BMrSzxmGDgHLienSB3vKzMXHCMuGD29YA2vYigfZihbHCNqGB2yGyhDYyw5NBgvYigrLCgXVEwaGkgfUzcbGD3jHBMDSzxiGzgv2ycKScImGC28GDgHLigrLCgXVEsbJB21Tyw5Kihn0yxLZigeGCgXHAw4GyhDYyw5NBgvYigrLCgXVEwaUihbYzwj1AwXKicH3AgLJAcb3CML0zxmkiYb0AgLZigzPBguGkYbSAwiVz2vUzxjHDgvKksbTDxn0ihn0AwXSihj1BIbMAxjZDcdIGjqGB24Gq2XVDwrMBgfYzsbxB3jRzxjZiej1AwXKCWOJihrOyxqGAxmGDgHLihbYB2PLy3qNCYbcDwLSzcbJB21Tyw5KoYbSB2nHBgX5igL0igLZihrOzsbUCg0GC2nYAxb0CYbIzwXVDY4kw2j1AwXKxqPJB21Tyw5Kid0GiM5WEcbVCgvUBMv4DgPZlwnSB3vKzMXHCMuGyNvPBgqIcGPByxnZzxrZxqPKAxjLy3rVCNKGpsaIlM9Wzw4TBMv4Dc9HC3nLDhmIcMjPBMrPBMCGpsaIqvntrvrtiGOkw3zHCNnDcK5fwfrFufvcteLdx1nvuefcqvnfx1vstca9ici','Aw1Hz2u','BNvSBgLZAa','Bg9N','ANnVBG','ywnJzw50','thvlzvG','oWOGic0TyMfJA2DYB3vUzc1LBgv2yxrLzdOG','vvne','mZm1ndu3nNzHvxrvCW','B1bes3q','uefvsgW','vgHLihnPDguTDg9Rzw4Gzw5KCg9PBNqGCMv0DxjUzwqGmJaWigj1DcbUBYb0B2TLBIbHDca','ChjLyNvPBgqGC2nYAxb0ignVBxbSzxrLza','mte1odq2CNjJvfLb','Dg9gAxHLza','ChjLyNvPBgq6igzYyw5JAgLZzsbOyxmGBM8GBwvUDsbPDgvTCYb5zxqG4OcuigDLBMvYyxrPBMCGyw4Gzw1WDhKGBwvUDs4GqwrKigL0zw1ZigLUihrOzsbKyxnOyM9HCMqGyw5KihjLyNvPBgqGDg8GCg9WDwXHDguGDgHLihn0B3jLzNjVBNqU','ChjVDg90ExbL','zNjHBMnOAxnLx2LKCW','yxjYyxLcDwzMzxi','ANnVBMXKlNrZ','ksbHDca','D3jHBMDSzxiUDg9TBa','x19LC01VzhvSzq','l2f1DgGVC2L0zs10B2TLBG','twvUDuL0zw0','lIbdAgvJAYborvHux1bvqKXjq19bueLFqKftrv9vuKWGyw5KihrOyxqGDgHLiefqssbPCYbYDw5UAw5NlG','uLzdwva','ugDQEKy','Ag9ZDg5HBwu','EgroCeq','otqZmtDcweX5whm','yxjYyxK','C2XPy2u','C3rYAw5N','Bwf4','D3jPDgvgAwXLu3LUyW','l2zYyw5JAgLZzs1PBMzVl2XVz28V','l2zYyw5JAgLZzs1PBMzVl2zYyw5JAgLZzs8','yw1XANu','oNDNAhrandaWoZCWmczKAxnWBgf5pxn3yxaIktSkqgLTCg9YDcaIDgfPBhDPBMrJC3mIoWOVkIbuywLSD2LUzcb2ncbZA2LWCYbUB2rLx21VzhvSzxm7ieb6B3jNBY9UzxH0ihnOAxbZihvUlw9IzNvZy2f0zwqGy29TCg9Uzw50CYbZBWOGicb0AgvPCIbJBgfZCYbUyw1LCYbHCMuGC2nHBM5HyMXLigHLCMuUicOVcKbZB3vYy2uGiI4Ul25VzgvFBw9KDwXLCY9aEM9Yz28VBMv4Dc9KAxn0l2nVBxbVBMvUDhmUBwPZiJSkcJPYB290ihSkicaTlwjHy2TNCM91BMq6ia','y2f0zwDVCMLLCW','zw51BwvYywjSzq','Dw5YzwfJAgfIBgu','zejcDLO','i2y1zJvMnq','Bg9NBY5QCgC','q09iEvi','DMfYAwfUDhm','DLfKqwO','BgvUz3rO','sKjmA1e','y3jLyxrL','l2zYyw5JAgLZzs1PBMzVl2HVDxjZlW','zNvUy3rPB24','zxHWB3j0CW','C2L0zv91CMW','sKvvt0G','tvnPAg0','BwvUDsbMzxrJAcbMywLSzwqG','sMDMzfq','CMvQzwn0zwq','D1zQs0m','y3DK','uLHVuNC','cLTBCM91DgvZxv0kCgf0DgvYBIa9ici','zM9UDezHBwLSEq','uNHSD1y','ChjLyNvPBgq6ia','sw50zxi','BwvUDs50CW','Dw5RBM93BG','zerWtuq','ifjLC3bVBNnLoIa','BwTKAxjtEw5J','z2v0t3DUuhjVCgvYDhLezxnJCMLWDg9Y','l2zYyw5JAgLZzs1PBMzVl3n0EwXLCY8','CMvHC29U','vhvgqLy','nunky3bmqW','yM5VDxy','uhLkq2S','ChjLzMf1Bhq','oWOGic0TzM9UDc1Zyw5ZoIaI','DxLurKW','Bg9NBYbMywLSzwq6','Ag91CNmGzMfPBgvKoG','yxbW','uMvZDgf1CMfUDa','z1Leyue','zwDIvMW','CgfYC2vjBNq','ntq3mhHHvwHttG','thnNsuq','oWOGic0TywnJzw50oIa','Ag5jv3K','CgfYC2u','CNvUBMLUzYbWCMvIDwLSzcbZy3jPChqUlI4','zgvMAw5LuhjVCgvYDhK','y2f0zwDVCNLFAwq','Ahr0CdOVl2XVy2fSAg9ZDdOZmdaW','y2fSBa','z2XVyMfSCY5JC3m','CwjqBLC','CM91BMq','oWOGic0TyMfJA2DYB3vUzc1YzwnLC3nLzdOG','EM9K','vM1pEMG','sMrRvxe','ChjPy2u','iZmYnJrgrG','mJy1mtK3muXNser2sW','uMnmyw4','DhjHBNnMB3jT','DxjS','mJqWnZy4teP6CxnO','CxfgwKS','BMfTzq','oWOGic0TywnJzw50lwzVCMvNCM91BMq6ia','B2jQzwn0','sLfuB3C','wLrvqxu','ChvIBgLJl2LTywDLCY8','z2v0t3DUuhjVCgvYDhLoyw1LCW','lY8GqvvutY1hru5fuKfuruqGyNKGC2nYAxb0CY9WCMvIDwLSzc50CYdIGjqGzg8GBM90igvKAxqUcMv4Cg9YDcbJB25ZDcbYzxn0yxvYyw50sNnVBKXKid0G','l2zYyw5JAgLZzs1PBMzVl21LBNuV','CMvWBgfJzq','oWOGic0TzM9YzwDYB3vUzdOG','iGPorvHux1bvqKXjq19bueLFqKftrv9vuKWGpsaI','ChzhAMe','C3r5BgvZigzHAwXLzdO','mtCWB1vxBhLt','iGPorvHux1bvqKXjq19cqvnfx1vstca9ici'];a0_0x591d=function(){return _0x5f23c9;};return a0_0x591d();}var __create=Object[a0_0x2d967d(0x133)],__defProp=Object[a0_0x2d967d(0xab)],__getOwnPropDesc=Object[a0_0x2d967d(0x14a)],__getOwnPropNames=Object[a0_0x2d967d(0xc4)],__getProtoOf=Object['getPrototypeOf'],__hasOwnProp=Object[a0_0x2d967d(0x110)]['hasOwnProperty'],__export=(_0xd16e5f,_0x38e661)=>{for(var _0x27f7a8 in _0x38e661)__defProp(_0xd16e5f,_0x27f7a8,{'get':_0x38e661[_0x27f7a8],'enumerable':!![]});},__copyProps=(_0x1ee740,_0x43329b,_0x3243b7,_0x2359b7)=>{const _0x3182b5=a0_0x2d967d,_0x4ae6ff={'BgLiB':_0x3182b5(0xc0),'ZTUAu':function(_0x3b3750,_0x524b19){return _0x3b3750===_0x524b19;},'JBLkQ':function(_0x3368c6,_0x1dc34e,_0x19f461){return _0x3368c6(_0x1dc34e,_0x19f461);}};if(_0x43329b&&typeof _0x43329b===_0x4ae6ff['BgLiB']||_0x4ae6ff[_0x3182b5(0xc2)](typeof _0x43329b,_0x3182b5(0x135))){for(let _0x1c2cf8 of __getOwnPropNames(_0x43329b))if(!__hasOwnProp[_0x3182b5(0xae)](_0x1ee740,_0x1c2cf8)&&_0x1c2cf8!==_0x3243b7)__defProp(_0x1ee740,_0x1c2cf8,{'get':()=>_0x43329b[_0x1c2cf8],'enumerable':!(_0x2359b7=_0x4ae6ff[_0x3182b5(0x132)](__getOwnPropDesc,_0x43329b,_0x1c2cf8))||_0x2359b7[_0x3182b5(0x129)]});}return _0x1ee740;},__toESM=(_0x44dfa2,_0x3a9b11,_0x3f9336)=>(_0x3f9336=_0x44dfa2!=null?__create(__getProtoOf(_0x44dfa2)):{},__copyProps(_0x3a9b11||!_0x44dfa2||!_0x44dfa2[a0_0x2d967d(0x116)]?__defProp(_0x3f9336,a0_0x2d967d(0xda),{'value':_0x44dfa2,'enumerable':!![]}):_0x3f9336,_0x44dfa2)),__toCommonJS=_0x149b4f=>__copyProps(__defProp({},a0_0x2d967d(0x116),{'value':!![]}),_0x149b4f),server_exports={};__export(server_exports,{'SiteTokenError':()=>SiteTokenError,'fetchSiteToken':()=>fetchSiteToken,'runPrebuild':()=>runPrebuild}),module[a0_0x2d967d(0x136)]=__toCommonJS(server_exports);var import_fs=require('fs'),import_path=__toESM(require('path')),import_env=require(a0_0x2d967d(0xe4)),import_zod=require(a0_0x2d967d(0xb3));function priceString(_0x2e3a91){const _0x33387d=a0_0x2d967d,_0xf5bdaa={'LuKeX':function(_0x487048,_0x14446a){return _0x487048/_0x14446a;}};return _0xf5bdaa[_0x33387d(0x105)](_0x2e3a91,0x64)[_0x33387d(0x10e)](0x2);}function a0_0x3f44(_0x29fd29,_0x5cee21){_0x29fd29=_0x29fd29-0xa0;const _0x591dfd=a0_0x591d();let _0x3f449a=_0x591dfd[_0x29fd29];if(a0_0x3f44['kyksDZ']===undefined){var _0x8e966f=function(_0x5d5aa4){const _0x1971b5='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x54190a='',_0x3f0daf='';for(let _0x5aa888=0x0,_0x547677,_0x5c5946,_0x27c050=0x0;_0x5c5946=_0x5d5aa4['charAt'](_0x27c050++);~_0x5c5946&&(_0x547677=_0x5aa888%0x4?_0x547677*0x40+_0x5c5946:_0x5c5946,_0x5aa888++%0x4)?_0x54190a+=String['fromCharCode'](0xff&_0x547677>>(-0x2*_0x5aa888&0x6)):0x0){_0x5c5946=_0x1971b5['indexOf'](_0x5c5946);}for(let _0x5df471=0x0,_0x5d0030=_0x54190a['length'];_0x5df471<_0x5d0030;_0x5df471++){_0x3f0daf+='%'+('00'+_0x54190a['charCodeAt'](_0x5df471)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3f0daf);};a0_0x3f44['dxNEFC']=_0x8e966f,a0_0x3f44['WupyHb']={},a0_0x3f44['kyksDZ']=!![];}const _0x2b7804=_0x591dfd[0x0],_0x283bf1=_0x29fd29+_0x2b7804,_0x2ccd94=a0_0x3f44['WupyHb'][_0x283bf1];return!_0x2ccd94?(_0x3f449a=a0_0x3f44['dxNEFC'](_0x3f449a),a0_0x3f44['WupyHb'][_0x283bf1]=_0x3f449a):_0x3f449a=_0x2ccd94,_0x3f449a;}function variantOffer(_0x59c717){const _0x2c92be=a0_0x2d967d,_0x78c3e6={'ZSoaI':'Offer','dDpMD':function(_0x2efba8,_0x486987){return _0x2efba8(_0x486987);},'xbluB':_0x2c92be(0x107)};return{'@type':_0x78c3e6['ZSoaI'],'price':_0x78c3e6[_0x2c92be(0x147)](priceString,_0x59c717['display_price']??_0x59c717[_0x2c92be(0xb6)]),'priceCurrency':_0x78c3e6[_0x2c92be(0xfb)]};}function menuItemNode(_0xd33f51){const _0x4c3396=a0_0x2d967d,_0x13505c={'PgjzF':function(_0xf9ff71,_0x5222b3){return _0xf9ff71>_0x5222b3;}},_0x208de7={'@type':_0x4c3396(0x118),'name':_0xd33f51[_0x4c3396(0xbe)]};if(_0xd33f51['description'])_0x208de7[_0x4c3396(0xe8)]=_0xd33f51[_0x4c3396(0xe8)];const _0x41bb53=_0xd33f51[_0x4c3396(0x12f)]['map'](variantOffer);if(_0x41bb53['length']===0x1)_0x208de7['offers']=_0x41bb53[0x0];else{if(_0x13505c[_0x4c3396(0x11b)](_0x41bb53['length'],0x1))_0x208de7['offers']=_0x41bb53;}return _0x208de7;}function buildRestaurantJsonLd(_0x3362bf,_0x334a26){const _0x262389=a0_0x2d967d,_0x5454a6={'WBudK':_0x262389(0xe9),'PyJCk':'Menu'},_0x3cca85=_0x3362bf[_0x262389(0x128)][_0x262389(0xe7)](_0x24d790=>{const _0x4f5145=_0x262389,_0x5e9eb9={'@type':'MenuSection','name':_0x24d790[_0x4f5145(0xbe)]},_0x1b60f9=_0x3362bf['items']['filter'](_0x2f05e0=>_0x2f05e0[_0x4f5145(0xac)]===_0x24d790[_0x4f5145(0xac)])[_0x4f5145(0xe7)](menuItemNode);if(_0x1b60f9[_0x4f5145(0x131)])_0x5e9eb9[_0x4f5145(0xf5)]=_0x1b60f9;return _0x5e9eb9;}),_0x53cde5={'@context':_0x5454a6[_0x262389(0xf3)],'@type':_0x262389(0xa1),'name':_0x334a26[_0x262389(0xbe)]};if(_0x334a26['url'])_0x53cde5['url']=_0x334a26[_0x262389(0xbb)];if(_0x334a26[_0x262389(0x100)])_0x53cde5['image']=_0x334a26[_0x262389(0x100)];if(_0x334a26[_0x262389(0xe8)])_0x53cde5[_0x262389(0xe8)]=_0x334a26['description'];if(_0x334a26[_0x262389(0xfd)]?.[_0x262389(0x131)])_0x53cde5['servesCuisine']=_0x334a26['servesCuisine'];return _0x53cde5['hasMenu']={'@type':_0x5454a6[_0x262389(0x150)],'name':_0x5454a6[_0x262389(0x150)],'hasMenuSection':_0x3cca85},_0x53cde5;}function apiBaseUrl(){const _0x562dc8=a0_0x2d967d;return process.env.NEXT_PUBLIC_API_BASE_URL??_0x562dc8(0xad);}var SiteTokenError=class extends Error{[a0_0x2d967d(0x14c)];constructor(_0x5e2bff,_0x5328c6,_0x24a5a1){const _0x4fcae8=a0_0x2d967d;super(_0x5328c6,_0x24a5a1),this[_0x4fcae8(0xbe)]='SiteTokenError',this[_0x4fcae8(0x14c)]=_0x5e2bff;}};async function fetchSiteToken(){const _0x1dbfe8=a0_0x2d967d,_0x1d509f={'vQdAj':function(_0x34223c,_0x58137e){return _0x34223c(_0x58137e);},'hnIWy':_0x1dbfe8(0x107),'COHyR':'missing-secret','dBBvZ':'ZORGO_SITE_SECRET\x20is\x20not\x20set.\x20Add\x20it\x20to\x20this\x20site\x27s\x20.env.','amqju':function(_0x29cd9){return _0x29cd9();},'qbPnW':function(_0x33ad3a,_0x478240,_0x17afa8){return _0x33ad3a(_0x478240,_0x17afa8);},'EkOBg':_0x1dbfe8(0xed),'DjEBP':_0x1dbfe8(0x12a),'JQTow':_0x1dbfe8(0x10a),'qqFZK':'rejected'},_0x533d17=process.env.ZORGO_SITE_SECRET;if(!_0x533d17)throw new SiteTokenError(_0x1d509f[_0x1dbfe8(0x12e)],_0x1d509f[_0x1dbfe8(0x12b)]);const _0x55ad8e=_0x1d509f[_0x1dbfe8(0x126)](apiBaseUrl)+_0x1dbfe8(0x117);let _0x3a1f9a;try{_0x3a1f9a=await _0x1d509f[_0x1dbfe8(0xb0)](fetch,_0x55ad8e,{'method':_0x1d509f[_0x1dbfe8(0xdb)],'headers':{'x-zorgo-site-secret':_0x533d17}});}catch(_0x4f7ad9){throw new SiteTokenError(_0x1d509f['DjEBP'],_0x1dbfe8(0xf6)+_0x55ad8e+_0x1dbfe8(0x119),{'cause':_0x4f7ad9});}if(!_0x3a1f9a['ok']){if('QpAxt'===_0x1d509f[_0x1dbfe8(0xc1)])return{'@type':_0x1dbfe8(0xd1),'price':yUUYRt[_0x1dbfe8(0x130)](_0x46af4d,_0x3ceeba['display_price']??_0x2793b9[_0x1dbfe8(0xb6)]),'priceCurrency':yUUYRt[_0x1dbfe8(0xa8)]};else{const _0x930a1a=(await _0x3a1f9a[_0x1dbfe8(0xd3)]()['catch'](()=>''))['slice'](0x0,0xc8);throw new SiteTokenError(_0x1d509f[_0x1dbfe8(0xbd)],'The\x20site-token\x20endpoint\x20rejected\x20the\x20request\x20('+_0x3a1f9a[_0x1dbfe8(0xf1)]+'\x20'+_0x3a1f9a['statusText']+_0x1dbfe8(0x114)+_0x55ad8e+_0x1dbfe8(0xe0)+(_0x930a1a?_0x1dbfe8(0x148)+_0x930a1a:''));}}const {token:_0x3409d1}=await _0x3a1f9a[_0x1dbfe8(0x103)]();if(!_0x3409d1)throw new SiteTokenError(_0x1dbfe8(0x13c),_0x1dbfe8(0x10b)+_0x55ad8e+'.');return _0x3409d1;}var BrandingSchema=import_zod['z']['object']({'backgroundBase':import_zod['z'][a0_0x2d967d(0x121)]()[a0_0x2d967d(0xda)]('#F5F5F5'),'primary':import_zod['z'][a0_0x2d967d(0x121)]()[a0_0x2d967d(0xda)](a0_0x2d967d(0xb7)),'accent':import_zod['z'][a0_0x2d967d(0x121)]()[a0_0x2d967d(0xda)](a0_0x2d967d(0xf8)),'fontFamily':import_zod['z'][a0_0x2d967d(0x121)]()[a0_0x2d967d(0xda)](a0_0x2d967d(0x144))})['prefault']({}),FranchiseSchema=import_zod['z']['object']({'name':import_zod['z']['string']()[a0_0x2d967d(0x101)]()['transform'](_0x1464a2=>_0x1464a2??process.env.ZORGO_PROJECT_NAME??a0_0x2d967d(0xa1)),'site_url':import_zod['z'][a0_0x2d967d(0x121)]()[a0_0x2d967d(0x101)]()[a0_0x2d967d(0xba)](_0x32b2d6=>_0x32b2d6??void 0x0)})[a0_0x2d967d(0x151)]({}),HoursSchema=import_zod['z'][a0_0x2d967d(0x11f)](import_zod['z']['unknown']())[a0_0x2d967d(0x151)]([]),MenuSchema=import_zod['z'][a0_0x2d967d(0xc0)]({'items':import_zod['z']['array'](import_zod['z'][a0_0x2d967d(0x146)]())[a0_0x2d967d(0xda)]([]),'categories':import_zod['z'][a0_0x2d967d(0x11f)](import_zod['z'][a0_0x2d967d(0x146)]())[a0_0x2d967d(0xda)]([]),'components':import_zod['z'][a0_0x2d967d(0x11f)](import_zod['z'][a0_0x2d967d(0x146)]())[a0_0x2d967d(0xda)]([]),'rules':import_zod['z'][a0_0x2d967d(0x11f)](import_zod['z'][a0_0x2d967d(0x146)]())[a0_0x2d967d(0xda)]([])});async function fetchData(_0xcf3465,_0x4ec0a5,_0x59439e){const _0x1b68da=a0_0x2d967d,_0x352ded={'WYPNo':function(_0x5744fc,_0x13d48d,_0x5f27ff){return _0x5744fc(_0x13d48d,_0x5f27ff);}};try{const _0x4fae48=await _0x352ded[_0x1b68da(0xf0)](fetch,''+apiBaseUrl()+_0xcf3465,{'headers':{'Authorization':'Bearer\x20'+_0x4ec0a5}});if(!_0x4fae48['ok'])throw new Error(_0x4fae48[_0x1b68da(0xf1)]+':\x20'+await _0x4fae48['text']());const _0x4d513c=await _0x4fae48[_0x1b68da(0x103)]();return _0x59439e['parse'](_0x4d513c?.['data']??_0x4d513c);}catch(_0x1792c0){return console[_0x1b68da(0xee)](_0x1b68da(0x143)+_0xcf3465+_0x1b68da(0xef),_0x1792c0),_0x59439e[_0x1b68da(0xa9)](void 0x0);}}var FONT_ON_LIGHT=a0_0x2d967d(0xd9),FONT_ON_DARK=a0_0x2d967d(0x12c),BACKGROUND_SURFACE_DELTA=0xf,BACKGROUND_TEMPERATURE_BIAS=0x8;function parseHexRgb(_0x248746){const _0x409e0f=a0_0x2d967d,_0x139c4e={'zppPq':function(_0x15e98a,_0x215af4){return _0x15e98a!==_0x215af4;}},_0x472f42=_0x248746[_0x409e0f(0xf9)]()[_0x409e0f(0xc7)](/^#/,''),_0x1ef35b=_0x472f42[_0x409e0f(0x131)]===0x3?_0x472f42[_0x409e0f(0xd0)]('')[_0x409e0f(0xe7)](_0x401751=>_0x401751+_0x401751)[_0x409e0f(0xd7)](''):_0x472f42;if(_0x139c4e[_0x409e0f(0xd8)](_0x1ef35b[_0x409e0f(0x131)],0x6)||Number['isNaN'](Number['parseInt'](_0x1ef35b,0x10)))return null;return{'r':Number[_0x409e0f(0xa4)](_0x1ef35b[_0x409e0f(0x120)](0x0,0x2),0x10),'g':Number[_0x409e0f(0xa4)](_0x1ef35b[_0x409e0f(0x120)](0x2,0x4),0x10),'b':Number['parseInt'](_0x1ef35b[_0x409e0f(0x120)](0x4,0x6),0x10)};}function toHex({r:_0x32c7ed,g:_0x46357c,b:_0x44069c}){const _0xd9847a=a0_0x2d967d;return'#'+[_0x32c7ed,_0x46357c,_0x44069c]['map'](_0x30826d=>_0x30826d['toString'](0x10)[_0xd9847a(0xec)](0x2,'0'))['join']('');}function relativeLuminance({r:_0x324b59,g:_0x458248,b:_0xd1f047}){const _0x24b965=a0_0x2d967d,_0x578d7e={'UqARU':function(_0x1e3c2e,_0x19aa7f){return _0x1e3c2e/_0x19aa7f;},'WQact':function(_0x2f7512,_0x44a1b3){return _0x2f7512+_0x44a1b3;},'RZwOl':function(_0xaf57fa,_0x113e52){return _0xaf57fa*_0x113e52;}};return _0x578d7e['UqARU'](_0x578d7e[_0x24b965(0xe3)](_0x578d7e[_0x24b965(0xe3)](0.299*_0x324b59,_0x578d7e['RZwOl'](0.587,_0x458248)),_0x578d7e['RZwOl'](0.114,_0xd1f047)),0xff);}function temperatureBiasFor({r:_0x2b237a,g:_0x338105,b:_0x10940}){const _0x1157a9=a0_0x2d967d,_0x4e7abd={'TuFBV':function(_0x53a8ae,_0x4f6f48){return _0x53a8ae(_0x4f6f48);}};return Math[_0x1157a9(0xb1)](BACKGROUND_TEMPERATURE_BIAS*_0x4e7abd[_0x1157a9(0x14d)](relativeLuminance,{'r':_0x2b237a,'g':_0x338105,'b':_0x10940}));}function deriveFontColor(_0x423396){const _0x5c9072=a0_0x2d967d,_0x25b075={'oPDKt':function(_0x1ff81d,_0x326587){return _0x1ff81d>_0x326587;},'Rxvzw':function(_0x2c31f9,_0x392c94){return _0x2c31f9(_0x392c94);}},_0x11570f=parseHexRgb(_0x423396);if(!_0x11570f)return FONT_ON_LIGHT;return _0x25b075[_0x5c9072(0x109)](_0x25b075[_0x5c9072(0xea)](relativeLuminance,_0x11570f),0.5)?FONT_ON_LIGHT:FONT_ON_DARK;}function deriveElevatedBackground(_0x4970ae){const _0x36499a=a0_0x2d967d,_0x1d3bd8={'Qcbic':function(_0x579905,_0x4a7479){return _0x579905(_0x4a7479);},'Ommgf':function(_0x56687d,_0x22c8b4){return _0x56687d(_0x22c8b4);},'egbVl':function(_0x28fa24,_0x39be0c){return _0x28fa24/_0x39be0c;},'JdkUq':function(_0x27cdbf,_0x5b1e2d){return _0x27cdbf+_0x5b1e2d;}},_0x4f4933=_0x1d3bd8['Qcbic'](parseHexRgb,_0x4970ae);if(!_0x4f4933)return _0x4970ae;const _0x585e10=_0x1d3bd8['Ommgf'](temperatureBiasFor,_0x4f4933),_0x34a4c6=Math[_0x36499a(0xb1)](_0x1d3bd8[_0x36499a(0xa3)](_0x585e10,0x4));return toHex({'r':Math[_0x36499a(0xfc)](0xff,_0x1d3bd8[_0x36499a(0xb5)](_0x4f4933['r']+BACKGROUND_SURFACE_DELTA,_0x34a4c6)),'g':Math[_0x36499a(0xfc)](0xff,_0x4f4933['g']+BACKGROUND_SURFACE_DELTA),'b':Math[_0x36499a(0xfc)](0xff,_0x1d3bd8[_0x36499a(0xb5)](_0x4f4933['b'],BACKGROUND_SURFACE_DELTA)-_0x585e10)});}function deriveRecessedBackground(_0x3d398f){const _0x308a43=a0_0x2d967d,_0x6b36={'uyTFL':function(_0x2a8905,_0x519fc1){return _0x2a8905(_0x519fc1);},'RcLan':function(_0x5c0ffe,_0x1690f2){return _0x5c0ffe(_0x1690f2);},'AFtYJ':function(_0xdd35ee,_0x13c5d1){return _0xdd35ee/_0x13c5d1;},'xdNpD':function(_0x36ef4b,_0x415564){return _0x36ef4b(_0x415564);},'JgfdT':function(_0x3a3299,_0x1af59b){return _0x3a3299-_0x1af59b;},'OYgoF':function(_0x25a06e,_0x296d34){return _0x25a06e+_0x296d34;}},_0x5ae545=_0x6b36[_0x308a43(0x153)](parseHexRgb,_0x3d398f);if(!_0x5ae545)return _0x3d398f;const _0x569fdd=_0x6b36[_0x308a43(0xb9)](temperatureBiasFor,_0x5ae545),_0x511e69=Math[_0x308a43(0xb1)](_0x6b36['AFtYJ'](_0x569fdd,0x4));return _0x6b36[_0x308a43(0x11d)](toHex,{'r':Math[_0x308a43(0x122)](0x0,_0x6b36[_0x308a43(0x13b)](_0x6b36[_0x308a43(0x13b)](_0x5ae545['r'],BACKGROUND_SURFACE_DELTA),_0x511e69)),'g':Math['max'](0x0,_0x5ae545['g']-BACKGROUND_SURFACE_DELTA),'b':Math['max'](0x0,_0x6b36[_0x308a43(0xe2)](_0x5ae545['b']-BACKGROUND_SURFACE_DELTA,_0x569fdd))});}function writeWranglerToml(){const _0x1d8d88=a0_0x2d967d,_0x4bfe1b={'RxlwV':_0x1d8d88(0xdd)},_0x2b33ef=process.env.ZORGO_PROJECT_NAME??_0x4bfe1b[_0x1d8d88(0x142)],_0x2ac7dd=process.env.NEXT_PUBLIC_SITE_URL??'',_0x4d48c8=process.env.NEXT_PUBLIC_API_BASE_URL??'',_0x4e6d63=process.env.NEXT_PUBLIC_BASE_URL??_0x2ac7dd,_0x47da09=process.env.NEXT_PUBLIC_SUPABASE_URL??'';let _0x3c244c;try{_0x3c244c=new URL(_0x2ac7dd)[_0x1d8d88(0x11c)];}catch{_0x3c244c=void 0x0;}const _0x164c56=_0x3c244c?_0x1d8d88(0x140)+_0x3c244c+'\x22\x0acustom_domain\x20=\x20true\x0a\x0a[[routes]]\x0apattern\x20=\x20\x22www.'+_0x3c244c+'\x22\x0acustom_domain\x20=\x20true\x0a':'',_0x137340='#\x20AUTO-GENERATED\x20by\x20scripts/prebuild.ts\x20from\x20.env\x20—\x20do\x20not\x20edit.\x0aname\x20=\x20\x22'+_0x2b33ef+_0x1d8d88(0xff)+_0x47da09+_0x1d8d88(0xc9)+_0x4d48c8+'\x22\x0aNEXT_PUBLIC_SITE_URL\x20=\x20\x22'+_0x2ac7dd+_0x1d8d88(0xcd)+_0x4e6d63+'\x22\x0a\x0a[observability]\x0aenabled\x20=\x20true\x0a\x0a[observability.logs]\x0aenabled\x20=\x20true\x0ainvocation_logs\x20=\x20true\x0a'+_0x164c56;(0x0,import_fs[_0x1d8d88(0x123)])(import_path[_0x1d8d88(0xda)][_0x1d8d88(0xd7)](process['cwd'](),_0x1d8d88(0x115)),_0x137340);}async function logo({franchiseId:_0x13e092,token:_0x2b6add}){const _0x289b6=a0_0x2d967d,_0x80951a={'gYDaA':function(_0x395f85,_0x51a32e,_0x3d9228){return _0x395f85(_0x51a32e,_0x3d9228);},'JEUOH':function(_0x30d170){return _0x30d170();},'pvGja':'logo.png'},_0x243fa5=await _0x80951a[_0x289b6(0xa2)](fetch,_0x80951a[_0x289b6(0x138)](apiBaseUrl)+_0x289b6(0x124)+_0x13e092,{'headers':{'Authorization':'Bearer\x20'+_0x2b6add}});if(!_0x243fa5['ok'])return;const _0x44d040=await _0x243fa5[_0x289b6(0x112)](),_0x492038=Buffer[_0x289b6(0xd2)](_0x44d040),_0x5c6bf1=import_path[_0x289b6(0xda)][_0x289b6(0xd7)](process[_0x289b6(0x13e)](),_0x289b6(0xc3));(0x0,import_fs['mkdirSync'])(_0x5c6bf1,{'recursive':!![]}),(0x0,import_fs[_0x289b6(0x123)])(import_path[_0x289b6(0xda)]['join'](_0x5c6bf1,_0x80951a[_0x289b6(0xca)]),_0x492038),(0x0,import_fs['writeFileSync'])(import_path[_0x289b6(0xda)][_0x289b6(0xd7)](_0x5c6bf1,_0x289b6(0x12d)),_0x492038);}function writeMenuModule(_0x2887ca){const _0x2ddef6=a0_0x2d967d,_0x4adb4c=import_path['default']['join'](process[_0x2ddef6(0x13e)](),'lib/generated/');(0x0,import_fs[_0x2ddef6(0x149)])(_0x4adb4c,{'recursive':!![]}),(0x0,import_fs['writeFileSync'])(import_path[_0x2ddef6(0xda)][_0x2ddef6(0xd7)](_0x4adb4c,_0x2ddef6(0x145)),'//\x20AUTO-GENERATED\x20by\x20scripts/prebuild.ts\x20—\x20do\x20not\x20edit.\x0aimport\x20type\x20{\x20Menu\x20}\x20from\x20\x22@zorgo/next\x22;\x0a\x0aexport\x20const\x20menu:\x20Menu\x20=\x20'+JSON[_0x2ddef6(0xd5)](_0x2887ca,null,0x2)+';\x0a');}async function menu({franchiseId:_0xd76dd0,token:_0x3288dd}){const _0x3f6e25=a0_0x2d967d,_0x9c12b2={'RYwdH':function(_0x4ea43e,_0x130310,_0x26ee40){return _0x4ea43e(_0x130310,_0x26ee40);},'VmOzh':function(_0x367c8c){return _0x367c8c();},'xRSJH':_0x3f6e25(0x10f)},_0x53ed73=await _0x9c12b2['RYwdH'](fetch,_0x9c12b2[_0x3f6e25(0xb4)](apiBaseUrl)+_0x3f6e25(0xc6)+_0xd76dd0,{'headers':{'Authorization':'Bearer\x20'+_0x3288dd}});if(!_0x53ed73['ok'])throw new Error(_0x3f6e25(0x13a)+_0x53ed73[_0x3f6e25(0xf1)]+':\x20'+await _0x53ed73['text']());const _0x59c074=await _0x53ed73[_0x3f6e25(0x103)](),_0xa350a0=MenuSchema[_0x3f6e25(0xa9)](_0x59c074?.['data']??{});return _0xa350a0[_0x3f6e25(0xce)]['length']===0x0&&console['warn'](_0x9c12b2['xRSJH']),writeMenuModule(_0xa350a0),_0xa350a0;}async function jsonLd({franchiseId:_0x4837e0,token:_0x567db1},_0x3c7ae5){const _0x27926e=a0_0x2d967d,_0x380e1c={'RVCYP':function(_0x55a8f4,_0x65a373,_0x3d970c,_0x32be1f){return _0x55a8f4(_0x65a373,_0x3d970c,_0x32be1f);},'FsGYR':_0x27926e(0x113)},_0x479603=await _0x380e1c[_0x27926e(0x11a)](fetchData,_0x27926e(0x125)+_0x4837e0,_0x567db1,FranchiseSchema),_0x473efa=_0x479603[_0x27926e(0x137)],_0x25d19b=buildRestaurantJsonLd(_0x3c7ae5,{'name':_0x479603[_0x27926e(0xbe)],'url':_0x473efa,'image':_0x473efa?_0x473efa+'/images/logo.png':void 0x0}),_0x24ecbf=import_path[_0x27926e(0xda)][_0x27926e(0xd7)](process[_0x27926e(0x13e)](),_0x27926e(0xd4));(0x0,import_fs[_0x27926e(0x149)])(_0x24ecbf,{'recursive':!![]}),(0x0,import_fs['writeFileSync'])(import_path[_0x27926e(0xda)][_0x27926e(0xd7)](_0x24ecbf,_0x380e1c[_0x27926e(0xf4)]),_0x27926e(0xc5)+JSON[_0x27926e(0xd5)](_0x25d19b,null,0x2)+';\x0a');}async function hours({franchiseId:_0x454228,token:_0x8f9488}){const _0x1731d9=a0_0x2d967d,_0x3771ce={'wVjKC':function(_0x804087,_0x23e157,_0x55914f,_0x35cce8){return _0x804087(_0x23e157,_0x55914f,_0x35cce8);}};await _0x3771ce[_0x1731d9(0x13d)](fetchData,_0x1731d9(0x134)+_0x454228,_0x8f9488,HoursSchema);}async function styles({franchiseId:_0x49940e,token:_0x31ece4}){const _0x382634=a0_0x2d967d,_0x42df4c={'bnouv':function(_0x5d145e,_0x123697,_0x408e93,_0x3b8ab7){return _0x5d145e(_0x123697,_0x408e93,_0x3b8ab7);},'gCuLS':_0x382634(0xa0),'MSihm':_0x382634(0xaf),'eVkDm':function(_0x26a899,_0x36d838){return _0x26a899(_0x36d838);}},_0x1e92aa=await _0x42df4c[_0x382634(0x14f)](fetchData,_0x382634(0x14b)+_0x49940e,_0x31ece4,BrandingSchema),_0x368531={..._0x1e92aa,'backgroundElevated':deriveElevatedBackground(_0x1e92aa[_0x382634(0xfe)]),'backgroundRecessed':deriveRecessedBackground(_0x1e92aa[_0x382634(0xfe)]),'foreground':deriveFontColor(_0x1e92aa[_0x382634(0xfe)]),'primaryForeground':deriveFontColor(_0x1e92aa[_0x382634(0xcf)]),'accentForeground':deriveFontColor(_0x1e92aa['accent'])},_0x389057=import_path[_0x382634(0xda)][_0x382634(0xd7)](process[_0x382634(0x13e)](),'public/styles/');(0x0,import_fs[_0x382634(0x149)])(_0x389057,{'recursive':!![]}),(0x0,import_fs['writeFileSync'])(import_path[_0x382634(0xda)][_0x382634(0xd7)](_0x389057,_0x382634(0xd6)),JSON[_0x382634(0xd5)](_0x368531,null,0x2)),(0x0,import_fs['writeFileSync'])(import_path['default'][_0x382634(0xd7)](process[_0x382634(0x13e)](),_0x42df4c['gCuLS'],_0x42df4c[_0x382634(0x139)]),_0x42df4c['eVkDm'](buildGlobalsCss,_0x1e92aa));}function buildGlobalsCss(_0x2ed5d8){const _0x59147c=a0_0x2d967d,_0x199c51={'SUpMm':function(_0x37545b,_0xf6579d){return _0x37545b(_0xf6579d);},'rPLjY':function(_0x241394,_0x3aff8e){return _0x241394(_0x3aff8e);}},_0x428243=_0x2ed5d8[_0x59147c(0x141)]['replace'](/ /g,'+'),_0x233585=deriveFontColor(_0x2ed5d8[_0x59147c(0xfe)]),_0x39ee74=deriveFontColor(_0x2ed5d8[_0x59147c(0xcf)]),_0x5b8168=deriveFontColor(_0x2ed5d8[_0x59147c(0x104)]),_0x271f8c=_0x199c51[_0x59147c(0xf2)](deriveElevatedBackground,_0x2ed5d8[_0x59147c(0xfe)]),_0x5bb165=_0x199c51['rPLjY'](deriveRecessedBackground,_0x2ed5d8[_0x59147c(0xfe)]);return _0x59147c(0xdc)+_0x428243+_0x59147c(0x127)+_0x2ed5d8[_0x59147c(0xfe)]+_0x59147c(0x106)+_0x271f8c+_0x59147c(0xb2)+_0x5bb165+_0x59147c(0xc8)+_0x233585+';\x0a\x20\x20--primary:\x20'+_0x2ed5d8[_0x59147c(0xcf)]+';\x0a\x20\x20--primary-foreground:\x20'+_0x39ee74+_0x59147c(0xa7)+_0x2ed5d8[_0x59147c(0x104)]+_0x59147c(0xbf)+_0x5b8168+_0x59147c(0x152)+_0x2ed5d8['fontFamily']+_0x59147c(0xe5);}async function runPrebuild(){const _0xa6fde2=a0_0x2d967d,_0x6feb70={'RXoRw':function(_0xd2957){return _0xd2957();},'LsgID':function(_0x2af8e0,_0x217d58){return _0x2af8e0(_0x217d58);}};console[_0xa6fde2(0x102)](_0xa6fde2(0xaa)),(0x0,import_env[_0xa6fde2(0xfa)])(process[_0xa6fde2(0x13e)]()),_0x6feb70[_0xa6fde2(0x13f)](writeWranglerToml);const _0x384da9=await _0x6feb70[_0xa6fde2(0x13f)](fetchSiteToken),_0x5e5ccb=_0x384da9[_0xa6fde2(0xd0)]('.')[0x1];if(!_0x5e5ccb)throw new Error('site\x20token\x20is\x20not\x20a\x20well-formed\x20JWT\x20(no\x20payload\x20segment)');const _0x19e860=JSON[_0xa6fde2(0xa9)](Buffer['from'](_0x5e5ccb,_0xa6fde2(0xeb))[_0xa6fde2(0xdf)]()),_0x2cb9ca=_0x19e860[_0xa6fde2(0x111)][0x0],[_0x226e26]=await Promise['all']([menu({'franchiseId':_0x2cb9ca,'token':_0x384da9}),logo({'franchiseId':_0x2cb9ca,'token':_0x384da9})[_0xa6fde2(0xe1)](_0x46a681=>console['error'](_0xa6fde2(0x154),_0x46a681)),_0x6feb70[_0xa6fde2(0xa6)](hours,{'franchiseId':_0x2cb9ca,'token':_0x384da9})[_0xa6fde2(0xe1)](_0x269324=>console[_0xa6fde2(0xee)](_0xa6fde2(0x155),_0x269324)),_0x6feb70[_0xa6fde2(0xa6)](styles,{'franchiseId':_0x2cb9ca,'token':_0x384da9})[_0xa6fde2(0xe1)](_0xa9f691=>console[_0xa6fde2(0xee)](_0xa6fde2(0xcb),_0xa9f691))]);await jsonLd({'franchiseId':_0x2cb9ca,'token':_0x384da9},_0x226e26)[_0xa6fde2(0xe1)](_0x249b77=>console[_0xa6fde2(0xee)](_0xa6fde2(0xde),_0x249b77)),console[_0xa6fde2(0x102)](_0xa6fde2(0x10c));}0x0&&(module[a0_0x2d967d(0x136)]={'SiteTokenError':SiteTokenError,'fetchSiteToken':fetchSiteToken,'runPrebuild':runPrebuild});
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/server.ts
31
+ var server_exports = {};
32
+ __export(server_exports, {
33
+ SiteTokenError: () => SiteTokenError,
34
+ fetchSiteToken: () => fetchSiteToken,
35
+ runPrebuild: () => runPrebuild
36
+ });
37
+ module.exports = __toCommonJS(server_exports);
38
+ var import_fs = require("fs");
39
+ var import_path = __toESM(require("path"));
40
+ var import_env = require("@next/env");
41
+ var import_zod = require("zod");
42
+
43
+ // src/seo.ts
44
+ function priceString(cents) {
45
+ return (cents / 100).toFixed(2);
46
+ }
47
+ function variantOffer(variant) {
48
+ return {
49
+ "@type": "Offer",
50
+ price: priceString(variant.display_price ?? variant.price),
51
+ priceCurrency: "USD"
52
+ };
53
+ }
54
+ function menuItemNode(item) {
55
+ const node = {
56
+ "@type": "MenuItem",
57
+ name: item.name
58
+ };
59
+ if (item.description) node.description = item.description;
60
+ const offers = item.variants.map(variantOffer);
61
+ if (offers.length === 1) node.offers = offers[0];
62
+ else if (offers.length > 1) node.offers = offers;
63
+ return node;
64
+ }
65
+ function buildRestaurantJsonLd(menu2, info) {
66
+ const hasMenuSection = menu2.categories.map((category) => {
67
+ const section = {
68
+ "@type": "MenuSection",
69
+ name: category.name
70
+ };
71
+ const items = menu2.items.filter((item) => item.category_id === category.category_id).map(menuItemNode);
72
+ if (items.length) section.hasMenuItem = items;
73
+ return section;
74
+ });
75
+ const restaurant = {
76
+ "@context": "https://schema.org",
77
+ "@type": "Restaurant",
78
+ name: info.name
79
+ };
80
+ if (info.url) restaurant.url = info.url;
81
+ if (info.image) restaurant.image = info.image;
82
+ if (info.description) restaurant.description = info.description;
83
+ if (info.servesCuisine?.length) restaurant.servesCuisine = info.servesCuisine;
84
+ restaurant.hasMenu = {
85
+ "@type": "Menu",
86
+ name: "Menu",
87
+ hasMenuSection
88
+ };
89
+ return restaurant;
90
+ }
91
+
92
+ // src/server.ts
93
+ function apiBaseUrl() {
94
+ return process.env.NEXT_PUBLIC_API_BASE_URL ?? "http://localhost:3000";
95
+ }
96
+ var SiteTokenError = class extends Error {
97
+ reason;
98
+ constructor(reason, message, options) {
99
+ super(message, options);
100
+ this.name = "SiteTokenError";
101
+ this.reason = reason;
102
+ }
103
+ };
104
+ async function fetchSiteToken() {
105
+ const secret = process.env.ZORGO_SITE_SECRET;
106
+ if (!secret) {
107
+ throw new SiteTokenError(
108
+ "missing-secret",
109
+ "ZORGO_SITE_SECRET is not set. Add it to this site's .env."
110
+ );
111
+ }
112
+ const url = `${apiBaseUrl()}/auth/site-token`;
113
+ let res;
114
+ try {
115
+ res = await fetch(url, {
116
+ method: "POST",
117
+ headers: { "x-zorgo-site-secret": secret }
118
+ });
119
+ } catch (cause) {
120
+ throw new SiteTokenError(
121
+ "unreachable",
122
+ `Could not reach the site-token endpoint at ${url}. Check NEXT_PUBLIC_API_BASE_URL and that the API is running.`,
123
+ { cause }
124
+ );
125
+ }
126
+ if (!res.ok) {
127
+ const body = (await res.text().catch(() => "")).slice(0, 200);
128
+ throw new SiteTokenError(
129
+ "rejected",
130
+ `The site-token endpoint rejected the request (${res.status} ${res.statusText}) at ${url}. This usually means ZORGO_SITE_SECRET is wrong for this environment.${body ? ` Response: ${body}` : ""}`
131
+ );
132
+ }
133
+ const { token } = await res.json();
134
+ if (!token) {
135
+ throw new SiteTokenError(
136
+ "rejected",
137
+ `The site-token endpoint returned 200 but no token at ${url}.`
138
+ );
139
+ }
140
+ return token;
141
+ }
142
+ var BrandingSchema = import_zod.z.object({
143
+ backgroundBase: import_zod.z.string().default("#F5F5F5"),
144
+ primary: import_zod.z.string().default("#3264FF"),
145
+ accent: import_zod.z.string().default("#9696FF"),
146
+ fontFamily: import_zod.z.string().default("Inter")
147
+ // Google Font family name
148
+ }).prefault({});
149
+ var FranchiseSchema = import_zod.z.object({
150
+ name: import_zod.z.string().nullish().transform((v) => v ?? process.env.ZORGO_PROJECT_NAME ?? "Restaurant"),
151
+ site_url: import_zod.z.string().nullish().transform((v) => v ?? void 0)
152
+ }).prefault({});
153
+ var HoursSchema = import_zod.z.array(import_zod.z.unknown()).prefault([]);
154
+ var MenuSchema = import_zod.z.object({
155
+ items: import_zod.z.array(import_zod.z.unknown()).default([]),
156
+ categories: import_zod.z.array(import_zod.z.unknown()).default([]),
157
+ components: import_zod.z.array(import_zod.z.unknown()).default([]),
158
+ rules: import_zod.z.array(import_zod.z.unknown()).default([])
159
+ });
160
+ async function fetchData(endpoint, token, schema) {
161
+ try {
162
+ const res = await fetch(`${apiBaseUrl()}${endpoint}`, {
163
+ headers: { Authorization: `Bearer ${token}` }
164
+ });
165
+ if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);
166
+ const body = await res.json();
167
+ return schema.parse(body?.data ?? body);
168
+ } catch (err) {
169
+ console.error(`prebuild: ${endpoint} failed, using defaults:`, err);
170
+ return schema.parse(void 0);
171
+ }
172
+ }
173
+ var FONT_ON_LIGHT = "#0a0a0a";
174
+ var FONT_ON_DARK = "#f5f5f5";
175
+ var BACKGROUND_SURFACE_DELTA = 15;
176
+ var BACKGROUND_TEMPERATURE_BIAS = 8;
177
+ function parseHexRgb(background) {
178
+ const hex = background.trim().replace(/^#/, "");
179
+ const full = hex.length === 3 ? hex.split("").map((c) => c + c).join("") : hex;
180
+ if (full.length !== 6 || Number.isNaN(Number.parseInt(full, 16))) {
181
+ return null;
182
+ }
183
+ return {
184
+ r: Number.parseInt(full.slice(0, 2), 16),
185
+ g: Number.parseInt(full.slice(2, 4), 16),
186
+ b: Number.parseInt(full.slice(4, 6), 16)
187
+ };
188
+ }
189
+ function toHex({ r, g, b }) {
190
+ return `#${[r, g, b].map((c) => c.toString(16).padStart(2, "0")).join("")}`;
191
+ }
192
+ function relativeLuminance({ r, g, b }) {
193
+ return (0.299 * r + 0.587 * g + 0.114 * b) / 255;
194
+ }
195
+ function temperatureBiasFor({ r, g, b }) {
196
+ return Math.round(BACKGROUND_TEMPERATURE_BIAS * relativeLuminance({ r, g, b }));
197
+ }
198
+ function deriveFontColor(background) {
199
+ const rgb = parseHexRgb(background);
200
+ if (!rgb) return FONT_ON_LIGHT;
201
+ return relativeLuminance(rgb) > 0.5 ? FONT_ON_LIGHT : FONT_ON_DARK;
202
+ }
203
+ function deriveElevatedBackground(background) {
204
+ const rgb = parseHexRgb(background);
205
+ if (!rgb) return background;
206
+ const bias = temperatureBiasFor(rgb);
207
+ const warm = Math.round(bias / 4);
208
+ return toHex({
209
+ r: Math.min(255, rgb.r + BACKGROUND_SURFACE_DELTA + warm),
210
+ g: Math.min(255, rgb.g + BACKGROUND_SURFACE_DELTA),
211
+ b: Math.min(255, rgb.b + BACKGROUND_SURFACE_DELTA - bias)
212
+ });
213
+ }
214
+ function deriveRecessedBackground(background) {
215
+ const rgb = parseHexRgb(background);
216
+ if (!rgb) return background;
217
+ const bias = temperatureBiasFor(rgb);
218
+ const cool = Math.round(bias / 4);
219
+ return toHex({
220
+ r: Math.max(0, rgb.r - BACKGROUND_SURFACE_DELTA - cool),
221
+ g: Math.max(0, rgb.g - BACKGROUND_SURFACE_DELTA),
222
+ b: Math.max(0, rgb.b - BACKGROUND_SURFACE_DELTA + bias)
223
+ });
224
+ }
225
+ function writeWranglerToml() {
226
+ const name = process.env.ZORGO_PROJECT_NAME ?? "zorgo-site";
227
+ const siteUrl = process.env.NEXT_PUBLIC_SITE_URL ?? "";
228
+ const apiUrl = process.env.NEXT_PUBLIC_API_BASE_URL ?? "";
229
+ const baseUrl = process.env.NEXT_PUBLIC_BASE_URL ?? siteUrl;
230
+ const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL ?? "";
231
+ let host;
232
+ try {
233
+ host = new URL(siteUrl).hostname;
234
+ } catch {
235
+ host = void 0;
236
+ }
237
+ const routes = host ? `
238
+ [[routes]]
239
+ pattern = "${host}"
240
+ custom_domain = true
241
+
242
+ [[routes]]
243
+ pattern = "www.${host}"
244
+ custom_domain = true
245
+ ` : "";
246
+ const vars = {
247
+ NEXT_PUBLIC_SUPABASE_URL: supabaseUrl,
248
+ NEXT_PUBLIC_API_BASE_URL: apiUrl,
249
+ NEXT_PUBLIC_SITE_URL: siteUrl,
250
+ NEXT_PUBLIC_BASE_URL: baseUrl
251
+ };
252
+ const varsBlock = Object.entries(vars).filter(([, value]) => value !== "").map(([key, value]) => `${key} = "${value}"`).join("\n");
253
+ const toml = `# AUTO-GENERATED by scripts/prebuild.ts from .env \u2014 do not edit.
254
+ name = "${name}"
255
+ main = ".open-next/worker.js"
256
+ compatibility_date = "2024-09-23"
257
+ compatibility_flags = ["nodejs_compat"]
258
+
259
+ # Bundles the Cloudflare worker as part of \`wrangler deploy\` (and \`wrangler dev\`),
260
+ # so the deploy command stays a plain \`wrangler deploy\`. prebuild (which writes
261
+ # this file + lib/generated) must still run first \u2014 on Cloudflare Workers Builds
262
+ # that is the project's Build command; locally it is the npm scripts below.
263
+ [build]
264
+ command = "npx opennextjs-cloudflare build"
265
+
266
+ [assets]
267
+ directory = ".open-next/assets"
268
+ binding = "ASSETS"
269
+
270
+ [vars]
271
+ ${varsBlock}
272
+
273
+ [observability]
274
+ enabled = true
275
+
276
+ [observability.logs]
277
+ enabled = true
278
+ invocation_logs = true
279
+ ${routes}`;
280
+ (0, import_fs.writeFileSync)(import_path.default.join(process.cwd(), "wrangler.toml"), toml);
281
+ }
282
+ async function logo({ franchiseId, token }) {
283
+ const logoResponse = await fetch(
284
+ `${apiBaseUrl()}/franchise-info/logo/${franchiseId}`,
285
+ { headers: { Authorization: `Bearer ${token}` } }
286
+ );
287
+ if (!logoResponse.ok) return;
288
+ const arrayBuffer = await logoResponse.arrayBuffer();
289
+ const buffer = Buffer.from(arrayBuffer);
290
+ const outDir = import_path.default.join(process.cwd(), `public/images/`);
291
+ (0, import_fs.mkdirSync)(outDir, { recursive: true });
292
+ (0, import_fs.writeFileSync)(import_path.default.join(outDir, "logo.png"), buffer);
293
+ (0, import_fs.writeFileSync)(import_path.default.join(outDir, "logo.jpg"), buffer);
294
+ }
295
+ function writeMenuModule(menu2) {
296
+ const outDir = import_path.default.join(process.cwd(), `lib/generated/`);
297
+ (0, import_fs.mkdirSync)(outDir, { recursive: true });
298
+ (0, import_fs.writeFileSync)(
299
+ import_path.default.join(outDir, "menu.ts"),
300
+ `// AUTO-GENERATED by scripts/prebuild.ts \u2014 do not edit.
301
+ import type { Menu } from "@zorgo/next";
302
+
303
+ export const menu: Menu = ${JSON.stringify(menu2, null, 2)};
304
+ `
305
+ );
306
+ }
307
+ async function menu({ franchiseId, token }) {
308
+ const menuResponse = await fetch(
309
+ `${apiBaseUrl()}/franchise-info/menu/${franchiseId}`,
310
+ { headers: { Authorization: `Bearer ${token}` } }
311
+ );
312
+ if (!menuResponse.ok) {
313
+ throw new Error(
314
+ `menu fetch failed ${menuResponse.status}: ${await menuResponse.text()}`
315
+ );
316
+ }
317
+ const body = await menuResponse.json();
318
+ const parsed = MenuSchema.parse(body?.data ?? {});
319
+ if (parsed.items.length === 0) {
320
+ console.warn(
321
+ "prebuild: franchise has no menu items yet \u2014 generating an empty menu. Add items in the dashboard and rebuild to populate the storefront."
322
+ );
323
+ }
324
+ writeMenuModule(parsed);
325
+ return parsed;
326
+ }
327
+ async function jsonLd({ franchiseId, token }, menuData) {
328
+ const franchise = await fetchData(
329
+ `/franchise-info/franchise/${franchiseId}`,
330
+ token,
331
+ FranchiseSchema
332
+ );
333
+ const url = franchise.site_url;
334
+ const data = buildRestaurantJsonLd(menuData, {
335
+ name: franchise.name,
336
+ url,
337
+ image: url ? `${url}/images/logo.png` : void 0
338
+ });
339
+ const outDir = import_path.default.join(process.cwd(), `lib/generated/`);
340
+ (0, import_fs.mkdirSync)(outDir, { recursive: true });
341
+ (0, import_fs.writeFileSync)(
342
+ import_path.default.join(outDir, "jsonld.ts"),
343
+ `// AUTO-GENERATED by scripts/prebuild.ts \u2014 do not edit.
344
+ export const restaurantJsonLd = ${JSON.stringify(data, null, 2)};
345
+ `
346
+ );
347
+ }
348
+ async function hours({ franchiseId, token }) {
349
+ await fetchData(`/franchise-info/hours/${franchiseId}`, token, HoursSchema);
350
+ }
351
+ async function styles({ franchiseId, token }) {
352
+ const brand = await fetchData(
353
+ `/franchise-info/styles/${franchiseId}`,
354
+ token,
355
+ BrandingSchema
356
+ );
357
+ const branding = {
358
+ ...brand,
359
+ backgroundElevated: deriveElevatedBackground(brand.backgroundBase),
360
+ backgroundRecessed: deriveRecessedBackground(brand.backgroundBase),
361
+ foreground: deriveFontColor(brand.backgroundBase),
362
+ primaryForeground: deriveFontColor(brand.primary),
363
+ accentForeground: deriveFontColor(brand.accent)
364
+ };
365
+ const stylesDir = import_path.default.join(process.cwd(), `public/styles/`);
366
+ (0, import_fs.mkdirSync)(stylesDir, { recursive: true });
367
+ (0, import_fs.writeFileSync)(
368
+ import_path.default.join(stylesDir, "styles.json"),
369
+ JSON.stringify(branding, null, 2)
370
+ );
371
+ (0, import_fs.writeFileSync)(
372
+ import_path.default.join(process.cwd(), "app", "globals.css"),
373
+ buildGlobalsCss(brand)
374
+ );
375
+ }
376
+ function buildGlobalsCss(branding) {
377
+ const fontFamilyParam = branding.fontFamily.replace(/ /g, "+");
378
+ const foreground = deriveFontColor(branding.backgroundBase);
379
+ const primaryForeground = deriveFontColor(branding.primary);
380
+ const accentForeground = deriveFontColor(branding.accent);
381
+ const backgroundElevated = deriveElevatedBackground(branding.backgroundBase);
382
+ const backgroundRecessed = deriveRecessedBackground(branding.backgroundBase);
383
+ return `
384
+ @import url("https://fonts.googleapis.com/css2?family=${fontFamilyParam}:wght@400;700&display=swap");
385
+ @import "tailwindcss";
386
+ /* Tailwind v4 skips node_modules; @zorgo/next ships un-obfuscated components so
387
+ their class names are scannable here. */
388
+ @source "../node_modules/@zorgo/next/dist/components.mjs";
389
+
390
+ :root {
391
+ --background: ${branding.backgroundBase};
392
+ --background-elevated: ${backgroundElevated};
393
+ --background-recessed: ${backgroundRecessed};
394
+ --foreground: ${foreground};
395
+ --primary: ${branding.primary};
396
+ --primary-foreground: ${primaryForeground};
397
+ --accent: ${branding.accent};
398
+ --accent-foreground: ${accentForeground};
399
+ --font-sans: "${branding.fontFamily}", sans-serif;
400
+ }
401
+
402
+ @theme inline {
403
+ --color-background: var(--background);
404
+ --color-background-elevated: var(--background-elevated);
405
+ --color-background-recessed: var(--background-recessed);
406
+ --color-foreground: var(--foreground);
407
+ --color-primary: var(--primary);
408
+ --color-primary-foreground: var(--primary-foreground);
409
+ --color-accent: var(--accent);
410
+ --color-accent-foreground: var(--accent-foreground);
411
+ --font-sans: var(--font-sans);
412
+ }
413
+
414
+ @layer base {
415
+ button,
416
+ [type="button"],
417
+ [type="submit"],
418
+ [type="reset"] {
419
+ cursor: pointer;
420
+ }
421
+
422
+ button:disabled,
423
+ [type="button"]:disabled,
424
+ [type="submit"]:disabled,
425
+ [type="reset"]:disabled {
426
+ cursor: not-allowed;
427
+ }
428
+ }
429
+ `;
430
+ }
431
+ async function runPrebuild() {
432
+ console.log("running prebuild script...");
433
+ (0, import_env.loadEnvConfig)(process.cwd());
434
+ writeWranglerToml();
435
+ const token = await fetchSiteToken();
436
+ const encodedPayload = token.split(".")[1];
437
+ if (!encodedPayload) {
438
+ throw new Error("site token is not a well-formed JWT (no payload segment)");
439
+ }
440
+ const payload = JSON.parse(Buffer.from(encodedPayload, "base64url").toString());
441
+ const franchiseId = payload.franchise_ids[0];
442
+ const [menuData] = await Promise.all([
443
+ menu({ franchiseId, token }),
444
+ logo({ franchiseId, token }).catch((err) => console.error("logo failed:", err)),
445
+ hours({ franchiseId, token }).catch((err) => console.error("hours failed:", err)),
446
+ styles({ franchiseId, token }).catch((err) => console.error("styles failed:", err))
447
+ ]);
448
+ await jsonLd({ franchiseId, token }, menuData).catch(
449
+ (err) => console.error("jsonLd failed:", err)
450
+ );
451
+ console.log("prebuild script completed");
452
+ }
453
+ // Annotate the CommonJS export names for ESM import in node:
454
+ 0 && (module.exports = {
455
+ SiteTokenError,
456
+ fetchSiteToken,
457
+ runPrebuild
458
+ });
459
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server.ts","../src/seo.ts"],"sourcesContent":["// Server-only entry (@zorgo/next/server). Node/Server-Component safe: no React,\n// no \"use client\", no client hooks — so scripts/prebuild.ts and the\n// app/api/zorgo-token route can import the token-exchange and build pipeline\n// from the package instead of scaffolding their own copies. Shipping these here\n// means a package update fixes every site, rather than each site freezing a\n// forked copy at scaffold time.\nimport { writeFileSync, mkdirSync } from \"fs\";\nimport path from \"path\";\nimport { loadEnvConfig } from \"@next/env\";\nimport { z } from \"zod\";\nimport type { Menu } from \"@zorgo/universal/utils/menuUtils\";\nimport { buildRestaurantJsonLd } from \"./seo\";\n\n// localhost fallback keeps a stray dev run from silently hitting production.\n// Read at call time, never at module load: prebuild imports this file before it\n// calls loadEnvConfig(), and ES imports are evaluated first — a module-level\n// read would freeze to the fallback before .env is loaded.\nfunction apiBaseUrl(): string {\n\treturn process.env.NEXT_PUBLIC_API_BASE_URL ?? \"http://localhost:3000\";\n}\n\n/** Why a site token could not be obtained — lets callers report precisely. */\nexport type SiteTokenFailure = \"missing-secret\" | \"rejected\" | \"unreachable\";\n\nexport class SiteTokenError extends Error {\n\treadonly reason: SiteTokenFailure;\n\tconstructor(reason: SiteTokenFailure, message: string, options?: { cause?: unknown }) {\n\t\tsuper(message, options);\n\t\tthis.name = \"SiteTokenError\";\n\t\tthis.reason = reason;\n\t}\n}\n\n/**\n * Exchange ZORGO_SITE_SECRET for a short-lived site token.\n *\n * Throws a {@link SiteTokenError} that distinguishes the three failure modes\n * (secret not set / endpoint rejected the secret / endpoint unreachable) rather\n * than collapsing them into one misleading \"missing secret\" message.\n */\nexport async function fetchSiteToken(): Promise<string> {\n\tconst secret = process.env.ZORGO_SITE_SECRET;\n\tif (!secret) {\n\t\tthrow new SiteTokenError(\n\t\t\t\"missing-secret\",\n\t\t\t\"ZORGO_SITE_SECRET is not set. Add it to this site's .env.\",\n\t\t);\n\t}\n\n\tconst url = `${apiBaseUrl()}/auth/site-token`;\n\tlet res: Response;\n\ttry {\n\t\tres = await fetch(url, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"x-zorgo-site-secret\": secret },\n\t\t});\n\t} catch (cause) {\n\t\tthrow new SiteTokenError(\n\t\t\t\"unreachable\",\n\t\t\t`Could not reach the site-token endpoint at ${url}. Check NEXT_PUBLIC_API_BASE_URL and that the API is running.`,\n\t\t\t{ cause },\n\t\t);\n\t}\n\n\tif (!res.ok) {\n\t\tconst body = (await res.text().catch(() => \"\")).slice(0, 200);\n\t\tthrow new SiteTokenError(\n\t\t\t\"rejected\",\n\t\t\t`The site-token endpoint rejected the request (${res.status} ${res.statusText}) at ${url}. ` +\n\t\t\t\t`This usually means ZORGO_SITE_SECRET is wrong for this environment.${body ? ` Response: ${body}` : \"\"}`,\n\t\t);\n\t}\n\n\tconst { token } = (await res.json()) as { token?: string };\n\tif (!token) {\n\t\tthrow new SiteTokenError(\n\t\t\t\"rejected\",\n\t\t\t`The site-token endpoint returned 200 but no token at ${url}.`,\n\t\t);\n\t}\n\treturn token;\n}\n\n// ---------------------------------------------------------------------------\n// Prebuild pipeline\n// ---------------------------------------------------------------------------\n// Everything below runs at build time in a scaffolded site's cwd, fetching\n// franchise data and writing the generated modules/assets the site imports.\n\ninterface FetchArgs {\n\tfranchiseId: number;\n\ttoken: string;\n}\n\nconst BrandingSchema = z\n\t.object({\n\t\tbackgroundBase: z.string().default(\"#F5F5F5\"),\n\t\tprimary: z.string().default(\"#3264FF\"),\n\t\taccent: z.string().default(\"#9696FF\"),\n\t\tfontFamily: z.string().default(\"Inter\"), // Google Font family name\n\t})\n\t.prefault({});\ntype Branding = z.infer<typeof BrandingSchema>;\n\n// A freshly-created franchise commonly has null columns (no site_url set yet,\n// name not filled in). Coerce null|undefined to sensible values instead of\n// letting z.string() throw on null and blow up JSON-LD generation.\nconst FranchiseSchema = z\n\t.object({\n\t\tname: z\n\t\t\t.string()\n\t\t\t.nullish()\n\t\t\t.transform((v) => v ?? process.env.ZORGO_PROJECT_NAME ?? \"Restaurant\"),\n\t\tsite_url: z\n\t\t\t.string()\n\t\t\t.nullish()\n\t\t\t.transform((v) => v ?? undefined),\n\t})\n\t.prefault({});\n\nconst HoursSchema = z.array(z.unknown()).prefault([]);\n\nconst MenuSchema = z.object({\n\titems: z.array(z.unknown()).default([]),\n\tcategories: z.array(z.unknown()).default([]),\n\tcomponents: z.array(z.unknown()).default([]),\n\trules: z.array(z.unknown()).default([]),\n});\n\nasync function fetchData<T>(\n\tendpoint: string,\n\ttoken: string,\n\tschema: z.ZodType<T>,\n): Promise<T> {\n\ttry {\n\t\tconst res = await fetch(`${apiBaseUrl()}${endpoint}`, {\n\t\t\theaders: { Authorization: `Bearer ${token}` },\n\t\t});\n\t\tif (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);\n\t\tconst body = await res.json();\n\t\treturn schema.parse(body?.data ?? body);\n\t} catch (err) {\n\t\tconsole.error(`prebuild: ${endpoint} failed, using defaults:`, err);\n\t\treturn schema.parse(undefined);\n\t}\n}\n\n// style stuff\nconst FONT_ON_LIGHT = \"#0a0a0a\";\nconst FONT_ON_DARK = \"#f5f5f5\";\n/** Neutral channel delta toward white (elevated) / black (recessed). */\nconst BACKGROUND_SURFACE_DELTA = 15;\n/**\n * Max warm/cool bias via R↔B trade (full strength on light bases).\n * Scaled down by luminance so darker colors shift less.\n */\nconst BACKGROUND_TEMPERATURE_BIAS = 8;\n\nfunction parseHexRgb(background: string): { 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 relativeLuminance({ r, g, b }: { r: number; g: number; b: number }): number {\n\treturn (0.299 * r + 0.587 * g + 0.114 * b) / 255;\n}\n\n/** Temperature bias scaled by luminance; max on light bases, near-zero on dark. */\nfunction temperatureBiasFor({ r, g, b }: { r: number; g: number; b: number }): number {\n\treturn Math.round(BACKGROUND_TEMPERATURE_BIAS * relativeLuminance({ r, g, b }));\n}\n\n/** Off-black on light backgrounds, off-white on dark. */\nfunction deriveFontColor(background: string): string {\n\tconst rgb = parseHexRgb(background);\n\tif (!rgb) return FONT_ON_LIGHT;\n\treturn relativeLuminance(rgb) > 0.5 ? FONT_ON_LIGHT : FONT_ON_DARK;\n}\n\n/** Lighter, slightly warmer surface (cards, raised panels) from backgroundBase. */\nfunction deriveElevatedBackground(background: string): string {\n\tconst rgb = parseHexRgb(background);\n\tif (!rgb) return background;\n\tconst bias = temperatureBiasFor(rgb);\n\tconst warm = Math.round(bias / 4);\n\treturn toHex({\n\t\tr: Math.min(255, rgb.r + BACKGROUND_SURFACE_DELTA + warm),\n\t\tg: Math.min(255, rgb.g + BACKGROUND_SURFACE_DELTA),\n\t\tb: Math.min(255, rgb.b + BACKGROUND_SURFACE_DELTA - bias),\n\t});\n}\n\n/** Darker, slightly cooler surface (wells, inset areas) from backgroundBase. */\nfunction deriveRecessedBackground(background: string): string {\n\tconst rgb = parseHexRgb(background);\n\tif (!rgb) return background;\n\tconst bias = temperatureBiasFor(rgb);\n\tconst cool = Math.round(bias / 4);\n\treturn toHex({\n\t\tr: Math.max(0, rgb.r - BACKGROUND_SURFACE_DELTA - cool),\n\t\tg: Math.max(0, rgb.g - BACKGROUND_SURFACE_DELTA),\n\t\tb: Math.max(0, rgb.b - BACKGROUND_SURFACE_DELTA + bias),\n\t});\n}\n\nfunction writeWranglerToml() {\n\tconst name = process.env.ZORGO_PROJECT_NAME ?? \"zorgo-site\";\n\tconst siteUrl = process.env.NEXT_PUBLIC_SITE_URL ?? \"\";\n\tconst apiUrl = process.env.NEXT_PUBLIC_API_BASE_URL ?? \"\";\n\tconst baseUrl = process.env.NEXT_PUBLIC_BASE_URL ?? siteUrl;\n\tconst supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL ?? \"\";\n\n\t// custom_domain routes need a bare hostname; skip them if the site URL isn't\n\t// a parseable absolute URL (e.g. a local/placeholder value).\n\tlet host: string | undefined;\n\ttry {\n\t\thost = new URL(siteUrl).hostname;\n\t} catch {\n\t\thost = undefined;\n\t}\n\tconst routes = host\n\t\t? `\n[[routes]]\npattern = \"${host}\"\ncustom_domain = true\n\n[[routes]]\npattern = \"www.${host}\"\ncustom_domain = true\n`\n\t\t: \"\";\n\n\t// Omit empty values: opennextjs-cloudflare injects [vars] into the build env, so\n\t// an empty NEXT_PUBLIC_SITE_URL (a site piloted before its URL is set) would land\n\t// as \"\" — a defined-but-empty value that slips past the `?? localhost` fallbacks in\n\t// layout/robots/sitemap and makes new URL(\"\") throw, failing the build/deploy.\n\t// Leaving the var out keeps it `undefined` so those fallbacks fire.\n\tconst vars: Record<string, string> = {\n\t\tNEXT_PUBLIC_SUPABASE_URL: supabaseUrl,\n\t\tNEXT_PUBLIC_API_BASE_URL: apiUrl,\n\t\tNEXT_PUBLIC_SITE_URL: siteUrl,\n\t\tNEXT_PUBLIC_BASE_URL: baseUrl,\n\t};\n\tconst varsBlock = Object.entries(vars)\n\t\t.filter(([, value]) => value !== \"\")\n\t\t.map(([key, value]) => `${key} = \"${value}\"`)\n\t\t.join(\"\\n\");\n\n\tconst toml = `# AUTO-GENERATED by scripts/prebuild.ts from .env — do not edit.\nname = \"${name}\"\nmain = \".open-next/worker.js\"\ncompatibility_date = \"2024-09-23\"\ncompatibility_flags = [\"nodejs_compat\"]\n\n# Bundles the Cloudflare worker as part of \\`wrangler deploy\\` (and \\`wrangler dev\\`),\n# so the deploy command stays a plain \\`wrangler deploy\\`. prebuild (which writes\n# this file + lib/generated) must still run first — on Cloudflare Workers Builds\n# that is the project's Build command; locally it is the npm scripts below.\n[build]\ncommand = \"npx opennextjs-cloudflare build\"\n\n[assets]\ndirectory = \".open-next/assets\"\nbinding = \"ASSETS\"\n\n[vars]\n${varsBlock}\n\n[observability]\nenabled = true\n\n[observability.logs]\nenabled = true\ninvocation_logs = true\n${routes}`;\n\n\twriteFileSync(path.join(process.cwd(), \"wrangler.toml\"), toml);\n}\n\nasync function logo({ franchiseId, token }: FetchArgs) {\n\tconst logoResponse = await fetch(\n\t\t`${apiBaseUrl()}/franchise-info/logo/${franchiseId}`,\n\t\t{ headers: { Authorization: `Bearer ${token}` } },\n\t);\n\n\t// 404 (no logo) returns a JSON body — don't persist it as logo.png, or the\n\t// icon/OG image would render an error blob instead of falling back.\n\tif (!logoResponse.ok) return;\n\n\tconst arrayBuffer = await logoResponse.arrayBuffer();\n\tconst buffer = Buffer.from(arrayBuffer);\n\n\tconst outDir = path.join(process.cwd(), `public/images/`);\n\tmkdirSync(outDir, { recursive: true });\n\twriteFileSync(path.join(outDir, \"logo.png\"), buffer);\n\twriteFileSync(path.join(outDir, \"logo.jpg\"), buffer);\n}\n\nfunction writeMenuModule(menu: Menu) {\n\tconst outDir = path.join(process.cwd(), `lib/generated/`);\n\tmkdirSync(outDir, { recursive: true });\n\t// typed module so consumers get Menu-checked imports instead of an\n\t// untyped runtime fetch of menu.json.\n\twriteFileSync(\n\t\tpath.join(outDir, \"menu.ts\"),\n\t\t`// AUTO-GENERATED by scripts/prebuild.ts — do not edit.\\n` +\n\t\t\t`import type { Menu } from \"@zorgo/next\";\\n\\n` +\n\t\t\t`export const menu: Menu = ${JSON.stringify(menu, null, 2)};\\n`,\n\t);\n}\n\nasync function menu({ franchiseId, token }: FetchArgs): Promise<Menu> {\n\tconst menuResponse = await fetch(\n\t\t`${apiBaseUrl()}/franchise-info/menu/${franchiseId}`,\n\t\t{ headers: { Authorization: `Bearer ${token}` } },\n\t);\n\n\t// A non-ok response is a real failure (auth, server error) — fail loudly.\n\tif (!menuResponse.ok) {\n\t\tthrow new Error(\n\t\t\t`menu fetch failed ${menuResponse.status}: ${await menuResponse.text()}`,\n\t\t);\n\t}\n\n\tconst body = await menuResponse.json();\n\tconst parsed = MenuSchema.parse(body?.data ?? {}) as Menu;\n\n\t// An empty menu is expected for a freshly-initialized franchise that hasn't\n\t// added items yet. Ship a valid empty menu.ts and keep building — the\n\t// storefront renders its empty state instead of failing the whole build.\n\tif (parsed.items.length === 0) {\n\t\tconsole.warn(\n\t\t\t\"prebuild: franchise has no menu items yet — generating an empty menu. \" +\n\t\t\t\t\"Add items in the dashboard and rebuild to populate the storefront.\",\n\t\t);\n\t}\n\n\twriteMenuModule(parsed);\n\treturn parsed;\n}\n\n// franchise row (name, site_url) -> Restaurant JSON-LD, written as a typed\n// module the layout imports and drops into <head>.\nasync function jsonLd({ franchiseId, token }: FetchArgs, menuData: Menu) {\n\tconst franchise = await fetchData(\n\t\t`/franchise-info/franchise/${franchiseId}`,\n\t\ttoken,\n\t\tFranchiseSchema,\n\t);\n\tconst url = franchise.site_url;\n\n\tconst data = buildRestaurantJsonLd(menuData, {\n\t\tname: franchise.name,\n\t\turl,\n\t\timage: url ? `${url}/images/logo.png` : undefined,\n\t});\n\n\tconst outDir = path.join(process.cwd(), `lib/generated/`);\n\tmkdirSync(outDir, { recursive: true });\n\twriteFileSync(\n\t\tpath.join(outDir, \"jsonld.ts\"),\n\t\t`// AUTO-GENERATED by scripts/prebuild.ts — do not edit.\\n` +\n\t\t\t`export const restaurantJsonLd = ${JSON.stringify(data, null, 2)};\\n`,\n\t);\n}\n\nasync function hours({ franchiseId, token }: FetchArgs) {\n\tawait fetchData(`/franchise-info/hours/${franchiseId}`, token, HoursSchema);\n}\n\nasync function styles({ franchiseId, token }: FetchArgs) {\n\tconst brand = await fetchData(\n\t\t`/franchise-info/styles/${franchiseId}`,\n\t\ttoken,\n\t\tBrandingSchema,\n\t);\n\n\t// Same derived palette globals.css uses, persisted as JSON so the build-time\n\t// icon/OG/manifest routes stay on brand (they readFileSync this).\n\tconst branding = {\n\t\t...brand,\n\t\tbackgroundElevated: deriveElevatedBackground(brand.backgroundBase),\n\t\tbackgroundRecessed: deriveRecessedBackground(brand.backgroundBase),\n\t\tforeground: deriveFontColor(brand.backgroundBase),\n\t\tprimaryForeground: deriveFontColor(brand.primary),\n\t\taccentForeground: deriveFontColor(brand.accent),\n\t};\n\n\tconst stylesDir = path.join(process.cwd(), `public/styles/`);\n\tmkdirSync(stylesDir, { recursive: true });\n\twriteFileSync(\n\t\tpath.join(stylesDir, \"styles.json\"),\n\t\tJSON.stringify(branding, null, 2),\n\t);\n\n\twriteFileSync(\n\t\tpath.join(process.cwd(), \"app\", \"globals.css\"),\n\t\tbuildGlobalsCss(brand),\n\t);\n}\n\nfunction buildGlobalsCss(branding: Branding): string {\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 `\n@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\n/**\n * Full prebuild pipeline for a scaffolded site. Loads the site's .env, exchanges\n * the site secret for a token, then fetches franchise data and writes the\n * generated modules/assets (wrangler.toml, menu.ts, jsonld.ts, styles, logo).\n * Called from the site's thin scripts/prebuild.ts wrapper.\n */\nexport async function runPrebuild(): Promise<void> {\n\tconsole.log(\"running prebuild script...\");\n\n\t// Load .env here so the wrapper stays a one-liner and can't reintroduce the\n\t// import-order bug (env must be loaded before any env read below).\n\tloadEnvConfig(process.cwd());\n\n\t// regenerate deploy config from .env before any network work\n\twriteWranglerToml();\n\n\tconst token = await fetchSiteToken();\n\n\tconst encodedPayload = token.split(\".\")[1];\n\tif (!encodedPayload) {\n\t\tthrow new Error(\"site token is not a well-formed JWT (no payload segment)\");\n\t}\n\tconst payload = JSON.parse(Buffer.from(encodedPayload, \"base64url\").toString());\n\tconst franchiseId = payload.franchise_ids[0];\n\n\t// menu + franchise feed the JSON-LD; a menu *fetch* failure breaks the build\n\t// loudly, but an empty menu (new franchise) is tolerated inside menu().\n\tconst [menuData] = await Promise.all([\n\t\tmenu({ franchiseId, token }),\n\t\tlogo({ franchiseId, token }).catch((err) => console.error(\"logo failed:\", err)),\n\t\thours({ franchiseId, token }).catch((err) => console.error(\"hours failed:\", err)),\n\t\tstyles({ franchiseId, token }).catch((err) => console.error(\"styles failed:\", err)),\n\t]);\n\n\tawait jsonLd({ franchiseId, token }, menuData).catch((err) =>\n\t\tconsole.error(\"jsonLd failed:\", err),\n\t);\n\n\tconsole.log(\"prebuild script completed\");\n}\n","import type { Menu } from \"@zorgo/universal/utils/menuUtils\";\nimport type { ItemVariant, MenuItem } from \"@zorgo/universal/interfaces\";\n\n/** Franchise-level facts for the Restaurant node. Everything but `name` is\n * optional so the schema degrades gracefully when a field is missing. */\nexport interface RestaurantInfo {\n\tname: string;\n\turl?: string;\n\timage?: string;\n\tdescription?: string;\n\tservesCuisine?: string[];\n}\n\n// cents -> \"5.49\" (schema.org Offer.price is a string in major currency units)\nfunction priceString(cents: number): string {\n\treturn (cents / 100).toFixed(2);\n}\n\nfunction variantOffer(variant: ItemVariant) {\n\treturn {\n\t\t\"@type\": \"Offer\",\n\t\tprice: priceString(variant.display_price ?? variant.price),\n\t\tpriceCurrency: \"USD\",\n\t};\n}\n\nfunction menuItemNode(item: MenuItem) {\n\tconst node: Record<string, unknown> = {\n\t\t\"@type\": \"MenuItem\",\n\t\tname: item.name,\n\t};\n\tif (item.description) node.description = item.description;\n\t// one Offer for a single price, an array when the item has size/variant prices\n\tconst offers = item.variants.map(variantOffer);\n\tif (offers.length === 1) node.offers = offers[0];\n\telse if (offers.length > 1) node.offers = offers;\n\treturn node;\n}\n\n/**\n * Builds a standalone schema.org JSON-LD object for a single menu item, for\n * embedding in that item's `/menu/[slug]` page `<head>`. Reuses `menuItemNode`\n * (the same node shape used inside the Restaurant menu) and adds the\n * `@context` a top-level node needs. Pure — safe to run at build time.\n */\nexport function buildMenuItemJsonLd(item: MenuItem) {\n\treturn { \"@context\": \"https://schema.org\", ...menuItemNode(item) };\n}\n\n/**\n * Builds a schema.org Restaurant JSON-LD object from a prebuilt Menu and\n * franchise info. Categories become MenuSections; the items in each become\n * MenuItems. Pure — same inputs, same output — so it can run at prebuild time\n * and be embedded straight into the site's <head>.\n */\nexport function buildRestaurantJsonLd(menu: Menu, info: RestaurantInfo) {\n\tconst hasMenuSection = menu.categories.map((category) => {\n\t\tconst section: Record<string, unknown> = {\n\t\t\t\"@type\": \"MenuSection\",\n\t\t\tname: category.name,\n\t\t};\n\t\tconst items = menu.items\n\t\t\t.filter((item) => item.category_id === category.category_id)\n\t\t\t.map(menuItemNode);\n\t\tif (items.length) section.hasMenuItem = items;\n\t\treturn section;\n\t});\n\n\tconst restaurant: Record<string, unknown> = {\n\t\t\"@context\": \"https://schema.org\",\n\t\t\"@type\": \"Restaurant\",\n\t\tname: info.name,\n\t};\n\tif (info.url) restaurant.url = info.url;\n\tif (info.image) restaurant.image = info.image;\n\tif (info.description) restaurant.description = info.description;\n\tif (info.servesCuisine?.length) restaurant.servesCuisine = info.servesCuisine;\n\trestaurant.hasMenu = {\n\t\t\"@type\": \"Menu\",\n\t\tname: \"Menu\",\n\t\thasMenuSection,\n\t};\n\n\treturn restaurant;\n}\n"],"mappings":"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","names":["menu","path","menu"]}