-
Notifications
You must be signed in to change notification settings - Fork 24
[Feature]: Supported currencies const list #215
Description
Tell us about your feature request
It would be useful to know the currently supported currencies so we don't have to maintain our own hard-coded list which gets out of sync with your internal list inside the SDK.
What problem are you looking to solve?
We allow the customer to change the currency for price preview, as some customers want to pay in currencies other than the default one for their country (e.g. Chinese customers travelling to Hong Kong).
The currencies are shown in a drop down, and maintaining our own list is fragile as it requires us to manually audit the Paddle docs/SDK for new currencies (e.g. v3.6.1 released last week added CLP and PEN).
Additional context
My workaround is to parse the contents of node_modules/@paddle/paddle-node-sdk/dist/types/enums/shared/currency-code.d.ts and write our own file with a list, and make that an automatic part of our toolchain:
const sdkEntry = require.resolve("@paddle/paddle-node-sdk");
const dtsPath = sdkEntry.replace(/dist\/.*/, "dist/types/enums/shared/currency-code.d.ts");
const outputPath = resolve(context.root, options.outputPath);
const source = readFileSync(dtsPath, "utf-8");
const codes = Array.from(source.matchAll(/'([A-Z]{3})'/g), (m) => m[1]);
if (codes.length === 0) {
throw new Error("No currency codes found in Paddle SDK type definition");
}
const output = `// Auto-generated from @paddle/paddle-node-sdk CurrencyCode type.
import type { CurrencyCode } from "@paddle/paddle-node-sdk";
export const paddleCurrencies: CurrencyCode[] = [
${codes.map((code) => ` "${code}",`).join("\n")}
];
`;
writeFileSync(outputPath, output);
console.log(`Generated ${codes.length} currency codes to ${outputPath}`);How important is this suggestion to you?
Nice to have
It's an easy fix when new currencies get added, as you get compile error so you simply need to add the missing entries... a list from the SDK would simply be a developer convenience (we wouldn't need to maintain our own list).
Just a thought, if CurrencyCode was an enum, developers could iterate over it with Object.values(CurrencyCode) as they survive compilation as runtime objects but I imagine you'll want to keep the type because of many SDK-related reasons.
Edit: Feel free to close this if it's a silly idea.