@phala/pay 0.8.1 → 0.8.3
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 +41 -3
- package/THIRD_PARTY_NOTICES +25 -0
- package/dist/chains.d.ts +2 -0
- package/dist/chains.d.ts.map +1 -1
- package/dist/chains.js +11 -2
- package/dist/chains.js.map +1 -1
- package/dist/checkout.js +2 -2
- package/dist/checkout.js.map +1 -1
- package/dist/deposit-address.js +2 -2
- package/dist/deposit-address.js.map +1 -1
- package/dist/icon-names.d.ts +7 -0
- package/dist/icon-names.d.ts.map +1 -0
- package/dist/icon-names.js +15 -0
- package/dist/icon-names.js.map +1 -0
- package/dist/icon-svg.d.ts +6 -0
- package/dist/icon-svg.d.ts.map +1 -0
- package/dist/icon-svg.js +13 -0
- package/dist/icon-svg.js.map +1 -0
- package/dist/icons.d.ts +5 -0
- package/dist/icons.d.ts.map +1 -0
- package/dist/icons.js +27 -0
- package/dist/icons.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/react/Checkout.d.ts.map +1 -1
- package/dist/react/Checkout.js +24 -22
- package/dist/react/Checkout.js.map +1 -1
- package/dist/react/DepositAddress.d.ts.map +1 -1
- package/dist/react/DepositAddress.js +6 -6
- package/dist/react/DepositAddress.js.map +1 -1
- package/dist/react/Icons.d.ts +17 -0
- package/dist/react/Icons.d.ts.map +1 -0
- package/dist/react/Icons.js +18 -0
- package/dist/react/Icons.js.map +1 -0
- package/dist/react/icon-paths.d.ts +13 -0
- package/dist/react/icon-paths.d.ts.map +1 -0
- package/dist/react/icon-paths.js +14 -0
- package/dist/react/icon-paths.js.map +1 -0
- package/dist/react/index.d.ts +1 -0
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +1 -0
- package/dist/react/index.js.map +1 -1
- package/dist/request.d.ts +2 -0
- package/dist/request.d.ts.map +1 -1
- package/dist/request.js +7 -0
- package/dist/request.js.map +1 -1
- package/dist/server/webhook.d.ts +2 -2
- package/dist/server/webhook.d.ts.map +1 -1
- package/dist/server/webhook.js +17 -13
- package/dist/server/webhook.js.map +1 -1
- package/package.json +9 -4
- package/src/chains.ts +12 -2
- package/src/checkout.ts +2 -2
- package/src/deposit-address.ts +2 -2
- package/src/generated/openapi.d.ts +9482 -0
- package/src/icon-names.ts +20 -0
- package/src/icon-svg.ts +13 -0
- package/src/icons.ts +30 -0
- package/src/index.ts +1 -0
- package/src/react/Checkout.tsx +42 -36
- package/src/react/DepositAddress.tsx +10 -9
- package/src/react/Icons.tsx +43 -0
- package/src/react/icon-paths.tsx +13 -0
- package/src/react/index.ts +1 -0
- package/src/request.ts +7 -0
- package/src/server/webhook.ts +22 -18
- package/src/styles.css +22 -18
|
@@ -7,6 +7,7 @@ import { retrieveDepositAddress, } from "../deposit-address.js";
|
|
|
7
7
|
import { CheckoutError, pollDelay } from "../checkout.js";
|
|
8
8
|
import { formatWait } from "../format.js";
|
|
9
9
|
import { depositAddressTransfer } from "../payment.js";
|
|
10
|
+
import { AssetIcon, NetworkIcon } from "./Icons.js";
|
|
10
11
|
import { Field } from "./Field.js";
|
|
11
12
|
import { QrCode } from "./QrCode.js";
|
|
12
13
|
/**
|
|
@@ -34,10 +35,9 @@ export function DepositAddress({ depositAddress, chainId, asset, clientSecret, a
|
|
|
34
35
|
const { token: contract, to } = depositAddressTransfer(network, token);
|
|
35
36
|
const symbol = token.asset.toUpperCase();
|
|
36
37
|
const name = networkName(network.chain_id);
|
|
37
|
-
const tokens = [...new Set(networks.flatMap((each) => each.assets.map((a) => a.asset.toUpperCase())))];
|
|
38
38
|
return (_jsxs("div", { className: className === undefined ? "pp-root" : `pp-root ${className}`, "data-theme": appearance?.theme ?? "light", children: [_jsx("p", { className: "pp-subtitle", children: depositAddress.address === null
|
|
39
|
-
? "
|
|
40
|
-
: "One address for
|
|
39
|
+
? "Reusable deposit address; varies by network"
|
|
40
|
+
: "One reusable address for supported tokens and networks" }), networks.length > 1 && (_jsxs("fieldset", { className: "pp-choices", children: [_jsx("legend", { children: "Network" }), networks.map((each) => (_jsxs("label", { children: [_jsx("input", { type: "radio", name: `${id}-network`, checked: each.chain_id === network.chain_id, onChange: () => setSelectedChain(each.chain_id) }), _jsx(NetworkIcon, { chainId: each.chain_id, size: 16 }), " ", networkName(each.chain_id)] }, each.chain_id)))] })), network.assets.length > 1 && (_jsxs("fieldset", { className: "pp-choices", children: [_jsx("legend", { children: "Token" }), network.assets.map((each) => (_jsxs("label", { children: [_jsx("input", { type: "radio", name: `${id}-token`, checked: each.asset === token.asset, onChange: () => setSelectedAsset(each.asset) }), _jsx(AssetIcon, { asset: each.asset, size: 16 }), " ", each.asset.toUpperCase()] }, each.asset)))] })), _jsx("div", { className: "pp-qr-panel", children: _jsx(QrCode, { value: token.payment_uri, label: `Deposit address for ${symbol} on ${name}` }) }), _jsxs("dl", { className: "pp-fields", children: [_jsx(Field, { label: "Network", value: `${name} (chain ID ${network.chain_id})` }), _jsx(Field, { label: `Token (${symbol}) contract`, value: contract, copy: true }), _jsx(Field, { label: "Deposit address", value: to, copy: true })] }), payments.length > 0 && (_jsx("ul", { className: "pp-payments", "aria-live": "polite", "aria-label": "Payments", children: payments.map((payment) => (_jsx("li", { children: paymentMessage(payment) }, `${payment.chain_id}:${payment.tx_hash}:${payment.created}`))) })), _jsxs("p", { className: "pp-message", children: ["Send ", symbol, " on ", name, ". Unsupported tokens or networks are not credited.", " ", creditMessage(networks.map((each) => each.chain_id), view)] })] }));
|
|
41
41
|
}
|
|
42
42
|
/** The address's public view, read every `interval` while mounted; `null` without a secret. */
|
|
43
43
|
function useClientView(clientSecret, apiBase, interval) {
|
|
@@ -99,14 +99,14 @@ function creditMessage(chainIds, view) {
|
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
101
|
if (names.size === 0) {
|
|
102
|
-
return "Any amount is credited at the market rate
|
|
102
|
+
return "Any amount is credited at the market rate after confirmation.";
|
|
103
103
|
}
|
|
104
104
|
const list = new Intl.ListFormat("en", { type: "conjunction" });
|
|
105
105
|
const [only, ...others] = names.keys();
|
|
106
106
|
const usually = only !== undefined && others.length === 0
|
|
107
107
|
? formatWait(only)
|
|
108
108
|
: list.format([...names].map(([seconds, on]) => `${formatWait(seconds)} on ${list.format(on)}`));
|
|
109
|
-
return `Any amount is credited at the market rate
|
|
109
|
+
return `Any amount is credited at the market rate on arrival, usually in ${usually}.`;
|
|
110
110
|
}
|
|
111
111
|
function paymentMessage(payment) {
|
|
112
112
|
const amount = payment.asset === null || payment.decimals === null
|
|
@@ -125,7 +125,7 @@ function paymentMessage(payment) {
|
|
|
125
125
|
case "rejected":
|
|
126
126
|
return `${amount} ${on} cannot be credited. Contact support with your transaction.`;
|
|
127
127
|
case "reversed":
|
|
128
|
-
return `${amount} ${on} was reversed:
|
|
128
|
+
return `${amount} ${on} was reversed: a chain reorganization replaced it and its credit was removed.`;
|
|
129
129
|
}
|
|
130
130
|
}
|
|
131
131
|
//# sourceMappingURL=DepositAddress.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DepositAddress.js","sourceRoot":"","sources":["../../src/react/DepositAddress.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EACL,sBAAsB,GAGvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAA8B,MAAM,eAAe,CAAC;AAEnF,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAwBrC;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,EAC7B,cAAc,EACd,OAAO,EACP,KAAK,EACL,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,UAAU,EACV,SAAS,GACW;IACpB,MAAM,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAC;IACpC,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,IAAI,GAAG,aAAa,CAAC,YAAY,EAAE,OAAO,EAAE,YAAY,IAAI,IAAI,CAAC,CAAC;IACxE,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,EAAE,CAAC;IACtC,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACrF,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,KAAK,aAAa,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;IAClG,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC;IAC5D,CAAC;IACD,MAAM,KAAK,GACT,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,KAAK,aAAa,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC7F,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,SAAS,CAAC,+CAA+C,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACzF,CAAC;IACD,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,sBAAsB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IACzC,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3C,
|
|
1
|
+
{"version":3,"file":"DepositAddress.js","sourceRoot":"","sources":["../../src/react/DepositAddress.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface IconProps {
|
|
2
|
+
/** Width and height in pixels; default 18. No inline styles are injected. */
|
|
3
|
+
size?: number;
|
|
4
|
+
/** Default true next to visible text. Set false when the icon is used alone. */
|
|
5
|
+
decorative?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface NetworkIconProps extends IconProps {
|
|
8
|
+
chainId: number;
|
|
9
|
+
}
|
|
10
|
+
export interface AssetIconProps extends IconProps {
|
|
11
|
+
asset: string;
|
|
12
|
+
}
|
|
13
|
+
/** Branded network icon; testnets reuse their mainnet family artwork. */
|
|
14
|
+
export declare function NetworkIcon({ chainId, ...props }: NetworkIconProps): import("react").JSX.Element;
|
|
15
|
+
/** Branded token icon, or a neutral first-letter monogram for unknown symbols. */
|
|
16
|
+
export declare function AssetIcon({ asset, ...props }: AssetIconProps): import("react").JSX.Element;
|
|
17
|
+
//# sourceMappingURL=Icons.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Icons.d.ts","sourceRoot":"","sources":["../../src/react/Icons.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,SAAS;IACxB,6EAA6E;IAC7E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gFAAgF;IAChF,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AACD,MAAM,WAAW,gBAAiB,SAAQ,SAAS;IAAG,OAAO,EAAE,MAAM,CAAA;CAAE;AACvE,MAAM,WAAW,cAAe,SAAQ,SAAS;IAAG,KAAK,EAAE,MAAM,CAAA;CAAE;AAqBnE,yEAAyE;AACzE,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,+BAElE;AAED,kFAAkF;AAClF,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,+BAE5D"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { networkName, networkIconName } from "../chains.js";
|
|
4
|
+
import { assetIconName, iconMonogram } from "../icon-names.js";
|
|
5
|
+
import { ICON_PATHS } from "./icon-paths.js";
|
|
6
|
+
function Icon({ name, label, size = 18, decorative = true }) {
|
|
7
|
+
const pixels = Number.isFinite(size) && size > 0 ? size : 18;
|
|
8
|
+
return (_jsx("span", { className: "pp-icon-label", role: decorative ? undefined : "img", "aria-label": decorative ? undefined : label || "Unknown asset", children: _jsx("svg", { className: "pp-icon", xmlns: "http://www.w3.org/2000/svg", width: pixels, height: pixels, viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", focusable: "false", children: name === undefined ? _jsxs(_Fragment, { children: [_jsx("circle", { cx: "12", cy: "12", r: "11", fill: "currentColor", opacity: "0.12" }), _jsx("text", { x: "12", y: "16", textAnchor: "middle", fontFamily: "sans-serif", fontSize: "12", fill: "currentColor", children: iconMonogram(label) })] }) : ICON_PATHS[name] }) }));
|
|
9
|
+
}
|
|
10
|
+
/** Branded network icon; testnets reuse their mainnet family artwork. */
|
|
11
|
+
export function NetworkIcon({ chainId, ...props }) {
|
|
12
|
+
return _jsx(Icon, { ...props, name: networkIconName(chainId), label: networkName(chainId) });
|
|
13
|
+
}
|
|
14
|
+
/** Branded token icon, or a neutral first-letter monogram for unknown symbols. */
|
|
15
|
+
export function AssetIcon({ asset, ...props }) {
|
|
16
|
+
return _jsx(Icon, { ...props, name: assetIconName(asset), label: asset.trim().toUpperCase() });
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=Icons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Icons.js","sourceRoot":"","sources":["../../src/react/Icons.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAiB,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAW7C,SAAS,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,UAAU,GAAG,IAAI,EAGxD;IACC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,OAAO,CACL,eAAM,SAAS,EAAC,eAAe,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,gBACtD,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,eAAe,YAC7D,cAAK,SAAS,EAAC,SAAS,EAAC,KAAK,EAAC,4BAA4B,EAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACvF,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,iBAAa,MAAM,EAAC,SAAS,EAAC,OAAO,YACnE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,8BACpB,iBAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,cAAc,EAAC,OAAO,EAAC,MAAM,GAAG,EACpE,eAAM,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,UAAU,EAAC,QAAQ,EAAC,UAAU,EAAC,YAAY,EAAC,QAAQ,EAAC,IAAI,EAAC,IAAI,EAAC,cAAc,YAAE,YAAY,CAAC,KAAK,CAAC,GAAQ,IAC7H,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,GAClB,GACD,CACR,CAAC;AACJ,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,WAAW,CAAC,EAAE,OAAO,EAAE,GAAG,KAAK,EAAoB;IACjE,OAAO,KAAC,IAAI,OAAK,KAAK,EAAE,IAAI,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,GAAI,CAAC;AAC1F,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,EAAkB;IAC3D,OAAO,KAAC,IAAI,OAAK,KAAK,EAAE,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,GAAI,CAAC;AAC5F,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Generated from @web3icons/core@4.0.57 by scripts/generate-icons.mjs.
|
|
2
|
+
* SPDX-License-Identifier: MIT; Copyright (c) 2024 0xa3k5.
|
|
3
|
+
* See THIRD_PARTY_NOTICES for the full license. Do not edit.
|
|
4
|
+
*/
|
|
5
|
+
export declare const ICON_PATHS: {
|
|
6
|
+
usdc: import("react").JSX.Element;
|
|
7
|
+
usdt: import("react").JSX.Element;
|
|
8
|
+
pha: import("react").JSX.Element;
|
|
9
|
+
eth: import("react").JSX.Element;
|
|
10
|
+
ethereum: import("react").JSX.Element;
|
|
11
|
+
base: import("react").JSX.Element;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=icon-paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icon-paths.d.ts","sourceRoot":"","sources":["../../src/react/icon-paths.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,UAAU;;;;;;;CAOtB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/** Generated from @web3icons/core@4.0.57 by scripts/generate-icons.mjs.
|
|
3
|
+
* SPDX-License-Identifier: MIT; Copyright (c) 2024 0xa3k5.
|
|
4
|
+
* See THIRD_PARTY_NOTICES for the full license. Do not edit.
|
|
5
|
+
*/
|
|
6
|
+
export const ICON_PATHS = {
|
|
7
|
+
usdc: _jsxs(_Fragment, { children: [_jsx("path", { fill: "#0B53BF", d: "M12 21a9 9 0 1 0 0-18 9 9 0 0 0 0 18" }), _jsx("path", { fill: "#fff", d: "M13.62 5.45v1.159a5.64 5.64 0 0 1 4.005 5.394 5.64 5.64 0 0 1-4.005 5.394v1.16a6.74 6.74 0 0 0 5.13-6.554 6.74 6.74 0 0 0-5.13-6.553m-7.245 6.553a5.64 5.64 0 0 1 4.005-5.394V5.45a6.74 6.74 0 0 0-5.13 6.553 6.74 6.74 0 0 0 5.13 6.553v-1.159a5.63 5.63 0 0 1-4.005-5.394" }), _jsx("path", { fill: "#fff", d: "M14.419 13.258c0-2.301-3.606-1.356-3.606-2.627 0-.456.366-.748 1.063-.748.833 0 1.12.405 1.21.95h1.147c-.102-1.024-.69-1.67-1.67-1.863v-.904h-1.125v.872c-1.075.137-1.75.762-1.75 1.693 0 2.312 3.611 1.445 3.611 2.694 0 .472-.455.787-1.226.787-1.007 0-1.339-.444-1.462-1.057H9.49c.073 1.122.764 1.823 1.947 1.999v.886h1.125v-.875c1.153-.149 1.856-.82 1.856-1.807" })] }),
|
|
8
|
+
usdt: _jsx(_Fragment, { children: _jsx("path", { fill: "#009393", d: "m12 19.2-9-8.88L6.433 4.8h11.134L21 10.32zm.9-8.1v-1.098c1.62.08 3.132.396 3.6.805-.544.477-2.493.824-4.5.824s-3.956-.347-4.5-.824c.463-.41 1.98-.72 3.6-.81V11.1zm-5.4-.297v.661c.463.41 1.975.72 3.6.81V14.7h1.8v-2.43c1.62-.081 3.136-.396 3.6-.806v-1.318c-.464-.41-1.98-.725-3.6-.81V8.4h2.7V7.05H8.4V8.4h2.7v.936c-1.625.085-3.137.4-3.6.81z" }) }),
|
|
9
|
+
pha: _jsxs(_Fragment, { children: [_jsx("circle", { cx: "12", cy: "12", r: "12", fill: "#252525" }), _jsx("path", { fill: "#D1FF52", fillRule: "evenodd", d: "M3 3h14.143v3.857H21V12h-3.857V6.857H6.857V12H3zm3.857 12.857h10.286V12H6.857zm0 0V21H3v-5.143z", clipRule: "evenodd" })] }),
|
|
10
|
+
eth: _jsxs(_Fragment, { children: [_jsx("path", { fill: "#8FFCF3", d: "M12 3v6.65l5.625 2.516z" }), _jsx("path", { fill: "#CABCF8", d: "m12 3-5.625 9.166L12 9.651z" }), _jsx("path", { fill: "#CBA7F5", d: "M12 16.477v4.522l5.625-7.784z" }), _jsx("path", { fill: "#74A0F3", d: "M12 21v-4.523l-5.625-3.262z" }), _jsx("path", { fill: "#CBA7F5", d: "m12 15.43 5.625-3.263L12 9.65z" }), _jsx("path", { fill: "#74A0F3", d: "M6.375 12.167 12 15.429V9.651z" }), _jsx("path", { fill: "#202699", fillRule: "evenodd", d: "m12 15.429-5.625-3.263L12 3l5.625 9.166zM6.749 11.9l5.16-8.41v6.115zm-.077.23 5.238-2.327v5.364zm5.418-2.327v5.364l5.233-3.038zm0-.198 5.16 2.295-5.16-8.41z", clipRule: "evenodd" }), _jsx("path", { fill: "#202699", fillRule: "evenodd", d: "M12 16.406 6.375 13.21 12 21l5.625-7.79zm-4.995-2.633 4.905 2.79v4.005zm5.085 2.79v4.005l4.905-6.795z", clipRule: "evenodd" })] }),
|
|
11
|
+
ethereum: _jsxs(_Fragment, { children: [_jsx("path", { fill: "#8FFCF3", d: "M12 3v6.651l5.625 2.516z" }), _jsx("path", { fill: "#CABCF8", d: "m12 3-5.625 9.166L12 9.653z" }), _jsx("path", { fill: "#CBA7F5", d: "M12 16.478V21l5.625-7.784z" }), _jsx("path", { fill: "#74A0F3", d: "M12 21v-4.522l-5.625-3.262z" }), _jsx("path", { fill: "#CBA7F5", d: "m12 15.43 5.625-3.263L12 9.652z" }), _jsx("path", { fill: "#74A0F3", d: "M6.375 12.167 12 15.43V9.652z" }), _jsx("path", { fill: "#202699", fillRule: "evenodd", d: "m12 15.43-5.625-3.263L12 3l5.624 9.166zm-5.252-3.528 5.161-8.41v6.114zm-.077.229 5.238-2.327v5.364zm5.418-2.327v5.364l5.234-3.037zm0-.198 5.161 2.296-5.161-8.41z", clipRule: "evenodd" }), _jsx("path", { fill: "#202699", fillRule: "evenodd", d: "m12 16.406-5.625-3.195L12 21l5.624-7.79zm-4.995-2.633 4.904 2.79v4.005zm5.084 2.79v4.005l4.905-6.795z", clipRule: "evenodd" })] }),
|
|
12
|
+
base: _jsx(_Fragment, { children: _jsx("path", { fill: "#00F", d: "M3 4.706c0-.585 0-.877.11-1.101.106-.215.28-.39.496-.495C3.83 3 4.122 3 4.706 3h14.588c.585 0 .876 0 1.101.11.215.105.389.28.494.495.111.225.111.517.111 1.101v14.588c0 .585 0 .876-.11 1.101-.106.215-.28.389-.495.494-.225.111-.517.111-1.101.111H4.706c-.585 0-.876 0-1.101-.11a1.08 1.08 0 0 1-.494-.495C3 20.17 3 19.878 3 19.294z" }) }),
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=icon-paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icon-paths.js","sourceRoot":"","sources":["../../src/react/icon-paths.tsx"],"names":[],"mappings":";AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,IAAI,EAAE,8BAAE,eAAM,IAAI,EAAC,SAAS,EAAC,CAAC,EAAC,sCAAsC,GAAE,EAAA,eAAM,IAAI,EAAC,MAAM,EAAC,CAAC,EAAC,6QAA6Q,GAAE,EAAA,eAAM,IAAI,EAAC,MAAM,EAAC,CAAC,EAAC,0WAA0W,GAAE,IAAG;IAC7uB,IAAI,EAAE,4BAAE,eAAM,IAAI,EAAC,SAAS,EAAC,CAAC,EAAC,oVAAoV,GAAE,GAAG;IACxX,GAAG,EAAE,8BAAE,iBAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,SAAS,GAAE,EAAA,eAAM,IAAI,EAAC,SAAS,EAAC,QAAQ,EAAC,SAAS,EAAC,CAAC,EAAC,iGAAiG,EAAC,QAAQ,EAAC,SAAS,GAAE,IAAG;IACzN,GAAG,EAAE,8BAAE,eAAM,IAAI,EAAC,SAAS,EAAC,CAAC,EAAC,yBAAyB,GAAE,EAAA,eAAM,IAAI,EAAC,SAAS,EAAC,CAAC,EAAC,6BAA6B,GAAE,EAAA,eAAM,IAAI,EAAC,SAAS,EAAC,CAAC,EAAC,+BAA+B,GAAE,EAAA,eAAM,IAAI,EAAC,SAAS,EAAC,CAAC,EAAC,6BAA6B,GAAE,EAAA,eAAM,IAAI,EAAC,SAAS,EAAC,CAAC,EAAC,gCAAgC,GAAE,EAAA,eAAM,IAAI,EAAC,SAAS,EAAC,CAAC,EAAC,gCAAgC,GAAE,EAAA,eAAM,IAAI,EAAC,SAAS,EAAC,QAAQ,EAAC,SAAS,EAAC,CAAC,EAAC,8JAA8J,EAAC,QAAQ,EAAC,SAAS,GAAE,EAAA,eAAM,IAAI,EAAC,SAAS,EAAC,QAAQ,EAAC,SAAS,EAAC,CAAC,EAAC,uGAAuG,EAAC,QAAQ,EAAC,SAAS,GAAE,IAAG;IACrtB,QAAQ,EAAE,8BAAE,eAAM,IAAI,EAAC,SAAS,EAAC,CAAC,EAAC,0BAA0B,GAAE,EAAA,eAAM,IAAI,EAAC,SAAS,EAAC,CAAC,EAAC,6BAA6B,GAAE,EAAA,eAAM,IAAI,EAAC,SAAS,EAAC,CAAC,EAAC,4BAA4B,GAAE,EAAA,eAAM,IAAI,EAAC,SAAS,EAAC,CAAC,EAAC,6BAA6B,GAAE,EAAA,eAAM,IAAI,EAAC,SAAS,EAAC,CAAC,EAAC,iCAAiC,GAAE,EAAA,eAAM,IAAI,EAAC,SAAS,EAAC,CAAC,EAAC,+BAA+B,GAAE,EAAA,eAAM,IAAI,EAAC,SAAS,EAAC,QAAQ,EAAC,SAAS,EAAC,CAAC,EAAC,mKAAmK,EAAC,QAAQ,EAAC,SAAS,GAAE,EAAA,eAAM,IAAI,EAAC,SAAS,EAAC,QAAQ,EAAC,SAAS,EAAC,CAAC,EAAC,uGAAuG,EAAC,QAAQ,EAAC,SAAS,GAAE,IAAG;IAC7tB,IAAI,EAAE,4BAAE,eAAM,IAAI,EAAC,MAAM,EAAC,CAAC,EAAC,yUAAyU,GAAE,GAAG;CAC3W,CAAC"}
|
package/dist/react/index.d.ts
CHANGED
|
@@ -2,4 +2,5 @@ export { Checkout, type CheckoutProps } from "./Checkout.js";
|
|
|
2
2
|
export { DepositAddress, type DepositAddressProps } from "./DepositAddress.js";
|
|
3
3
|
export { useCheckout, type UseCheckoutOptions, type UseCheckoutResult } from "./useCheckout.js";
|
|
4
4
|
export type { Appearance } from "./appearance.js";
|
|
5
|
+
export { NetworkIcon, AssetIcon, type IconProps, type NetworkIconProps, type AssetIconProps } from "./Icons.js";
|
|
5
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAChG,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAChG,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/react/index.js
CHANGED
package/dist/react/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAsB,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,cAAc,EAA4B,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAmD,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAsB,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,cAAc,EAA4B,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAmD,MAAM,kBAAkB,CAAC;AAEhG,OAAO,EAAE,WAAW,EAAE,SAAS,EAA8D,MAAM,YAAY,CAAC"}
|
package/dist/request.d.ts
CHANGED
|
@@ -3,4 +3,6 @@ export declare function requestSignal(options: {
|
|
|
3
3
|
signal?: AbortSignal;
|
|
4
4
|
requestTimeout?: number;
|
|
5
5
|
}): AbortSignal;
|
|
6
|
+
/** `apiBase` without trailing slashes, in linear time (a `/\/+$/` regex is quadratic). */
|
|
7
|
+
export declare function trimTrailingSlashes(apiBase: string): string;
|
|
6
8
|
//# sourceMappingURL=request.d.ts.map
|
package/dist/request.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,wBAAgB,aAAa,CAAC,OAAO,EAAE;IACrC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,WAAW,CAGd"}
|
|
1
|
+
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,wBAAgB,aAAa,CAAC,OAAO,EAAE;IACrC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,WAAW,CAGd;AAED,0FAA0F;AAC1F,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAI3D"}
|
package/dist/request.js
CHANGED
|
@@ -3,4 +3,11 @@ export function requestSignal(options) {
|
|
|
3
3
|
const deadline = AbortSignal.timeout(options.requestTimeout ?? 10_000);
|
|
4
4
|
return options.signal === undefined ? deadline : AbortSignal.any([options.signal, deadline]);
|
|
5
5
|
}
|
|
6
|
+
/** `apiBase` without trailing slashes, in linear time (a `/\/+$/` regex is quadratic). */
|
|
7
|
+
export function trimTrailingSlashes(apiBase) {
|
|
8
|
+
let end = apiBase.length;
|
|
9
|
+
while (end > 0 && apiBase[end - 1] === "/")
|
|
10
|
+
end -= 1;
|
|
11
|
+
return apiBase.slice(0, end);
|
|
12
|
+
}
|
|
6
13
|
//# sourceMappingURL=request.js.map
|
package/dist/request.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.js","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,MAAM,UAAU,aAAa,CAAC,OAG7B;IACC,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,IAAI,MAAM,CAAC,CAAC;IACvE,OAAO,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC/F,CAAC"}
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,MAAM,UAAU,aAAa,CAAC,OAG7B;IACC,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,IAAI,MAAM,CAAC,CAAC;IACvE,OAAO,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC/F,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IACzB,OAAO,GAAG,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG;QAAE,GAAG,IAAI,CAAC,CAAC;IACrD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC/B,CAAC"}
|
package/dist/server/webhook.d.ts
CHANGED
|
@@ -43,9 +43,9 @@ export interface ConstructEventOptions {
|
|
|
43
43
|
expectedAccount: string;
|
|
44
44
|
/** The mode of the endpoint receiving it: an event of the other mode fails closed. */
|
|
45
45
|
expectedLivemode: boolean;
|
|
46
|
-
/**
|
|
46
|
+
/** Finite, non-negative seconds a delivery's timestamp may differ from now; default 300. */
|
|
47
47
|
tolerance?: number;
|
|
48
|
-
/**
|
|
48
|
+
/** Finite current time in Unix seconds; for tests. */
|
|
49
49
|
now?: number;
|
|
50
50
|
}
|
|
51
51
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../src/server/webhook.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,mEAAmE;AACnE,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,SAAkB,IAAI,2BAA2B;CAClD;AAED,2FAA2F;AAC3F,MAAM,WAAW,YAAY;IAC3B,wEAAwE;IACxE,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,OAAO,CAAC;IAChB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,mFAAmF;IACnF,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAC/D;;;OAGG;IACH,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;CAC1F;AAED,MAAM,WAAW,qBAAqB;IACpC,2EAA2E;IAC3E,eAAe,EAAE,MAAM,CAAC;IACxB,sFAAsF;IACtF,gBAAgB,EAAE,OAAO,CAAC;IAC1B,
|
|
1
|
+
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../src/server/webhook.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,mEAAmE;AACnE,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,SAAkB,IAAI,2BAA2B;CAClD;AAED,2FAA2F;AAC3F,MAAM,WAAW,YAAY;IAC3B,wEAAwE;IACxE,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,OAAO,CAAC;IAChB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,mFAAmF;IACnF,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAC/D;;;OAGG;IACH,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;CAC1F;AAED,MAAM,WAAW,qBAAqB;IACpC,2EAA2E;IAC3E,eAAe,EAAE,MAAM,CAAC;IACxB,sFAAsF;IACtF,gBAAgB,EAAE,OAAO,CAAC;IAC1B,4FAA4F;IAC5F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,GAAG,UAAU,EAC5B,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,EAChE,UAAU,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,EACtC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,YAAY,CAAC,CAgGvB"}
|
package/dist/server/webhook.js
CHANGED
|
@@ -21,6 +21,11 @@ export async function constructEvent(payload, headers, publicKeys, options) {
|
|
|
21
21
|
if (options.expectedAccount === "") {
|
|
22
22
|
throw new TypeError("expectedAccount is required");
|
|
23
23
|
}
|
|
24
|
+
const now = options.now ?? Math.floor(Date.now() / 1000);
|
|
25
|
+
const tolerance = options.tolerance ?? 300;
|
|
26
|
+
if (!Number.isFinite(now) || !Number.isFinite(tolerance) || tolerance < 0) {
|
|
27
|
+
throw new TypeError("webhook now must be finite and tolerance finite and non-negative");
|
|
28
|
+
}
|
|
24
29
|
const body = typeof payload === "string" ? new TextEncoder().encode(payload) : payload;
|
|
25
30
|
const id = header(headers, "webhook-id");
|
|
26
31
|
const timestamp = header(headers, "webhook-timestamp");
|
|
@@ -28,11 +33,10 @@ export async function constructEvent(payload, headers, publicKeys, options) {
|
|
|
28
33
|
if (id === undefined || timestamp === undefined || signatures === undefined) {
|
|
29
34
|
throw new WebhookSignatureError("webhook headers missing");
|
|
30
35
|
}
|
|
31
|
-
if (!/^\d+$/.test(timestamp)) {
|
|
36
|
+
if (!/^\d+$/.test(timestamp) || !Number.isSafeInteger(Number(timestamp))) {
|
|
32
37
|
throw new WebhookSignatureError("webhook timestamp malformed");
|
|
33
38
|
}
|
|
34
|
-
|
|
35
|
-
if (Math.abs(now - Number(timestamp)) > (options.tolerance ?? 300)) {
|
|
39
|
+
if (Math.abs(now - Number(timestamp)) > tolerance) {
|
|
36
40
|
throw new WebhookSignatureError("webhook timestamp outside tolerance");
|
|
37
41
|
}
|
|
38
42
|
const signed = concat(new TextEncoder().encode(`${id}.${timestamp}.`), body);
|
|
@@ -63,12 +67,12 @@ export async function constructEvent(payload, headers, publicKeys, options) {
|
|
|
63
67
|
catch {
|
|
64
68
|
throw new TypeError("webhook body is not an event");
|
|
65
69
|
}
|
|
66
|
-
if (
|
|
70
|
+
if (!isRecord(event)) {
|
|
67
71
|
throw new TypeError("webhook body is not an event");
|
|
68
72
|
}
|
|
69
73
|
const e = event;
|
|
70
74
|
const data = e["data"];
|
|
71
|
-
const object =
|
|
75
|
+
const object = isRecord(data) ? data["object"] : null;
|
|
72
76
|
const { id: eventId, type, account, livemode, created, actor, request } = e;
|
|
73
77
|
if (e["object"] !== "event" ||
|
|
74
78
|
typeof eventId !== "string" ||
|
|
@@ -77,8 +81,7 @@ export async function constructEvent(payload, headers, publicKeys, options) {
|
|
|
77
81
|
typeof livemode !== "boolean" ||
|
|
78
82
|
typeof created !== "number" ||
|
|
79
83
|
!Number.isSafeInteger(created) ||
|
|
80
|
-
|
|
81
|
-
object === null ||
|
|
84
|
+
!isRecord(object) ||
|
|
82
85
|
typeof actor !== "string" ||
|
|
83
86
|
!(request === null || isRequest(request))) {
|
|
84
87
|
throw new TypeError("webhook body is not an event");
|
|
@@ -92,7 +95,7 @@ export async function constructEvent(payload, headers, publicKeys, options) {
|
|
|
92
95
|
if (livemode !== options.expectedLivemode) {
|
|
93
96
|
throw new WebhookSignatureError("webhook event is for the other mode");
|
|
94
97
|
}
|
|
95
|
-
const previous = data["previous_attributes"];
|
|
98
|
+
const previous = isRecord(data) ? data["previous_attributes"] : undefined;
|
|
96
99
|
return {
|
|
97
100
|
id: eventId,
|
|
98
101
|
object: "event",
|
|
@@ -103,10 +106,8 @@ export async function constructEvent(payload, headers, publicKeys, options) {
|
|
|
103
106
|
actor,
|
|
104
107
|
request,
|
|
105
108
|
data: {
|
|
106
|
-
object
|
|
107
|
-
...(
|
|
108
|
-
? { previous_attributes: previous }
|
|
109
|
-
: {}),
|
|
109
|
+
object,
|
|
110
|
+
...(isRecord(previous) ? { previous_attributes: previous } : {}),
|
|
110
111
|
},
|
|
111
112
|
};
|
|
112
113
|
}
|
|
@@ -121,8 +122,11 @@ function header(headers, name) {
|
|
|
121
122
|
}
|
|
122
123
|
return undefined;
|
|
123
124
|
}
|
|
125
|
+
function isRecord(value) {
|
|
126
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
127
|
+
}
|
|
124
128
|
function isRequest(value) {
|
|
125
|
-
if (
|
|
129
|
+
if (!isRecord(value)) {
|
|
126
130
|
return false;
|
|
127
131
|
}
|
|
128
132
|
const { id, idempotency_key: key } = value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../src/server/webhook.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,mEAAmE;AACnE,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC5B,IAAI,GAAG,uBAAuB,CAAC;CAClD;AAsCD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAA4B,EAC5B,OAAgE,EAChE,UAAsC,EACtC,OAA8B;IAE9B,IAAI,OAAO,CAAC,eAAe,KAAK,EAAE,EAAE,CAAC;QACnC,MAAM,IAAI,SAAS,CAAC,6BAA6B,CAAC,CAAC;IACrD,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACvF,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;IACxD,IAAI,EAAE,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC5E,MAAM,IAAI,qBAAqB,CAAC,yBAAyB,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../src/server/webhook.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@phala/pay",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.3",
|
|
4
4
|
"description": "Phala Pay checkout: a framework-agnostic client and React bindings",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"crypto",
|
|
@@ -43,7 +43,8 @@
|
|
|
43
43
|
},
|
|
44
44
|
"files": [
|
|
45
45
|
"dist",
|
|
46
|
-
"src"
|
|
46
|
+
"src",
|
|
47
|
+
"THIRD_PARTY_NOTICES"
|
|
47
48
|
],
|
|
48
49
|
"publishConfig": {
|
|
49
50
|
"access": "public"
|
|
@@ -54,13 +55,16 @@
|
|
|
54
55
|
},
|
|
55
56
|
"scripts": {
|
|
56
57
|
"build": "tsc -p tsconfig.build.json",
|
|
58
|
+
"icons:generate": "node scripts/generate-icons.mjs",
|
|
57
59
|
"prepare": "tsc -p tsconfig.build.json",
|
|
58
60
|
"typecheck": "tsc --noEmit",
|
|
59
61
|
"lint": "eslint .",
|
|
60
62
|
"test": "vitest run",
|
|
61
63
|
"e2e": "playwright test",
|
|
62
64
|
"e2e:docker": "e2e/docker.sh",
|
|
63
|
-
"check": "pnpm run typecheck && pnpm run lint && pnpm run test && pnpm run build"
|
|
65
|
+
"check": "pnpm run typecheck && pnpm run lint && pnpm run test && pnpm run build && pnpm run check-generated",
|
|
66
|
+
"generate:types": "openapi-typescript ../../crates/topup/openapi.json -o src/generated/openapi.d.ts --immutable",
|
|
67
|
+
"check-generated": "bash ../scripts/check-generated-js.sh"
|
|
64
68
|
},
|
|
65
69
|
"dependencies": {
|
|
66
70
|
"mipd": "^0.0.7",
|
|
@@ -96,6 +100,7 @@
|
|
|
96
100
|
"typescript-eslint": "^8.70.1",
|
|
97
101
|
"viem": "^2.56.9",
|
|
98
102
|
"vite": "^8.3.1",
|
|
99
|
-
"vitest": "^5.0.2"
|
|
103
|
+
"vitest": "^5.0.2",
|
|
104
|
+
"openapi-typescript": "7.13.0"
|
|
100
105
|
}
|
|
101
106
|
}
|
package/src/chains.ts
CHANGED
|
@@ -2,10 +2,20 @@ import type { Chain } from "viem";
|
|
|
2
2
|
import { base, baseSepolia, mainnet, sepolia } from "viem/chains";
|
|
3
3
|
|
|
4
4
|
/** Chains a wallet can be asked to add; any other chain must already be in the wallet. */
|
|
5
|
-
const CHAINS: readonly Chain
|
|
5
|
+
const CHAINS: readonly { chain: Chain; icon: "ethereum" | "base" }[] = [
|
|
6
|
+
{ chain: mainnet, icon: "ethereum" },
|
|
7
|
+
{ chain: sepolia, icon: "ethereum" },
|
|
8
|
+
{ chain: base, icon: "base" },
|
|
9
|
+
{ chain: baseSepolia, icon: "base" },
|
|
10
|
+
];
|
|
11
|
+
|
|
12
|
+
/** Icon family stored with the chain registry, including testnets. */
|
|
13
|
+
export function networkIconName(chainId: number): "ethereum" | "base" | undefined {
|
|
14
|
+
return CHAINS.find(({ chain }) => chain.id === chainId)?.icon;
|
|
15
|
+
}
|
|
6
16
|
|
|
7
17
|
export function knownChain(chainId: number): Chain | undefined {
|
|
8
|
-
return CHAINS.find((chain) => chain.id === chainId);
|
|
18
|
+
return CHAINS.find(({ chain }) => chain.id === chainId)?.chain;
|
|
9
19
|
}
|
|
10
20
|
|
|
11
21
|
/** A human name for the network, for example `Sepolia`. */
|
package/src/checkout.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { requestSignal } from "./request.js";
|
|
1
|
+
import { requestSignal, trimTrailingSlashes } from "./request.js";
|
|
2
2
|
import { getAddress, isAddress, isAddressEqual } from "viem";
|
|
3
3
|
import { parseClientQuote, quoteIdFromClientSecret, type ClientQuote } from "./quote.js";
|
|
4
4
|
|
|
@@ -152,7 +152,7 @@ export interface RetrieveQuoteOptions {
|
|
|
152
152
|
export async function retrieveQuote(options: RetrieveQuoteOptions): Promise<ClientQuote> {
|
|
153
153
|
const quoteId = quoteIdFromClientSecret(options.clientSecret);
|
|
154
154
|
const expected = expectedAddress(options.expectedAddress);
|
|
155
|
-
const base = options.apiBase
|
|
155
|
+
const base = trimTrailingSlashes(options.apiBase);
|
|
156
156
|
const url = `${base}/v1/quotes/${quoteId}?client_secret=${encodeURIComponent(options.clientSecret)}`;
|
|
157
157
|
const fetchImpl = options.fetch ?? globalThis.fetch.bind(globalThis);
|
|
158
158
|
// A simple GET with no custom headers, so the browser sends no CORS preflight.
|
package/src/deposit-address.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { requestSignal } from "./request.js";
|
|
1
|
+
import { requestSignal, trimTrailingSlashes } from "./request.js";
|
|
2
2
|
import { CheckoutError, responseError } from "./checkout.js";
|
|
3
3
|
|
|
4
4
|
/** A payment to a deposit address as the customer's page sees it. Display only. */
|
|
@@ -77,7 +77,7 @@ export async function retrieveDepositAddress(
|
|
|
77
77
|
options: RetrieveDepositAddressOptions,
|
|
78
78
|
): Promise<ClientDepositAddress> {
|
|
79
79
|
const id = depositAddressIdFromClientSecret(options.clientSecret);
|
|
80
|
-
const base = options.apiBase
|
|
80
|
+
const base = trimTrailingSlashes(options.apiBase);
|
|
81
81
|
const url = `${base}/v1/deposit_addresses/${id}?client_secret=${encodeURIComponent(options.clientSecret)}`;
|
|
82
82
|
const fetchImpl = options.fetch ?? globalThis.fetch.bind(globalThis);
|
|
83
83
|
// A simple GET with no custom headers, so the browser sends no CORS preflight.
|