@getalby/lightning-tools 6.0.0 → 7.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -7
- package/dist/cjs/fiat.cjs +21 -0
- package/dist/cjs/fiat.cjs.map +1 -1
- package/dist/cjs/index.cjs +31 -6
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/l402.cjs +10 -6
- package/dist/cjs/l402.cjs.map +1 -1
- package/dist/esm/fiat.js +21 -1
- package/dist/esm/fiat.js.map +1 -1
- package/dist/esm/index.js +30 -7
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/l402.js +10 -7
- package/dist/esm/l402.js.map +1 -1
- package/dist/lightning-tools.umd.js +2 -2
- package/dist/lightning-tools.umd.js.map +1 -1
- package/dist/types/fiat.d.ts +9 -1
- package/dist/types/index.d.ts +20 -3
- package/dist/types/l402.d.ts +12 -4
- package/package.json +1 -1
package/dist/cjs/l402.cjs
CHANGED
|
@@ -34,17 +34,21 @@ const parseL402 = (input) => {
|
|
|
34
34
|
}
|
|
35
35
|
return keyValuePairs;
|
|
36
36
|
};
|
|
37
|
+
const makeAuthenticateHeader = (args) => {
|
|
38
|
+
const key = args.key || "L402";
|
|
39
|
+
return `${key} macaroon="${args.macaroon}", invoice="${args.invoice}"`;
|
|
40
|
+
};
|
|
37
41
|
|
|
38
42
|
const memoryStorage = new MemoryStorage();
|
|
39
|
-
const HEADER_KEY = "L402";
|
|
43
|
+
const HEADER_KEY = "L402";
|
|
40
44
|
const fetchWithL402 = async (url, fetchArgs, options) => {
|
|
41
45
|
if (!options) {
|
|
42
46
|
options = {};
|
|
43
47
|
}
|
|
44
48
|
const headerKey = options.headerKey || HEADER_KEY;
|
|
45
|
-
const
|
|
46
|
-
if (!
|
|
47
|
-
throw new Error("
|
|
49
|
+
const wallet = options.wallet;
|
|
50
|
+
if (!wallet) {
|
|
51
|
+
throw new Error("wallet is missing");
|
|
48
52
|
}
|
|
49
53
|
const store = options.store || memoryStorage;
|
|
50
54
|
if (!fetchArgs) {
|
|
@@ -71,8 +75,7 @@ const fetchWithL402 = async (url, fetchArgs, options) => {
|
|
|
71
75
|
const details = parseL402(header);
|
|
72
76
|
const token = details.token || details.macaroon;
|
|
73
77
|
const inv = details.invoice;
|
|
74
|
-
await
|
|
75
|
-
const invResp = await webln.sendPayment(inv);
|
|
78
|
+
const invResp = await wallet.sendPayment(inv);
|
|
76
79
|
store.setItem(url, JSON.stringify({
|
|
77
80
|
token: token,
|
|
78
81
|
preimage: invResp.preimage,
|
|
@@ -85,5 +88,6 @@ const fetchWithL402 = async (url, fetchArgs, options) => {
|
|
|
85
88
|
exports.MemoryStorage = MemoryStorage;
|
|
86
89
|
exports.NoStorage = NoStorage;
|
|
87
90
|
exports.fetchWithL402 = fetchWithL402;
|
|
91
|
+
exports.makeAuthenticateHeader = makeAuthenticateHeader;
|
|
88
92
|
exports.parseL402 = parseL402;
|
|
89
93
|
//# sourceMappingURL=l402.cjs.map
|
package/dist/cjs/l402.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"l402.cjs","sources":["../../src/l402/utils.ts","../../src/l402/l402.ts"],"sourcesContent":["export interface KVStorage {\n getItem(key: string): string | null;\n setItem(key: string, value: string): void;\n}\n\nexport class MemoryStorage implements KVStorage {\n storage;\n\n constructor(initial?: Record<string, unknown>) {\n this.storage = initial || {};\n }\n\n getItem(key: string) {\n return this.storage[key];\n }\n\n setItem(key: string, value: unknown) {\n this.storage[key] = value;\n }\n}\n\nexport class NoStorage implements KVStorage {\n constructor(initial?: unknown) {}\n\n getItem(key: string) {\n return null;\n }\n\n setItem(key: string, value: unknown) {}\n}\n\nexport const parseL402 = (input: string): Record<string, string> => {\n // Remove the L402 and LSAT identifiers\n const string = input.replace(\"L402\", \"\").replace(\"LSAT\", \"\").trim();\n\n // Initialize an object to store the key-value pairs\n const keyValuePairs = {};\n\n // Regular expression to match key and (quoted or unquoted) value\n const regex = /(\\w+)=(\"([^\"]*)\"|'([^']*)'|([^,]*))/g;\n let match;\n\n // Use regex to find all key-value pairs\n while ((match = regex.exec(string)) !== null) {\n // Key is always match[1]\n // Value is either match[3] (double-quoted), match[4] (single-quoted), or match[5] (unquoted)\n keyValuePairs[match[1]] = match[3] || match[4] || match[5];\n }\n\n return keyValuePairs;\n};\n
|
|
1
|
+
{"version":3,"file":"l402.cjs","sources":["../../src/l402/utils.ts","../../src/l402/l402.ts"],"sourcesContent":["export interface KVStorage {\n getItem(key: string): string | null;\n setItem(key: string, value: string): void;\n}\n\nexport class MemoryStorage implements KVStorage {\n storage;\n\n constructor(initial?: Record<string, unknown>) {\n this.storage = initial || {};\n }\n\n getItem(key: string) {\n return this.storage[key];\n }\n\n setItem(key: string, value: unknown) {\n this.storage[key] = value;\n }\n}\n\nexport class NoStorage implements KVStorage {\n constructor(initial?: unknown) {}\n\n getItem(key: string) {\n return null;\n }\n\n setItem(key: string, value: unknown) {}\n}\n\nexport const parseL402 = (input: string): Record<string, string> => {\n // Remove the L402 and LSAT identifiers\n const string = input.replace(\"L402\", \"\").replace(\"LSAT\", \"\").trim();\n\n // Initialize an object to store the key-value pairs\n const keyValuePairs = {};\n\n // Regular expression to match key and (quoted or unquoted) value\n const regex = /(\\w+)=(\"([^\"]*)\"|'([^']*)'|([^,]*))/g;\n let match;\n\n // Use regex to find all key-value pairs\n while ((match = regex.exec(string)) !== null) {\n // Key is always match[1]\n // Value is either match[3] (double-quoted), match[4] (single-quoted), or match[5] (unquoted)\n keyValuePairs[match[1]] = match[3] || match[4] || match[5];\n }\n\n return keyValuePairs;\n};\n\nexport const makeAuthenticateHeader = (args: { macaroon: string, invoice: string, key?: string }) => {\n const key = args.key || \"L402\";\n\n return `${key} macaroon=\"${args.macaroon}\", invoice=\"${args.invoice}\"`;\n}\n","import { KVStorage, MemoryStorage, parseL402 } from \"./utils\";\n\nconst memoryStorage = new MemoryStorage();\n\nconst HEADER_KEY = \"L402\";\n\ninterface Wallet {\n sendPayment(paymentRequest: string): Promise<{ preimage: string }>;\n}\n\nexport const fetchWithL402 = async (\n url: string,\n fetchArgs: RequestInit,\n options: {\n headerKey?: string;\n wallet?: Wallet;\n store?: KVStorage;\n },\n) => {\n if (!options) {\n options = {};\n }\n const headerKey = options.headerKey || HEADER_KEY;\n const wallet: Wallet | undefined = options.wallet;\n if (!wallet) {\n throw new Error(\"wallet is missing\");\n }\n const store = options.store || memoryStorage;\n if (!fetchArgs) {\n fetchArgs = {};\n }\n fetchArgs.cache = \"no-store\";\n fetchArgs.mode = \"cors\";\n if (!fetchArgs.headers) {\n fetchArgs.headers = {};\n }\n const cachedL402Data = store.getItem(url);\n if (cachedL402Data) {\n const data = JSON.parse(cachedL402Data);\n fetchArgs.headers[\"Authorization\"] =\n `${headerKey} ${data.token}:${data.preimage}`;\n return await fetch(url, fetchArgs);\n }\n\n fetchArgs.headers[\"Accept-Authenticate\"] = headerKey;\n const initResp = await fetch(url, fetchArgs);\n const header = initResp.headers.get(\"www-authenticate\");\n if (!header) {\n return initResp;\n }\n\n const details = parseL402(header);\n const token = details.token || details.macaroon;\n const inv = details.invoice;\n\n const invResp = await wallet.sendPayment(inv);\n\n store.setItem(\n url,\n JSON.stringify({\n token: token,\n preimage: invResp.preimage,\n }),\n );\n\n fetchArgs.headers[\"Authorization\"] =\n `${headerKey} ${token}:${invResp.preimage}`;\n return await fetch(url, fetchArgs);\n};\n"],"names":[],"mappings":"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"}
|
package/dist/esm/fiat.js
CHANGED
|
@@ -1,4 +1,24 @@
|
|
|
1
1
|
const numSatsInBtc = 100000000;
|
|
2
|
+
const getFiatCurrencies = async () => {
|
|
3
|
+
const url = "https://getalby.com/api/rates";
|
|
4
|
+
const response = await fetch(url);
|
|
5
|
+
if (!response.ok) {
|
|
6
|
+
throw new Error(`Failed to fetch currencies: ${response.status} ${response.statusText}`);
|
|
7
|
+
}
|
|
8
|
+
const data = await response.json();
|
|
9
|
+
const mappedCurrencies = Object.entries(data)
|
|
10
|
+
.filter(([code]) => code.toUpperCase() !== "BTC")
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
12
|
+
.map(([code, details]) => ({
|
|
13
|
+
code: code.toUpperCase(),
|
|
14
|
+
name: details.name,
|
|
15
|
+
priority: details.priority,
|
|
16
|
+
symbol: details.symbol,
|
|
17
|
+
}))
|
|
18
|
+
.sort((a, b) => a.name.localeCompare(b.name))
|
|
19
|
+
.sort((a, b) => a.priority - b.priority);
|
|
20
|
+
return mappedCurrencies;
|
|
21
|
+
};
|
|
2
22
|
const getFiatBtcRate = async (currency) => {
|
|
3
23
|
const url = "https://getalby.com/api/rates/" + currency.toLowerCase() + ".json";
|
|
4
24
|
const response = await fetch(url);
|
|
@@ -27,5 +47,5 @@ const getFormattedFiatValue = async ({ satoshi, currency, locale, }) => {
|
|
|
27
47
|
});
|
|
28
48
|
};
|
|
29
49
|
|
|
30
|
-
export { getFiatBtcRate, getFiatValue, getFormattedFiatValue, getSatoshiValue };
|
|
50
|
+
export { getFiatBtcRate, getFiatCurrencies, getFiatValue, getFormattedFiatValue, getSatoshiValue };
|
|
31
51
|
//# sourceMappingURL=fiat.js.map
|
package/dist/esm/fiat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fiat.js","sources":["../../src/fiat/fiat.ts"],"sourcesContent":["const numSatsInBtc = 100_000_000;\n\nexport const getFiatBtcRate = async (currency: string): Promise<number> => {\n const url =\n \"https://getalby.com/api/rates/\" + currency.toLowerCase() + \".json\";\n const response = await fetch(url);\n\n if (!response.ok) {\n throw new Error(\n `Failed to fetch rate: ${response.status} ${response.statusText}`,\n );\n }\n\n const data = await response.json();\n\n return data.rate_float / numSatsInBtc;\n};\n\nexport const getFiatValue = async ({\n satoshi,\n currency,\n}: {\n satoshi: number | string;\n currency: string;\n}) => {\n const rate = await getFiatBtcRate(currency);\n\n return Number(satoshi) * rate;\n};\n\nexport const getSatoshiValue = async ({\n amount,\n currency,\n}: {\n amount: number | string;\n currency: string;\n}) => {\n const rate = await getFiatBtcRate(currency);\n\n return Math.floor(Number(amount) / rate);\n};\n\nexport const getFormattedFiatValue = async ({\n satoshi,\n currency,\n locale,\n}: {\n satoshi: number | string;\n currency: string;\n locale: string;\n}) => {\n if (!locale) {\n locale = \"en\";\n }\n const fiatValue = await getFiatValue({ satoshi, currency });\n return fiatValue.toLocaleString(locale, {\n style: \"currency\",\n currency,\n });\n};\n"],"names":[],"mappings":"AAAA,MAAM,YAAY,GAAG,SAAW;
|
|
1
|
+
{"version":3,"file":"fiat.js","sources":["../../src/fiat/fiat.ts"],"sourcesContent":["const numSatsInBtc = 100_000_000;\n\nexport interface FiatCurrency {\n code: string;\n name: string;\n symbol: string;\n priority: number;\n}\n\nexport const getFiatCurrencies = async (): Promise<FiatCurrency[]> => {\n const url = \"https://getalby.com/api/rates\";\n const response = await fetch(url);\n\n if (!response.ok) {\n throw new Error(\n `Failed to fetch currencies: ${response.status} ${response.statusText}`,\n );\n }\n\n const data = await response.json();\n const mappedCurrencies: FiatCurrency[] = Object.entries(data)\n .filter(([code]) => code.toUpperCase() !== \"BTC\")\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .map(([code, details]: any) => ({\n code: code.toUpperCase(),\n name: details.name,\n priority: details.priority,\n symbol: details.symbol,\n }))\n .sort((a, b) => a.name.localeCompare(b.name))\n .sort((a, b) => a.priority - b.priority) as FiatCurrency[];\n\n return mappedCurrencies;\n};\n\nexport const getFiatBtcRate = async (currency: string): Promise<number> => {\n const url =\n \"https://getalby.com/api/rates/\" + currency.toLowerCase() + \".json\";\n const response = await fetch(url);\n\n if (!response.ok) {\n throw new Error(\n `Failed to fetch rate: ${response.status} ${response.statusText}`,\n );\n }\n\n const data = await response.json();\n\n return data.rate_float / numSatsInBtc;\n};\n\nexport const getFiatValue = async ({\n satoshi,\n currency,\n}: {\n satoshi: number | string;\n currency: string;\n}) => {\n const rate = await getFiatBtcRate(currency);\n\n return Number(satoshi) * rate;\n};\n\nexport const getSatoshiValue = async ({\n amount,\n currency,\n}: {\n amount: number | string;\n currency: string;\n}) => {\n const rate = await getFiatBtcRate(currency);\n\n return Math.floor(Number(amount) / rate);\n};\n\nexport const getFormattedFiatValue = async ({\n satoshi,\n currency,\n locale,\n}: {\n satoshi: number | string;\n currency: string;\n locale: string;\n}) => {\n if (!locale) {\n locale = \"en\";\n }\n const fiatValue = await getFiatValue({ satoshi, currency });\n return fiatValue.toLocaleString(locale, {\n style: \"currency\",\n currency,\n });\n};\n"],"names":[],"mappings":"AAAA,MAAM,YAAY,GAAG,SAAW;AASzB,MAAM,iBAAiB,GAAG,YAAoC;IACnE,MAAM,GAAG,GAAG,+BAA+B;AAC3C,IAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC;AAEjC,IAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;AAChB,QAAA,MAAM,IAAI,KAAK,CACb,CAAA,4BAAA,EAA+B,QAAQ,CAAC,MAAM,CAAA,CAAA,EAAI,QAAQ,CAAC,UAAU,CAAA,CAAE,CACxE;IACH;AAEA,IAAA,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;AAClC,IAAA,MAAM,gBAAgB,GAAmB,MAAM,CAAC,OAAO,CAAC,IAAI;AACzD,SAAA,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK;;SAE/C,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAM,MAAM;AAC9B,QAAA,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;QACxB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;AACvB,KAAA,CAAC;AACD,SAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3C,SAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAmB;AAE5D,IAAA,OAAO,gBAAgB;AACzB;MAEa,cAAc,GAAG,OAAO,QAAgB,KAAqB;IACxE,MAAM,GAAG,GACP,gCAAgC,GAAG,QAAQ,CAAC,WAAW,EAAE,GAAG,OAAO;AACrE,IAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC;AAEjC,IAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;AAChB,QAAA,MAAM,IAAI,KAAK,CACb,CAAA,sBAAA,EAAyB,QAAQ,CAAC,MAAM,CAAA,CAAA,EAAI,QAAQ,CAAC,UAAU,CAAA,CAAE,CAClE;IACH;AAEA,IAAA,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;AAElC,IAAA,OAAO,IAAI,CAAC,UAAU,GAAG,YAAY;AACvC;AAEO,MAAM,YAAY,GAAG,OAAO,EACjC,OAAO,EACP,QAAQ,GAIT,KAAI;AACH,IAAA,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC;AAE3C,IAAA,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI;AAC/B;AAEO,MAAM,eAAe,GAAG,OAAO,EACpC,MAAM,EACN,QAAQ,GAIT,KAAI;AACH,IAAA,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC;IAE3C,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;AAC1C;AAEO,MAAM,qBAAqB,GAAG,OAAO,EAC1C,OAAO,EACP,QAAQ,EACR,MAAM,GAKP,KAAI;IACH,IAAI,CAAC,MAAM,EAAE;QACX,MAAM,GAAG,IAAI;IACf;IACA,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAC3D,IAAA,OAAO,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE;AACtC,QAAA,KAAK,EAAE,UAAU;QACjB,QAAQ;AACT,KAAA,CAAC;AACJ;;;;"}
|
package/dist/esm/index.js
CHANGED
|
@@ -1691,17 +1691,21 @@ const parseL402 = (input) => {
|
|
|
1691
1691
|
}
|
|
1692
1692
|
return keyValuePairs;
|
|
1693
1693
|
};
|
|
1694
|
+
const makeAuthenticateHeader = (args) => {
|
|
1695
|
+
const key = args.key || "L402";
|
|
1696
|
+
return `${key} macaroon="${args.macaroon}", invoice="${args.invoice}"`;
|
|
1697
|
+
};
|
|
1694
1698
|
|
|
1695
1699
|
const memoryStorage = new MemoryStorage();
|
|
1696
|
-
const HEADER_KEY = "L402";
|
|
1700
|
+
const HEADER_KEY = "L402";
|
|
1697
1701
|
const fetchWithL402 = async (url, fetchArgs, options) => {
|
|
1698
1702
|
if (!options) {
|
|
1699
1703
|
options = {};
|
|
1700
1704
|
}
|
|
1701
1705
|
const headerKey = options.headerKey || HEADER_KEY;
|
|
1702
|
-
const
|
|
1703
|
-
if (!
|
|
1704
|
-
throw new Error("
|
|
1706
|
+
const wallet = options.wallet;
|
|
1707
|
+
if (!wallet) {
|
|
1708
|
+
throw new Error("wallet is missing");
|
|
1705
1709
|
}
|
|
1706
1710
|
const store = options.store || memoryStorage;
|
|
1707
1711
|
if (!fetchArgs) {
|
|
@@ -1728,8 +1732,7 @@ const fetchWithL402 = async (url, fetchArgs, options) => {
|
|
|
1728
1732
|
const details = parseL402(header);
|
|
1729
1733
|
const token = details.token || details.macaroon;
|
|
1730
1734
|
const inv = details.invoice;
|
|
1731
|
-
await
|
|
1732
|
-
const invResp = await webln.sendPayment(inv);
|
|
1735
|
+
const invResp = await wallet.sendPayment(inv);
|
|
1733
1736
|
store.setItem(url, JSON.stringify({
|
|
1734
1737
|
token: token,
|
|
1735
1738
|
preimage: invResp.preimage,
|
|
@@ -1740,6 +1743,26 @@ const fetchWithL402 = async (url, fetchArgs, options) => {
|
|
|
1740
1743
|
};
|
|
1741
1744
|
|
|
1742
1745
|
const numSatsInBtc = 100000000;
|
|
1746
|
+
const getFiatCurrencies = async () => {
|
|
1747
|
+
const url = "https://getalby.com/api/rates";
|
|
1748
|
+
const response = await fetch(url);
|
|
1749
|
+
if (!response.ok) {
|
|
1750
|
+
throw new Error(`Failed to fetch currencies: ${response.status} ${response.statusText}`);
|
|
1751
|
+
}
|
|
1752
|
+
const data = await response.json();
|
|
1753
|
+
const mappedCurrencies = Object.entries(data)
|
|
1754
|
+
.filter(([code]) => code.toUpperCase() !== "BTC")
|
|
1755
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1756
|
+
.map(([code, details]) => ({
|
|
1757
|
+
code: code.toUpperCase(),
|
|
1758
|
+
name: details.name,
|
|
1759
|
+
priority: details.priority,
|
|
1760
|
+
symbol: details.symbol,
|
|
1761
|
+
}))
|
|
1762
|
+
.sort((a, b) => a.name.localeCompare(b.name))
|
|
1763
|
+
.sort((a, b) => a.priority - b.priority);
|
|
1764
|
+
return mappedCurrencies;
|
|
1765
|
+
};
|
|
1743
1766
|
const getFiatBtcRate = async (currency) => {
|
|
1744
1767
|
const url = "https://getalby.com/api/rates/" + currency.toLowerCase() + ".json";
|
|
1745
1768
|
const response = await fetch(url);
|
|
@@ -1768,5 +1791,5 @@ const getFormattedFiatValue = async ({ satoshi, currency, locale, }) => {
|
|
|
1768
1791
|
});
|
|
1769
1792
|
};
|
|
1770
1793
|
|
|
1771
|
-
export { DEFAULT_PROXY, Invoice, LN_ADDRESS_REGEX, LightningAddress, MemoryStorage, NoStorage, decodeInvoice, fetchWithL402, fromHexString, generateZapEvent, getEventHash, getFiatBtcRate, getFiatValue, getFormattedFiatValue, getSatoshiValue, isUrl, isValidAmount, parseKeysendResponse, parseL402, parseLnUrlPayResponse, parseNostrResponse, sendBoostagram, serializeEvent, validateEvent };
|
|
1794
|
+
export { DEFAULT_PROXY, Invoice, LN_ADDRESS_REGEX, LightningAddress, MemoryStorage, NoStorage, decodeInvoice, fetchWithL402, fromHexString, generateZapEvent, getEventHash, getFiatBtcRate, getFiatCurrencies, getFiatValue, getFormattedFiatValue, getSatoshiValue, isUrl, isValidAmount, makeAuthenticateHeader, parseKeysendResponse, parseL402, parseLnUrlPayResponse, parseNostrResponse, sendBoostagram, serializeEvent, validateEvent };
|
|
1772
1795
|
//# sourceMappingURL=index.js.map
|