@wallet-ui/core
Version:
Wallet UI core
152 lines (144 loc) • 4.14 kB
JavaScript
;
var persistent = require('@nanostores/persistent');
var nanostores = require('nanostores');
// src/clusters.ts
function createSolanaCluster(props, { id, label, url }) {
if (typeof props === "string") {
return { id, label, url: props };
}
return { id, label: props.label ?? label, url: props.url ?? url };
}
function createSolanaDevnet(props = {}) {
return createSolanaCluster(props, {
id: "solana:devnet",
label: "Devnet",
url: "devnet"
});
}
function createSolanaLocalnet(props = {}) {
return createSolanaCluster(props, {
id: "solana:localnet",
label: "Localnet",
url: "localnet"
});
}
function createSolanaMainnet(props = {}) {
return createSolanaCluster(props, {
id: "solana:mainnet",
label: "Mainnet",
url: "mainnet"
});
}
function createSolanaTestnet(props = {}) {
return createSolanaCluster(props, {
id: "solana:testnet",
label: "Testnet",
url: "testnet"
});
}
var Storage = class {
constructor(key, initial) {
this.key = key;
this.initial = initial;
this.atom = persistent.persistentAtom(key, initial, { decode: JSON.parse, encode: JSON.stringify });
}
atom;
get() {
return this.atom.get();
}
set(value) {
this.atom.set(value);
}
get value() {
return nanostores.computed(this.atom, (value) => value);
}
};
// src/create-storage.ts
function createStorage({ initial, key }) {
return new Storage(key, initial);
}
// src/create-storage-account.ts
function createStorageAccount({
initial,
key
} = {}) {
return createStorage({
initial,
key: key ?? "wallet-ui:account"
});
}
// src/create-storage-cluster.ts
function createStorageCluster({
initial,
key
} = {}) {
return createStorage({
initial: initial ?? "solana:devnet",
key: key ?? "wallet-ui:cluster"
});
}
// src/get-explorer-url.ts
var explorerProviders = ["solana", "solscan", "orb"];
function getExplorerUrl({ network, path, provider }) {
if (!(path.startsWith("/address") || path.startsWith("/block") || path.startsWith("/tx"))) {
throw new Error("Invalid path. Must be /address/{address}, /block/{id}, or /tx/{signature}.");
}
if (!explorerProviders.includes(provider)) {
throw new Error(`Invalid provider. Must be one of ${explorerProviders.join(", ")}.`);
}
const url = new URL(getExplorerBaseUrl(provider));
url.pathname = path;
const params = getExplorerSuffix(network);
if (params.cluster.length) {
url.searchParams.set("cluster", params.cluster);
}
if (params.customUrl.length) {
url.searchParams.set("customUrl", params.customUrl);
}
return url.toString();
}
function getExplorerBaseUrl(provider) {
switch (provider) {
case "orb":
return "https://orbmarkets.io";
case "solscan":
return "https://solscan.io";
default:
return "https://explorer.solana.com";
}
}
function getExplorerSuffix(props) {
switch (props.id) {
case "solana:devnet":
return { cluster: "devnet", customUrl: "" };
case "solana:localnet":
return { cluster: "custom", customUrl: props.url };
case "solana:testnet":
return { cluster: "testnet", customUrl: "" };
default:
return { cluster: "", customUrl: "" };
}
}
// src/handle-copy-text.ts
function handleCopyText(text) {
if (!text) {
return;
}
if (typeof globalThis === "undefined" || !globalThis.navigator || !globalThis.navigator.clipboard || !globalThis.navigator.clipboard.writeText) {
return;
}
void globalThis.navigator.clipboard.writeText(text);
}
exports.Storage = Storage;
exports.createSolanaDevnet = createSolanaDevnet;
exports.createSolanaLocalnet = createSolanaLocalnet;
exports.createSolanaMainnet = createSolanaMainnet;
exports.createSolanaTestnet = createSolanaTestnet;
exports.createStorage = createStorage;
exports.createStorageAccount = createStorageAccount;
exports.createStorageCluster = createStorageCluster;
exports.explorerProviders = explorerProviders;
exports.getExplorerUrl = getExplorerUrl;
exports.handleCopyText = handleCopyText;
//# sourceMappingURL=index.browser.cjs.map
//# sourceMappingURL=index.browser.cjs.map