[{"data":1,"prerenderedAt":1693},["ShallowReactive",2],{"navigation":3,"external-navigation":214,"external_core:\u002Fcore\u002Fprocessors\u002Fvouchers-depot":443},[4,8,201],{"title":5,"path":6,"stem":7},"Documentation","\u002F","README",{"title":9,"path":10,"stem":11,"children":12},"EOS","\u002Feos","eos\u002FREADME",[13,44,121,181],{"title":14,"collapsed":15,"path":16,"stem":17,"children":18,"page":43},"Adrs",true,"\u002Feos\u002Fadrs","eos\u002Fadrs",[19,23,27,31,35,39],{"title":20,"path":21,"stem":22},"Use Turborepo for the EOS monorepo","\u002Feos\u002Fadrs\u002F0001-use-turborepo-for-eos","eos\u002Fadrs\u002F0001-use-turborepo-for-eos",{"title":24,"path":25,"stem":26},"Use Oxc for linting and formatting","\u002Feos\u002Fadrs\u002F0003-use-oxc-for-linting-and-formatting","eos\u002Fadrs\u002F0003-use-oxc-for-linting-and-formatting",{"title":28,"path":29,"stem":30},"Lint Markdown and validate links in CI","\u002Feos\u002Fadrs\u002F0004-lint-markdown-in-ci","eos\u002Fadrs\u002F0004-lint-markdown-in-ci",{"title":32,"path":33,"stem":34},"Use Lefthook for repository-managed Git hooks","\u002Feos\u002Fadrs\u002F0005-use-lefthook-for-repository-git-hooks","eos\u002Fadrs\u002F0005-use-lefthook-for-repository-git-hooks",{"title":36,"path":37,"stem":38},"Use Commitlint's conventional configuration","\u002Feos\u002Fadrs\u002F0006-use-commitlint-conventional-configuration","eos\u002Fadrs\u002F0006-use-commitlint-conventional-configuration",{"title":40,"path":41,"stem":42},"Use Nx for EOS task execution","\u002Feos\u002Fadrs\u002F0007-use-nx-for-eos","eos\u002Fadrs\u002F0007-use-nx-for-eos",false,{"title":45,"path":46,"stem":47,"children":48},"Harbourmaster","\u002Feos\u002Fharbourmaster","eos\u002Fharbourmaster\u002FREADME",[49,58,71,96],{"title":50,"path":51,"stem":52,"children":53,"page":43},"Decisions","\u002Feos\u002Fharbourmaster\u002Fdecisions","eos\u002Fharbourmaster\u002Fdecisions",[54],{"title":55,"path":56,"stem":57},"AI-50: GitHub auth and fork pull request policy","\u002Feos\u002Fharbourmaster\u002Fdecisions\u002Fai-50-auth-and-fork-policy","eos\u002Fharbourmaster\u002Fdecisions\u002Fai-50-auth-and-fork-policy",{"title":59,"path":60,"stem":61,"children":62,"page":43},"Explanation","\u002Feos\u002Fharbourmaster\u002Fexplanation","eos\u002Fharbourmaster\u002Fexplanation",[63,67],{"title":64,"path":65,"stem":66},"The Harbourmaster review pipeline","\u002Feos\u002Fharbourmaster\u002Fexplanation\u002Freview-pipeline","eos\u002Fharbourmaster\u002Fexplanation\u002Freview-pipeline",{"title":68,"path":69,"stem":70},"The Harbourmaster shared-action trust boundary","\u002Feos\u002Fharbourmaster\u002Fexplanation\u002Fshared-action-trust-boundary","eos\u002Fharbourmaster\u002Fexplanation\u002Fshared-action-trust-boundary",{"title":72,"path":73,"stem":74,"children":75,"page":43},"How To","\u002Feos\u002Fharbourmaster\u002Fhow-to","eos\u002Fharbourmaster\u002Fhow-to",[76,80,84,88,92],{"title":77,"path":78,"stem":79},"How to add Harbourmaster reviews to a repository","\u002Feos\u002Fharbourmaster\u002Fhow-to\u002Fadd-harbourmaster-to-a-repository","eos\u002Fharbourmaster\u002Fhow-to\u002Fadd-harbourmaster-to-a-repository",{"title":81,"path":82,"stem":83},"How to build a pilot dashboard","\u002Feos\u002Fharbourmaster\u002Fhow-to\u002Fbuild-pilot-dashboard","eos\u002Fharbourmaster\u002Fhow-to\u002Fbuild-pilot-dashboard",{"title":85,"path":86,"stem":87},"How to configure model routing","\u002Feos\u002Fharbourmaster\u002Fhow-to\u002Fconfigure-model-routing","eos\u002Fharbourmaster\u002Fhow-to\u002Fconfigure-model-routing",{"title":89,"path":90,"stem":91},"How to request a Harbourmaster review","\u002Feos\u002Fharbourmaster\u002Fhow-to\u002Frequest-a-review","eos\u002Fharbourmaster\u002Fhow-to\u002Frequest-a-review",{"title":93,"path":94,"stem":95},"How to diagnose a Harbourmaster review failure","\u002Feos\u002Fharbourmaster\u002Fhow-to\u002Ftroubleshoot-a-review","eos\u002Fharbourmaster\u002Fhow-to\u002Ftroubleshoot-a-review",{"title":97,"path":98,"stem":99,"children":100,"page":43},"Reference","\u002Feos\u002Fharbourmaster\u002Freference","eos\u002Fharbourmaster\u002Freference",[101,105,109,113,117],{"title":102,"path":103,"stem":104},"Harbourmaster command-line interface","\u002Feos\u002Fharbourmaster\u002Freference\u002Fcli","eos\u002Fharbourmaster\u002Freference\u002Fcli",{"title":106,"path":107,"stem":108},"Harbourmaster configuration","\u002Feos\u002Fharbourmaster\u002Freference\u002Fconfiguration","eos\u002Fharbourmaster\u002Freference\u002Fconfiguration",{"title":110,"path":111,"stem":112},"Harbourmaster GitHub Action","\u002Feos\u002Fharbourmaster\u002Freference\u002Fgithub-action","eos\u002Fharbourmaster\u002Freference\u002Fgithub-action",{"title":114,"path":115,"stem":116},"Harbourmaster review behavior","\u002Feos\u002Fharbourmaster\u002Freference\u002Freview-behavior","eos\u002Fharbourmaster\u002Freference\u002Freview-behavior",{"title":118,"path":119,"stem":120},"Harbourmaster telemetry","\u002Feos\u002Fharbourmaster\u002Freference\u002Ftelemetry","eos\u002Fharbourmaster\u002Freference\u002Ftelemetry",{"title":72,"path":122,"stem":123,"children":124,"page":43},"\u002Feos\u002Fhow-to","eos\u002Fhow-to",[125,129,133,137,141,145,149,153,157,161,165,169,173,177],{"title":126,"path":127,"stem":128},"How to add an external documentation source","\u002Feos\u002Fhow-to\u002Fadd-external-documentation-source","eos\u002Fhow-to\u002Fadd-external-documentation-source",{"title":130,"path":131,"stem":132},"How to connect SDLC integrations","\u002Feos\u002Fhow-to\u002Fconnect-sdlc-integrations","eos\u002Fhow-to\u002Fconnect-sdlc-integrations",{"title":134,"path":135,"stem":136},"How to consume the EOS plugin marketplace","\u002Feos\u002Fhow-to\u002Fconsume-eos-marketplace","eos\u002Fhow-to\u002Fconsume-eos-marketplace",{"title":138,"path":139,"stem":140},"How to create a spike ticket","\u002Feos\u002Fhow-to\u002Fcreate-spike-ticket","eos\u002Fhow-to\u002Fcreate-spike-ticket",{"title":142,"path":143,"stem":144},"How to finalise a repository change","\u002Feos\u002Fhow-to\u002Ffinalise-change","eos\u002Fhow-to\u002Ffinalise-change",{"title":146,"path":147,"stem":148},"How to install the EOS Docs MCP server","\u002Feos\u002Fhow-to\u002Finstall-eos-docs-mcp","eos\u002Fhow-to\u002Finstall-eos-docs-mcp",{"title":150,"path":151,"stem":152},"How to resolve a spike ticket","\u002Feos\u002Fhow-to\u002Fresolve-spike-ticket","eos\u002Fhow-to\u002Fresolve-spike-ticket",{"title":154,"path":155,"stem":156},"How to run Git hook checks","\u002Feos\u002Fhow-to\u002Frun-git-hook-checks","eos\u002Fhow-to\u002Frun-git-hook-checks",{"title":158,"path":159,"stem":160},"How to use the AI-enabled SDLC","\u002Feos\u002Fhow-to\u002Fuse-ai-enabled-sdlc","eos\u002Fhow-to\u002Fuse-ai-enabled-sdlc",{"title":162,"path":163,"stem":164},"Use the Aikido plugin","\u002Feos\u002Fhow-to\u002Fuse-aikido-plugin","eos\u002Fhow-to\u002Fuse-aikido-plugin",{"title":166,"path":167,"stem":168},"How to use Compass","\u002Feos\u002Fhow-to\u002Fuse-compass","eos\u002Fhow-to\u002Fuse-compass",{"title":170,"path":171,"stem":172},"How to use Fallow","\u002Feos\u002Fhow-to\u002Fuse-fallow","eos\u002Fhow-to\u002Fuse-fallow",{"title":174,"path":175,"stem":176},"How to use incremental mutation tests","\u002Feos\u002Fhow-to\u002Fuse-incremental-mutation-tests","eos\u002Fhow-to\u002Fuse-incremental-mutation-tests",{"title":178,"path":179,"stem":180},"How to use Scout","\u002Feos\u002Fhow-to\u002Fuse-scout","eos\u002Fhow-to\u002Fuse-scout",{"title":97,"path":182,"stem":183,"children":184,"page":43},"\u002Feos\u002Freference","eos\u002Freference",[185,189,193,197],{"title":186,"path":187,"stem":188},"Compass CLI","\u002Feos\u002Freference\u002Fcompass-cli","eos\u002Freference\u002Fcompass-cli",{"title":190,"path":191,"stem":192},"EOS marketplace skills","\u002Feos\u002Freference\u002Fmarketplace-skills","eos\u002Freference\u002Fmarketplace-skills",{"title":194,"path":195,"stem":196},"Nx task execution and cache","\u002Feos\u002Freference\u002Fnx-task-execution","eos\u002Freference\u002Fnx-task-execution",{"title":198,"path":199,"stem":200},"Scout CLI","\u002Feos\u002Freference\u002Fscout-cli","eos\u002Freference\u002Fscout-cli",{"title":202,"path":203,"stem":204,"children":205},"Product engineering","\u002Fproduct-engineering","product-engineering\u002FREADME",[206],{"title":14,"collapsed":15,"path":207,"stem":208,"children":209,"page":43},"\u002Fproduct-engineering\u002Fadrs","product-engineering\u002Fadrs",[210],{"title":211,"path":212,"stem":213},"Codify Engineering Standards as Skills","\u002Fproduct-engineering\u002Fadrs\u002F0002-codify-engineering-standards-as-skills","product-engineering\u002Fadrs\u002F0002-codify-engineering-standards-as-skills",[215,268],{"nav":216,"source":265},[217],{"title":218,"path":219,"stem":220,"children":221},"Ember","\u002Fember","ember",[222,225,257,261],{"title":223,"path":219,"stem":224},"StoreFront Documentation","ember\u002Findex",{"title":14,"path":226,"stem":227,"children":228,"page":43},"\u002Fember\u002Fadrs","ember\u002Fadrs",[229,233,237,241,245,249,253],{"title":230,"path":231,"stem":232},"Add Infection as a non-blocking mutation testing tool for Ember","\u002Fember\u002Fadrs\u002F0001-infection-mutation-testing","ember\u002Fadrs\u002F0001-infection-mutation-testing",{"title":234,"path":235,"stem":236},"Process DELETE scheduled changes before CREATE_UPDATE at the same instant","\u002Fember\u002Fadrs\u002F0002-scheduled-change-processing-order","ember\u002Fadrs\u002F0002-scheduled-change-processing-order",{"title":238,"path":239,"stem":240},"Standard rate scheduling is permanent until overridden","\u002Fember\u002Fadrs\u002F0003-standard-rate-scheduling-is-permanent","ember\u002Fadrs\u002F0003-standard-rate-scheduling-is-permanent",{"title":242,"path":243,"stem":244},"Promotions require an existing standard rate","\u002Fember\u002Fadrs\u002F0004-promotions-require-existing-standard-rate","ember\u002Fadrs\u002F0004-promotions-require-existing-standard-rate",{"title":246,"path":247,"stem":248},"UTC datetime contract between Storefront and Hub","\u002Fember\u002Fadrs\u002F0005-utc-datetime-contract-between-storefront-and-hub","ember\u002Fadrs\u002F0005-utc-datetime-contract-between-storefront-and-hub",{"title":250,"path":251,"stem":252},"Elapsed unprocessed scheduled changes do not block rate changes","\u002Fember\u002Fadrs\u002F0006-stale-scheduler-rows-do-not-block-rate-changes","ember\u002Fadrs\u002F0006-stale-scheduler-rows-do-not-block-rate-changes",{"title":254,"path":255,"stem":256},"ADR-0007: Delete ConfigureTenantAuth routing command once OIDC setup migrates to Hub","\u002Fember\u002Fadrs\u002F0007-delete-configure-tenant-auth-routing-command","ember\u002Fadrs\u002F0007-delete-configure-tenant-auth-routing-command",{"title":258,"path":259,"stem":260},"Domain Overview","\u002Fember\u002Fdomain_overview","ember\u002Fdomain_overview",{"title":262,"path":263,"stem":264},"Main Flows","\u002Fember\u002Fkey_flows","ember\u002Fkey_flows",{"collectionName":266,"label":267,"prefix":220},"external_ember","StoreFront (Ember)",{"nav":269,"source":441},[270],{"title":271,"path":272,"stem":273,"children":274},"Core","\u002Fcore","core",[275,278,306,310,332,336,346,363,420,424],{"title":276,"path":272,"stem":277},"Documentation Index","core\u002Findex",{"title":14,"path":279,"stem":280,"children":281,"page":43},"\u002Fcore\u002Fadrs","core\u002Fadrs",[282,286,290,294,298,302],{"title":283,"path":284,"stem":285},"ADR-XXXX: Short, descriptive title","\u002Fcore\u002Fadrs\u002F0000-template","core\u002Fadrs\u002F0000-template",{"title":287,"path":288,"stem":289},"ADR-1: Promotions endpoint","\u002Fcore\u002Fadrs\u002F0001-add-promotions-endpoint","core\u002Fadrs\u002F0001-add-promotions-endpoint",{"title":291,"path":292,"stem":293},"ADR-2: EOM partner report job dispatch","\u002Fcore\u002Fadrs\u002F0002-eom-report-job-dispatch","core\u002Fadrs\u002F0002-eom-report-job-dispatch",{"title":295,"path":296,"stem":297},"ADR-3: Replace PB fee waive flag with a Zero scheme override","\u002Fcore\u002Fadrs\u002F0003-replace-pb-fee-waive-with-zero-scheme","core\u002Fadrs\u002F0003-replace-pb-fee-waive-with-zero-scheme",{"title":299,"path":300,"stem":301},"ADR-4: No processor Digital Top-up capability gate in Reloadable Commercials","\u002Fcore\u002Fadrs\u002F0004-no-processor-top-up-capability-gate","core\u002Fadrs\u002F0004-no-processor-top-up-capability-gate",{"title":303,"path":304,"stem":305},"ADR-5: Sparse polymorphic sale fee override reason stamp","\u002Fcore\u002Fadrs\u002F0005-sale-fee-override-reason-stamp","core\u002Fadrs\u002F0005-sale-fee-override-reason-stamp",{"title":307,"path":308,"stem":309},"Agent Workflow","\u002Fcore\u002Fai-workflow","core\u002Fai-workflow",{"title":311,"path":312,"stem":313,"children":314},"Backend Guide","\u002Fcore\u002Fbackend","core\u002Fbackend\u002Findex",[315,316,320,324,328],{"title":311,"path":312,"stem":313},{"title":317,"path":318,"stem":319},"Backend AI Tooling","\u002Fcore\u002Fbackend\u002Fai-tooling","core\u002Fbackend\u002Fai-tooling",{"title":321,"path":322,"stem":323},"Backend Linting and Formatting","\u002Fcore\u002Fbackend\u002Flinting-and-formatting","core\u002Fbackend\u002Flinting-and-formatting",{"title":325,"path":326,"stem":327},"Backend Setup","\u002Fcore\u002Fbackend\u002Fsetup","core\u002Fbackend\u002Fsetup",{"title":329,"path":330,"stem":331},"Backend Testing","\u002Fcore\u002Fbackend\u002Ftesting","core\u002Fbackend\u002Ftesting",{"title":333,"path":334,"stem":335},"Documentation Health","\u002Fcore\u002Fdoc-health","core\u002Fdoc-health",{"title":337,"path":338,"stem":339,"children":340},"Frontend Guide","\u002Fcore\u002Ffrontend","core\u002Ffrontend\u002Findex",[341,342],{"title":337,"path":338,"stem":339},{"title":343,"path":344,"stem":345},"Frontend Development","\u002Fcore\u002Ffrontend\u002Fdevelopment","core\u002Ffrontend\u002Fdevelopment",{"title":347,"path":348,"stem":349,"children":350,"page":43},"Modules","\u002Fcore\u002Fmodules","core\u002Fmodules",[351,355],{"title":352,"path":353,"stem":354},"Connect API","\u002Fcore\u002Fmodules\u002Fconnect-api","core\u002Fmodules\u002Fconnect-api",{"title":356,"path":357,"stem":358,"children":359,"page":43},"Secure Links","\u002Fcore\u002Fmodules\u002Fsecure-links","core\u002Fmodules\u002Fsecure-links",[360],{"title":356,"path":361,"stem":362},"\u002Fcore\u002Fmodules\u002Fsecure-links\u002Fsecure-links","core\u002Fmodules\u002Fsecure-links\u002Fsecure-links",{"title":364,"path":365,"stem":366,"children":367,"page":43},"Processors","\u002Fcore\u002Fprocessors","core\u002Fprocessors",[368,372,376,380,384,388,392,396,400,404,408,412,416],{"title":369,"path":370,"stem":371},"Amazon Processor and API","\u002Fcore\u002Fprocessors\u002Famazon","core\u002Fprocessors\u002Famazon",{"title":373,"path":374,"stem":375},"Amilon Processor and API","\u002Fcore\u002Fprocessors\u002Familon","core\u002Fprocessors\u002Familon",{"title":377,"path":378,"stem":379},"Cadooz Processor and API","\u002Fcore\u002Fprocessors\u002Fcadooz","core\u002Fprocessors\u002Fcadooz",{"title":381,"path":382,"stem":383},"Choice Digital Processor and API","\u002Fcore\u002Fprocessors\u002Fchoice-digital","core\u002Fprocessors\u002Fchoice-digital",{"title":385,"path":386,"stem":387},"Diggecard processor reference","\u002Fcore\u002Fprocessors\u002Fdiggecard","core\u002Fprocessors\u002Fdiggecard",{"title":389,"path":390,"stem":391},"ePay Processor and API","\u002Fcore\u002Fprocessors\u002Fepay","core\u002Fprocessors\u002Fepay",{"title":393,"path":394,"stem":395},"GoGift v2 Processor and API","\u002Fcore\u002Fprocessors\u002Fgo-gift-v2","core\u002Fprocessors\u002Fgo-gift-v2",{"title":397,"path":398,"stem":399},"InComm Processor and API","\u002Fcore\u002Fprocessors\u002Fincomm","core\u002Fprocessors\u002Fincomm",{"title":401,"path":402,"stem":403},"Ogloba Processor and API","\u002Fcore\u002Fprocessors\u002Fogloba","core\u002Fprocessors\u002Fogloba",{"title":405,"path":406,"stem":407},"SVSECard Processor and API","\u002Fcore\u002Fprocessors\u002Fsvs-ecard","core\u002Fprocessors\u002Fsvs-ecard",{"title":409,"path":410,"stem":411},"Vananam Processor and API","\u002Fcore\u002Fprocessors\u002Fvananam","core\u002Fprocessors\u002Fvananam",{"title":413,"path":414,"stem":415},"Vouchers Depot processor reference","\u002Fcore\u002Fprocessors\u002Fvouchers-depot","core\u002Fprocessors\u002Fvouchers-depot",{"title":417,"path":418,"stem":419},"You Got a Gift Processor and API","\u002Fcore\u002Fprocessors\u002Fyou-got-a-gift","core\u002Fprocessors\u002Fyou-got-a-gift",{"title":421,"path":422,"stem":423},"Development Quickstart","\u002Fcore\u002Fsetup","core\u002Fsetup",{"title":425,"path":426,"stem":427,"children":428,"page":43},"Workflows","\u002Fcore\u002Fworkflows","core\u002Fworkflows",[429,433,437],{"title":430,"path":431,"stem":432},"Hub Endpoint Workflow","\u002Fcore\u002Fworkflows\u002Fhub-endpoints","core\u002Fworkflows\u002Fhub-endpoints",{"title":434,"path":435,"stem":436},"OpenAPI Tooling","\u002Fcore\u002Fworkflows\u002Fopenapi-tooling","core\u002Fworkflows\u002Fopenapi-tooling",{"title":438,"path":439,"stem":440},"Processor Integration Workflow","\u002Fcore\u002Fworkflows\u002Fprocessors","core\u002Fworkflows\u002Fprocessors",{"collectionName":442,"label":271,"prefix":273},"external_core",{"page":444,"surround":1690},{"id":445,"title":413,"body":446,"config":1685,"description":452,"extension":1686,"meta":1687,"navigation":15,"path":414,"seo":1688,"stem":415,"__hash__":1689},"external_core\u002Fcore\u002Fprocessors\u002Fvouchers-depot.md",{"type":447,"value":448,"toc":1669},"minimark",[449,453,458,461,542,546,603,607,618,707,726,730,740,869,872,876,882,927,930,1023,1027,1033,1087,1109,1113,1119,1194,1205,1209,1212,1310,1328,1332,1346,1449,1455,1458,1462,1465,1550,1553,1557,1598,1602,1605,1609,1665],[450,451,452],"p",{},"This guide describes the implemented Vouchers Depot integration, its request and response contract, and the evidence needed to investigate an issuance or catalogue problem. Examples show the structure used by the application and contain placeholders instead of credentials, voucher links, or live card data.",[454,455,457],"h2",{"id":456},"processing-model","Processing model",[450,459,460],{},"Vouchers Depot is a synchronous digital-voucher processor. Issuance has two provider calls: the application creates an order, then requests the voucher details. The sale is not mapped to a completed card until the details response passes validation.",[462,463,464,477],"table",{},[465,466,467],"thead",{},[468,469,470,474],"tr",{},[471,472,473],"th",{},"Property",[471,475,476],{},"Implemented behaviour",[478,479,480,492,500,515,523,531],"tbody",{},[468,481,482,486],{},[483,484,485],"td",{},"Issuer",[483,487,488],{},[489,490,491],"code",{},"Vouchers Depot",[468,493,494,497],{},[483,495,496],{},"Processor type",[483,498,499],{},"SKU per product for open-value brands, or SKU per denomination for fixed-value brands",[468,501,502,505],{},[483,503,504],{},"Issuance",[483,506,507,508,511,512],{},"Synchronous ",[489,509,510],{},"create-order"," followed by ",[489,513,514],{},"create-order-details-vouchers",[468,516,517,520],{},[483,518,519],{},"Delivery data",[483,521,522],{},"A voucher URL and expiry date",[468,524,525,528],{},[483,526,527],{},"Balance and cancellation",[483,529,530],{},"No implementation in the processor interaction",[468,532,533,536],{},[483,534,535],{},"Provider reference",[483,537,538,541],{},[489,539,540],{},"order_id"," from the details response",[454,543,545],{"id":544},"issuance-lifecycle","Issuance lifecycle",[547,548,549,553,568,571,577,587,600],"ol",{},[550,551,552],"li",{},"The issue request supplies a transaction reference, face value, and currency.",[550,554,555,556,559,560,563,564,567],{},"The interaction selects the brand SKU. Open-value brands use ",[489,557,558],{},"vouchers-depot-sku","; fixed-value brands use ",[489,561,562],{},"vouchers-depot-sku-{amount}"," such as ",[489,565,566],{},"vouchers-depot-sku-100.00",".",[550,569,570],{},"The client obtains or reuses an access token for the request currency.",[550,572,573,574,567],{},"The client posts the transaction reference to ",[489,575,576],{},"api\u002Fv2\u002Fcreate-order",[550,578,579,580,583,584,567],{},"The client posts the same reference, the selected product ID, and quantity ",[489,581,582],{},"1"," to ",[489,585,586],{},"api\u002Fv2\u002Fcreate-order-details-vouchers",[550,588,589,590,592,593,596,597,567],{},"The details response is decoded and validated. The resulting card contains the response ",[489,591,540],{},", voucher ",[489,594,595],{},"link",", and ISO-8601 ",[489,598,599],{},"expiration_date",[550,601,602],{},"A failure in either call is returned as an external processor error; a successful order-creation response alone does not complete issuance.",[454,604,606],{"id":605},"authentication-and-http-operations","Authentication and HTTP operations",[450,608,609,610,613,614,617],{},"The base URI comes from ",[489,611,612],{},"VOUCHERS_DEPOT_BASE_URI",". Requests use JSON headers and a bearer token. The token request uses the credentials configured for the request currency and posts to ",[489,615,616],{},"api\u002Fv2\u002Fgenerate-access-token",":",[619,620,625],"pre",{"className":621,"code":622,"language":623,"meta":624,"style":624},"language-json shiki shiki-themes github-dark github-light","{\n  \"grant_type\": \"password\",\n  \"username\": \"\u003Credacted>\",\n  \"client_id\": \"\u003Credacted>\",\n  \"client_secret\": \"\u003Credacted>\",\n  \"client_password\": \"\u003Credacted>\"\n}\n","json","",[489,626,627,636,653,666,678,690,701],{"__ignoreMap":624},[628,629,632],"span",{"class":630,"line":631},"line",1,[628,633,635],{"class":634},"sQ3_J","{\n",[628,637,639,643,646,650],{"class":630,"line":638},2,[628,640,642],{"class":641},"s0DvM","  \"grant_type\"",[628,644,645],{"class":634},": ",[628,647,649],{"class":648},"sg6BJ","\"password\"",[628,651,652],{"class":634},",\n",[628,654,656,659,661,664],{"class":630,"line":655},3,[628,657,658],{"class":641},"  \"username\"",[628,660,645],{"class":634},[628,662,663],{"class":648},"\"\u003Credacted>\"",[628,665,652],{"class":634},[628,667,669,672,674,676],{"class":630,"line":668},4,[628,670,671],{"class":641},"  \"client_id\"",[628,673,645],{"class":634},[628,675,663],{"class":648},[628,677,652],{"class":634},[628,679,681,684,686,688],{"class":630,"line":680},5,[628,682,683],{"class":641},"  \"client_secret\"",[628,685,645],{"class":634},[628,687,663],{"class":648},[628,689,652],{"class":634},[628,691,693,696,698],{"class":630,"line":692},6,[628,694,695],{"class":641},"  \"client_password\"",[628,697,645],{"class":634},[628,699,700],{"class":648},"\"\u003Credacted>\"\n",[628,702,704],{"class":630,"line":703},7,[628,705,706],{"class":634},"}\n",[450,708,709,710,713,714,717,718,721,722,725],{},"The client accepts an ",[489,711,712],{},"access_token"," from a successful token response and caches it under a currency-specific key for ",[489,715,716],{},"3000"," seconds. The provider token lifetime is documented in the client as ",[489,719,720],{},"3600"," seconds. A token-generation response with ",[489,723,724],{},"status: \"error\"",", or without a token, is rejected.",[727,728,729],"h3",{"id":510},"Create order",[450,731,732,735,736,739],{},[489,733,734],{},"POST api\u002Fv2\u002Fcreate-order"," sends the transaction reference. The remaining fields are sent as the literal value ",[489,737,738],{},"NA"," because the request model has no corresponding customer address data:",[619,741,743],{"className":621,"code":742,"language":623,"meta":624,"style":624},"{\n  \"order_number\": \"\u003Ctransaction-reference>\",\n  \"contact_person\": \"NA\",\n  \"address\": \"NA\",\n  \"client_email\": \"NA\",\n  \"city\": \"NA\",\n  \"country\": \"NA\",\n  \"county\": \"NA\",\n  \"phone\": \"NA\",\n  \"company\": \"NA\",\n  \"vat_tax_no\": \"NA\"\n}\n",[489,744,745,749,761,773,784,795,806,817,829,841,853,864],{"__ignoreMap":624},[628,746,747],{"class":630,"line":631},[628,748,635],{"class":634},[628,750,751,754,756,759],{"class":630,"line":638},[628,752,753],{"class":641},"  \"order_number\"",[628,755,645],{"class":634},[628,757,758],{"class":648},"\"\u003Ctransaction-reference>\"",[628,760,652],{"class":634},[628,762,763,766,768,771],{"class":630,"line":655},[628,764,765],{"class":641},"  \"contact_person\"",[628,767,645],{"class":634},[628,769,770],{"class":648},"\"NA\"",[628,772,652],{"class":634},[628,774,775,778,780,782],{"class":630,"line":668},[628,776,777],{"class":641},"  \"address\"",[628,779,645],{"class":634},[628,781,770],{"class":648},[628,783,652],{"class":634},[628,785,786,789,791,793],{"class":630,"line":680},[628,787,788],{"class":641},"  \"client_email\"",[628,790,645],{"class":634},[628,792,770],{"class":648},[628,794,652],{"class":634},[628,796,797,800,802,804],{"class":630,"line":692},[628,798,799],{"class":641},"  \"city\"",[628,801,645],{"class":634},[628,803,770],{"class":648},[628,805,652],{"class":634},[628,807,808,811,813,815],{"class":630,"line":703},[628,809,810],{"class":641},"  \"country\"",[628,812,645],{"class":634},[628,814,770],{"class":648},[628,816,652],{"class":634},[628,818,820,823,825,827],{"class":630,"line":819},8,[628,821,822],{"class":641},"  \"county\"",[628,824,645],{"class":634},[628,826,770],{"class":648},[628,828,652],{"class":634},[628,830,832,835,837,839],{"class":630,"line":831},9,[628,833,834],{"class":641},"  \"phone\"",[628,836,645],{"class":634},[628,838,770],{"class":648},[628,840,652],{"class":634},[628,842,844,847,849,851],{"class":630,"line":843},10,[628,845,846],{"class":641},"  \"company\"",[628,848,645],{"class":634},[628,850,770],{"class":648},[628,852,652],{"class":634},[628,854,856,859,861],{"class":630,"line":855},11,[628,857,858],{"class":641},"  \"vat_tax_no\"",[628,860,645],{"class":634},[628,862,863],{"class":648},"\"NA\"\n",[628,865,867],{"class":630,"line":866},12,[628,868,706],{"class":634},[450,870,871],{},"The create-order body is not used to produce the card. The interaction only proceeds when the HTTP request succeeds; the details call supplies the fields that are mapped to the card.",[727,873,875],{"id":874},"create-order-details-voucher","Create order details voucher",[450,877,878,881],{},[489,879,880],{},"POST api\u002Fv2\u002Fcreate-order-details-vouchers"," sends:",[619,883,885],{"className":621,"code":884,"language":623,"meta":624,"style":624},"{\n  \"order_number\": \"\u003Ctransaction-reference>\",\n  \"product_id\": \"\u003Credacted-sku>\",\n  \"quantity\": \"1\"\n}\n",[489,886,887,891,901,913,923],{"__ignoreMap":624},[628,888,889],{"class":630,"line":631},[628,890,635],{"class":634},[628,892,893,895,897,899],{"class":630,"line":638},[628,894,753],{"class":641},[628,896,645],{"class":634},[628,898,758],{"class":648},[628,900,652],{"class":634},[628,902,903,906,908,911],{"class":630,"line":655},[628,904,905],{"class":641},"  \"product_id\"",[628,907,645],{"class":634},[628,909,910],{"class":648},"\"\u003Credacted-sku>\"",[628,912,652],{"class":634},[628,914,915,918,920],{"class":630,"line":668},[628,916,917],{"class":641},"  \"quantity\"",[628,919,645],{"class":634},[628,921,922],{"class":648},"\"1\"\n",[628,924,925],{"class":630,"line":680},[628,926,706],{"class":634},[450,928,929],{},"A successful response has this relevant shape. The URL, order ID, and date below are placeholders:",[619,931,933],{"className":621,"code":932,"language":623,"meta":624,"style":624},"{\n  \"vouchers\": [\n    {\n      \"link\": \"\u003Credacted-voucher-url>\",\n      \"expiration_date\": {\n        \"date\": \"\u003Cprovider-date>\",\n        \"timezone\": \"\u003Cprovider-timezone>\"\n      }\n    }\n  ],\n  \"order_id\": \"\u003Cprovider-order-id>\"\n}\n",[489,934,935,939,947,952,964,972,984,994,999,1004,1009,1019],{"__ignoreMap":624},[628,936,937],{"class":630,"line":631},[628,938,635],{"class":634},[628,940,941,944],{"class":630,"line":638},[628,942,943],{"class":641},"  \"vouchers\"",[628,945,946],{"class":634},": [\n",[628,948,949],{"class":630,"line":655},[628,950,951],{"class":634},"    {\n",[628,953,954,957,959,962],{"class":630,"line":668},[628,955,956],{"class":641},"      \"link\"",[628,958,645],{"class":634},[628,960,961],{"class":648},"\"\u003Credacted-voucher-url>\"",[628,963,652],{"class":634},[628,965,966,969],{"class":630,"line":680},[628,967,968],{"class":641},"      \"expiration_date\"",[628,970,971],{"class":634},": {\n",[628,973,974,977,979,982],{"class":630,"line":692},[628,975,976],{"class":641},"        \"date\"",[628,978,645],{"class":634},[628,980,981],{"class":648},"\"\u003Cprovider-date>\"",[628,983,652],{"class":634},[628,985,986,989,991],{"class":630,"line":703},[628,987,988],{"class":641},"        \"timezone\"",[628,990,645],{"class":634},[628,992,993],{"class":648},"\"\u003Cprovider-timezone>\"\n",[628,995,996],{"class":630,"line":819},[628,997,998],{"class":634},"      }\n",[628,1000,1001],{"class":630,"line":831},[628,1002,1003],{"class":634},"    }\n",[628,1005,1006],{"class":630,"line":843},[628,1007,1008],{"class":634},"  ],\n",[628,1010,1011,1014,1016],{"class":630,"line":855},[628,1012,1013],{"class":641},"  \"order_id\"",[628,1015,645],{"class":634},[628,1017,1018],{"class":648},"\"\u003Cprovider-order-id>\"\n",[628,1020,1021],{"class":630,"line":866},[628,1022,706],{"class":634},[727,1024,1026],{"id":1025},"generate-feed-and-catalogue-tools","Generate feed and catalogue tools",[450,1028,1029,1032],{},[489,1030,1031],{},"POST api\u002Fv2\u002Fgenerate-feed"," uses query parameters rather than a JSON body:",[462,1034,1035,1045],{},[465,1036,1037],{},[468,1038,1039,1042],{},[471,1040,1041],{},"Parameter",[471,1043,1044],{},"Meaning",[478,1046,1047,1057,1074],{},[468,1048,1049,1054],{},[483,1050,1051],{},[489,1052,1053],{},"limit",[483,1055,1056],{},"Number of products requested",[468,1058,1059,1064],{},[483,1060,1061],{},[489,1062,1063],{},"skip",[483,1065,1066,1067,1070,1071],{},"Product offset; page ",[489,1068,1069],{},"n"," uses ",[489,1072,1073],{},"(n - 1) * limit",[468,1075,1076,1081],{},[483,1077,1078],{},[489,1079,1080],{},"lang",[483,1082,1083,1084],{},"Catalogue language; the request model defaults to ",[489,1085,1086],{},"en",[450,1088,1089,1092,1093,1096,1097,1100,1101,1104,1105,1108],{},[489,1090,1091],{},"VouchersDepotCatalogueCollector"," first requests one product per configured currency to read ",[489,1094,1095],{},"total_products",". It then queues page collectors with a limit of ",[489,1098,1099],{},"100",". Each page retries up to three attempts with a one-second delay, rejects invalid JSON or a response without ",[489,1102,1103],{},"products",", stores valid pages in cache, and combines them into ",[489,1106,1107],{},"vouchers-depot-catalogue",". Missing pages are logged when the batch is combined.",[454,1110,1112],{"id":1111},"configuration-and-brand-mappings","Configuration and brand mappings",[450,1114,1115,1118],{},[489,1116,1117],{},"config\u002Fvouchers-depot.php"," defines the following environment-backed values:",[462,1120,1121,1131],{},[465,1122,1123],{},[468,1124,1125,1128],{},[471,1126,1127],{},"Configuration area",[471,1129,1130],{},"Values",[478,1132,1133,1148,1181],{},[468,1134,1135,1138],{},[483,1136,1137],{},"Global",[483,1139,1140,1143,1144,1147],{},[489,1141,1142],{},"base_uri",", ",[489,1145,1146],{},"timeout",", and legacy\u002Fglobal username and client fields",[468,1149,1150,1153],{},[483,1151,1152],{},"Currency accounts",[483,1154,1155,1143,1158,1143,1161,1143,1164,1143,1167,1143,1170,1143,1173,1176,1177,1180],{},[489,1156,1157],{},"BGN",[489,1159,1160],{},"CZK",[489,1162,1163],{},"EUR",[489,1165,1166],{},"HUF",[489,1168,1169],{},"MDL",[489,1171,1172],{},"PLN",[489,1174,1175],{},"RON",", and ",[489,1178,1179],{},"USD","; each has username, client ID, client secret, and client password",[468,1182,1183,1186],{},[483,1184,1185],{},"Brand attribute",[483,1187,1188,1190,1191,1193],{},[489,1189,558],{}," for an open-value product, or ",[489,1192,562],{}," for a fixed denomination",[450,1195,1196,1197,1200,1201,1204],{},"The access-token code reads credentials from ",[489,1198,1199],{},"vouchers-depot.currencies.{currency}",". Missing currency credentials therefore fail before the order call. The brand SKU is passed as ",[489,1202,1203],{},"product_id","; a missing mapping is an application configuration problem, not a provider response state.",[454,1206,1208],{"id":1207},"response-mapping-and-validation","Response mapping and validation",[450,1210,1211],{},"The raw client response is retained as a string. The interaction then requires all of the following:",[462,1213,1214,1227],{},[465,1215,1216],{},[468,1217,1218,1221,1224],{},[471,1219,1220],{},"Path",[471,1222,1223],{},"Rule",[471,1225,1226],{},"Card mapping",[478,1228,1229,1242,1257,1270,1282,1297],{},[468,1230,1231,1236,1239],{},[483,1232,1233],{},[489,1234,1235],{},"vouchers",[483,1237,1238],{},"Required array with exactly one item",[483,1240,1241],{},"The only voucher is selected",[468,1243,1244,1249,1252],{},[483,1245,1246],{},[489,1247,1248],{},"vouchers.0.link",[483,1250,1251],{},"Required",[483,1253,1254],{},[489,1255,1256],{},"url",[468,1258,1259,1264,1267],{},[483,1260,1261],{},[489,1262,1263],{},"vouchers.0.expiration_date",[483,1265,1266],{},"Required array",[483,1268,1269],{},"The date input",[468,1271,1272,1277,1279],{},[483,1273,1274],{},[489,1275,1276],{},"vouchers.0.expiration_date.date",[483,1278,1251],{},[483,1280,1281],{},"Parsed with the provider timezone",[468,1283,1284,1289,1291],{},[483,1285,1286],{},[489,1287,1288],{},"vouchers.0.expiration_date.timezone",[483,1290,1251],{},[483,1292,1293,1294],{},"Used by ",[489,1295,1296],{},"CarbonImmutable",[468,1298,1299,1303,1305],{},[483,1300,1301],{},[489,1302,540],{},[483,1304,1251],{},[483,1306,1307],{},[489,1308,1309],{},"processor_reference",[450,1311,1312,1313,1316,1317,1320,1321,1323,1324,1327],{},"Invalid JSON, missing fields, a voucher count other than one, or an unparseable date raises ",[489,1314,1315],{},"ResponseValidationException",". The provider ",[489,1318,1319],{},"status"," field is not used by the interaction's success validation. The client does reject JSON error responses before mapping when they contain ",[489,1322,724],{}," or a recognised ",[489,1325,1326],{},"status_code"," error.",[454,1329,1331],{"id":1330},"provider-error-states-and-retry-risks","Provider error states and retry risks",[450,1333,1334,1335,1143,1337,1143,1339,1176,1342,1345],{},"The client documents inconsistent provider error bodies, including ",[489,1336,724],{},[489,1338,1326],{},[489,1340,1341],{},"message",[489,1343,1344],{},"errors",". The implemented mapping is:",[462,1347,1348,1358],{},[465,1349,1350],{},[468,1351,1352,1355],{},[471,1353,1354],{},"Provider signal",[471,1356,1357],{},"Application result",[478,1359,1360,1372,1383,1404,1422,1432,1441],{},[468,1361,1362,1367],{},[483,1363,1364,1365],{},"Token body has ",[489,1366,724],{},[483,1368,1369],{},[489,1370,1371],{},"AuthFailureException",[468,1373,1374,1379],{},[483,1375,1376,1377],{},"Call body has ",[489,1378,724],{},[483,1380,1381],{},[489,1382,1371],{},[468,1384,1385,1398],{},[483,1386,1387,1389,1390,1393,1394,1397],{},[489,1388,1326],{}," ",[489,1391,1392],{},"0100"," or ",[489,1395,1396],{},"0152"," with errors",[483,1399,1400,1403],{},[489,1401,1402],{},"MalformedRequestException","; the client comments identify order or order-item duplication",[468,1405,1406,1416],{},[483,1407,1408,1389,1410,1393,1413,1397],{},[489,1409,1326],{},[489,1411,1412],{},"0150",[489,1414,1415],{},"0151",[483,1417,1418,1421],{},[489,1419,1420],{},"ResourceNotFoundException","; the client comments identify product or order not found",[468,1423,1424,1427],{},[483,1425,1426],{},"Other error-code body",[483,1428,1429],{},[489,1430,1431],{},"UnexpectedServerSideException",[468,1433,1434,1437],{},[483,1435,1436],{},"Invalid JSON",[483,1438,1439],{},[489,1440,1431],{},[468,1442,1443,1446],{},[483,1444,1445],{},"HTTP transport error",[483,1447,1448],{},"Mapped through the shared Guzzle exception handler",[450,1450,1451,1452,1454],{},"The issuance interaction has no retry loop. A timeout after ",[489,1453,510],{}," may leave a provider order whose outcome is unknown; repeating the complete flow can produce a duplicate order or a duplicate order item. The duplicate message is provider evidence, but the repository does not define a reconciliation operation. Do not blindly retry an uncertain issuance: retain the original transaction reference, inspect both audit calls, and ask the internal processor owner or Vouchers Depot account team to reconcile the provider order.",[450,1456,1457],{},"Catalogue collection is different: its page jobs intentionally retry up to three times. That retry policy must not be applied to the two issuance calls without first establishing the outcome of the original order.",[454,1459,1461],{"id":1460},"audit-comparison-fields","Audit comparison fields",[450,1463,1464],{},"Issuance enables request and response middleware on the client using the transaction reference. For each provider request that receives a response, compare the processor interaction audit with the internal sale record using:",[462,1466,1467,1477],{},[465,1468,1469],{},[468,1470,1471,1474],{},[471,1472,1473],{},"Evidence",[471,1475,1476],{},"Fields to compare",[478,1478,1479,1487,1495,1507,1521,1534],{},[468,1480,1481,1484],{},[483,1482,1483],{},"Internal sale",[483,1485,1486],{},"Sale UUID, transaction reference, requested currency, face value, brand, and delivery method",[468,1488,1489,1492],{},[483,1490,1491],{},"Token request",[483,1493,1494],{},"Currency selected and the configured account; never copy credentials into a ticket",[468,1496,1497,1500],{},[483,1498,1499],{},"Create-order request",[483,1501,1502,1503,1506],{},"Endpoint, ",[489,1504,1505],{},"order_number",", and the request timestamp",[468,1508,1509,1512],{},[483,1510,1511],{},"Details request",[483,1513,1502,1514,1143,1516,1176,1518],{},[489,1515,1505],{},[489,1517,1203],{},[489,1519,1520],{},"quantity",[468,1522,1523,1526],{},[483,1524,1525],{},"Details response",[483,1527,1528,1530,1531,1533],{},[489,1529,540],{},", one voucher entry, ",[489,1532,595],{},", and expiration date\u002Ftimezone",[468,1535,1536,1539],{},[483,1537,1538],{},"Error response",[483,1540,1541,1542,1143,1544,1143,1546,1176,1548],{},"HTTP status if present, ",[489,1543,1319],{},[489,1545,1326],{},[489,1547,1341],{},[489,1549,1344],{},[450,1551,1552],{},"Audit content may contain sensitive provider data. Share only redacted excerpts; do not paste bearer tokens, voucher URLs, voucher tokens, or live card data into support channels.",[454,1554,1556],{"id":1555},"investigation-checklist","Investigation checklist",[547,1558,1559,1562,1565,1568,1571,1574,1583,1586,1595],{},[550,1560,1561],{},"Confirm the internal sale UUID and transaction reference.",[550,1563,1564],{},"Confirm the requested currency is one of the configured currency accounts.",[550,1566,1567],{},"Confirm the brand is using the expected open-value or fixed-denomination SKU attribute.",[550,1569,1570],{},"Check the audit for token generation, create-order, and order-details calls in timestamp order.",[550,1572,1573],{},"If create-order succeeded but details did not, treat the provider order as potentially created and do not submit a new transaction without reconciliation.",[550,1575,1576,1577,1579,1580,1582],{},"Compare ",[489,1578,1505],{}," across both requests and compare the returned ",[489,1581,540],{}," and voucher fields with the internal sale.",[550,1584,1585],{},"Classify the response: authentication, duplicate\u002Fmalformed request, missing resource, invalid JSON, validation failure, or transport failure.",[550,1587,1588,1589,1591,1592,1594],{},"For a catalogue issue, check the currency, page offset, ",[489,1590,1095],{},", page cache key, missing-page warning, and the final ",[489,1593,1107],{}," cache entry.",[550,1596,1597],{},"Escalate with the sale UUID, transaction reference, currency, provider reference if known, UTC timestamps, error code, and redacted audit excerpts.",[454,1599,1601],{"id":1600},"limitations-and-support-contacts","Limitations and support contacts",[450,1603,1604],{},"The implemented interaction supports issuance only. Balance lookup and cancellation are not implemented, and the repository contains no named Vouchers Depot support contact or provider escalation address. Use the internal processor owner or the Vouchers Depot account team recorded by the organisation; include the redacted evidence listed in the investigation checklist.",[454,1606,1608],{"id":1607},"related-code","Related code",[1610,1611,1612,1618,1624,1630,1636,1642,1647,1653,1659],"ul",{},[550,1613,1614,1617],{},[489,1615,1616],{},"app\u002FProcessors\u002FVouchersDepot\u002FVouchersDepotProcessor.php"," — synchronous processor wrapper and endpoint configuration.",[550,1619,1620,1623],{},[489,1621,1622],{},"app\u002FProcessors\u002FInteraction\u002FIntegrations\u002FVouchersDepot\u002FVouchersDepotProcessorInteraction.php"," — two-call issuance flow and response mapping.",[550,1625,1626,1629],{},[489,1627,1628],{},"app\u002FHttp\u002FClients\u002FVouchersDepot\u002FVouchersDepotApi.php"," — authentication, caching, endpoints, and provider error mapping.",[550,1631,1632,1635],{},[489,1633,1634],{},"app\u002FHttp\u002FClients\u002FVouchersDepot\u002FRequests\u002F"," — token, order, details, and feed request models.",[550,1637,1638,1641],{},[489,1639,1640],{},"app\u002FCatalogueService\u002FJobs\u002FVouchersDepot\u002F"," — queued catalogue pagination and cache assembly.",[550,1643,1644,1646],{},[489,1645,1117],{}," — environment-backed global and currency settings.",[550,1648,1649,1652],{},[489,1650,1651],{},"app\u002FProcessorInteractionAuditLog.php"," — processor request and response audit record.",[550,1654,1655,1658],{},[489,1656,1657],{},"tests\u002FUnit\u002FProcessors\u002FInteraction\u002FIntegrations\u002FVouchersDepot\u002FVouchersDepotProcessorInteractionTest.php"," — SKU selection, mapping, and validation cases.",[550,1660,1661,1664],{},[489,1662,1663],{},"tests\u002FUnit\u002FApp\u002FHttp\u002FClients\u002FVouchersDepot\u002FVouchersDepotApiTest.php"," — authentication, token expiry, error, and transport cases.",[1666,1667,1668],"style",{},"html pre.shiki code .sQ3_J, html code.shiki .sQ3_J{--shiki-dark:#E1E4E8;--shiki-default:#24292E}html pre.shiki code .s0DvM, html code.shiki .s0DvM{--shiki-dark:#79B8FF;--shiki-default:#005CC5}html pre.shiki code .sg6BJ, html code.shiki .sg6BJ{--shiki-dark:#9ECBFF;--shiki-default:#032F62}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 .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);}",{"title":624,"searchDepth":655,"depth":655,"links":1670},[1671,1672,1673,1678,1679,1680,1681,1682,1683,1684],{"id":456,"depth":638,"text":457},{"id":544,"depth":638,"text":545},{"id":605,"depth":638,"text":606,"children":1674},[1675,1676,1677],{"id":510,"depth":655,"text":729},{"id":874,"depth":655,"text":875},{"id":1025,"depth":655,"text":1026},{"id":1111,"depth":638,"text":1112},{"id":1207,"depth":638,"text":1208},{"id":1330,"depth":638,"text":1331},{"id":1460,"depth":638,"text":1461},{"id":1555,"depth":638,"text":1556},{"id":1600,"depth":638,"text":1601},{"id":1607,"depth":638,"text":1608},{},"md",{},{"title":413,"description":452},"TfMoYybAEflYhboXzEKPqrMWAwaI87IK9QxLSsYFb_0",[1691,1692],{"title":409,"path":410,"stem":411,"children":-1},{"title":417,"path":418,"stem":419,"children":-1},1789777549206]