[{"data":1,"prerenderedAt":4151},["ShallowReactive",2],{"navigation_docs":3,"-guides-payments-payments-examples":119,"-guides-payments-payments-examples-surround":4148},[4,25],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"/getting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","/getting-started/introduction","1.getting-started/2.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Installation","/getting-started/installation","1.getting-started/3.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Project Structure","/getting-started/project-structure","1.getting-started/4.project-structure","i-lucide-folder-tree",{"title":26,"icon":6,"path":27,"stem":28,"children":29,"page":6},"Guides","/guides","2. guides",[30,34,49,74],{"title":31,"path":32,"stem":33,"icon":24},"Repositories","/guides/respositories","2. guides/3. respositories",{"title":35,"icon":6,"path":36,"stem":37,"children":38,"page":6},"Authentication","/guides/authentication","2. guides/4. authentication",[39,44],{"title":40,"path":41,"stem":42,"icon":43},"Authentication Setup","/guides/authentication/setup","2. guides/4. authentication/5. setup","i-lucide-lock-keyhole",{"title":45,"path":46,"stem":47,"icon":48},"JWT Configuration","/guides/authentication/jwt-configuration","2. guides/4. authentication/6. jwt-configuration","i-lucide-key",{"title":50,"icon":6,"path":51,"stem":52,"children":53,"page":6},"Charcoles Swagger","/guides/swagger","2. guides/5. swagger",[54,59,64,69],{"title":55,"path":56,"stem":57,"icon":58},"Introduction to Charcole Swagger Documentation","/guides/swagger/introduction","2. guides/5. swagger/6. introduction","i-lucide-book-open",{"title":60,"path":61,"stem":62,"icon":63},"Adding Swagger to Existing Charcole Projects","/guides/swagger/swagger-migration","2. guides/5. swagger/7. swagger-migration","i-lucide-arrow-up-circle",{"title":65,"path":66,"stem":67,"icon":68},"Swagger for Non-Charcole Projects","/guides/swagger/non-charcole-users","2. guides/5. swagger/8. non-charcole-users","i-lucide-package-plus",{"title":70,"path":71,"stem":72,"icon":73},"Swagger Examples","/guides/swagger/swagger-examples","2. guides/5. swagger/9. swagger-examples","i-lucide-code-2",{"title":75,"icon":76,"path":77,"stem":78,"children":79,"page":6},"Charcoles Payments","i-heroicons-credit-card","/guides/payments","2. guides/6. payments",[80,84,89,94,99,104,109,114],{"title":81,"path":82,"stem":83,"icon":76},"Payments","/guides/payments/introduction","2. guides/6. payments/1. introduction",{"title":85,"path":86,"stem":87,"icon":88},"Setup","/guides/payments/setup","2. guides/6. payments/2. setup","i-heroicons-wrench-screwdriver",{"title":90,"path":91,"stem":92,"icon":93},"Providers","/guides/payments/providers","2. guides/6. payments/3. providers","i-heroicons-building-library",{"title":95,"path":96,"stem":97,"icon":98},"API Endpoints","/guides/payments/endpoints","2. guides/6. payments/4. endpoints","i-heroicons-arrows-right-left",{"title":100,"path":101,"stem":102,"icon":103},"Webhooks","/guides/payments/webhooks","2. guides/6. payments/5. webhooks","i-heroicons-bolt",{"title":105,"path":106,"stem":107,"icon":108},"Environment Variables","/guides/payments/environment-variables","2. guides/6. payments/6. environment-variables","i-heroicons-key",{"title":110,"path":111,"stem":112,"icon":113},"Using Without Charcole","/guides/payments/non-charcole-users","2. guides/6. payments/7. non-charcole-users","i-heroicons-puzzle-piece",{"title":115,"path":116,"stem":117,"icon":118},"Examples","/guides/payments/payments-examples","2. guides/6. payments/8. payments-examples","i-heroicons-code-bracket",{"id":120,"title":115,"body":121,"description":4132,"extension":4133,"links":4134,"meta":4135,"navigation":4136,"path":116,"seo":4137,"stem":117,"__hash__":4147},"docs/2. guides/6. payments/8. payments-examples.md",{"type":122,"value":123,"toc":4104},"minimark",[124,129,133,138,242,245,397,401,529,533,540,899,902,906,909,913,996,998,1127,1131,1169,1172,1178,1471,1473,1477,1530,1532,1624,1626,1630,1695,1697,1788,1790,1794,1823,1825,1932,1934,1938,1941,3441,3443,3447,3450,3454,3481,3485,3498,3502,3584,3591,3595,3697,3699,3703,3706,3710,3742,3746,3837,3841,4076,4078,4082,4100],[125,126,128],"h2",{"id":127},"example-1-full-stripe-payment-flow","Example 1: Full Stripe Payment Flow",[130,131,132],"p",{},"Create a payment intent, confirm with Stripe.js, and handle the webhook.",[134,135,137],"h3",{"id":136},"backend-create-intent","Backend: Create Intent",[139,140,145],"pre",{"className":141,"code":142,"language":143,"meta":144,"style":144},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","curl -X POST http://localhost:3000/payments/create-intent \\\n  -H \"Authorization: Bearer your-jwt-token\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"amount\": 2999,\n    \"currency\": \"usd\",\n    \"metadata\": {\"orderId\": \"order_123\"}\n  }'\n","bash","",[146,147,148,171,189,203,215,221,227,233],"code",{"__ignoreMap":144},[149,150,153,157,161,164,167],"span",{"class":151,"line":152},"line",1,[149,154,156],{"class":155},"sBMFI","curl",[149,158,160],{"class":159},"sfazB"," -X",[149,162,163],{"class":159}," POST",[149,165,166],{"class":159}," http://localhost:3000/payments/create-intent",[149,168,170],{"class":169},"sTEyZ"," \\\n",[149,172,174,177,181,184,187],{"class":151,"line":173},2,[149,175,176],{"class":159},"  -H",[149,178,180],{"class":179},"sMK4o"," \"",[149,182,183],{"class":159},"Authorization: Bearer your-jwt-token",[149,185,186],{"class":179},"\"",[149,188,170],{"class":169},[149,190,192,194,196,199,201],{"class":151,"line":191},3,[149,193,176],{"class":159},[149,195,180],{"class":179},[149,197,198],{"class":159},"Content-Type: application/json",[149,200,186],{"class":179},[149,202,170],{"class":169},[149,204,206,209,212],{"class":151,"line":205},4,[149,207,208],{"class":159},"  -d",[149,210,211],{"class":179}," '",[149,213,214],{"class":159},"{\n",[149,216,218],{"class":151,"line":217},5,[149,219,220],{"class":159},"    \"amount\": 2999,\n",[149,222,224],{"class":151,"line":223},6,[149,225,226],{"class":159},"    \"currency\": \"usd\",\n",[149,228,230],{"class":151,"line":229},7,[149,231,232],{"class":159},"    \"metadata\": {\"orderId\": \"order_123\"}\n",[149,234,236,239],{"class":151,"line":235},8,[149,237,238],{"class":159},"  }",[149,240,241],{"class":179},"'\n",[130,243,244],{},"Response:",[139,246,250],{"className":247,"code":248,"language":249,"meta":144,"style":144},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"success\": true,\n  \"data\": {\n    \"id\": \"pi_3abc...\",\n    \"clientSecret\": \"pi_3abc..._secret_xyz\",\n    \"status\": \"requires_payment_method\",\n    \"amount\": 2999,\n    \"currency\": \"usd\"\n  }\n}\n","json",[146,251,252,256,273,287,309,329,349,366,385,391],{"__ignoreMap":144},[149,253,254],{"class":151,"line":152},[149,255,214],{"class":179},[149,257,258,261,265,267,270],{"class":151,"line":173},[149,259,260],{"class":179},"  \"",[149,262,264],{"class":263},"spNyl","success",[149,266,186],{"class":179},[149,268,269],{"class":179},":",[149,271,272],{"class":179}," true,\n",[149,274,275,277,280,282,284],{"class":151,"line":191},[149,276,260],{"class":179},[149,278,279],{"class":263},"data",[149,281,186],{"class":179},[149,283,269],{"class":179},[149,285,286],{"class":179}," {\n",[149,288,289,292,295,297,299,301,304,306],{"class":151,"line":205},[149,290,291],{"class":179},"    \"",[149,293,294],{"class":155},"id",[149,296,186],{"class":179},[149,298,269],{"class":179},[149,300,180],{"class":179},[149,302,303],{"class":159},"pi_3abc...",[149,305,186],{"class":179},[149,307,308],{"class":179},",\n",[149,310,311,313,316,318,320,322,325,327],{"class":151,"line":217},[149,312,291],{"class":179},[149,314,315],{"class":155},"clientSecret",[149,317,186],{"class":179},[149,319,269],{"class":179},[149,321,180],{"class":179},[149,323,324],{"class":159},"pi_3abc..._secret_xyz",[149,326,186],{"class":179},[149,328,308],{"class":179},[149,330,331,333,336,338,340,342,345,347],{"class":151,"line":223},[149,332,291],{"class":179},[149,334,335],{"class":155},"status",[149,337,186],{"class":179},[149,339,269],{"class":179},[149,341,180],{"class":179},[149,343,344],{"class":159},"requires_payment_method",[149,346,186],{"class":179},[149,348,308],{"class":179},[149,350,351,353,356,358,360,364],{"class":151,"line":229},[149,352,291],{"class":179},[149,354,355],{"class":155},"amount",[149,357,186],{"class":179},[149,359,269],{"class":179},[149,361,363],{"class":362},"sbssI"," 2999",[149,365,308],{"class":179},[149,367,368,370,373,375,377,379,382],{"class":151,"line":235},[149,369,291],{"class":179},[149,371,372],{"class":155},"currency",[149,374,186],{"class":179},[149,376,269],{"class":179},[149,378,180],{"class":179},[149,380,381],{"class":159},"usd",[149,383,384],{"class":179},"\"\n",[149,386,388],{"class":151,"line":387},9,[149,389,390],{"class":179},"  }\n",[149,392,394],{"class":151,"line":393},10,[149,395,396],{"class":179},"}\n",[134,398,400],{"id":399},"frontend-confirm-payment-example-with-stripejs","Frontend: Confirm Payment (example with Stripe.js)",[139,402,406],{"className":403,"code":404,"language":405,"meta":144,"style":144},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","// Frontend only — not part of the backend docs\n// But this is what happens with the clientSecret\nconst { clientSecret } = response.data\nconst { error } = await stripe.confirmPayment({\n  elements,\n  clientSecret,\n  confirmParams: {\n    return_url: 'https://yoursite.com/success',\n  },\n})\n","js",[146,407,408,414,419,445,476,483,490,500,517,522],{"__ignoreMap":144},[149,409,410],{"class":151,"line":152},[149,411,413],{"class":412},"sHwdD","// Frontend only — not part of the backend docs\n",[149,415,416],{"class":151,"line":173},[149,417,418],{"class":412},"// But this is what happens with the clientSecret\n",[149,420,421,424,427,430,433,436,439,442],{"class":151,"line":191},[149,422,423],{"class":263},"const",[149,425,426],{"class":179}," {",[149,428,429],{"class":169}," clientSecret ",[149,431,432],{"class":179},"}",[149,434,435],{"class":179}," =",[149,437,438],{"class":169}," response",[149,440,441],{"class":179},".",[149,443,444],{"class":169},"data\n",[149,446,447,449,451,454,456,458,462,465,467,471,474],{"class":151,"line":205},[149,448,423],{"class":263},[149,450,426],{"class":179},[149,452,453],{"class":169}," error ",[149,455,432],{"class":179},[149,457,435],{"class":179},[149,459,461],{"class":460},"s7zQu"," await",[149,463,464],{"class":169}," stripe",[149,466,441],{"class":179},[149,468,470],{"class":469},"s2Zo4","confirmPayment",[149,472,473],{"class":169},"(",[149,475,214],{"class":179},[149,477,478,481],{"class":151,"line":217},[149,479,480],{"class":169},"  elements",[149,482,308],{"class":179},[149,484,485,488],{"class":151,"line":223},[149,486,487],{"class":169},"  clientSecret",[149,489,308],{"class":179},[149,491,492,496,498],{"class":151,"line":229},[149,493,495],{"class":494},"swJcz","  confirmParams",[149,497,269],{"class":179},[149,499,286],{"class":179},[149,501,502,505,507,509,512,515],{"class":151,"line":235},[149,503,504],{"class":494},"    return_url",[149,506,269],{"class":179},[149,508,211],{"class":179},[149,510,511],{"class":159},"https://yoursite.com/success",[149,513,514],{"class":179},"'",[149,516,308],{"class":179},[149,518,519],{"class":151,"line":387},[149,520,521],{"class":179},"  },\n",[149,523,524,526],{"class":151,"line":393},[149,525,432],{"class":179},[149,527,528],{"class":169},")\n",[134,530,532],{"id":531},"backend-handle-webhook","Backend: Handle Webhook",[130,534,535,536,539],{},"When the user completes payment on Stripe's page, Stripe fires a ",[146,537,538],{},"payment_intent.succeeded"," webhook:",[139,541,543],{"className":403,"code":542,"language":405,"meta":144,"style":144},"// In your payments.controller.js webhook handler\nimport { PAYMENT_EVENTS } from '@charcoles/payments'\n\nexport const handlePaymentWebhook = async (req, res) => {\n  const result = await paymentService.processWebhook(req, res)\n\n  switch (result.event) {\n    case PAYMENT_EVENTS.STRIPE_PAYMENT_SUCCEEDED:\n      // Payment confirmed — fulfill the order\n      const { orderId, amount, currency } = result.data\n      \n      await sendConfirmationEmail(orderId)\n      await updateOrderStatus(orderId, 'paid')\n      await grantProductAccess(orderId)\n      \n      break\n    case PAYMENT_EVENTS.STRIPE_PAYMENT_FAILED:\n      const { orderId } = result.data\n      await notifyCustomerOfFailure(orderId)\n      break\n  }\n\n  return res.status(200).json({ received: true })\n}\n",[146,544,545,550,573,579,617,647,651,671,686,691,721,727,743,766,780,785,791,805,824,838,843,848,853,894],{"__ignoreMap":144},[149,546,547],{"class":151,"line":152},[149,548,549],{"class":412},"// In your payments.controller.js webhook handler\n",[149,551,552,555,557,560,563,566,568,571],{"class":151,"line":173},[149,553,554],{"class":460},"import",[149,556,426],{"class":179},[149,558,559],{"class":169}," PAYMENT_EVENTS",[149,561,562],{"class":179}," }",[149,564,565],{"class":460}," from",[149,567,211],{"class":179},[149,569,570],{"class":159},"@charcoles/payments",[149,572,241],{"class":179},[149,574,575],{"class":151,"line":191},[149,576,578],{"emptyLinePlaceholder":577},true,"\n",[149,580,581,584,587,590,593,596,599,603,606,609,612,615],{"class":151,"line":205},[149,582,583],{"class":460},"export",[149,585,586],{"class":263}," const",[149,588,589],{"class":169}," handlePaymentWebhook ",[149,591,592],{"class":179},"=",[149,594,595],{"class":263}," async",[149,597,598],{"class":179}," (",[149,600,602],{"class":601},"sHdIc","req",[149,604,605],{"class":179},",",[149,607,608],{"class":601}," res",[149,610,611],{"class":179},")",[149,613,614],{"class":263}," =>",[149,616,286],{"class":179},[149,618,619,622,625,627,629,632,634,637,639,641,643,645],{"class":151,"line":217},[149,620,621],{"class":263},"  const",[149,623,624],{"class":169}," result",[149,626,435],{"class":179},[149,628,461],{"class":460},[149,630,631],{"class":169}," paymentService",[149,633,441],{"class":179},[149,635,636],{"class":469},"processWebhook",[149,638,473],{"class":494},[149,640,602],{"class":169},[149,642,605],{"class":179},[149,644,608],{"class":169},[149,646,528],{"class":494},[149,648,649],{"class":151,"line":223},[149,650,578],{"emptyLinePlaceholder":577},[149,652,653,656,658,661,663,666,669],{"class":151,"line":229},[149,654,655],{"class":460},"  switch",[149,657,598],{"class":494},[149,659,660],{"class":169},"result",[149,662,441],{"class":179},[149,664,665],{"class":169},"event",[149,667,668],{"class":494},") ",[149,670,214],{"class":179},[149,672,673,676,678,680,683],{"class":151,"line":235},[149,674,675],{"class":460},"    case",[149,677,559],{"class":169},[149,679,441],{"class":179},[149,681,682],{"class":169},"STRIPE_PAYMENT_SUCCEEDED",[149,684,685],{"class":179},":\n",[149,687,688],{"class":151,"line":387},[149,689,690],{"class":412},"      // Payment confirmed — fulfill the order\n",[149,692,693,696,698,701,703,706,708,711,713,715,717,719],{"class":151,"line":393},[149,694,695],{"class":263},"      const",[149,697,426],{"class":179},[149,699,700],{"class":169}," orderId",[149,702,605],{"class":179},[149,704,705],{"class":169}," amount",[149,707,605],{"class":179},[149,709,710],{"class":169}," currency",[149,712,562],{"class":179},[149,714,435],{"class":179},[149,716,624],{"class":169},[149,718,441],{"class":179},[149,720,444],{"class":169},[149,722,724],{"class":151,"line":723},11,[149,725,726],{"class":494},"      \n",[149,728,730,733,736,738,741],{"class":151,"line":729},12,[149,731,732],{"class":460},"      await",[149,734,735],{"class":469}," sendConfirmationEmail",[149,737,473],{"class":494},[149,739,740],{"class":169},"orderId",[149,742,528],{"class":494},[149,744,746,748,751,753,755,757,759,762,764],{"class":151,"line":745},13,[149,747,732],{"class":460},[149,749,750],{"class":469}," updateOrderStatus",[149,752,473],{"class":494},[149,754,740],{"class":169},[149,756,605],{"class":179},[149,758,211],{"class":179},[149,760,761],{"class":159},"paid",[149,763,514],{"class":179},[149,765,528],{"class":494},[149,767,769,771,774,776,778],{"class":151,"line":768},14,[149,770,732],{"class":460},[149,772,773],{"class":469}," grantProductAccess",[149,775,473],{"class":494},[149,777,740],{"class":169},[149,779,528],{"class":494},[149,781,783],{"class":151,"line":782},15,[149,784,726],{"class":494},[149,786,788],{"class":151,"line":787},16,[149,789,790],{"class":460},"      break\n",[149,792,794,796,798,800,803],{"class":151,"line":793},17,[149,795,675],{"class":460},[149,797,559],{"class":169},[149,799,441],{"class":179},[149,801,802],{"class":169},"STRIPE_PAYMENT_FAILED",[149,804,685],{"class":179},[149,806,808,810,812,814,816,818,820,822],{"class":151,"line":807},18,[149,809,695],{"class":263},[149,811,426],{"class":179},[149,813,700],{"class":169},[149,815,562],{"class":179},[149,817,435],{"class":179},[149,819,624],{"class":169},[149,821,441],{"class":179},[149,823,444],{"class":169},[149,825,827,829,832,834,836],{"class":151,"line":826},19,[149,828,732],{"class":460},[149,830,831],{"class":469}," notifyCustomerOfFailure",[149,833,473],{"class":494},[149,835,740],{"class":169},[149,837,528],{"class":494},[149,839,841],{"class":151,"line":840},20,[149,842,790],{"class":460},[149,844,846],{"class":151,"line":845},21,[149,847,390],{"class":179},[149,849,851],{"class":151,"line":850},22,[149,852,578],{"emptyLinePlaceholder":577},[149,854,856,859,861,863,865,867,870,872,874,876,878,881,884,886,890,892],{"class":151,"line":855},23,[149,857,858],{"class":460},"  return",[149,860,608],{"class":169},[149,862,441],{"class":179},[149,864,335],{"class":469},[149,866,473],{"class":494},[149,868,869],{"class":362},"200",[149,871,611],{"class":494},[149,873,441],{"class":179},[149,875,249],{"class":469},[149,877,473],{"class":494},[149,879,880],{"class":179},"{",[149,882,883],{"class":494}," received",[149,885,269],{"class":179},[149,887,889],{"class":888},"sfNiH"," true",[149,891,562],{"class":179},[149,893,528],{"class":494},[149,895,897],{"class":151,"line":896},24,[149,898,396],{"class":179},[900,901],"hr",{},[125,903,905],{"id":904},"example-2-full-lemonsqueezy-checkout-flow","Example 2: Full LemonSqueezy Checkout Flow",[130,907,908],{},"Create a payment intent with a variant ID and redirect to LemonSqueezy's hosted checkout.",[134,910,912],{"id":911},"backend-create-intent-with-variant","Backend: Create Intent with Variant",[139,914,916],{"className":141,"code":915,"language":143,"meta":144,"style":144},"curl -X POST http://localhost:3000/payments/create-intent \\\n  -H \"Authorization: Bearer your-jwt-token\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"amount\": 2999,\n    \"currency\": \"usd\",\n    \"metadata\": {\n      \"variantId\": \"78901\",\n      \"orderId\": \"order_456\"\n    }\n  }'\n",[146,917,918,930,942,954,962,966,970,975,980,985,990],{"__ignoreMap":144},[149,919,920,922,924,926,928],{"class":151,"line":152},[149,921,156],{"class":155},[149,923,160],{"class":159},[149,925,163],{"class":159},[149,927,166],{"class":159},[149,929,170],{"class":169},[149,931,932,934,936,938,940],{"class":151,"line":173},[149,933,176],{"class":159},[149,935,180],{"class":179},[149,937,183],{"class":159},[149,939,186],{"class":179},[149,941,170],{"class":169},[149,943,944,946,948,950,952],{"class":151,"line":191},[149,945,176],{"class":159},[149,947,180],{"class":179},[149,949,198],{"class":159},[149,951,186],{"class":179},[149,953,170],{"class":169},[149,955,956,958,960],{"class":151,"line":205},[149,957,208],{"class":159},[149,959,211],{"class":179},[149,961,214],{"class":159},[149,963,964],{"class":151,"line":217},[149,965,220],{"class":159},[149,967,968],{"class":151,"line":223},[149,969,226],{"class":159},[149,971,972],{"class":151,"line":229},[149,973,974],{"class":159},"    \"metadata\": {\n",[149,976,977],{"class":151,"line":235},[149,978,979],{"class":159},"      \"variantId\": \"78901\",\n",[149,981,982],{"class":151,"line":387},[149,983,984],{"class":159},"      \"orderId\": \"order_456\"\n",[149,986,987],{"class":151,"line":393},[149,988,989],{"class":159},"    }\n",[149,991,992,994],{"class":151,"line":723},[149,993,238],{"class":159},[149,995,241],{"class":179},[130,997,244],{},[139,999,1001],{"className":247,"code":1000,"language":249,"meta":144,"style":144},"{\n  \"success\": true,\n  \"data\": {\n    \"id\": \"abc123\",\n    \"checkoutUrl\": \"https://store.lemonsqueezy.com/checkout/buy/...\",\n    \"status\": \"created\",\n    \"amount\": 2999,\n    \"currency\": \"usd\"\n  }\n}\n",[146,1002,1003,1007,1019,1031,1050,1070,1089,1103,1119,1123],{"__ignoreMap":144},[149,1004,1005],{"class":151,"line":152},[149,1006,214],{"class":179},[149,1008,1009,1011,1013,1015,1017],{"class":151,"line":173},[149,1010,260],{"class":179},[149,1012,264],{"class":263},[149,1014,186],{"class":179},[149,1016,269],{"class":179},[149,1018,272],{"class":179},[149,1020,1021,1023,1025,1027,1029],{"class":151,"line":191},[149,1022,260],{"class":179},[149,1024,279],{"class":263},[149,1026,186],{"class":179},[149,1028,269],{"class":179},[149,1030,286],{"class":179},[149,1032,1033,1035,1037,1039,1041,1043,1046,1048],{"class":151,"line":205},[149,1034,291],{"class":179},[149,1036,294],{"class":155},[149,1038,186],{"class":179},[149,1040,269],{"class":179},[149,1042,180],{"class":179},[149,1044,1045],{"class":159},"abc123",[149,1047,186],{"class":179},[149,1049,308],{"class":179},[149,1051,1052,1054,1057,1059,1061,1063,1066,1068],{"class":151,"line":217},[149,1053,291],{"class":179},[149,1055,1056],{"class":155},"checkoutUrl",[149,1058,186],{"class":179},[149,1060,269],{"class":179},[149,1062,180],{"class":179},[149,1064,1065],{"class":159},"https://store.lemonsqueezy.com/checkout/buy/...",[149,1067,186],{"class":179},[149,1069,308],{"class":179},[149,1071,1072,1074,1076,1078,1080,1082,1085,1087],{"class":151,"line":223},[149,1073,291],{"class":179},[149,1075,335],{"class":155},[149,1077,186],{"class":179},[149,1079,269],{"class":179},[149,1081,180],{"class":179},[149,1083,1084],{"class":159},"created",[149,1086,186],{"class":179},[149,1088,308],{"class":179},[149,1090,1091,1093,1095,1097,1099,1101],{"class":151,"line":229},[149,1092,291],{"class":179},[149,1094,355],{"class":155},[149,1096,186],{"class":179},[149,1098,269],{"class":179},[149,1100,363],{"class":362},[149,1102,308],{"class":179},[149,1104,1105,1107,1109,1111,1113,1115,1117],{"class":151,"line":235},[149,1106,291],{"class":179},[149,1108,372],{"class":155},[149,1110,186],{"class":179},[149,1112,269],{"class":179},[149,1114,180],{"class":179},[149,1116,381],{"class":159},[149,1118,384],{"class":179},[149,1120,1121],{"class":151,"line":387},[149,1122,390],{"class":179},[149,1124,1125],{"class":151,"line":393},[149,1126,396],{"class":179},[134,1128,1130],{"id":1129},"frontend-redirect-to-checkout","Frontend: Redirect to Checkout",[139,1132,1134],{"className":403,"code":1133,"language":405,"meta":144,"style":144},"// Frontend: redirect user to the checkout URL\nwindow.location.href = response.data.checkoutUrl\n",[146,1135,1136,1141],{"__ignoreMap":144},[149,1137,1138],{"class":151,"line":152},[149,1139,1140],{"class":412},"// Frontend: redirect user to the checkout URL\n",[149,1142,1143,1146,1148,1151,1153,1156,1158,1160,1162,1164,1166],{"class":151,"line":173},[149,1144,1145],{"class":169},"window",[149,1147,441],{"class":179},[149,1149,1150],{"class":169},"location",[149,1152,441],{"class":179},[149,1154,1155],{"class":169},"href ",[149,1157,592],{"class":179},[149,1159,438],{"class":169},[149,1161,441],{"class":179},[149,1163,279],{"class":169},[149,1165,441],{"class":179},[149,1167,1168],{"class":169},"checkoutUrl\n",[134,1170,532],{"id":1171},"backend-handle-webhook-1",[130,1173,1174,1175,539],{},"When the user completes checkout on LemonSqueezy, they fire an ",[146,1176,1177],{},"order_created",[139,1179,1181],{"className":403,"code":1180,"language":405,"meta":144,"style":144},"import { PAYMENT_EVENTS } from '@charcoles/payments'\n\nexport const handlePaymentWebhook = async (req, res) => {\n  const result = await paymentService.processWebhook(req, res)\n\n  switch (result.event) {\n    case PAYMENT_EVENTS.LS_ORDER_CREATED:\n      // Payment confirmed\n      const { orderId, amount, currency } = result.data\n      \n      await sendConfirmationEmail(orderId)\n      await updateOrderStatus(orderId, 'paid')\n      await grantProductAccess(orderId)\n      \n      break\n    case PAYMENT_EVENTS.LS_ORDER_REFUNDED:\n      const { orderId } = result.data\n      await revokeProductAccess(orderId)\n      break\n  }\n\n  return res.status(200).json({ received: true })\n}\n",[146,1182,1183,1201,1205,1231,1257,1261,1277,1290,1295,1321,1325,1337,1357,1369,1373,1377,1390,1408,1421,1425,1429,1433,1467],{"__ignoreMap":144},[149,1184,1185,1187,1189,1191,1193,1195,1197,1199],{"class":151,"line":152},[149,1186,554],{"class":460},[149,1188,426],{"class":179},[149,1190,559],{"class":169},[149,1192,562],{"class":179},[149,1194,565],{"class":460},[149,1196,211],{"class":179},[149,1198,570],{"class":159},[149,1200,241],{"class":179},[149,1202,1203],{"class":151,"line":173},[149,1204,578],{"emptyLinePlaceholder":577},[149,1206,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229],{"class":151,"line":191},[149,1208,583],{"class":460},[149,1210,586],{"class":263},[149,1212,589],{"class":169},[149,1214,592],{"class":179},[149,1216,595],{"class":263},[149,1218,598],{"class":179},[149,1220,602],{"class":601},[149,1222,605],{"class":179},[149,1224,608],{"class":601},[149,1226,611],{"class":179},[149,1228,614],{"class":263},[149,1230,286],{"class":179},[149,1232,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255],{"class":151,"line":205},[149,1234,621],{"class":263},[149,1236,624],{"class":169},[149,1238,435],{"class":179},[149,1240,461],{"class":460},[149,1242,631],{"class":169},[149,1244,441],{"class":179},[149,1246,636],{"class":469},[149,1248,473],{"class":494},[149,1250,602],{"class":169},[149,1252,605],{"class":179},[149,1254,608],{"class":169},[149,1256,528],{"class":494},[149,1258,1259],{"class":151,"line":217},[149,1260,578],{"emptyLinePlaceholder":577},[149,1262,1263,1265,1267,1269,1271,1273,1275],{"class":151,"line":223},[149,1264,655],{"class":460},[149,1266,598],{"class":494},[149,1268,660],{"class":169},[149,1270,441],{"class":179},[149,1272,665],{"class":169},[149,1274,668],{"class":494},[149,1276,214],{"class":179},[149,1278,1279,1281,1283,1285,1288],{"class":151,"line":229},[149,1280,675],{"class":460},[149,1282,559],{"class":169},[149,1284,441],{"class":179},[149,1286,1287],{"class":169},"LS_ORDER_CREATED",[149,1289,685],{"class":179},[149,1291,1292],{"class":151,"line":235},[149,1293,1294],{"class":412},"      // Payment confirmed\n",[149,1296,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315,1317,1319],{"class":151,"line":387},[149,1298,695],{"class":263},[149,1300,426],{"class":179},[149,1302,700],{"class":169},[149,1304,605],{"class":179},[149,1306,705],{"class":169},[149,1308,605],{"class":179},[149,1310,710],{"class":169},[149,1312,562],{"class":179},[149,1314,435],{"class":179},[149,1316,624],{"class":169},[149,1318,441],{"class":179},[149,1320,444],{"class":169},[149,1322,1323],{"class":151,"line":393},[149,1324,726],{"class":494},[149,1326,1327,1329,1331,1333,1335],{"class":151,"line":723},[149,1328,732],{"class":460},[149,1330,735],{"class":469},[149,1332,473],{"class":494},[149,1334,740],{"class":169},[149,1336,528],{"class":494},[149,1338,1339,1341,1343,1345,1347,1349,1351,1353,1355],{"class":151,"line":729},[149,1340,732],{"class":460},[149,1342,750],{"class":469},[149,1344,473],{"class":494},[149,1346,740],{"class":169},[149,1348,605],{"class":179},[149,1350,211],{"class":179},[149,1352,761],{"class":159},[149,1354,514],{"class":179},[149,1356,528],{"class":494},[149,1358,1359,1361,1363,1365,1367],{"class":151,"line":745},[149,1360,732],{"class":460},[149,1362,773],{"class":469},[149,1364,473],{"class":494},[149,1366,740],{"class":169},[149,1368,528],{"class":494},[149,1370,1371],{"class":151,"line":768},[149,1372,726],{"class":494},[149,1374,1375],{"class":151,"line":782},[149,1376,790],{"class":460},[149,1378,1379,1381,1383,1385,1388],{"class":151,"line":787},[149,1380,675],{"class":460},[149,1382,559],{"class":169},[149,1384,441],{"class":179},[149,1386,1387],{"class":169},"LS_ORDER_REFUNDED",[149,1389,685],{"class":179},[149,1391,1392,1394,1396,1398,1400,1402,1404,1406],{"class":151,"line":793},[149,1393,695],{"class":263},[149,1395,426],{"class":179},[149,1397,700],{"class":169},[149,1399,562],{"class":179},[149,1401,435],{"class":179},[149,1403,624],{"class":169},[149,1405,441],{"class":179},[149,1407,444],{"class":169},[149,1409,1410,1412,1415,1417,1419],{"class":151,"line":807},[149,1411,732],{"class":460},[149,1413,1414],{"class":469}," revokeProductAccess",[149,1416,473],{"class":494},[149,1418,740],{"class":169},[149,1420,528],{"class":494},[149,1422,1423],{"class":151,"line":826},[149,1424,790],{"class":460},[149,1426,1427],{"class":151,"line":840},[149,1428,390],{"class":179},[149,1430,1431],{"class":151,"line":845},[149,1432,578],{"emptyLinePlaceholder":577},[149,1434,1435,1437,1439,1441,1443,1445,1447,1449,1451,1453,1455,1457,1459,1461,1463,1465],{"class":151,"line":850},[149,1436,858],{"class":460},[149,1438,608],{"class":169},[149,1440,441],{"class":179},[149,1442,335],{"class":469},[149,1444,473],{"class":494},[149,1446,869],{"class":362},[149,1448,611],{"class":494},[149,1450,441],{"class":179},[149,1452,249],{"class":469},[149,1454,473],{"class":494},[149,1456,880],{"class":179},[149,1458,883],{"class":494},[149,1460,269],{"class":179},[149,1462,889],{"class":888},[149,1464,562],{"class":179},[149,1466,528],{"class":494},[149,1468,1469],{"class":151,"line":855},[149,1470,396],{"class":179},[900,1472],{},[125,1474,1476],{"id":1475},"example-3-full-refund","Example 3: Full Refund",[139,1478,1480],{"className":141,"code":1479,"language":143,"meta":144,"style":144},"curl -X POST http://localhost:3000/payments/refund \\\n  -H \"Authorization: Bearer your-jwt-token\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"paymentId\": \"pi_3abc...\"}'\n",[146,1481,1482,1495,1507,1519],{"__ignoreMap":144},[149,1483,1484,1486,1488,1490,1493],{"class":151,"line":152},[149,1485,156],{"class":155},[149,1487,160],{"class":159},[149,1489,163],{"class":159},[149,1491,1492],{"class":159}," http://localhost:3000/payments/refund",[149,1494,170],{"class":169},[149,1496,1497,1499,1501,1503,1505],{"class":151,"line":173},[149,1498,176],{"class":159},[149,1500,180],{"class":179},[149,1502,183],{"class":159},[149,1504,186],{"class":179},[149,1506,170],{"class":169},[149,1508,1509,1511,1513,1515,1517],{"class":151,"line":191},[149,1510,176],{"class":159},[149,1512,180],{"class":179},[149,1514,198],{"class":159},[149,1516,186],{"class":179},[149,1518,170],{"class":169},[149,1520,1521,1523,1525,1528],{"class":151,"line":205},[149,1522,208],{"class":159},[149,1524,211],{"class":179},[149,1526,1527],{"class":159},"{\"paymentId\": \"pi_3abc...\"}",[149,1529,241],{"class":179},[130,1531,244],{},[139,1533,1535],{"className":247,"code":1534,"language":249,"meta":144,"style":144},"{\n  \"success\": true,\n  \"data\": {\n    \"id\": \"re_456...\",\n    \"status\": \"succeeded\",\n    \"amount\": 2999\n  }\n}\n",[146,1536,1537,1541,1553,1565,1584,1603,1616,1620],{"__ignoreMap":144},[149,1538,1539],{"class":151,"line":152},[149,1540,214],{"class":179},[149,1542,1543,1545,1547,1549,1551],{"class":151,"line":173},[149,1544,260],{"class":179},[149,1546,264],{"class":263},[149,1548,186],{"class":179},[149,1550,269],{"class":179},[149,1552,272],{"class":179},[149,1554,1555,1557,1559,1561,1563],{"class":151,"line":191},[149,1556,260],{"class":179},[149,1558,279],{"class":263},[149,1560,186],{"class":179},[149,1562,269],{"class":179},[149,1564,286],{"class":179},[149,1566,1567,1569,1571,1573,1575,1577,1580,1582],{"class":151,"line":205},[149,1568,291],{"class":179},[149,1570,294],{"class":155},[149,1572,186],{"class":179},[149,1574,269],{"class":179},[149,1576,180],{"class":179},[149,1578,1579],{"class":159},"re_456...",[149,1581,186],{"class":179},[149,1583,308],{"class":179},[149,1585,1586,1588,1590,1592,1594,1596,1599,1601],{"class":151,"line":217},[149,1587,291],{"class":179},[149,1589,335],{"class":155},[149,1591,186],{"class":179},[149,1593,269],{"class":179},[149,1595,180],{"class":179},[149,1597,1598],{"class":159},"succeeded",[149,1600,186],{"class":179},[149,1602,308],{"class":179},[149,1604,1605,1607,1609,1611,1613],{"class":151,"line":223},[149,1606,291],{"class":179},[149,1608,355],{"class":155},[149,1610,186],{"class":179},[149,1612,269],{"class":179},[149,1614,1615],{"class":362}," 2999\n",[149,1617,1618],{"class":151,"line":229},[149,1619,390],{"class":179},[149,1621,1622],{"class":151,"line":235},[149,1623,396],{"class":179},[900,1625],{},[125,1627,1629],{"id":1628},"example-4-partial-refund-1000","Example 4: Partial Refund ($10.00)",[139,1631,1633],{"className":141,"code":1632,"language":143,"meta":144,"style":144},"curl -X POST http://localhost:3000/payments/refund \\\n  -H \"Authorization: Bearer your-jwt-token\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"paymentId\": \"pi_3abc...\",\n    \"amount\": 1000\n  }'\n",[146,1634,1635,1647,1659,1671,1679,1684,1689],{"__ignoreMap":144},[149,1636,1637,1639,1641,1643,1645],{"class":151,"line":152},[149,1638,156],{"class":155},[149,1640,160],{"class":159},[149,1642,163],{"class":159},[149,1644,1492],{"class":159},[149,1646,170],{"class":169},[149,1648,1649,1651,1653,1655,1657],{"class":151,"line":173},[149,1650,176],{"class":159},[149,1652,180],{"class":179},[149,1654,183],{"class":159},[149,1656,186],{"class":179},[149,1658,170],{"class":169},[149,1660,1661,1663,1665,1667,1669],{"class":151,"line":191},[149,1662,176],{"class":159},[149,1664,180],{"class":179},[149,1666,198],{"class":159},[149,1668,186],{"class":179},[149,1670,170],{"class":169},[149,1672,1673,1675,1677],{"class":151,"line":205},[149,1674,208],{"class":159},[149,1676,211],{"class":179},[149,1678,214],{"class":159},[149,1680,1681],{"class":151,"line":217},[149,1682,1683],{"class":159},"    \"paymentId\": \"pi_3abc...\",\n",[149,1685,1686],{"class":151,"line":223},[149,1687,1688],{"class":159},"    \"amount\": 1000\n",[149,1690,1691,1693],{"class":151,"line":229},[149,1692,238],{"class":159},[149,1694,241],{"class":179},[130,1696,244],{},[139,1698,1700],{"className":247,"code":1699,"language":249,"meta":144,"style":144},"{\n  \"success\": true,\n  \"data\": {\n    \"id\": \"re_457...\",\n    \"status\": \"succeeded\",\n    \"amount\": 1000\n  }\n}\n",[146,1701,1702,1706,1718,1730,1749,1767,1780,1784],{"__ignoreMap":144},[149,1703,1704],{"class":151,"line":152},[149,1705,214],{"class":179},[149,1707,1708,1710,1712,1714,1716],{"class":151,"line":173},[149,1709,260],{"class":179},[149,1711,264],{"class":263},[149,1713,186],{"class":179},[149,1715,269],{"class":179},[149,1717,272],{"class":179},[149,1719,1720,1722,1724,1726,1728],{"class":151,"line":191},[149,1721,260],{"class":179},[149,1723,279],{"class":263},[149,1725,186],{"class":179},[149,1727,269],{"class":179},[149,1729,286],{"class":179},[149,1731,1732,1734,1736,1738,1740,1742,1745,1747],{"class":151,"line":205},[149,1733,291],{"class":179},[149,1735,294],{"class":155},[149,1737,186],{"class":179},[149,1739,269],{"class":179},[149,1741,180],{"class":179},[149,1743,1744],{"class":159},"re_457...",[149,1746,186],{"class":179},[149,1748,308],{"class":179},[149,1750,1751,1753,1755,1757,1759,1761,1763,1765],{"class":151,"line":217},[149,1752,291],{"class":179},[149,1754,335],{"class":155},[149,1756,186],{"class":179},[149,1758,269],{"class":179},[149,1760,180],{"class":179},[149,1762,1598],{"class":159},[149,1764,186],{"class":179},[149,1766,308],{"class":179},[149,1768,1769,1771,1773,1775,1777],{"class":151,"line":223},[149,1770,291],{"class":179},[149,1772,355],{"class":155},[149,1774,186],{"class":179},[149,1776,269],{"class":179},[149,1778,1779],{"class":362}," 1000\n",[149,1781,1782],{"class":151,"line":229},[149,1783,390],{"class":179},[149,1785,1786],{"class":151,"line":235},[149,1787,396],{"class":179},[900,1789],{},[125,1791,1793],{"id":1792},"example-5-check-payment-status","Example 5: Check Payment Status",[139,1795,1797],{"className":141,"code":1796,"language":143,"meta":144,"style":144},"curl -X GET http://localhost:3000/payments/status/pi_3abc... \\\n  -H \"Authorization: Bearer your-jwt-token\"\n",[146,1798,1799,1813],{"__ignoreMap":144},[149,1800,1801,1803,1805,1808,1811],{"class":151,"line":152},[149,1802,156],{"class":155},[149,1804,160],{"class":159},[149,1806,1807],{"class":159}," GET",[149,1809,1810],{"class":159}," http://localhost:3000/payments/status/pi_3abc...",[149,1812,170],{"class":169},[149,1814,1815,1817,1819,1821],{"class":151,"line":173},[149,1816,176],{"class":159},[149,1818,180],{"class":179},[149,1820,183],{"class":159},[149,1822,384],{"class":179},[130,1824,244],{},[139,1826,1828],{"className":247,"code":1827,"language":249,"meta":144,"style":144},"{\n  \"success\": true,\n  \"data\": {\n    \"id\": \"pi_3abc...\",\n    \"status\": \"paid\",\n    \"amount\": 2999,\n    \"currency\": \"usd\"\n  }\n}\n",[146,1829,1830,1834,1846,1858,1876,1894,1908,1924,1928],{"__ignoreMap":144},[149,1831,1832],{"class":151,"line":152},[149,1833,214],{"class":179},[149,1835,1836,1838,1840,1842,1844],{"class":151,"line":173},[149,1837,260],{"class":179},[149,1839,264],{"class":263},[149,1841,186],{"class":179},[149,1843,269],{"class":179},[149,1845,272],{"class":179},[149,1847,1848,1850,1852,1854,1856],{"class":151,"line":191},[149,1849,260],{"class":179},[149,1851,279],{"class":263},[149,1853,186],{"class":179},[149,1855,269],{"class":179},[149,1857,286],{"class":179},[149,1859,1860,1862,1864,1866,1868,1870,1872,1874],{"class":151,"line":205},[149,1861,291],{"class":179},[149,1863,294],{"class":155},[149,1865,186],{"class":179},[149,1867,269],{"class":179},[149,1869,180],{"class":179},[149,1871,303],{"class":159},[149,1873,186],{"class":179},[149,1875,308],{"class":179},[149,1877,1878,1880,1882,1884,1886,1888,1890,1892],{"class":151,"line":217},[149,1879,291],{"class":179},[149,1881,335],{"class":155},[149,1883,186],{"class":179},[149,1885,269],{"class":179},[149,1887,180],{"class":179},[149,1889,761],{"class":159},[149,1891,186],{"class":179},[149,1893,308],{"class":179},[149,1895,1896,1898,1900,1902,1904,1906],{"class":151,"line":223},[149,1897,291],{"class":179},[149,1899,355],{"class":155},[149,1901,186],{"class":179},[149,1903,269],{"class":179},[149,1905,363],{"class":362},[149,1907,308],{"class":179},[149,1909,1910,1912,1914,1916,1918,1920,1922],{"class":151,"line":229},[149,1911,291],{"class":179},[149,1913,372],{"class":155},[149,1915,186],{"class":179},[149,1917,269],{"class":179},[149,1919,180],{"class":179},[149,1921,381],{"class":159},[149,1923,384],{"class":179},[149,1925,1926],{"class":151,"line":235},[149,1927,390],{"class":179},[149,1929,1930],{"class":151,"line":387},[149,1931,396],{"class":179},[900,1933],{},[125,1935,1937],{"id":1936},"example-6-custom-webhook-fulfillment-logic","Example 6: Custom Webhook Fulfillment Logic",[130,1939,1940],{},"Here's a realistic webhook handler with email, database updates, and product access:",[139,1942,1944],{"className":403,"code":1943,"language":405,"meta":144,"style":144},"import { PAYMENT_EVENTS } from '@charcoles/payments'\nimport { sendEmail } from '@/services/email'\nimport { Order } from '@/models/order'\nimport { User } from '@/models/user'\n\nexport const handlePaymentWebhook = async (req, res) => {\n  const result = await paymentService.processWebhook(req, res)\n\n  try {\n    switch (result.event) {\n      case PAYMENT_EVENTS.STRIPE_PAYMENT_SUCCEEDED:\n      case PAYMENT_EVENTS.LS_ORDER_CREATED:\n        // Get order data\n        const order = await Order.findById(result.data.orderId)\n        const user = await User.findById(order.userId)\n\n        // Update order status\n        order.status = 'paid'\n        order.paidAt = new Date()\n        order.paymentId = result.data.id\n        await order.save()\n\n        // Grant product access\n        if (order.product === 'pro-plan') {\n          user.plan = 'pro'\n          user.planExpiresAt = new Date(Date.now() + 365 * 24 * 60 * 60 * 1000) // 1 year\n          await user.save()\n        }\n\n        // Send confirmation email\n        await sendEmail({\n          to: user.email,\n          template: 'payment-confirmed',\n          data: {\n            userName: user.name,\n            orderId: order._id,\n            amount: (result.data.amount / 100).toFixed(2),\n            currency: result.data.currency.toUpperCase(),\n          },\n        })\n\n        console.log(`Order ${order._id} fulfilled`)\n        break\n\n      case PAYMENT_EVENTS.STRIPE_PAYMENT_FAILED:\n        // Notify customer of failure\n        const failedOrder = await Order.findById(result.data.orderId)\n        const failedUser = await User.findById(failedOrder.userId)\n\n        await sendEmail({\n          to: failedUser.email,\n          template: 'payment-failed',\n          data: {\n            userName: failedUser.name,\n            orderId: failedOrder._id,\n          },\n        })\n\n        failedOrder.status = 'failed'\n        await failedOrder.save()\n        break\n\n      case PAYMENT_EVENTS.LS_ORDER_REFUNDED:\n      case PAYMENT_EVENTS.STRIPE_REFUND_CREATED:\n        // Handle refund\n        const refundedOrder = await Order.findById(result.data.orderId)\n        const refundedUser = await User.findById(refundedOrder.userId)\n\n        refundedOrder.status = 'refunded'\n        await refundedOrder.save()\n\n        // Revoke product access\n        if (refundedUser.plan === 'pro') {\n          refundedUser.plan = 'free'\n          refundedUser.planExpiresAt = null\n          await refundedUser.save()\n        }\n\n        // Notify customer\n        await sendEmail({\n          to: refundedUser.email,\n          template: 'refund-processed',\n          data: {\n            userName: refundedUser.name,\n            orderId: refundedOrder._id,\n            amount: (result.data.amount / 100).toFixed(2),\n          },\n        })\n\n        console.log(`Order ${refundedOrder._id} refunded`)\n        break\n    }\n\n    return res.status(200).json({ received: true })\n  } catch (error) {\n    // Log the error but still return 200 to prevent retry storms\n    console.error(`Webhook processing error: ${error.message}`)\n    return res.status(200).json({ received: true, error: error.message })\n  }\n}\n",[146,1945,1946,1964,1984,2004,2024,2028,2054,2080,2084,2091,2108,2121,2133,2138,2171,2200,2204,2209,2226,2246,2268,2282,2286,2291,2319,2339,2399,2413,2419,2424,2430,2441,2458,2475,2485,2502,2519,2561,2589,2595,2603,2608,2645,2651,2656,2669,2675,2707,2736,2741,2752,2767,2783,2792,2807,2822,2827,2834,2839,2858,2871,2876,2881,2894,2908,2914,2946,2975,2980,2999,3012,3017,3023,3049,3068,3082,3095,3100,3105,3111,3122,3137,3153,3162,3177,3192,3229,3234,3241,3246,3278,3283,3288,3293,3329,3346,3352,3383,3431,3436],{"__ignoreMap":144},[149,1947,1948,1950,1952,1954,1956,1958,1960,1962],{"class":151,"line":152},[149,1949,554],{"class":460},[149,1951,426],{"class":179},[149,1953,559],{"class":169},[149,1955,562],{"class":179},[149,1957,565],{"class":460},[149,1959,211],{"class":179},[149,1961,570],{"class":159},[149,1963,241],{"class":179},[149,1965,1966,1968,1970,1973,1975,1977,1979,1982],{"class":151,"line":173},[149,1967,554],{"class":460},[149,1969,426],{"class":179},[149,1971,1972],{"class":169}," sendEmail",[149,1974,562],{"class":179},[149,1976,565],{"class":460},[149,1978,211],{"class":179},[149,1980,1981],{"class":159},"@/services/email",[149,1983,241],{"class":179},[149,1985,1986,1988,1990,1993,1995,1997,1999,2002],{"class":151,"line":191},[149,1987,554],{"class":460},[149,1989,426],{"class":179},[149,1991,1992],{"class":169}," Order",[149,1994,562],{"class":179},[149,1996,565],{"class":460},[149,1998,211],{"class":179},[149,2000,2001],{"class":159},"@/models/order",[149,2003,241],{"class":179},[149,2005,2006,2008,2010,2013,2015,2017,2019,2022],{"class":151,"line":205},[149,2007,554],{"class":460},[149,2009,426],{"class":179},[149,2011,2012],{"class":169}," User",[149,2014,562],{"class":179},[149,2016,565],{"class":460},[149,2018,211],{"class":179},[149,2020,2021],{"class":159},"@/models/user",[149,2023,241],{"class":179},[149,2025,2026],{"class":151,"line":217},[149,2027,578],{"emptyLinePlaceholder":577},[149,2029,2030,2032,2034,2036,2038,2040,2042,2044,2046,2048,2050,2052],{"class":151,"line":223},[149,2031,583],{"class":460},[149,2033,586],{"class":263},[149,2035,589],{"class":169},[149,2037,592],{"class":179},[149,2039,595],{"class":263},[149,2041,598],{"class":179},[149,2043,602],{"class":601},[149,2045,605],{"class":179},[149,2047,608],{"class":601},[149,2049,611],{"class":179},[149,2051,614],{"class":263},[149,2053,286],{"class":179},[149,2055,2056,2058,2060,2062,2064,2066,2068,2070,2072,2074,2076,2078],{"class":151,"line":229},[149,2057,621],{"class":263},[149,2059,624],{"class":169},[149,2061,435],{"class":179},[149,2063,461],{"class":460},[149,2065,631],{"class":169},[149,2067,441],{"class":179},[149,2069,636],{"class":469},[149,2071,473],{"class":494},[149,2073,602],{"class":169},[149,2075,605],{"class":179},[149,2077,608],{"class":169},[149,2079,528],{"class":494},[149,2081,2082],{"class":151,"line":235},[149,2083,578],{"emptyLinePlaceholder":577},[149,2085,2086,2089],{"class":151,"line":387},[149,2087,2088],{"class":460},"  try",[149,2090,286],{"class":179},[149,2092,2093,2096,2098,2100,2102,2104,2106],{"class":151,"line":393},[149,2094,2095],{"class":460},"    switch",[149,2097,598],{"class":494},[149,2099,660],{"class":169},[149,2101,441],{"class":179},[149,2103,665],{"class":169},[149,2105,668],{"class":494},[149,2107,214],{"class":179},[149,2109,2110,2113,2115,2117,2119],{"class":151,"line":723},[149,2111,2112],{"class":460},"      case",[149,2114,559],{"class":169},[149,2116,441],{"class":179},[149,2118,682],{"class":169},[149,2120,685],{"class":179},[149,2122,2123,2125,2127,2129,2131],{"class":151,"line":729},[149,2124,2112],{"class":460},[149,2126,559],{"class":169},[149,2128,441],{"class":179},[149,2130,1287],{"class":169},[149,2132,685],{"class":179},[149,2134,2135],{"class":151,"line":745},[149,2136,2137],{"class":412},"        // Get order data\n",[149,2139,2140,2143,2146,2148,2150,2152,2154,2157,2159,2161,2163,2165,2167,2169],{"class":151,"line":768},[149,2141,2142],{"class":263},"        const",[149,2144,2145],{"class":169}," order",[149,2147,435],{"class":179},[149,2149,461],{"class":460},[149,2151,1992],{"class":169},[149,2153,441],{"class":179},[149,2155,2156],{"class":469},"findById",[149,2158,473],{"class":494},[149,2160,660],{"class":169},[149,2162,441],{"class":179},[149,2164,279],{"class":169},[149,2166,441],{"class":179},[149,2168,740],{"class":169},[149,2170,528],{"class":494},[149,2172,2173,2175,2178,2180,2182,2184,2186,2188,2190,2193,2195,2198],{"class":151,"line":782},[149,2174,2142],{"class":263},[149,2176,2177],{"class":169}," user",[149,2179,435],{"class":179},[149,2181,461],{"class":460},[149,2183,2012],{"class":169},[149,2185,441],{"class":179},[149,2187,2156],{"class":469},[149,2189,473],{"class":494},[149,2191,2192],{"class":169},"order",[149,2194,441],{"class":179},[149,2196,2197],{"class":169},"userId",[149,2199,528],{"class":494},[149,2201,2202],{"class":151,"line":787},[149,2203,578],{"emptyLinePlaceholder":577},[149,2205,2206],{"class":151,"line":793},[149,2207,2208],{"class":412},"        // Update order status\n",[149,2210,2211,2214,2216,2218,2220,2222,2224],{"class":151,"line":807},[149,2212,2213],{"class":169},"        order",[149,2215,441],{"class":179},[149,2217,335],{"class":169},[149,2219,435],{"class":179},[149,2221,211],{"class":179},[149,2223,761],{"class":159},[149,2225,241],{"class":179},[149,2227,2228,2230,2232,2235,2237,2240,2243],{"class":151,"line":826},[149,2229,2213],{"class":169},[149,2231,441],{"class":179},[149,2233,2234],{"class":169},"paidAt",[149,2236,435],{"class":179},[149,2238,2239],{"class":179}," new",[149,2241,2242],{"class":469}," Date",[149,2244,2245],{"class":494},"()\n",[149,2247,2248,2250,2252,2255,2257,2259,2261,2263,2265],{"class":151,"line":840},[149,2249,2213],{"class":169},[149,2251,441],{"class":179},[149,2253,2254],{"class":169},"paymentId",[149,2256,435],{"class":179},[149,2258,624],{"class":169},[149,2260,441],{"class":179},[149,2262,279],{"class":169},[149,2264,441],{"class":179},[149,2266,2267],{"class":169},"id\n",[149,2269,2270,2273,2275,2277,2280],{"class":151,"line":845},[149,2271,2272],{"class":460},"        await",[149,2274,2145],{"class":169},[149,2276,441],{"class":179},[149,2278,2279],{"class":469},"save",[149,2281,2245],{"class":494},[149,2283,2284],{"class":151,"line":850},[149,2285,578],{"emptyLinePlaceholder":577},[149,2287,2288],{"class":151,"line":855},[149,2289,2290],{"class":412},"        // Grant product access\n",[149,2292,2293,2296,2298,2300,2302,2305,2308,2310,2313,2315,2317],{"class":151,"line":896},[149,2294,2295],{"class":460},"        if",[149,2297,598],{"class":494},[149,2299,2192],{"class":169},[149,2301,441],{"class":179},[149,2303,2304],{"class":169},"product",[149,2306,2307],{"class":179}," ===",[149,2309,211],{"class":179},[149,2311,2312],{"class":159},"pro-plan",[149,2314,514],{"class":179},[149,2316,668],{"class":494},[149,2318,214],{"class":179},[149,2320,2322,2325,2327,2330,2332,2334,2337],{"class":151,"line":2321},25,[149,2323,2324],{"class":169},"          user",[149,2326,441],{"class":179},[149,2328,2329],{"class":169},"plan",[149,2331,435],{"class":179},[149,2333,211],{"class":179},[149,2335,2336],{"class":159},"pro",[149,2338,241],{"class":179},[149,2340,2342,2344,2346,2349,2351,2353,2355,2357,2360,2362,2365,2368,2371,2374,2377,2380,2382,2385,2387,2389,2391,2394,2396],{"class":151,"line":2341},26,[149,2343,2324],{"class":169},[149,2345,441],{"class":179},[149,2347,2348],{"class":169},"planExpiresAt",[149,2350,435],{"class":179},[149,2352,2239],{"class":179},[149,2354,2242],{"class":469},[149,2356,473],{"class":494},[149,2358,2359],{"class":169},"Date",[149,2361,441],{"class":179},[149,2363,2364],{"class":469},"now",[149,2366,2367],{"class":494},"() ",[149,2369,2370],{"class":179},"+",[149,2372,2373],{"class":362}," 365",[149,2375,2376],{"class":179}," *",[149,2378,2379],{"class":362}," 24",[149,2381,2376],{"class":179},[149,2383,2384],{"class":362}," 60",[149,2386,2376],{"class":179},[149,2388,2384],{"class":362},[149,2390,2376],{"class":179},[149,2392,2393],{"class":362}," 1000",[149,2395,668],{"class":494},[149,2397,2398],{"class":412},"// 1 year\n",[149,2400,2402,2405,2407,2409,2411],{"class":151,"line":2401},27,[149,2403,2404],{"class":460},"          await",[149,2406,2177],{"class":169},[149,2408,441],{"class":179},[149,2410,2279],{"class":469},[149,2412,2245],{"class":494},[149,2414,2416],{"class":151,"line":2415},28,[149,2417,2418],{"class":179},"        }\n",[149,2420,2422],{"class":151,"line":2421},29,[149,2423,578],{"emptyLinePlaceholder":577},[149,2425,2427],{"class":151,"line":2426},30,[149,2428,2429],{"class":412},"        // Send confirmation email\n",[149,2431,2433,2435,2437,2439],{"class":151,"line":2432},31,[149,2434,2272],{"class":460},[149,2436,1972],{"class":469},[149,2438,473],{"class":494},[149,2440,214],{"class":179},[149,2442,2444,2447,2449,2451,2453,2456],{"class":151,"line":2443},32,[149,2445,2446],{"class":494},"          to",[149,2448,269],{"class":179},[149,2450,2177],{"class":169},[149,2452,441],{"class":179},[149,2454,2455],{"class":169},"email",[149,2457,308],{"class":179},[149,2459,2461,2464,2466,2468,2471,2473],{"class":151,"line":2460},33,[149,2462,2463],{"class":494},"          template",[149,2465,269],{"class":179},[149,2467,211],{"class":179},[149,2469,2470],{"class":159},"payment-confirmed",[149,2472,514],{"class":179},[149,2474,308],{"class":179},[149,2476,2478,2481,2483],{"class":151,"line":2477},34,[149,2479,2480],{"class":494},"          data",[149,2482,269],{"class":179},[149,2484,286],{"class":179},[149,2486,2488,2491,2493,2495,2497,2500],{"class":151,"line":2487},35,[149,2489,2490],{"class":494},"            userName",[149,2492,269],{"class":179},[149,2494,2177],{"class":169},[149,2496,441],{"class":179},[149,2498,2499],{"class":169},"name",[149,2501,308],{"class":179},[149,2503,2505,2508,2510,2512,2514,2517],{"class":151,"line":2504},36,[149,2506,2507],{"class":494},"            orderId",[149,2509,269],{"class":179},[149,2511,2145],{"class":169},[149,2513,441],{"class":179},[149,2515,2516],{"class":169},"_id",[149,2518,308],{"class":179},[149,2520,2522,2525,2527,2529,2531,2533,2535,2537,2539,2542,2545,2547,2549,2552,2554,2557,2559],{"class":151,"line":2521},37,[149,2523,2524],{"class":494},"            amount",[149,2526,269],{"class":179},[149,2528,598],{"class":494},[149,2530,660],{"class":169},[149,2532,441],{"class":179},[149,2534,279],{"class":169},[149,2536,441],{"class":179},[149,2538,355],{"class":169},[149,2540,2541],{"class":179}," /",[149,2543,2544],{"class":362}," 100",[149,2546,611],{"class":494},[149,2548,441],{"class":179},[149,2550,2551],{"class":469},"toFixed",[149,2553,473],{"class":494},[149,2555,2556],{"class":362},"2",[149,2558,611],{"class":494},[149,2560,308],{"class":179},[149,2562,2564,2567,2569,2571,2573,2575,2577,2579,2581,2584,2587],{"class":151,"line":2563},38,[149,2565,2566],{"class":494},"            currency",[149,2568,269],{"class":179},[149,2570,624],{"class":169},[149,2572,441],{"class":179},[149,2574,279],{"class":169},[149,2576,441],{"class":179},[149,2578,372],{"class":169},[149,2580,441],{"class":179},[149,2582,2583],{"class":469},"toUpperCase",[149,2585,2586],{"class":494},"()",[149,2588,308],{"class":179},[149,2590,2592],{"class":151,"line":2591},39,[149,2593,2594],{"class":179},"          },\n",[149,2596,2598,2601],{"class":151,"line":2597},40,[149,2599,2600],{"class":179},"        }",[149,2602,528],{"class":494},[149,2604,2606],{"class":151,"line":2605},41,[149,2607,578],{"emptyLinePlaceholder":577},[149,2609,2611,2614,2616,2619,2621,2624,2627,2630,2632,2634,2636,2638,2641,2643],{"class":151,"line":2610},42,[149,2612,2613],{"class":169},"        console",[149,2615,441],{"class":179},[149,2617,2618],{"class":469},"log",[149,2620,473],{"class":494},[149,2622,2623],{"class":179},"`",[149,2625,2626],{"class":159},"Order ",[149,2628,2629],{"class":179},"${",[149,2631,2192],{"class":169},[149,2633,441],{"class":179},[149,2635,2516],{"class":169},[149,2637,432],{"class":179},[149,2639,2640],{"class":159}," fulfilled",[149,2642,2623],{"class":179},[149,2644,528],{"class":494},[149,2646,2648],{"class":151,"line":2647},43,[149,2649,2650],{"class":460},"        break\n",[149,2652,2654],{"class":151,"line":2653},44,[149,2655,578],{"emptyLinePlaceholder":577},[149,2657,2659,2661,2663,2665,2667],{"class":151,"line":2658},45,[149,2660,2112],{"class":460},[149,2662,559],{"class":169},[149,2664,441],{"class":179},[149,2666,802],{"class":169},[149,2668,685],{"class":179},[149,2670,2672],{"class":151,"line":2671},46,[149,2673,2674],{"class":412},"        // Notify customer of failure\n",[149,2676,2678,2680,2683,2685,2687,2689,2691,2693,2695,2697,2699,2701,2703,2705],{"class":151,"line":2677},47,[149,2679,2142],{"class":263},[149,2681,2682],{"class":169}," failedOrder",[149,2684,435],{"class":179},[149,2686,461],{"class":460},[149,2688,1992],{"class":169},[149,2690,441],{"class":179},[149,2692,2156],{"class":469},[149,2694,473],{"class":494},[149,2696,660],{"class":169},[149,2698,441],{"class":179},[149,2700,279],{"class":169},[149,2702,441],{"class":179},[149,2704,740],{"class":169},[149,2706,528],{"class":494},[149,2708,2710,2712,2715,2717,2719,2721,2723,2725,2727,2730,2732,2734],{"class":151,"line":2709},48,[149,2711,2142],{"class":263},[149,2713,2714],{"class":169}," failedUser",[149,2716,435],{"class":179},[149,2718,461],{"class":460},[149,2720,2012],{"class":169},[149,2722,441],{"class":179},[149,2724,2156],{"class":469},[149,2726,473],{"class":494},[149,2728,2729],{"class":169},"failedOrder",[149,2731,441],{"class":179},[149,2733,2197],{"class":169},[149,2735,528],{"class":494},[149,2737,2739],{"class":151,"line":2738},49,[149,2740,578],{"emptyLinePlaceholder":577},[149,2742,2744,2746,2748,2750],{"class":151,"line":2743},50,[149,2745,2272],{"class":460},[149,2747,1972],{"class":469},[149,2749,473],{"class":494},[149,2751,214],{"class":179},[149,2753,2755,2757,2759,2761,2763,2765],{"class":151,"line":2754},51,[149,2756,2446],{"class":494},[149,2758,269],{"class":179},[149,2760,2714],{"class":169},[149,2762,441],{"class":179},[149,2764,2455],{"class":169},[149,2766,308],{"class":179},[149,2768,2770,2772,2774,2776,2779,2781],{"class":151,"line":2769},52,[149,2771,2463],{"class":494},[149,2773,269],{"class":179},[149,2775,211],{"class":179},[149,2777,2778],{"class":159},"payment-failed",[149,2780,514],{"class":179},[149,2782,308],{"class":179},[149,2784,2786,2788,2790],{"class":151,"line":2785},53,[149,2787,2480],{"class":494},[149,2789,269],{"class":179},[149,2791,286],{"class":179},[149,2793,2795,2797,2799,2801,2803,2805],{"class":151,"line":2794},54,[149,2796,2490],{"class":494},[149,2798,269],{"class":179},[149,2800,2714],{"class":169},[149,2802,441],{"class":179},[149,2804,2499],{"class":169},[149,2806,308],{"class":179},[149,2808,2810,2812,2814,2816,2818,2820],{"class":151,"line":2809},55,[149,2811,2507],{"class":494},[149,2813,269],{"class":179},[149,2815,2682],{"class":169},[149,2817,441],{"class":179},[149,2819,2516],{"class":169},[149,2821,308],{"class":179},[149,2823,2825],{"class":151,"line":2824},56,[149,2826,2594],{"class":179},[149,2828,2830,2832],{"class":151,"line":2829},57,[149,2831,2600],{"class":179},[149,2833,528],{"class":494},[149,2835,2837],{"class":151,"line":2836},58,[149,2838,578],{"emptyLinePlaceholder":577},[149,2840,2842,2845,2847,2849,2851,2853,2856],{"class":151,"line":2841},59,[149,2843,2844],{"class":169},"        failedOrder",[149,2846,441],{"class":179},[149,2848,335],{"class":169},[149,2850,435],{"class":179},[149,2852,211],{"class":179},[149,2854,2855],{"class":159},"failed",[149,2857,241],{"class":179},[149,2859,2861,2863,2865,2867,2869],{"class":151,"line":2860},60,[149,2862,2272],{"class":460},[149,2864,2682],{"class":169},[149,2866,441],{"class":179},[149,2868,2279],{"class":469},[149,2870,2245],{"class":494},[149,2872,2874],{"class":151,"line":2873},61,[149,2875,2650],{"class":460},[149,2877,2879],{"class":151,"line":2878},62,[149,2880,578],{"emptyLinePlaceholder":577},[149,2882,2884,2886,2888,2890,2892],{"class":151,"line":2883},63,[149,2885,2112],{"class":460},[149,2887,559],{"class":169},[149,2889,441],{"class":179},[149,2891,1387],{"class":169},[149,2893,685],{"class":179},[149,2895,2897,2899,2901,2903,2906],{"class":151,"line":2896},64,[149,2898,2112],{"class":460},[149,2900,559],{"class":169},[149,2902,441],{"class":179},[149,2904,2905],{"class":169},"STRIPE_REFUND_CREATED",[149,2907,685],{"class":179},[149,2909,2911],{"class":151,"line":2910},65,[149,2912,2913],{"class":412},"        // Handle refund\n",[149,2915,2917,2919,2922,2924,2926,2928,2930,2932,2934,2936,2938,2940,2942,2944],{"class":151,"line":2916},66,[149,2918,2142],{"class":263},[149,2920,2921],{"class":169}," refundedOrder",[149,2923,435],{"class":179},[149,2925,461],{"class":460},[149,2927,1992],{"class":169},[149,2929,441],{"class":179},[149,2931,2156],{"class":469},[149,2933,473],{"class":494},[149,2935,660],{"class":169},[149,2937,441],{"class":179},[149,2939,279],{"class":169},[149,2941,441],{"class":179},[149,2943,740],{"class":169},[149,2945,528],{"class":494},[149,2947,2949,2951,2954,2956,2958,2960,2962,2964,2966,2969,2971,2973],{"class":151,"line":2948},67,[149,2950,2142],{"class":263},[149,2952,2953],{"class":169}," refundedUser",[149,2955,435],{"class":179},[149,2957,461],{"class":460},[149,2959,2012],{"class":169},[149,2961,441],{"class":179},[149,2963,2156],{"class":469},[149,2965,473],{"class":494},[149,2967,2968],{"class":169},"refundedOrder",[149,2970,441],{"class":179},[149,2972,2197],{"class":169},[149,2974,528],{"class":494},[149,2976,2978],{"class":151,"line":2977},68,[149,2979,578],{"emptyLinePlaceholder":577},[149,2981,2983,2986,2988,2990,2992,2994,2997],{"class":151,"line":2982},69,[149,2984,2985],{"class":169},"        refundedOrder",[149,2987,441],{"class":179},[149,2989,335],{"class":169},[149,2991,435],{"class":179},[149,2993,211],{"class":179},[149,2995,2996],{"class":159},"refunded",[149,2998,241],{"class":179},[149,3000,3002,3004,3006,3008,3010],{"class":151,"line":3001},70,[149,3003,2272],{"class":460},[149,3005,2921],{"class":169},[149,3007,441],{"class":179},[149,3009,2279],{"class":469},[149,3011,2245],{"class":494},[149,3013,3015],{"class":151,"line":3014},71,[149,3016,578],{"emptyLinePlaceholder":577},[149,3018,3020],{"class":151,"line":3019},72,[149,3021,3022],{"class":412},"        // Revoke product access\n",[149,3024,3026,3028,3030,3033,3035,3037,3039,3041,3043,3045,3047],{"class":151,"line":3025},73,[149,3027,2295],{"class":460},[149,3029,598],{"class":494},[149,3031,3032],{"class":169},"refundedUser",[149,3034,441],{"class":179},[149,3036,2329],{"class":169},[149,3038,2307],{"class":179},[149,3040,211],{"class":179},[149,3042,2336],{"class":159},[149,3044,514],{"class":179},[149,3046,668],{"class":494},[149,3048,214],{"class":179},[149,3050,3052,3055,3057,3059,3061,3063,3066],{"class":151,"line":3051},74,[149,3053,3054],{"class":169},"          refundedUser",[149,3056,441],{"class":179},[149,3058,2329],{"class":169},[149,3060,435],{"class":179},[149,3062,211],{"class":179},[149,3064,3065],{"class":159},"free",[149,3067,241],{"class":179},[149,3069,3071,3073,3075,3077,3079],{"class":151,"line":3070},75,[149,3072,3054],{"class":169},[149,3074,441],{"class":179},[149,3076,2348],{"class":169},[149,3078,435],{"class":179},[149,3080,3081],{"class":179}," null\n",[149,3083,3085,3087,3089,3091,3093],{"class":151,"line":3084},76,[149,3086,2404],{"class":460},[149,3088,2953],{"class":169},[149,3090,441],{"class":179},[149,3092,2279],{"class":469},[149,3094,2245],{"class":494},[149,3096,3098],{"class":151,"line":3097},77,[149,3099,2418],{"class":179},[149,3101,3103],{"class":151,"line":3102},78,[149,3104,578],{"emptyLinePlaceholder":577},[149,3106,3108],{"class":151,"line":3107},79,[149,3109,3110],{"class":412},"        // Notify customer\n",[149,3112,3114,3116,3118,3120],{"class":151,"line":3113},80,[149,3115,2272],{"class":460},[149,3117,1972],{"class":469},[149,3119,473],{"class":494},[149,3121,214],{"class":179},[149,3123,3125,3127,3129,3131,3133,3135],{"class":151,"line":3124},81,[149,3126,2446],{"class":494},[149,3128,269],{"class":179},[149,3130,2953],{"class":169},[149,3132,441],{"class":179},[149,3134,2455],{"class":169},[149,3136,308],{"class":179},[149,3138,3140,3142,3144,3146,3149,3151],{"class":151,"line":3139},82,[149,3141,2463],{"class":494},[149,3143,269],{"class":179},[149,3145,211],{"class":179},[149,3147,3148],{"class":159},"refund-processed",[149,3150,514],{"class":179},[149,3152,308],{"class":179},[149,3154,3156,3158,3160],{"class":151,"line":3155},83,[149,3157,2480],{"class":494},[149,3159,269],{"class":179},[149,3161,286],{"class":179},[149,3163,3165,3167,3169,3171,3173,3175],{"class":151,"line":3164},84,[149,3166,2490],{"class":494},[149,3168,269],{"class":179},[149,3170,2953],{"class":169},[149,3172,441],{"class":179},[149,3174,2499],{"class":169},[149,3176,308],{"class":179},[149,3178,3180,3182,3184,3186,3188,3190],{"class":151,"line":3179},85,[149,3181,2507],{"class":494},[149,3183,269],{"class":179},[149,3185,2921],{"class":169},[149,3187,441],{"class":179},[149,3189,2516],{"class":169},[149,3191,308],{"class":179},[149,3193,3195,3197,3199,3201,3203,3205,3207,3209,3211,3213,3215,3217,3219,3221,3223,3225,3227],{"class":151,"line":3194},86,[149,3196,2524],{"class":494},[149,3198,269],{"class":179},[149,3200,598],{"class":494},[149,3202,660],{"class":169},[149,3204,441],{"class":179},[149,3206,279],{"class":169},[149,3208,441],{"class":179},[149,3210,355],{"class":169},[149,3212,2541],{"class":179},[149,3214,2544],{"class":362},[149,3216,611],{"class":494},[149,3218,441],{"class":179},[149,3220,2551],{"class":469},[149,3222,473],{"class":494},[149,3224,2556],{"class":362},[149,3226,611],{"class":494},[149,3228,308],{"class":179},[149,3230,3232],{"class":151,"line":3231},87,[149,3233,2594],{"class":179},[149,3235,3237,3239],{"class":151,"line":3236},88,[149,3238,2600],{"class":179},[149,3240,528],{"class":494},[149,3242,3244],{"class":151,"line":3243},89,[149,3245,578],{"emptyLinePlaceholder":577},[149,3247,3249,3251,3253,3255,3257,3259,3261,3263,3265,3267,3269,3271,3274,3276],{"class":151,"line":3248},90,[149,3250,2613],{"class":169},[149,3252,441],{"class":179},[149,3254,2618],{"class":469},[149,3256,473],{"class":494},[149,3258,2623],{"class":179},[149,3260,2626],{"class":159},[149,3262,2629],{"class":179},[149,3264,2968],{"class":169},[149,3266,441],{"class":179},[149,3268,2516],{"class":169},[149,3270,432],{"class":179},[149,3272,3273],{"class":159}," refunded",[149,3275,2623],{"class":179},[149,3277,528],{"class":494},[149,3279,3281],{"class":151,"line":3280},91,[149,3282,2650],{"class":460},[149,3284,3286],{"class":151,"line":3285},92,[149,3287,989],{"class":179},[149,3289,3291],{"class":151,"line":3290},93,[149,3292,578],{"emptyLinePlaceholder":577},[149,3294,3296,3299,3301,3303,3305,3307,3309,3311,3313,3315,3317,3319,3321,3323,3325,3327],{"class":151,"line":3295},94,[149,3297,3298],{"class":460},"    return",[149,3300,608],{"class":169},[149,3302,441],{"class":179},[149,3304,335],{"class":469},[149,3306,473],{"class":494},[149,3308,869],{"class":362},[149,3310,611],{"class":494},[149,3312,441],{"class":179},[149,3314,249],{"class":469},[149,3316,473],{"class":494},[149,3318,880],{"class":179},[149,3320,883],{"class":494},[149,3322,269],{"class":179},[149,3324,889],{"class":888},[149,3326,562],{"class":179},[149,3328,528],{"class":494},[149,3330,3332,3334,3337,3339,3342,3344],{"class":151,"line":3331},95,[149,3333,238],{"class":179},[149,3335,3336],{"class":460}," catch",[149,3338,598],{"class":494},[149,3340,3341],{"class":169},"error",[149,3343,668],{"class":494},[149,3345,214],{"class":179},[149,3347,3349],{"class":151,"line":3348},96,[149,3350,3351],{"class":412},"    // Log the error but still return 200 to prevent retry storms\n",[149,3353,3355,3358,3360,3362,3364,3366,3369,3371,3373,3375,3378,3381],{"class":151,"line":3354},97,[149,3356,3357],{"class":169},"    console",[149,3359,441],{"class":179},[149,3361,3341],{"class":469},[149,3363,473],{"class":494},[149,3365,2623],{"class":179},[149,3367,3368],{"class":159},"Webhook processing error: ",[149,3370,2629],{"class":179},[149,3372,3341],{"class":169},[149,3374,441],{"class":179},[149,3376,3377],{"class":169},"message",[149,3379,3380],{"class":179},"}`",[149,3382,528],{"class":494},[149,3384,3386,3388,3390,3392,3394,3396,3398,3400,3402,3404,3406,3408,3410,3412,3414,3416,3419,3421,3423,3425,3427,3429],{"class":151,"line":3385},98,[149,3387,3298],{"class":460},[149,3389,608],{"class":169},[149,3391,441],{"class":179},[149,3393,335],{"class":469},[149,3395,473],{"class":494},[149,3397,869],{"class":362},[149,3399,611],{"class":494},[149,3401,441],{"class":179},[149,3403,249],{"class":469},[149,3405,473],{"class":494},[149,3407,880],{"class":179},[149,3409,883],{"class":494},[149,3411,269],{"class":179},[149,3413,889],{"class":888},[149,3415,605],{"class":179},[149,3417,3418],{"class":494}," error",[149,3420,269],{"class":179},[149,3422,3418],{"class":169},[149,3424,441],{"class":179},[149,3426,3377],{"class":169},[149,3428,562],{"class":179},[149,3430,528],{"class":494},[149,3432,3434],{"class":151,"line":3433},99,[149,3435,390],{"class":179},[149,3437,3439],{"class":151,"line":3438},100,[149,3440,396],{"class":179},[900,3442],{},[125,3444,3446],{"id":3445},"example-7-pkr-payments-with-lemonsqueezy","Example 7: PKR Payments with LemonSqueezy",[130,3448,3449],{},"For Pakistani developers receiving payments in PKR:",[134,3451,3453],{"id":3452},"environment-setup","Environment Setup",[139,3455,3459],{"className":3456,"code":3457,"language":3458,"meta":144,"style":144},"language-env shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","PAYMENT_PROVIDER=lemonsqueezy\nLEMONSQUEEZY_API_KEY=your_api_key\nLEMONSQUEEZY_WEBHOOK_SECRET=your_webhook_secret\nLEMONSQUEEZY_STORE_ID=12345\n","env",[146,3460,3461,3466,3471,3476],{"__ignoreMap":144},[149,3462,3463],{"class":151,"line":152},[149,3464,3465],{},"PAYMENT_PROVIDER=lemonsqueezy\n",[149,3467,3468],{"class":151,"line":173},[149,3469,3470],{},"LEMONSQUEEZY_API_KEY=your_api_key\n",[149,3472,3473],{"class":151,"line":191},[149,3474,3475],{},"LEMONSQUEEZY_WEBHOOK_SECRET=your_webhook_secret\n",[149,3477,3478],{"class":151,"line":205},[149,3479,3480],{},"LEMONSQUEEZY_STORE_ID=12345\n",[134,3482,3484],{"id":3483},"create-a-product-in-lemonsqueezy-store","Create a Product in LemonSqueezy Store",[3486,3487,3488,3492,3495],"ol",{},[3489,3490,3491],"li",{},"Go to your LemonSqueezy store",[3489,3493,3494],{},"Create a product with price in PKR",[3489,3496,3497],{},"Copy the variant ID",[134,3499,3501],{"id":3500},"create-payment-backend","Create Payment (Backend)",[139,3503,3505],{"className":141,"code":3504,"language":143,"meta":144,"style":144},"curl -X POST http://localhost:3000/payments/create-intent \\\n  -H \"Authorization: Bearer your-jwt-token\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"amount\": 500000,\n    \"currency\": \"pkr\",\n    \"metadata\": {\n      \"variantId\": \"78901\",\n      \"orderId\": \"order_pakistan_001\"\n    }\n  }'\n",[146,3506,3507,3519,3531,3543,3551,3556,3561,3565,3569,3574,3578],{"__ignoreMap":144},[149,3508,3509,3511,3513,3515,3517],{"class":151,"line":152},[149,3510,156],{"class":155},[149,3512,160],{"class":159},[149,3514,163],{"class":159},[149,3516,166],{"class":159},[149,3518,170],{"class":169},[149,3520,3521,3523,3525,3527,3529],{"class":151,"line":173},[149,3522,176],{"class":159},[149,3524,180],{"class":179},[149,3526,183],{"class":159},[149,3528,186],{"class":179},[149,3530,170],{"class":169},[149,3532,3533,3535,3537,3539,3541],{"class":151,"line":191},[149,3534,176],{"class":159},[149,3536,180],{"class":179},[149,3538,198],{"class":159},[149,3540,186],{"class":179},[149,3542,170],{"class":169},[149,3544,3545,3547,3549],{"class":151,"line":205},[149,3546,208],{"class":159},[149,3548,211],{"class":179},[149,3550,214],{"class":159},[149,3552,3553],{"class":151,"line":217},[149,3554,3555],{"class":159},"    \"amount\": 500000,\n",[149,3557,3558],{"class":151,"line":223},[149,3559,3560],{"class":159},"    \"currency\": \"pkr\",\n",[149,3562,3563],{"class":151,"line":229},[149,3564,974],{"class":159},[149,3566,3567],{"class":151,"line":235},[149,3568,979],{"class":159},[149,3570,3571],{"class":151,"line":387},[149,3572,3573],{"class":159},"      \"orderId\": \"order_pakistan_001\"\n",[149,3575,3576],{"class":151,"line":393},[149,3577,989],{"class":159},[149,3579,3580,3582],{"class":151,"line":723},[149,3581,238],{"class":159},[149,3583,241],{"class":179},[130,3585,3586,3587,3590],{},"Note: ",[146,3588,3589],{},"500000"," paisas = PKR 5,000 (1 rupee = 100 paisas)",[134,3592,3594],{"id":3593},"handle-webhook","Handle Webhook",[139,3596,3598],{"className":403,"code":3597,"language":405,"meta":144,"style":144},"case PAYMENT_EVENTS.LS_ORDER_CREATED:\n  // Same fulfillment logic as other examples\n  // Currency is automatically PKR\n  const { orderId, amount, currency } = result.data\n  // amount is in paisas, convert for display: amount / 100 = PKR\n  const amountInPKR = amount / 100\n  \n  await sendConfirmationEmail(orderId, amountInPKR)\n  break\n",[146,3599,3600,3612,3617,3622,3649,3654,3672,3677,3692],{"__ignoreMap":144},[149,3601,3602,3605,3607,3609],{"class":151,"line":152},[149,3603,3604],{"class":460},"case",[149,3606,559],{"class":169},[149,3608,441],{"class":179},[149,3610,3611],{"class":169},"LS_ORDER_CREATED:\n",[149,3613,3614],{"class":151,"line":173},[149,3615,3616],{"class":412},"  // Same fulfillment logic as other examples\n",[149,3618,3619],{"class":151,"line":191},[149,3620,3621],{"class":412},"  // Currency is automatically PKR\n",[149,3623,3624,3626,3628,3630,3632,3634,3636,3639,3641,3643,3645,3647],{"class":151,"line":205},[149,3625,621],{"class":263},[149,3627,426],{"class":179},[149,3629,700],{"class":169},[149,3631,605],{"class":179},[149,3633,705],{"class":169},[149,3635,605],{"class":179},[149,3637,3638],{"class":169}," currency ",[149,3640,432],{"class":179},[149,3642,435],{"class":179},[149,3644,624],{"class":169},[149,3646,441],{"class":179},[149,3648,444],{"class":169},[149,3650,3651],{"class":151,"line":217},[149,3652,3653],{"class":412},"  // amount is in paisas, convert for display: amount / 100 = PKR\n",[149,3655,3656,3658,3661,3663,3666,3669],{"class":151,"line":223},[149,3657,621],{"class":263},[149,3659,3660],{"class":169}," amountInPKR ",[149,3662,592],{"class":179},[149,3664,3665],{"class":169}," amount ",[149,3667,3668],{"class":179},"/",[149,3670,3671],{"class":362}," 100\n",[149,3673,3674],{"class":151,"line":229},[149,3675,3676],{"class":169},"  \n",[149,3678,3679,3682,3684,3687,3689],{"class":151,"line":235},[149,3680,3681],{"class":460},"  await",[149,3683,735],{"class":469},[149,3685,3686],{"class":169},"(orderId",[149,3688,605],{"class":179},[149,3690,3691],{"class":169}," amountInPKR)\n",[149,3693,3694],{"class":151,"line":387},[149,3695,3696],{"class":460},"  break\n",[900,3698],{},[125,3700,3702],{"id":3701},"example-8-tiered-pricing-with-multiple-variants","Example 8: Tiered Pricing with Multiple Variants",[130,3704,3705],{},"For SaaS with multiple subscription tiers using LemonSqueezy:",[134,3707,3709],{"id":3708},"create-different-product-variants-in-lemonsqueezy","Create Different Product Variants in LemonSqueezy",[3711,3712,3713,3724,3733],"ul",{},[3489,3714,3715,3719,3720,3723],{},[3716,3717,3718],"strong",{},"Basic Plan",": variant ID ",[146,3721,3722],{},"1001"," — PKR 2,000/month",[3489,3725,3726,3719,3729,3732],{},[3716,3727,3728],{},"Pro Plan",[146,3730,3731],{},"1002"," — PKR 5,000/month",[3489,3734,3735,3719,3738,3741],{},[3716,3736,3737],{},"Enterprise Plan",[146,3739,3740],{},"1003"," — Contact sales",[134,3743,3745],{"id":3744},"create-payment-based-on-selected-plan","Create Payment Based on Selected Plan",[139,3747,3749],{"className":141,"code":3748,"language":143,"meta":144,"style":144},"# User selects Pro Plan\ncurl -X POST http://localhost:3000/payments/create-intent \\\n  -H \"Authorization: Bearer your-jwt-token\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"amount\": 500000,\n    \"currency\": \"pkr\",\n    \"metadata\": {\n      \"variantId\": \"1002\",\n      \"planType\": \"pro\",\n      \"orderId\": \"order_user_123\"\n    }\n  }'\n",[146,3750,3751,3756,3768,3780,3792,3800,3804,3808,3812,3817,3822,3827,3831],{"__ignoreMap":144},[149,3752,3753],{"class":151,"line":152},[149,3754,3755],{"class":412},"# User selects Pro Plan\n",[149,3757,3758,3760,3762,3764,3766],{"class":151,"line":173},[149,3759,156],{"class":155},[149,3761,160],{"class":159},[149,3763,163],{"class":159},[149,3765,166],{"class":159},[149,3767,170],{"class":169},[149,3769,3770,3772,3774,3776,3778],{"class":151,"line":191},[149,3771,176],{"class":159},[149,3773,180],{"class":179},[149,3775,183],{"class":159},[149,3777,186],{"class":179},[149,3779,170],{"class":169},[149,3781,3782,3784,3786,3788,3790],{"class":151,"line":205},[149,3783,176],{"class":159},[149,3785,180],{"class":179},[149,3787,198],{"class":159},[149,3789,186],{"class":179},[149,3791,170],{"class":169},[149,3793,3794,3796,3798],{"class":151,"line":217},[149,3795,208],{"class":159},[149,3797,211],{"class":179},[149,3799,214],{"class":159},[149,3801,3802],{"class":151,"line":223},[149,3803,3555],{"class":159},[149,3805,3806],{"class":151,"line":229},[149,3807,3560],{"class":159},[149,3809,3810],{"class":151,"line":235},[149,3811,974],{"class":159},[149,3813,3814],{"class":151,"line":387},[149,3815,3816],{"class":159},"      \"variantId\": \"1002\",\n",[149,3818,3819],{"class":151,"line":393},[149,3820,3821],{"class":159},"      \"planType\": \"pro\",\n",[149,3823,3824],{"class":151,"line":723},[149,3825,3826],{"class":159},"      \"orderId\": \"order_user_123\"\n",[149,3828,3829],{"class":151,"line":729},[149,3830,989],{"class":159},[149,3832,3833,3835],{"class":151,"line":745},[149,3834,238],{"class":159},[149,3836,241],{"class":179},[134,3838,3840],{"id":3839},"handle-webhook-and-grant-tier-access","Handle Webhook and Grant Tier Access",[139,3842,3844],{"className":403,"code":3843,"language":405,"meta":144,"style":144},"case PAYMENT_EVENTS.LS_ORDER_CREATED:\n  const planType = result.data.metadata.planType\n  const user = await User.findById(result.data.userId)\n  \n  switch (planType) {\n    case 'pro':\n      user.subscriptionTier = 'pro'\n      user.features = ['feature_a', 'feature_b', 'feature_c']\n      break\n    case 'basic':\n      user.subscriptionTier = 'basic'\n      user.features = ['feature_a']\n      break\n  }\n  \n  await user.save()\n  break\n",[146,3845,3846,3856,3881,3910,3914,3923,3935,3953,3995,3999,4012,4028,4048,4052,4056,4060,4072],{"__ignoreMap":144},[149,3847,3848,3850,3852,3854],{"class":151,"line":152},[149,3849,3604],{"class":460},[149,3851,559],{"class":169},[149,3853,441],{"class":179},[149,3855,3611],{"class":169},[149,3857,3858,3860,3863,3865,3867,3869,3871,3873,3876,3878],{"class":151,"line":173},[149,3859,621],{"class":263},[149,3861,3862],{"class":169}," planType ",[149,3864,592],{"class":179},[149,3866,624],{"class":169},[149,3868,441],{"class":179},[149,3870,279],{"class":169},[149,3872,441],{"class":179},[149,3874,3875],{"class":169},"metadata",[149,3877,441],{"class":179},[149,3879,3880],{"class":169},"planType\n",[149,3882,3883,3885,3888,3890,3892,3894,3896,3898,3901,3903,3905,3907],{"class":151,"line":191},[149,3884,621],{"class":263},[149,3886,3887],{"class":169}," user ",[149,3889,592],{"class":179},[149,3891,461],{"class":460},[149,3893,2012],{"class":169},[149,3895,441],{"class":179},[149,3897,2156],{"class":469},[149,3899,3900],{"class":169},"(result",[149,3902,441],{"class":179},[149,3904,279],{"class":169},[149,3906,441],{"class":179},[149,3908,3909],{"class":169},"userId)\n",[149,3911,3912],{"class":151,"line":205},[149,3913,3676],{"class":169},[149,3915,3916,3918,3921],{"class":151,"line":217},[149,3917,655],{"class":460},[149,3919,3920],{"class":169}," (planType) ",[149,3922,214],{"class":179},[149,3924,3925,3927,3929,3931,3933],{"class":151,"line":223},[149,3926,675],{"class":460},[149,3928,211],{"class":179},[149,3930,2336],{"class":159},[149,3932,514],{"class":179},[149,3934,685],{"class":179},[149,3936,3937,3940,3942,3945,3947,3949,3951],{"class":151,"line":229},[149,3938,3939],{"class":169},"      user",[149,3941,441],{"class":179},[149,3943,3944],{"class":169},"subscriptionTier ",[149,3946,592],{"class":179},[149,3948,211],{"class":179},[149,3950,2336],{"class":159},[149,3952,241],{"class":179},[149,3954,3955,3957,3959,3962,3964,3967,3969,3972,3974,3976,3978,3981,3983,3985,3987,3990,3992],{"class":151,"line":235},[149,3956,3939],{"class":169},[149,3958,441],{"class":179},[149,3960,3961],{"class":169},"features ",[149,3963,592],{"class":179},[149,3965,3966],{"class":169}," [",[149,3968,514],{"class":179},[149,3970,3971],{"class":159},"feature_a",[149,3973,514],{"class":179},[149,3975,605],{"class":179},[149,3977,211],{"class":179},[149,3979,3980],{"class":159},"feature_b",[149,3982,514],{"class":179},[149,3984,605],{"class":179},[149,3986,211],{"class":179},[149,3988,3989],{"class":159},"feature_c",[149,3991,514],{"class":179},[149,3993,3994],{"class":169},"]\n",[149,3996,3997],{"class":151,"line":387},[149,3998,790],{"class":460},[149,4000,4001,4003,4005,4008,4010],{"class":151,"line":393},[149,4002,675],{"class":460},[149,4004,211],{"class":179},[149,4006,4007],{"class":159},"basic",[149,4009,514],{"class":179},[149,4011,685],{"class":179},[149,4013,4014,4016,4018,4020,4022,4024,4026],{"class":151,"line":723},[149,4015,3939],{"class":169},[149,4017,441],{"class":179},[149,4019,3944],{"class":169},[149,4021,592],{"class":179},[149,4023,211],{"class":179},[149,4025,4007],{"class":159},[149,4027,241],{"class":179},[149,4029,4030,4032,4034,4036,4038,4040,4042,4044,4046],{"class":151,"line":729},[149,4031,3939],{"class":169},[149,4033,441],{"class":179},[149,4035,3961],{"class":169},[149,4037,592],{"class":179},[149,4039,3966],{"class":169},[149,4041,514],{"class":179},[149,4043,3971],{"class":159},[149,4045,514],{"class":179},[149,4047,3994],{"class":169},[149,4049,4050],{"class":151,"line":745},[149,4051,790],{"class":460},[149,4053,4054],{"class":151,"line":768},[149,4055,390],{"class":179},[149,4057,4058],{"class":151,"line":782},[149,4059,3676],{"class":169},[149,4061,4062,4064,4066,4068,4070],{"class":151,"line":787},[149,4063,3681],{"class":460},[149,4065,2177],{"class":169},[149,4067,441],{"class":179},[149,4069,2279],{"class":469},[149,4071,2245],{"class":169},[149,4073,4074],{"class":151,"line":793},[149,4075,3696],{"class":460},[900,4077],{},[125,4079,4081],{"id":4080},"what-comes-next","What Comes Next",[3711,4083,4084,4092],{},[3489,4085,4086,4091],{},[3716,4087,4088],{},[4089,4090,100],"a",{"href":101}," — Detailed webhook handling",[3489,4093,4094,4099],{},[3716,4095,4096],{},[4089,4097,4098],{"href":96},"Endpoints"," — Complete API reference",[4101,4102,4103],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":144,"searchDepth":173,"depth":173,"links":4105},[4106,4111,4116,4117,4118,4119,4120,4126,4131],{"id":127,"depth":173,"text":128,"children":4107},[4108,4109,4110],{"id":136,"depth":191,"text":137},{"id":399,"depth":191,"text":400},{"id":531,"depth":191,"text":532},{"id":904,"depth":173,"text":905,"children":4112},[4113,4114,4115],{"id":911,"depth":191,"text":912},{"id":1129,"depth":191,"text":1130},{"id":1171,"depth":191,"text":532},{"id":1475,"depth":173,"text":1476},{"id":1628,"depth":173,"text":1629},{"id":1792,"depth":173,"text":1793},{"id":1936,"depth":173,"text":1937},{"id":3445,"depth":173,"text":3446,"children":4121},[4122,4123,4124,4125],{"id":3452,"depth":191,"text":3453},{"id":3483,"depth":191,"text":3484},{"id":3500,"depth":191,"text":3501},{"id":3593,"depth":191,"text":3594},{"id":3701,"depth":173,"text":3702,"children":4127},[4128,4129,4130],{"id":3708,"depth":191,"text":3709},{"id":3744,"depth":191,"text":3745},{"id":3839,"depth":191,"text":3840},{"id":4080,"depth":173,"text":4081},"Copy-paste ready examples for common payment scenarios.","md",null,{},{"icon":118},{"title":4138,"description":4139,"keywords":4140},"Payment Examples","Complete code examples for Stripe and LemonSqueezy payment processing.",[4141,4142,4143,4144,4145,4146],"examples","code examples","stripe examples","lemonsqueezy examples","payment processing","webhook examples","iUmE9_iPXTFWfdqBZOveveHeMtvSCV82NlTPDhpvMLU",[4149,4134],{"title":110,"path":111,"stem":112,"description":4150,"icon":113,"children":-1},"Install the payments module into any Express application.",1777986766565]