apiVersion: capability.naftiko.dev/v1alpha1 kind: Capability metadata: name: ecommerce-multi-currency-pricing provider: currencylayer description: | Localize storefront prices in the shopper's currency at page-render or checkout time. Caches /live quotes per source currency and falls back to /convert for one-off pair lookups. spec: uses: - sharedCapability: currencylayer-shared operations: [getLive, convertCurrency, listCurrencies] preconditions: - description: Storefront base currency configured (typically USD or EUR). - description: Caller subscription on Basic or above for HTTPS, source-switching, and /convert. workflow: - step: warmSymbolCache operation: listCurrencies purpose: Cache the full currency catalog (24h+ TTL). - step: refreshLiveQuotes operation: getLive parameters: source: "{{ input.storeCurrency | default: 'USD' }}" currencies: "{{ input.targetCurrencies }}" cache: ttl: "{{ plan.refreshCadence }}" - step: convertCartItem when: input.mode == 'on-demand' operation: convertCurrency parameters: from: "{{ input.from }}" to: "{{ input.to }}" amount: "{{ input.amount }}" outputs: quotes: "{{ refreshLiveQuotes.quotes }}" convertedAmount: "{{ convertCartItem.result }}" governance: minPlan: Basic httpsRequired: true cachingRequired: true notes: | Currencylayer charges per request, so storefronts should cache /live results for at least the plan's refresh cadence (60 min on Basic, 10 min on Professional, 60 sec on Enterprise+) to avoid quota burn.