@dynamic-labs-sdk/evm 1.14.0 → 1.17.0
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/dist/{addEIP6963Extension-CeJG9hJH.esm.js → addEIP6963Extension-4t3X8DrL.esm.js} +3 -3
- package/dist/{addEIP6963Extension-CeJG9hJH.esm.js.map → addEIP6963Extension-4t3X8DrL.esm.js.map} +1 -1
- package/dist/{addEIP6963Extension-CVWgGDEP.cjs → addEIP6963Extension-DQb_w4X0.cjs} +3 -3
- package/dist/{addEIP6963Extension-CVWgGDEP.cjs.map → addEIP6963Extension-DQb_w4X0.cjs.map} +1 -1
- package/dist/{addEIP6963Extension-DCVlKLtl.native.esm.js → addEIP6963Extension-h10IapXB.native.esm.js} +1 -1
- package/dist/{addEIP6963Extension-DCVlKLtl.native.esm.js.map → addEIP6963Extension-h10IapXB.native.esm.js.map} +1 -1
- package/dist/{addWaasEvmExtension-NkXUcFBx.cjs → addWaasEvmExtension-BhQYYFJs.cjs} +4 -4
- package/dist/{addWaasEvmExtension-NkXUcFBx.cjs.map → addWaasEvmExtension-BhQYYFJs.cjs.map} +1 -1
- package/dist/{addWaasEvmExtension-B1W9hBoO.native.esm.js → addWaasEvmExtension-CJD8D1Sf.native.esm.js} +3 -3
- package/dist/{addWaasEvmExtension-B1W9hBoO.native.esm.js.map → addWaasEvmExtension-CJD8D1Sf.native.esm.js.map} +1 -1
- package/dist/{addWaasEvmExtension-BBV5efH_.esm.js → addWaasEvmExtension-DCROWj4p.esm.js} +3 -3
- package/dist/{addWaasEvmExtension-BBV5efH_.esm.js.map → addWaasEvmExtension-DCROWj4p.esm.js.map} +1 -1
- package/dist/baseAccount.cjs +5 -4
- package/dist/baseAccount.cjs.map +1 -1
- package/dist/baseAccount.esm.js +4 -3
- package/dist/baseAccount.esm.js.map +1 -1
- package/dist/baseAccount.native.esm.js +4 -4
- package/dist/{createWalletClientForWalletAccount-BNb9shKs.native.esm.js → createWalletClientForWalletAccount-BXWhVkF0.esm.js} +3 -19
- package/dist/createWalletClientForWalletAccount-BXWhVkF0.esm.js.map +1 -0
- package/dist/{createWalletClientForWalletAccount-BO0XMuIl.cjs → createWalletClientForWalletAccount-C6nLEALv.cjs} +4 -43
- package/dist/createWalletClientForWalletAccount-C6nLEALv.cjs.map +1 -0
- package/dist/{createWalletClientForWalletAccount-Cs1cCKrt.esm.js → createWalletClientForWalletAccount-CsfxMvvD.native.esm.js} +3 -24
- package/dist/{createWalletClientForWalletAccount-BNb9shKs.native.esm.js.map → createWalletClientForWalletAccount-CsfxMvvD.native.esm.js.map} +1 -1
- package/dist/{createWalletProviderFromEIP1193Provider-DZ0ciUd0.native.esm.js → createWalletProviderFromEIP1193Provider-D4aKomjq.native.esm.js} +2 -2
- package/dist/{createWalletProviderFromEIP1193Provider-DZ0ciUd0.native.esm.js.map → createWalletProviderFromEIP1193Provider-D4aKomjq.native.esm.js.map} +1 -1
- package/dist/{createWalletProviderFromEIP1193Provider-5QOYfUP4.esm.js → createWalletProviderFromEIP1193Provider-DHC8_Mhd.esm.js} +2 -2
- package/dist/{createWalletProviderFromEIP1193Provider-5QOYfUP4.esm.js.map → createWalletProviderFromEIP1193Provider-DHC8_Mhd.esm.js.map} +1 -1
- package/dist/{createWalletProviderFromEIP1193Provider-CVPmT46o.cjs → createWalletProviderFromEIP1193Provider-Dr7ibPMG.cjs} +2 -2
- package/dist/{createWalletProviderFromEIP1193Provider-CVPmT46o.cjs.map → createWalletProviderFromEIP1193Provider-Dr7ibPMG.cjs.map} +1 -1
- package/dist/eip6963.cjs +6 -5
- package/dist/eip6963.cjs.map +1 -1
- package/dist/eip6963.esm.js +5 -4
- package/dist/eip6963.esm.js.map +1 -1
- package/dist/eip6963.native.esm.js +2 -2
- package/dist/{evmTransferAmount-j0G3UjkD.esm.js → evmTransferAmount-B2lXHyW3.native.esm.js} +3 -2
- package/dist/{evmTransferAmount-Bfn3RYq7.native.esm.js.map → evmTransferAmount-B2lXHyW3.native.esm.js.map} +1 -1
- package/dist/{evmTransferAmount-DwPPkeWK.cjs → evmTransferAmount-BpdjXv2I.cjs} +6 -5
- package/dist/{evmTransferAmount-DwPPkeWK.cjs.map → evmTransferAmount-BpdjXv2I.cjs.map} +1 -1
- package/dist/{evmTransferAmount-Bfn3RYq7.native.esm.js → evmTransferAmount-COHl3uNP.esm.js} +3 -2
- package/dist/{evmTransferAmount-j0G3UjkD.esm.js.map → evmTransferAmount-COHl3uNP.esm.js.map} +1 -1
- package/dist/exports/tempo.d.ts +11 -0
- package/dist/exports/tempo.d.ts.map +1 -0
- package/dist/index.cjs +7 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.esm.js +6 -5
- package/dist/index.esm.js.map +1 -1
- package/dist/index.native.esm.js +5 -5
- package/dist/mapNetworkDataToViemChain-AakFd9K2.esm.js +24 -0
- package/dist/mapNetworkDataToViemChain-AakFd9K2.esm.js.map +1 -0
- package/dist/mapNetworkDataToViemChain-C9086tZ-.native.esm.js +19 -0
- package/dist/mapNetworkDataToViemChain-C9086tZ-.native.esm.js.map +1 -0
- package/dist/mapNetworkDataToViemChain-CpkhBHiw.cjs +42 -0
- package/dist/mapNetworkDataToViemChain-CpkhBHiw.cjs.map +1 -0
- package/dist/metamask.cjs +5 -4
- package/dist/metamask.cjs.map +1 -1
- package/dist/metamask.esm.js +4 -3
- package/dist/metamask.esm.js.map +1 -1
- package/dist/metamask.native.esm.js +4 -4
- package/dist/{package-x2e-NQ78.native.esm.js → package-oaoGBkGK.native.esm.js} +2 -2
- package/dist/package-oaoGBkGK.native.esm.js.map +1 -0
- package/dist/tempo/addTempoExtension/addTempoExtension.d.ts +13 -0
- package/dist/tempo/addTempoExtension/addTempoExtension.d.ts.map +1 -0
- package/dist/tempo/errors/TempoNativeTokenError/TempoNativeTokenError.d.ts +9 -0
- package/dist/tempo/errors/TempoNativeTokenError/TempoNativeTokenError.d.ts.map +1 -0
- package/dist/tempo/getTempoPublicClient/getTempoPublicClient.d.ts +17 -0
- package/dist/tempo/getTempoPublicClient/getTempoPublicClient.d.ts.map +1 -0
- package/dist/tempo/isTempoNetworkProvider/isTempoNetworkProvider.d.ts +8 -0
- package/dist/tempo/isTempoNetworkProvider/isTempoNetworkProvider.d.ts.map +1 -0
- package/dist/tempo/isTempoWalletAccount/isTempoWalletAccount.d.ts +8 -0
- package/dist/tempo/isTempoWalletAccount/isTempoWalletAccount.d.ts.map +1 -0
- package/dist/tempo/isTempoWalletProvider/isTempoWalletProvider.d.ts +8 -0
- package/dist/tempo/isTempoWalletProvider/isTempoWalletProvider.d.ts.map +1 -0
- package/dist/tempo/registerTempoNetworkProviderBuilder/registerTempoNetworkProviderBuilder.d.ts +4 -0
- package/dist/tempo/registerTempoNetworkProviderBuilder/registerTempoNetworkProviderBuilder.d.ts.map +1 -0
- package/dist/tempo/sendTip20Transaction/sendTip20Transaction.d.ts +23 -0
- package/dist/tempo/sendTip20Transaction/sendTip20Transaction.d.ts.map +1 -0
- package/dist/tempo/utils/createTempoNetworkProvider/createTempoNetworkProvider.d.ts +5 -0
- package/dist/tempo/utils/createTempoNetworkProvider/createTempoNetworkProvider.d.ts.map +1 -0
- package/dist/tempo/utils/tempoChainIds/tempoChainIds.d.ts +4 -1
- package/dist/tempo/utils/tempoChainIds/tempoChainIds.d.ts.map +1 -1
- package/dist/tempo.cjs +173 -0
- package/dist/tempo.cjs.map +1 -0
- package/dist/tempo.esm.js +166 -0
- package/dist/tempo.esm.js.map +1 -0
- package/dist/tempo.native.esm.js +167 -0
- package/dist/tempo.native.esm.js.map +1 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -1
- package/dist/viem.cjs +4 -3
- package/dist/viem.cjs.map +1 -1
- package/dist/viem.esm.js +2 -1
- package/dist/viem.esm.js.map +1 -1
- package/dist/viem.native.esm.js +3 -2
- package/dist/viem.native.esm.js.map +1 -1
- package/dist/waas.cjs +5 -4
- package/dist/waas.cjs.map +1 -1
- package/dist/waas.esm.js +4 -3
- package/dist/waas.esm.js.map +1 -1
- package/dist/waas.native.esm.js +4 -4
- package/dist/walletConnect.cjs +4 -3
- package/dist/walletConnect.cjs.map +1 -1
- package/dist/walletConnect.esm.js +3 -2
- package/dist/walletConnect.esm.js.map +1 -1
- package/dist/walletConnect.native.esm.js +3 -3
- package/dist/windowInjected/addEvmWindowInjectedExtension/addEvmWindowInjectedExtension.d.ts +1 -1
- package/dist/windowInjected/addEvmWindowInjectedExtension/addEvmWindowInjectedExtension.d.ts.map +1 -1
- package/dist/windowInjected.cjs +5 -4
- package/dist/windowInjected.cjs.map +1 -1
- package/dist/windowInjected.esm.js +4 -3
- package/dist/windowInjected.esm.js.map +1 -1
- package/dist/windowInjected.native.esm.js +4 -4
- package/dist/windowInjected.native.esm.js.map +1 -1
- package/package.json +12 -6
- package/dist/createWalletClientForWalletAccount-BO0XMuIl.cjs.map +0 -1
- package/dist/createWalletClientForWalletAccount-Cs1cCKrt.esm.js.map +0 -1
- package/dist/package-x2e-NQ78.native.esm.js.map +0 -1
package/dist/tempo.cjs
ADDED
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
const require_mapNetworkDataToViemChain = require('./mapNetworkDataToViemChain-CpkhBHiw.cjs');
|
|
2
|
+
let _dynamic_labs_sdk_assert_package_version = require("@dynamic-labs-sdk/assert-package-version");
|
|
3
|
+
let _dynamic_labs_sdk_client = require("@dynamic-labs-sdk/client");
|
|
4
|
+
let _dynamic_labs_sdk_client_core = require("@dynamic-labs-sdk/client/core");
|
|
5
|
+
let viem = require("viem");
|
|
6
|
+
|
|
7
|
+
//#region src/tempo/utils/createTempoNetworkProvider/createTempoNetworkProvider.ts
|
|
8
|
+
/** @notInstrumented */
|
|
9
|
+
const createTempoNetworkProvider = (networkData, client) => ({
|
|
10
|
+
...(0, _dynamic_labs_sdk_client_core.createBaseNetworkProvider)("TEMPO", networkData),
|
|
11
|
+
getBalance: async () => ({ balance: "0" })
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
//#endregion
|
|
15
|
+
//#region src/tempo/registerTempoNetworkProviderBuilder/registerTempoNetworkProviderBuilder.ts
|
|
16
|
+
/** @notInstrumented */
|
|
17
|
+
const registerTempoNetworkProviderBuilder = (client) => {
|
|
18
|
+
const networkProviderBuilderRegistry = (0, _dynamic_labs_sdk_client_core.getNetworkProviderBuilderRegistry)(client);
|
|
19
|
+
if (networkProviderBuilderRegistry.get().get("TEMPO")) return;
|
|
20
|
+
networkProviderBuilderRegistry.register({
|
|
21
|
+
builder: (networkData) => createTempoNetworkProvider(networkData, client),
|
|
22
|
+
chain: "TEMPO"
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
//#endregion
|
|
27
|
+
//#region src/tempo/addTempoExtension/addTempoExtension.ts
|
|
28
|
+
/** Registry key for the Tempo chain extension. Used by addWaasTempoExtension to avoid duplicate registration. */
|
|
29
|
+
const TEMPO_EXTENSION_KEY = "tempo";
|
|
30
|
+
/**
|
|
31
|
+
* Registers the Tempo chain extension with the Dynamic client.
|
|
32
|
+
* Enables support for Tempo networks (chain IDs 4217, 42429, 42431).
|
|
33
|
+
* For embedded wallet (WaaS) support, also call addWaasTempoExtension
|
|
34
|
+
* from @dynamic-labs-sdk/evm/tempo/waas.
|
|
35
|
+
*
|
|
36
|
+
* @param [client] - The Dynamic client instance. Only required when using multiple clients.
|
|
37
|
+
* @notInstrumented
|
|
38
|
+
*/
|
|
39
|
+
const addTempoExtension = (client = (0, _dynamic_labs_sdk_client_core.getDefaultClient)()) => {
|
|
40
|
+
if ((0, _dynamic_labs_sdk_client_core.hasExtension)({ extensionKey: TEMPO_EXTENSION_KEY }, client)) return;
|
|
41
|
+
(0, _dynamic_labs_sdk_client_core.registerExtension)({ extensionKey: TEMPO_EXTENSION_KEY }, client);
|
|
42
|
+
registerTempoNetworkProviderBuilder(client);
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
//#endregion
|
|
46
|
+
//#region src/tempo/getTempoPublicClient/getTempoPublicClient.ts
|
|
47
|
+
/**
|
|
48
|
+
* Returns a viem PublicClient for the active Tempo network.
|
|
49
|
+
* Network data (RPC URL, chain config) is resolved from the 'TEMPO' network
|
|
50
|
+
* registry at runtime — not from EVM.
|
|
51
|
+
*
|
|
52
|
+
* @param params.walletAccount - Must have chain === 'TEMPO'.
|
|
53
|
+
|
|
54
|
+
* @notInstrumented
|
|
55
|
+
*/
|
|
56
|
+
const getTempoPublicClient = async ({ walletAccount }, client = (0, _dynamic_labs_sdk_client_core.getDefaultClient)()) => {
|
|
57
|
+
const { networkData } = await (0, _dynamic_labs_sdk_client.getActiveNetworkData)({ walletAccount }, client);
|
|
58
|
+
(0, _dynamic_labs_sdk_client_core.assertDefined)(networkData, `No network data found for Tempo wallet account ${walletAccount.address}`);
|
|
59
|
+
return (0, viem.createPublicClient)({
|
|
60
|
+
chain: require_mapNetworkDataToViemChain.mapNetworkDataToViemChain(networkData),
|
|
61
|
+
transport: (0, viem.http)(networkData.rpcUrls.http[0])
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
//#endregion
|
|
66
|
+
//#region src/tempo/isTempoNetworkProvider/isTempoNetworkProvider.ts
|
|
67
|
+
/**
|
|
68
|
+
* Type guard — returns true if the network provider is for the Tempo chain.
|
|
69
|
+
* @notInstrumented
|
|
70
|
+
*/
|
|
71
|
+
const isTempoNetworkProvider = (provider) => provider.chain === "TEMPO";
|
|
72
|
+
|
|
73
|
+
//#endregion
|
|
74
|
+
//#region src/tempo/isTempoWalletAccount/isTempoWalletAccount.ts
|
|
75
|
+
/**
|
|
76
|
+
* Type guard — returns true if the wallet account is for the Tempo chain.
|
|
77
|
+
* @notInstrumented
|
|
78
|
+
*/
|
|
79
|
+
const isTempoWalletAccount = (account) => account.chain === "TEMPO";
|
|
80
|
+
|
|
81
|
+
//#endregion
|
|
82
|
+
//#region src/tempo/isTempoWalletProvider/isTempoWalletProvider.ts
|
|
83
|
+
/**
|
|
84
|
+
* Type guard — returns true if the wallet provider is for the Tempo chain.
|
|
85
|
+
* @notInstrumented
|
|
86
|
+
*/
|
|
87
|
+
const isTempoWalletProvider = (provider) => provider.chain === "TEMPO";
|
|
88
|
+
|
|
89
|
+
//#endregion
|
|
90
|
+
//#region src/tempo/errors/TempoNativeTokenError/TempoNativeTokenError.ts
|
|
91
|
+
/**
|
|
92
|
+
* Thrown when a Tempo transaction is attempted without a TIP-20 token contract address.
|
|
93
|
+
* Tempo has no native token, so all value transfers require a token contract address.
|
|
94
|
+
*/
|
|
95
|
+
var TempoNativeTokenError = class extends _dynamic_labs_sdk_client.BaseError {
|
|
96
|
+
constructor() {
|
|
97
|
+
super({
|
|
98
|
+
cause: null,
|
|
99
|
+
code: "tempo_native_token_error",
|
|
100
|
+
docsUrl: null,
|
|
101
|
+
name: "TempoNativeTokenError",
|
|
102
|
+
shortMessage: "Tempo has no native token. Provide a TIP-20 token contract address via tokenAddress."
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
//#endregion
|
|
108
|
+
//#region src/tempo/sendTip20Transaction/sendTip20Transaction.ts
|
|
109
|
+
const erc20TransferAbi = [{
|
|
110
|
+
inputs: [{
|
|
111
|
+
name: "_to",
|
|
112
|
+
type: "address"
|
|
113
|
+
}, {
|
|
114
|
+
name: "_value",
|
|
115
|
+
type: "uint256"
|
|
116
|
+
}],
|
|
117
|
+
name: "transfer",
|
|
118
|
+
outputs: [{
|
|
119
|
+
name: "",
|
|
120
|
+
type: "bool"
|
|
121
|
+
}],
|
|
122
|
+
stateMutability: "nonpayable",
|
|
123
|
+
type: "function"
|
|
124
|
+
}];
|
|
125
|
+
/**
|
|
126
|
+
* Sends a TIP-20 token transfer on a Tempo network.
|
|
127
|
+
* Tempo has no native token — all transfers require a token contract address.
|
|
128
|
+
* Throws if tokenAddress is empty.
|
|
129
|
+
*
|
|
130
|
+
* @notInstrumented
|
|
131
|
+
*/
|
|
132
|
+
const sendTip20Transaction = async ({ amount, decimals = 18, to, tokenAddress, walletClient }) => {
|
|
133
|
+
if (!tokenAddress) throw new TempoNativeTokenError();
|
|
134
|
+
return walletClient.writeContract({
|
|
135
|
+
abi: erc20TransferAbi,
|
|
136
|
+
address: tokenAddress,
|
|
137
|
+
args: [to, (0, viem.parseUnits)(amount, decimals)],
|
|
138
|
+
functionName: "transfer"
|
|
139
|
+
});
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
//#endregion
|
|
143
|
+
//#region src/tempo/utils/tempoChainIds/tempoChainIds.ts
|
|
144
|
+
/**
|
|
145
|
+
* Immutable protocol-level chain IDs for all Tempo networks.
|
|
146
|
+
* Used by isTempoChainId and serializeTempoTransaction to identify Tempo chains.
|
|
147
|
+
*/
|
|
148
|
+
const TEMPO_CHAIN_IDS = [
|
|
149
|
+
4217,
|
|
150
|
+
42429,
|
|
151
|
+
42431
|
|
152
|
+
];
|
|
153
|
+
/**
|
|
154
|
+
* Returns true if networkId belongs to a Tempo network.
|
|
155
|
+
* Tempo is EVM-compatible but has no native token and uses custom transaction formats.
|
|
156
|
+
* @notInstrumented
|
|
157
|
+
*/
|
|
158
|
+
const isTempoChainId = (networkId) => TEMPO_CHAIN_IDS.includes(Number(networkId));
|
|
159
|
+
|
|
160
|
+
//#endregion
|
|
161
|
+
//#region src/exports/tempo.ts
|
|
162
|
+
(0, _dynamic_labs_sdk_assert_package_version.assertPackageVersion)(require_mapNetworkDataToViemChain.name, require_mapNetworkDataToViemChain.version);
|
|
163
|
+
|
|
164
|
+
//#endregion
|
|
165
|
+
exports.TEMPO_CHAIN_IDS = TEMPO_CHAIN_IDS;
|
|
166
|
+
exports.addTempoExtension = addTempoExtension;
|
|
167
|
+
exports.getTempoPublicClient = getTempoPublicClient;
|
|
168
|
+
exports.isTempoChainId = isTempoChainId;
|
|
169
|
+
exports.isTempoNetworkProvider = isTempoNetworkProvider;
|
|
170
|
+
exports.isTempoWalletAccount = isTempoWalletAccount;
|
|
171
|
+
exports.isTempoWalletProvider = isTempoWalletProvider;
|
|
172
|
+
exports.sendTip20Transaction = sendTip20Transaction;
|
|
173
|
+
//# sourceMappingURL=tempo.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tempo.cjs","names":["mapNetworkDataToViemChain","BaseError","packageName","packageVersion"],"sources":["../src/tempo/utils/createTempoNetworkProvider/createTempoNetworkProvider.ts","../src/tempo/registerTempoNetworkProviderBuilder/registerTempoNetworkProviderBuilder.ts","../src/tempo/addTempoExtension/addTempoExtension.ts","../src/tempo/getTempoPublicClient/getTempoPublicClient.ts","../src/tempo/isTempoNetworkProvider/isTempoNetworkProvider.ts","../src/tempo/isTempoWalletAccount/isTempoWalletAccount.ts","../src/tempo/isTempoWalletProvider/isTempoWalletProvider.ts","../src/tempo/errors/TempoNativeTokenError/TempoNativeTokenError.ts","../src/tempo/sendTip20Transaction/sendTip20Transaction.ts","../src/tempo/utils/tempoChainIds/tempoChainIds.ts","../src/exports/tempo.ts"],"sourcesContent":["import type { DynamicClient, NetworkData } from '@dynamic-labs-sdk/client';\nimport { createBaseNetworkProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { TempoNetworkProvider } from '../../TempoNetworkProvider.types';\n\n/** @notInstrumented */\nexport const createTempoNetworkProvider = (\n networkData: NetworkData,\n // Tempo has no native token so no RPC balance call is needed.\n // The client param is kept to match the builder signature.\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n client: DynamicClient\n): TempoNetworkProvider => ({\n ...createBaseNetworkProvider('TEMPO', networkData),\n getBalance: async () => ({ balance: '0' }),\n});\n","import { type DynamicClient } from '@dynamic-labs-sdk/client';\nimport { getNetworkProviderBuilderRegistry } from '@dynamic-labs-sdk/client/core';\n\nimport { createTempoNetworkProvider } from '../utils/createTempoNetworkProvider/createTempoNetworkProvider';\n\n/** @notInstrumented */\nexport const registerTempoNetworkProviderBuilder = (\n client: DynamicClient\n): void => {\n const networkProviderBuilderRegistry =\n getNetworkProviderBuilderRegistry(client);\n\n if (networkProviderBuilderRegistry.get().get('TEMPO')) {\n return;\n }\n\n networkProviderBuilderRegistry.register({\n builder: (networkData) => createTempoNetworkProvider(networkData, client),\n chain: 'TEMPO',\n });\n};\n","import {\n getDefaultClient,\n hasExtension,\n registerExtension,\n} from '@dynamic-labs-sdk/client/core';\n\nimport { registerTempoNetworkProviderBuilder } from '../registerTempoNetworkProviderBuilder/registerTempoNetworkProviderBuilder';\n\n/** Registry key for the Tempo chain extension. Used by addWaasTempoExtension to avoid duplicate registration. */\nexport const TEMPO_EXTENSION_KEY = 'tempo';\n\n/**\n * Registers the Tempo chain extension with the Dynamic client.\n * Enables support for Tempo networks (chain IDs 4217, 42429, 42431).\n * For embedded wallet (WaaS) support, also call addWaasTempoExtension\n * from @dynamic-labs-sdk/evm/tempo/waas.\n *\n * @param [client] - The Dynamic client instance. Only required when using multiple clients.\n * @notInstrumented\n */\n\nexport const addTempoExtension = (client = getDefaultClient()): void => {\n if (hasExtension({ extensionKey: TEMPO_EXTENSION_KEY }, client)) {\n return;\n }\n\n registerExtension({ extensionKey: TEMPO_EXTENSION_KEY }, client);\n registerTempoNetworkProviderBuilder(client);\n};\n","import {\n type WalletAccount,\n getActiveNetworkData,\n} from '@dynamic-labs-sdk/client';\nimport { assertDefined, getDefaultClient } from '@dynamic-labs-sdk/client/core';\nimport type { Chain, PublicClient, Transport } from 'viem';\nimport { createPublicClient, http } from 'viem';\n\nimport { mapNetworkDataToViemChain } from '../../viem/utils/mapNetworkDataToViemChain/mapNetworkDataToViemChain';\n\ntype GetTempoPublicClientParams = {\n walletAccount: WalletAccount;\n};\n\n/**\n * Returns a viem PublicClient for the active Tempo network.\n * Network data (RPC URL, chain config) is resolved from the 'TEMPO' network\n * registry at runtime — not from EVM.\n *\n * @param params.walletAccount - Must have chain === 'TEMPO'.\n \n * @notInstrumented\n */\nexport const getTempoPublicClient = async (\n { walletAccount }: GetTempoPublicClientParams,\n client = getDefaultClient()\n): Promise<PublicClient<Transport, Chain>> => {\n const { networkData } = await getActiveNetworkData({ walletAccount }, client);\n\n assertDefined(\n networkData,\n `No network data found for Tempo wallet account ${walletAccount.address}`\n );\n\n return createPublicClient({\n chain: mapNetworkDataToViemChain(networkData),\n transport: http(networkData.rpcUrls.http[0]),\n });\n};\n","import type { NetworkProvider } from '@dynamic-labs-sdk/client';\n\nimport type { TempoNetworkProvider } from '../TempoNetworkProvider.types';\n\n/**\n * Type guard — returns true if the network provider is for the Tempo chain.\n * @notInstrumented\n */\nexport const isTempoNetworkProvider = (\n provider: NetworkProvider\n): provider is TempoNetworkProvider => provider.chain === 'TEMPO';\n","import type { WalletAccount } from '@dynamic-labs-sdk/client';\n\nimport type { TempoWalletAccount } from '../TempoWalletAccount.types';\n\n/**\n * Type guard — returns true if the wallet account is for the Tempo chain.\n * @notInstrumented\n */\nexport const isTempoWalletAccount = (\n account: WalletAccount | TempoWalletAccount\n): account is TempoWalletAccount => account.chain === 'TEMPO';\n","import type { WalletProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { TempoWalletProvider } from '../TempoWalletProvider.types';\n\n/**\n * Type guard — returns true if the wallet provider is for the Tempo chain.\n * @notInstrumented\n */\nexport const isTempoWalletProvider = (\n provider: WalletProvider | TempoWalletProvider\n): provider is TempoWalletProvider => provider.chain === 'TEMPO';\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\n/**\n * Thrown when a Tempo transaction is attempted without a TIP-20 token contract address.\n * Tempo has no native token, so all value transfers require a token contract address.\n */\nexport class TempoNativeTokenError extends BaseError {\n constructor() {\n super({\n cause: null,\n code: 'tempo_native_token_error',\n docsUrl: null,\n name: 'TempoNativeTokenError',\n shortMessage:\n 'Tempo has no native token. Provide a TIP-20 token contract address via tokenAddress.',\n });\n }\n}\n","import type { Account, Chain, Hex, Transport, WalletClient } from 'viem';\nimport { parseUnits } from 'viem';\n\nimport { TempoNativeTokenError } from '../errors/TempoNativeTokenError/TempoNativeTokenError';\n\nconst erc20TransferAbi = [\n {\n inputs: [\n { name: '_to', type: 'address' },\n { name: '_value', type: 'uint256' },\n ],\n name: 'transfer',\n outputs: [{ name: '', type: 'bool' }],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const;\n\ntype SendTip20TransactionParams = {\n /** Human-readable amount, e.g. '1.5' */\n amount: string;\n /** Token decimals — defaults to 18 */\n decimals?: number;\n /** Recipient address */\n to: string;\n /** TIP-20 token contract address. Required — Tempo has no native token. */\n tokenAddress: string;\n /** Viem WalletClient with a Tempo account. Obtain from WaasTempoWalletProvider.createViemWalletClient. */\n walletClient: WalletClient<Transport, Chain, Account>;\n};\n\n/**\n * Sends a TIP-20 token transfer on a Tempo network.\n * Tempo has no native token — all transfers require a token contract address.\n * Throws if tokenAddress is empty.\n *\n * @notInstrumented\n */\nexport const sendTip20Transaction = async ({\n amount,\n decimals = 18,\n to,\n tokenAddress,\n walletClient,\n}: SendTip20TransactionParams): Promise<Hex> => {\n if (!tokenAddress) {\n throw new TempoNativeTokenError();\n }\n\n return walletClient.writeContract({\n abi: erc20TransferAbi,\n address: tokenAddress as Hex,\n args: [to as Hex, parseUnits(amount, decimals)],\n functionName: 'transfer',\n });\n};\n","/* eslint-disable custom-rules/function-name-matches-filename */\n/**\n * Immutable protocol-level chain IDs for all Tempo networks.\n * Used by isTempoChainId and serializeTempoTransaction to identify Tempo chains.\n */\nexport const TEMPO_CHAIN_IDS = [4217, 42429, 42431] as const;\n\n/**\n * Returns true if networkId belongs to a Tempo network.\n * Tempo is EVM-compatible but has no native token and uses custom transaction formats.\n * @notInstrumented\n */\nexport const isTempoChainId = (networkId: string | number): boolean =>\n TEMPO_CHAIN_IDS.includes(\n Number(networkId) as (typeof TEMPO_CHAIN_IDS)[number]\n );\n","import { assertPackageVersion } from '@dynamic-labs-sdk/assert-package-version';\n\nimport {\n name as packageName,\n version as packageVersion,\n} from '../../package.json';\nassertPackageVersion(packageName, packageVersion);\n\nexport { addTempoExtension } from '../tempo/addTempoExtension/addTempoExtension';\nexport { getTempoPublicClient } from '../tempo/getTempoPublicClient/getTempoPublicClient';\nexport { isTempoNetworkProvider } from '../tempo/isTempoNetworkProvider/isTempoNetworkProvider';\nexport { isTempoWalletAccount } from '../tempo/isTempoWalletAccount/isTempoWalletAccount';\nexport { isTempoWalletProvider } from '../tempo/isTempoWalletProvider/isTempoWalletProvider';\nexport { sendTip20Transaction } from '../tempo/sendTip20Transaction/sendTip20Transaction';\nexport type { TempoNetworkProvider } from '../tempo/TempoNetworkProvider.types';\nexport type { TempoWalletAccount } from '../tempo/TempoWalletAccount.types';\nexport type { TempoWalletProvider } from '../tempo/TempoWalletProvider.types';\nexport { TEMPO_CHAIN_IDS, isTempoChainId } from '../tempo/utils/tempoChainIds/tempoChainIds';\n"],"mappings":";;;;;;;;AAMA,MAAa,8BACX,aAIA,YAC0B;CAC1B,gEAA6B,SAAS,YAAY;CAClD,YAAY,aAAa,EAAE,SAAS,KAAK;CAC1C;;;;;ACTD,MAAa,uCACX,WACS;CACT,MAAM,sGAC8B,OAAO;AAE3C,KAAI,+BAA+B,KAAK,CAAC,IAAI,QAAQ,CACnD;AAGF,gCAA+B,SAAS;EACtC,UAAU,gBAAgB,2BAA2B,aAAa,OAAO;EACzE,OAAO;EACR,CAAC;;;;;;ACVJ,MAAa,sBAAsB;;;;;;;;;;AAYnC,MAAa,qBAAqB,8DAA2B,KAAW;AACtE,qDAAiB,EAAE,cAAc,qBAAqB,EAAE,OAAO,CAC7D;AAGF,sDAAkB,EAAE,cAAc,qBAAqB,EAAE,OAAO;AAChE,qCAAoC,OAAO;;;;;;;;;;;;;;ACJ7C,MAAa,uBAAuB,OAClC,EAAE,iBACF,8DAA2B,KACiB;CAC5C,MAAM,EAAE,gBAAgB,yDAA2B,EAAE,eAAe,EAAE,OAAO;AAE7E,kDACE,aACA,kDAAkD,cAAc,UACjE;AAED,qCAA0B;EACxB,OAAOA,4DAA0B,YAAY;EAC7C,0BAAgB,YAAY,QAAQ,KAAK,GAAG;EAC7C,CAAC;;;;;;;;;AC7BJ,MAAa,0BACX,aACqC,SAAS,UAAU;;;;;;;;ACF1D,MAAa,wBACX,YACkC,QAAQ,UAAU;;;;;;;;ACFtD,MAAa,yBACX,aACoC,SAAS,UAAU;;;;;;;;ACJzD,IAAa,wBAAb,cAA2CC,mCAAU;CACnD,cAAc;AACZ,QAAM;GACJ,OAAO;GACP,MAAM;GACN,SAAS;GACT,MAAM;GACN,cACE;GACH,CAAC;;;;;;ACVN,MAAM,mBAAmB,CACvB;CACE,QAAQ,CACN;EAAE,MAAM;EAAO,MAAM;EAAW,EAChC;EAAE,MAAM;EAAU,MAAM;EAAW,CACpC;CACD,MAAM;CACN,SAAS,CAAC;EAAE,MAAM;EAAI,MAAM;EAAQ,CAAC;CACrC,iBAAiB;CACjB,MAAM;CACP,CACF;;;;;;;;AAsBD,MAAa,uBAAuB,OAAO,EACzC,QACA,WAAW,IACX,IACA,cACA,mBAC8C;AAC9C,KAAI,CAAC,aACH,OAAM,IAAI,uBAAuB;AAGnC,QAAO,aAAa,cAAc;EAChC,KAAK;EACL,SAAS;EACT,MAAM,CAAC,yBAAsB,QAAQ,SAAS,CAAC;EAC/C,cAAc;EACf,CAAC;;;;;;;;;ACjDJ,MAAa,kBAAkB;CAAC;CAAM;CAAO;CAAM;;;;;;AAOnD,MAAa,kBAAkB,cAC7B,gBAAgB,SACd,OAAO,UAAU,CAClB;;;;mECTkBC,wCAAaC,0CAAe"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { n as name, r as version, t as mapNetworkDataToViemChain } from "./mapNetworkDataToViemChain-AakFd9K2.esm.js";
|
|
2
|
+
import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
|
|
3
|
+
import { BaseError, getActiveNetworkData } from "@dynamic-labs-sdk/client";
|
|
4
|
+
import { assertDefined, createBaseNetworkProvider, getDefaultClient as getDefaultClient$1, getNetworkProviderBuilderRegistry, hasExtension as hasExtension$1, registerExtension } from "@dynamic-labs-sdk/client/core";
|
|
5
|
+
import { createPublicClient, http, parseUnits } from "viem";
|
|
6
|
+
|
|
7
|
+
//#region src/tempo/utils/createTempoNetworkProvider/createTempoNetworkProvider.ts
|
|
8
|
+
/** @notInstrumented */
|
|
9
|
+
const createTempoNetworkProvider = (networkData, client) => ({
|
|
10
|
+
...createBaseNetworkProvider("TEMPO", networkData),
|
|
11
|
+
getBalance: async () => ({ balance: "0" })
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
//#endregion
|
|
15
|
+
//#region src/tempo/registerTempoNetworkProviderBuilder/registerTempoNetworkProviderBuilder.ts
|
|
16
|
+
/** @notInstrumented */
|
|
17
|
+
const registerTempoNetworkProviderBuilder = (client) => {
|
|
18
|
+
const networkProviderBuilderRegistry = getNetworkProviderBuilderRegistry(client);
|
|
19
|
+
if (networkProviderBuilderRegistry.get().get("TEMPO")) return;
|
|
20
|
+
networkProviderBuilderRegistry.register({
|
|
21
|
+
builder: (networkData) => createTempoNetworkProvider(networkData, client),
|
|
22
|
+
chain: "TEMPO"
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
//#endregion
|
|
27
|
+
//#region src/tempo/addTempoExtension/addTempoExtension.ts
|
|
28
|
+
/** Registry key for the Tempo chain extension. Used by addWaasTempoExtension to avoid duplicate registration. */
|
|
29
|
+
const TEMPO_EXTENSION_KEY = "tempo";
|
|
30
|
+
/**
|
|
31
|
+
* Registers the Tempo chain extension with the Dynamic client.
|
|
32
|
+
* Enables support for Tempo networks (chain IDs 4217, 42429, 42431).
|
|
33
|
+
* For embedded wallet (WaaS) support, also call addWaasTempoExtension
|
|
34
|
+
* from @dynamic-labs-sdk/evm/tempo/waas.
|
|
35
|
+
*
|
|
36
|
+
* @param [client] - The Dynamic client instance. Only required when using multiple clients.
|
|
37
|
+
* @notInstrumented
|
|
38
|
+
*/
|
|
39
|
+
const addTempoExtension = (client = getDefaultClient$1()) => {
|
|
40
|
+
if (hasExtension$1({ extensionKey: TEMPO_EXTENSION_KEY }, client)) return;
|
|
41
|
+
registerExtension({ extensionKey: TEMPO_EXTENSION_KEY }, client);
|
|
42
|
+
registerTempoNetworkProviderBuilder(client);
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
//#endregion
|
|
46
|
+
//#region src/tempo/getTempoPublicClient/getTempoPublicClient.ts
|
|
47
|
+
/**
|
|
48
|
+
* Returns a viem PublicClient for the active Tempo network.
|
|
49
|
+
* Network data (RPC URL, chain config) is resolved from the 'TEMPO' network
|
|
50
|
+
* registry at runtime — not from EVM.
|
|
51
|
+
*
|
|
52
|
+
* @param params.walletAccount - Must have chain === 'TEMPO'.
|
|
53
|
+
|
|
54
|
+
* @notInstrumented
|
|
55
|
+
*/
|
|
56
|
+
const getTempoPublicClient = async ({ walletAccount }, client = getDefaultClient$1()) => {
|
|
57
|
+
const { networkData } = await getActiveNetworkData({ walletAccount }, client);
|
|
58
|
+
assertDefined(networkData, `No network data found for Tempo wallet account ${walletAccount.address}`);
|
|
59
|
+
return createPublicClient({
|
|
60
|
+
chain: mapNetworkDataToViemChain(networkData),
|
|
61
|
+
transport: http(networkData.rpcUrls.http[0])
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
//#endregion
|
|
66
|
+
//#region src/tempo/isTempoNetworkProvider/isTempoNetworkProvider.ts
|
|
67
|
+
/**
|
|
68
|
+
* Type guard — returns true if the network provider is for the Tempo chain.
|
|
69
|
+
* @notInstrumented
|
|
70
|
+
*/
|
|
71
|
+
const isTempoNetworkProvider = (provider) => provider.chain === "TEMPO";
|
|
72
|
+
|
|
73
|
+
//#endregion
|
|
74
|
+
//#region src/tempo/isTempoWalletAccount/isTempoWalletAccount.ts
|
|
75
|
+
/**
|
|
76
|
+
* Type guard — returns true if the wallet account is for the Tempo chain.
|
|
77
|
+
* @notInstrumented
|
|
78
|
+
*/
|
|
79
|
+
const isTempoWalletAccount = (account) => account.chain === "TEMPO";
|
|
80
|
+
|
|
81
|
+
//#endregion
|
|
82
|
+
//#region src/tempo/isTempoWalletProvider/isTempoWalletProvider.ts
|
|
83
|
+
/**
|
|
84
|
+
* Type guard — returns true if the wallet provider is for the Tempo chain.
|
|
85
|
+
* @notInstrumented
|
|
86
|
+
*/
|
|
87
|
+
const isTempoWalletProvider = (provider) => provider.chain === "TEMPO";
|
|
88
|
+
|
|
89
|
+
//#endregion
|
|
90
|
+
//#region src/tempo/errors/TempoNativeTokenError/TempoNativeTokenError.ts
|
|
91
|
+
/**
|
|
92
|
+
* Thrown when a Tempo transaction is attempted without a TIP-20 token contract address.
|
|
93
|
+
* Tempo has no native token, so all value transfers require a token contract address.
|
|
94
|
+
*/
|
|
95
|
+
var TempoNativeTokenError = class extends BaseError {
|
|
96
|
+
constructor() {
|
|
97
|
+
super({
|
|
98
|
+
cause: null,
|
|
99
|
+
code: "tempo_native_token_error",
|
|
100
|
+
docsUrl: null,
|
|
101
|
+
name: "TempoNativeTokenError",
|
|
102
|
+
shortMessage: "Tempo has no native token. Provide a TIP-20 token contract address via tokenAddress."
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
//#endregion
|
|
108
|
+
//#region src/tempo/sendTip20Transaction/sendTip20Transaction.ts
|
|
109
|
+
const erc20TransferAbi = [{
|
|
110
|
+
inputs: [{
|
|
111
|
+
name: "_to",
|
|
112
|
+
type: "address"
|
|
113
|
+
}, {
|
|
114
|
+
name: "_value",
|
|
115
|
+
type: "uint256"
|
|
116
|
+
}],
|
|
117
|
+
name: "transfer",
|
|
118
|
+
outputs: [{
|
|
119
|
+
name: "",
|
|
120
|
+
type: "bool"
|
|
121
|
+
}],
|
|
122
|
+
stateMutability: "nonpayable",
|
|
123
|
+
type: "function"
|
|
124
|
+
}];
|
|
125
|
+
/**
|
|
126
|
+
* Sends a TIP-20 token transfer on a Tempo network.
|
|
127
|
+
* Tempo has no native token — all transfers require a token contract address.
|
|
128
|
+
* Throws if tokenAddress is empty.
|
|
129
|
+
*
|
|
130
|
+
* @notInstrumented
|
|
131
|
+
*/
|
|
132
|
+
const sendTip20Transaction = async ({ amount, decimals = 18, to, tokenAddress, walletClient }) => {
|
|
133
|
+
if (!tokenAddress) throw new TempoNativeTokenError();
|
|
134
|
+
return walletClient.writeContract({
|
|
135
|
+
abi: erc20TransferAbi,
|
|
136
|
+
address: tokenAddress,
|
|
137
|
+
args: [to, parseUnits(amount, decimals)],
|
|
138
|
+
functionName: "transfer"
|
|
139
|
+
});
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
//#endregion
|
|
143
|
+
//#region src/tempo/utils/tempoChainIds/tempoChainIds.ts
|
|
144
|
+
/**
|
|
145
|
+
* Immutable protocol-level chain IDs for all Tempo networks.
|
|
146
|
+
* Used by isTempoChainId and serializeTempoTransaction to identify Tempo chains.
|
|
147
|
+
*/
|
|
148
|
+
const TEMPO_CHAIN_IDS = [
|
|
149
|
+
4217,
|
|
150
|
+
42429,
|
|
151
|
+
42431
|
|
152
|
+
];
|
|
153
|
+
/**
|
|
154
|
+
* Returns true if networkId belongs to a Tempo network.
|
|
155
|
+
* Tempo is EVM-compatible but has no native token and uses custom transaction formats.
|
|
156
|
+
* @notInstrumented
|
|
157
|
+
*/
|
|
158
|
+
const isTempoChainId = (networkId) => TEMPO_CHAIN_IDS.includes(Number(networkId));
|
|
159
|
+
|
|
160
|
+
//#endregion
|
|
161
|
+
//#region src/exports/tempo.ts
|
|
162
|
+
assertPackageVersion(name, version);
|
|
163
|
+
|
|
164
|
+
//#endregion
|
|
165
|
+
export { TEMPO_CHAIN_IDS, addTempoExtension, getTempoPublicClient, isTempoChainId, isTempoNetworkProvider, isTempoWalletAccount, isTempoWalletProvider, sendTip20Transaction };
|
|
166
|
+
//# sourceMappingURL=tempo.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tempo.esm.js","names":["getDefaultClient","hasExtension","getDefaultClient","packageName","packageVersion"],"sources":["../src/tempo/utils/createTempoNetworkProvider/createTempoNetworkProvider.ts","../src/tempo/registerTempoNetworkProviderBuilder/registerTempoNetworkProviderBuilder.ts","../src/tempo/addTempoExtension/addTempoExtension.ts","../src/tempo/getTempoPublicClient/getTempoPublicClient.ts","../src/tempo/isTempoNetworkProvider/isTempoNetworkProvider.ts","../src/tempo/isTempoWalletAccount/isTempoWalletAccount.ts","../src/tempo/isTempoWalletProvider/isTempoWalletProvider.ts","../src/tempo/errors/TempoNativeTokenError/TempoNativeTokenError.ts","../src/tempo/sendTip20Transaction/sendTip20Transaction.ts","../src/tempo/utils/tempoChainIds/tempoChainIds.ts","../src/exports/tempo.ts"],"sourcesContent":["import type { DynamicClient, NetworkData } from '@dynamic-labs-sdk/client';\nimport { createBaseNetworkProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { TempoNetworkProvider } from '../../TempoNetworkProvider.types';\n\n/** @notInstrumented */\nexport const createTempoNetworkProvider = (\n networkData: NetworkData,\n // Tempo has no native token so no RPC balance call is needed.\n // The client param is kept to match the builder signature.\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n client: DynamicClient\n): TempoNetworkProvider => ({\n ...createBaseNetworkProvider('TEMPO', networkData),\n getBalance: async () => ({ balance: '0' }),\n});\n","import { type DynamicClient } from '@dynamic-labs-sdk/client';\nimport { getNetworkProviderBuilderRegistry } from '@dynamic-labs-sdk/client/core';\n\nimport { createTempoNetworkProvider } from '../utils/createTempoNetworkProvider/createTempoNetworkProvider';\n\n/** @notInstrumented */\nexport const registerTempoNetworkProviderBuilder = (\n client: DynamicClient\n): void => {\n const networkProviderBuilderRegistry =\n getNetworkProviderBuilderRegistry(client);\n\n if (networkProviderBuilderRegistry.get().get('TEMPO')) {\n return;\n }\n\n networkProviderBuilderRegistry.register({\n builder: (networkData) => createTempoNetworkProvider(networkData, client),\n chain: 'TEMPO',\n });\n};\n","import {\n getDefaultClient,\n hasExtension,\n registerExtension,\n} from '@dynamic-labs-sdk/client/core';\n\nimport { registerTempoNetworkProviderBuilder } from '../registerTempoNetworkProviderBuilder/registerTempoNetworkProviderBuilder';\n\n/** Registry key for the Tempo chain extension. Used by addWaasTempoExtension to avoid duplicate registration. */\nexport const TEMPO_EXTENSION_KEY = 'tempo';\n\n/**\n * Registers the Tempo chain extension with the Dynamic client.\n * Enables support for Tempo networks (chain IDs 4217, 42429, 42431).\n * For embedded wallet (WaaS) support, also call addWaasTempoExtension\n * from @dynamic-labs-sdk/evm/tempo/waas.\n *\n * @param [client] - The Dynamic client instance. Only required when using multiple clients.\n * @notInstrumented\n */\n\nexport const addTempoExtension = (client = getDefaultClient()): void => {\n if (hasExtension({ extensionKey: TEMPO_EXTENSION_KEY }, client)) {\n return;\n }\n\n registerExtension({ extensionKey: TEMPO_EXTENSION_KEY }, client);\n registerTempoNetworkProviderBuilder(client);\n};\n","import {\n type WalletAccount,\n getActiveNetworkData,\n} from '@dynamic-labs-sdk/client';\nimport { assertDefined, getDefaultClient } from '@dynamic-labs-sdk/client/core';\nimport type { Chain, PublicClient, Transport } from 'viem';\nimport { createPublicClient, http } from 'viem';\n\nimport { mapNetworkDataToViemChain } from '../../viem/utils/mapNetworkDataToViemChain/mapNetworkDataToViemChain';\n\ntype GetTempoPublicClientParams = {\n walletAccount: WalletAccount;\n};\n\n/**\n * Returns a viem PublicClient for the active Tempo network.\n * Network data (RPC URL, chain config) is resolved from the 'TEMPO' network\n * registry at runtime — not from EVM.\n *\n * @param params.walletAccount - Must have chain === 'TEMPO'.\n \n * @notInstrumented\n */\nexport const getTempoPublicClient = async (\n { walletAccount }: GetTempoPublicClientParams,\n client = getDefaultClient()\n): Promise<PublicClient<Transport, Chain>> => {\n const { networkData } = await getActiveNetworkData({ walletAccount }, client);\n\n assertDefined(\n networkData,\n `No network data found for Tempo wallet account ${walletAccount.address}`\n );\n\n return createPublicClient({\n chain: mapNetworkDataToViemChain(networkData),\n transport: http(networkData.rpcUrls.http[0]),\n });\n};\n","import type { NetworkProvider } from '@dynamic-labs-sdk/client';\n\nimport type { TempoNetworkProvider } from '../TempoNetworkProvider.types';\n\n/**\n * Type guard — returns true if the network provider is for the Tempo chain.\n * @notInstrumented\n */\nexport const isTempoNetworkProvider = (\n provider: NetworkProvider\n): provider is TempoNetworkProvider => provider.chain === 'TEMPO';\n","import type { WalletAccount } from '@dynamic-labs-sdk/client';\n\nimport type { TempoWalletAccount } from '../TempoWalletAccount.types';\n\n/**\n * Type guard — returns true if the wallet account is for the Tempo chain.\n * @notInstrumented\n */\nexport const isTempoWalletAccount = (\n account: WalletAccount | TempoWalletAccount\n): account is TempoWalletAccount => account.chain === 'TEMPO';\n","import type { WalletProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { TempoWalletProvider } from '../TempoWalletProvider.types';\n\n/**\n * Type guard — returns true if the wallet provider is for the Tempo chain.\n * @notInstrumented\n */\nexport const isTempoWalletProvider = (\n provider: WalletProvider | TempoWalletProvider\n): provider is TempoWalletProvider => provider.chain === 'TEMPO';\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\n/**\n * Thrown when a Tempo transaction is attempted without a TIP-20 token contract address.\n * Tempo has no native token, so all value transfers require a token contract address.\n */\nexport class TempoNativeTokenError extends BaseError {\n constructor() {\n super({\n cause: null,\n code: 'tempo_native_token_error',\n docsUrl: null,\n name: 'TempoNativeTokenError',\n shortMessage:\n 'Tempo has no native token. Provide a TIP-20 token contract address via tokenAddress.',\n });\n }\n}\n","import type { Account, Chain, Hex, Transport, WalletClient } from 'viem';\nimport { parseUnits } from 'viem';\n\nimport { TempoNativeTokenError } from '../errors/TempoNativeTokenError/TempoNativeTokenError';\n\nconst erc20TransferAbi = [\n {\n inputs: [\n { name: '_to', type: 'address' },\n { name: '_value', type: 'uint256' },\n ],\n name: 'transfer',\n outputs: [{ name: '', type: 'bool' }],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const;\n\ntype SendTip20TransactionParams = {\n /** Human-readable amount, e.g. '1.5' */\n amount: string;\n /** Token decimals — defaults to 18 */\n decimals?: number;\n /** Recipient address */\n to: string;\n /** TIP-20 token contract address. Required — Tempo has no native token. */\n tokenAddress: string;\n /** Viem WalletClient with a Tempo account. Obtain from WaasTempoWalletProvider.createViemWalletClient. */\n walletClient: WalletClient<Transport, Chain, Account>;\n};\n\n/**\n * Sends a TIP-20 token transfer on a Tempo network.\n * Tempo has no native token — all transfers require a token contract address.\n * Throws if tokenAddress is empty.\n *\n * @notInstrumented\n */\nexport const sendTip20Transaction = async ({\n amount,\n decimals = 18,\n to,\n tokenAddress,\n walletClient,\n}: SendTip20TransactionParams): Promise<Hex> => {\n if (!tokenAddress) {\n throw new TempoNativeTokenError();\n }\n\n return walletClient.writeContract({\n abi: erc20TransferAbi,\n address: tokenAddress as Hex,\n args: [to as Hex, parseUnits(amount, decimals)],\n functionName: 'transfer',\n });\n};\n","/* eslint-disable custom-rules/function-name-matches-filename */\n/**\n * Immutable protocol-level chain IDs for all Tempo networks.\n * Used by isTempoChainId and serializeTempoTransaction to identify Tempo chains.\n */\nexport const TEMPO_CHAIN_IDS = [4217, 42429, 42431] as const;\n\n/**\n * Returns true if networkId belongs to a Tempo network.\n * Tempo is EVM-compatible but has no native token and uses custom transaction formats.\n * @notInstrumented\n */\nexport const isTempoChainId = (networkId: string | number): boolean =>\n TEMPO_CHAIN_IDS.includes(\n Number(networkId) as (typeof TEMPO_CHAIN_IDS)[number]\n );\n","import { assertPackageVersion } from '@dynamic-labs-sdk/assert-package-version';\n\nimport {\n name as packageName,\n version as packageVersion,\n} from '../../package.json';\nassertPackageVersion(packageName, packageVersion);\n\nexport { addTempoExtension } from '../tempo/addTempoExtension/addTempoExtension';\nexport { getTempoPublicClient } from '../tempo/getTempoPublicClient/getTempoPublicClient';\nexport { isTempoNetworkProvider } from '../tempo/isTempoNetworkProvider/isTempoNetworkProvider';\nexport { isTempoWalletAccount } from '../tempo/isTempoWalletAccount/isTempoWalletAccount';\nexport { isTempoWalletProvider } from '../tempo/isTempoWalletProvider/isTempoWalletProvider';\nexport { sendTip20Transaction } from '../tempo/sendTip20Transaction/sendTip20Transaction';\nexport type { TempoNetworkProvider } from '../tempo/TempoNetworkProvider.types';\nexport type { TempoWalletAccount } from '../tempo/TempoWalletAccount.types';\nexport type { TempoWalletProvider } from '../tempo/TempoWalletProvider.types';\nexport { TEMPO_CHAIN_IDS, isTempoChainId } from '../tempo/utils/tempoChainIds/tempoChainIds';\n"],"mappings":";;;;;;;;AAMA,MAAa,8BACX,aAIA,YAC0B;CAC1B,GAAG,0BAA0B,SAAS,YAAY;CAClD,YAAY,aAAa,EAAE,SAAS,KAAK;CAC1C;;;;;ACTD,MAAa,uCACX,WACS;CACT,MAAM,iCACJ,kCAAkC,OAAO;AAE3C,KAAI,+BAA+B,KAAK,CAAC,IAAI,QAAQ,CACnD;AAGF,gCAA+B,SAAS;EACtC,UAAU,gBAAgB,2BAA2B,aAAa,OAAO;EACzE,OAAO;EACR,CAAC;;;;;;ACVJ,MAAa,sBAAsB;;;;;;;;;;AAYnC,MAAa,qBAAqB,SAASA,oBAAkB,KAAW;AACtE,KAAIC,eAAa,EAAE,cAAc,qBAAqB,EAAE,OAAO,CAC7D;AAGF,mBAAkB,EAAE,cAAc,qBAAqB,EAAE,OAAO;AAChE,qCAAoC,OAAO;;;;;;;;;;;;;;ACJ7C,MAAa,uBAAuB,OAClC,EAAE,iBACF,SAASC,oBAAkB,KACiB;CAC5C,MAAM,EAAE,gBAAgB,MAAM,qBAAqB,EAAE,eAAe,EAAE,OAAO;AAE7E,eACE,aACA,kDAAkD,cAAc,UACjE;AAED,QAAO,mBAAmB;EACxB,OAAO,0BAA0B,YAAY;EAC7C,WAAW,KAAK,YAAY,QAAQ,KAAK,GAAG;EAC7C,CAAC;;;;;;;;;AC7BJ,MAAa,0BACX,aACqC,SAAS,UAAU;;;;;;;;ACF1D,MAAa,wBACX,YACkC,QAAQ,UAAU;;;;;;;;ACFtD,MAAa,yBACX,aACoC,SAAS,UAAU;;;;;;;;ACJzD,IAAa,wBAAb,cAA2C,UAAU;CACnD,cAAc;AACZ,QAAM;GACJ,OAAO;GACP,MAAM;GACN,SAAS;GACT,MAAM;GACN,cACE;GACH,CAAC;;;;;;ACVN,MAAM,mBAAmB,CACvB;CACE,QAAQ,CACN;EAAE,MAAM;EAAO,MAAM;EAAW,EAChC;EAAE,MAAM;EAAU,MAAM;EAAW,CACpC;CACD,MAAM;CACN,SAAS,CAAC;EAAE,MAAM;EAAI,MAAM;EAAQ,CAAC;CACrC,iBAAiB;CACjB,MAAM;CACP,CACF;;;;;;;;AAsBD,MAAa,uBAAuB,OAAO,EACzC,QACA,WAAW,IACX,IACA,cACA,mBAC8C;AAC9C,KAAI,CAAC,aACH,OAAM,IAAI,uBAAuB;AAGnC,QAAO,aAAa,cAAc;EAChC,KAAK;EACL,SAAS;EACT,MAAM,CAAC,IAAW,WAAW,QAAQ,SAAS,CAAC;EAC/C,cAAc;EACf,CAAC;;;;;;;;;ACjDJ,MAAa,kBAAkB;CAAC;CAAM;CAAO;CAAM;;;;;;AAOnD,MAAa,kBAAkB,cAC7B,gBAAgB,SACd,OAAO,UAAU,CAClB;;;;ACTH,qBAAqBC,MAAaC,QAAe"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { n as version, t as name } from "./package-oaoGBkGK.native.esm.js";
|
|
2
|
+
import { t as mapNetworkDataToViemChain } from "./mapNetworkDataToViemChain-C9086tZ-.native.esm.js";
|
|
3
|
+
import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
|
|
4
|
+
import { BaseError, getActiveNetworkData } from "@dynamic-labs-sdk/client";
|
|
5
|
+
import { assertDefined, createBaseNetworkProvider, getDefaultClient as getDefaultClient$1, getNetworkProviderBuilderRegistry, hasExtension as hasExtension$1, registerExtension } from "@dynamic-labs-sdk/client/core";
|
|
6
|
+
import { createPublicClient, http, parseUnits } from "viem";
|
|
7
|
+
|
|
8
|
+
//#region src/tempo/utils/createTempoNetworkProvider/createTempoNetworkProvider.ts
|
|
9
|
+
/** @notInstrumented */
|
|
10
|
+
const createTempoNetworkProvider = (networkData, client) => ({
|
|
11
|
+
...createBaseNetworkProvider("TEMPO", networkData),
|
|
12
|
+
getBalance: async () => ({ balance: "0" })
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
//#endregion
|
|
16
|
+
//#region src/tempo/registerTempoNetworkProviderBuilder/registerTempoNetworkProviderBuilder.ts
|
|
17
|
+
/** @notInstrumented */
|
|
18
|
+
const registerTempoNetworkProviderBuilder = (client) => {
|
|
19
|
+
const networkProviderBuilderRegistry = getNetworkProviderBuilderRegistry(client);
|
|
20
|
+
if (networkProviderBuilderRegistry.get().get("TEMPO")) return;
|
|
21
|
+
networkProviderBuilderRegistry.register({
|
|
22
|
+
builder: (networkData) => createTempoNetworkProvider(networkData, client),
|
|
23
|
+
chain: "TEMPO"
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
//#endregion
|
|
28
|
+
//#region src/tempo/addTempoExtension/addTempoExtension.ts
|
|
29
|
+
/** Registry key for the Tempo chain extension. Used by addWaasTempoExtension to avoid duplicate registration. */
|
|
30
|
+
const TEMPO_EXTENSION_KEY = "tempo";
|
|
31
|
+
/**
|
|
32
|
+
* Registers the Tempo chain extension with the Dynamic client.
|
|
33
|
+
* Enables support for Tempo networks (chain IDs 4217, 42429, 42431).
|
|
34
|
+
* For embedded wallet (WaaS) support, also call addWaasTempoExtension
|
|
35
|
+
* from @dynamic-labs-sdk/evm/tempo/waas.
|
|
36
|
+
*
|
|
37
|
+
* @param [client] - The Dynamic client instance. Only required when using multiple clients.
|
|
38
|
+
* @notInstrumented
|
|
39
|
+
*/
|
|
40
|
+
const addTempoExtension = (client = getDefaultClient$1()) => {
|
|
41
|
+
if (hasExtension$1({ extensionKey: TEMPO_EXTENSION_KEY }, client)) return;
|
|
42
|
+
registerExtension({ extensionKey: TEMPO_EXTENSION_KEY }, client);
|
|
43
|
+
registerTempoNetworkProviderBuilder(client);
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
//#endregion
|
|
47
|
+
//#region src/tempo/getTempoPublicClient/getTempoPublicClient.ts
|
|
48
|
+
/**
|
|
49
|
+
* Returns a viem PublicClient for the active Tempo network.
|
|
50
|
+
* Network data (RPC URL, chain config) is resolved from the 'TEMPO' network
|
|
51
|
+
* registry at runtime — not from EVM.
|
|
52
|
+
*
|
|
53
|
+
* @param params.walletAccount - Must have chain === 'TEMPO'.
|
|
54
|
+
|
|
55
|
+
* @notInstrumented
|
|
56
|
+
*/
|
|
57
|
+
const getTempoPublicClient = async ({ walletAccount }, client = getDefaultClient$1()) => {
|
|
58
|
+
const { networkData } = await getActiveNetworkData({ walletAccount }, client);
|
|
59
|
+
assertDefined(networkData, `No network data found for Tempo wallet account ${walletAccount.address}`);
|
|
60
|
+
return createPublicClient({
|
|
61
|
+
chain: mapNetworkDataToViemChain(networkData),
|
|
62
|
+
transport: http(networkData.rpcUrls.http[0])
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
//#endregion
|
|
67
|
+
//#region src/tempo/isTempoNetworkProvider/isTempoNetworkProvider.ts
|
|
68
|
+
/**
|
|
69
|
+
* Type guard — returns true if the network provider is for the Tempo chain.
|
|
70
|
+
* @notInstrumented
|
|
71
|
+
*/
|
|
72
|
+
const isTempoNetworkProvider = (provider) => provider.chain === "TEMPO";
|
|
73
|
+
|
|
74
|
+
//#endregion
|
|
75
|
+
//#region src/tempo/isTempoWalletAccount/isTempoWalletAccount.ts
|
|
76
|
+
/**
|
|
77
|
+
* Type guard — returns true if the wallet account is for the Tempo chain.
|
|
78
|
+
* @notInstrumented
|
|
79
|
+
*/
|
|
80
|
+
const isTempoWalletAccount = (account) => account.chain === "TEMPO";
|
|
81
|
+
|
|
82
|
+
//#endregion
|
|
83
|
+
//#region src/tempo/isTempoWalletProvider/isTempoWalletProvider.ts
|
|
84
|
+
/**
|
|
85
|
+
* Type guard — returns true if the wallet provider is for the Tempo chain.
|
|
86
|
+
* @notInstrumented
|
|
87
|
+
*/
|
|
88
|
+
const isTempoWalletProvider = (provider) => provider.chain === "TEMPO";
|
|
89
|
+
|
|
90
|
+
//#endregion
|
|
91
|
+
//#region src/tempo/errors/TempoNativeTokenError/TempoNativeTokenError.ts
|
|
92
|
+
/**
|
|
93
|
+
* Thrown when a Tempo transaction is attempted without a TIP-20 token contract address.
|
|
94
|
+
* Tempo has no native token, so all value transfers require a token contract address.
|
|
95
|
+
*/
|
|
96
|
+
var TempoNativeTokenError = class extends BaseError {
|
|
97
|
+
constructor() {
|
|
98
|
+
super({
|
|
99
|
+
cause: null,
|
|
100
|
+
code: "tempo_native_token_error",
|
|
101
|
+
docsUrl: null,
|
|
102
|
+
name: "TempoNativeTokenError",
|
|
103
|
+
shortMessage: "Tempo has no native token. Provide a TIP-20 token contract address via tokenAddress."
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
//#endregion
|
|
109
|
+
//#region src/tempo/sendTip20Transaction/sendTip20Transaction.ts
|
|
110
|
+
const erc20TransferAbi = [{
|
|
111
|
+
inputs: [{
|
|
112
|
+
name: "_to",
|
|
113
|
+
type: "address"
|
|
114
|
+
}, {
|
|
115
|
+
name: "_value",
|
|
116
|
+
type: "uint256"
|
|
117
|
+
}],
|
|
118
|
+
name: "transfer",
|
|
119
|
+
outputs: [{
|
|
120
|
+
name: "",
|
|
121
|
+
type: "bool"
|
|
122
|
+
}],
|
|
123
|
+
stateMutability: "nonpayable",
|
|
124
|
+
type: "function"
|
|
125
|
+
}];
|
|
126
|
+
/**
|
|
127
|
+
* Sends a TIP-20 token transfer on a Tempo network.
|
|
128
|
+
* Tempo has no native token — all transfers require a token contract address.
|
|
129
|
+
* Throws if tokenAddress is empty.
|
|
130
|
+
*
|
|
131
|
+
* @notInstrumented
|
|
132
|
+
*/
|
|
133
|
+
const sendTip20Transaction = async ({ amount, decimals = 18, to, tokenAddress, walletClient }) => {
|
|
134
|
+
if (!tokenAddress) throw new TempoNativeTokenError();
|
|
135
|
+
return walletClient.writeContract({
|
|
136
|
+
abi: erc20TransferAbi,
|
|
137
|
+
address: tokenAddress,
|
|
138
|
+
args: [to, parseUnits(amount, decimals)],
|
|
139
|
+
functionName: "transfer"
|
|
140
|
+
});
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
//#endregion
|
|
144
|
+
//#region src/tempo/utils/tempoChainIds/tempoChainIds.ts
|
|
145
|
+
/**
|
|
146
|
+
* Immutable protocol-level chain IDs for all Tempo networks.
|
|
147
|
+
* Used by isTempoChainId and serializeTempoTransaction to identify Tempo chains.
|
|
148
|
+
*/
|
|
149
|
+
const TEMPO_CHAIN_IDS = [
|
|
150
|
+
4217,
|
|
151
|
+
42429,
|
|
152
|
+
42431
|
|
153
|
+
];
|
|
154
|
+
/**
|
|
155
|
+
* Returns true if networkId belongs to a Tempo network.
|
|
156
|
+
* Tempo is EVM-compatible but has no native token and uses custom transaction formats.
|
|
157
|
+
* @notInstrumented
|
|
158
|
+
*/
|
|
159
|
+
const isTempoChainId = (networkId) => TEMPO_CHAIN_IDS.includes(Number(networkId));
|
|
160
|
+
|
|
161
|
+
//#endregion
|
|
162
|
+
//#region src/exports/tempo.ts
|
|
163
|
+
assertPackageVersion(name, version);
|
|
164
|
+
|
|
165
|
+
//#endregion
|
|
166
|
+
export { TEMPO_CHAIN_IDS, addTempoExtension, getTempoPublicClient, isTempoChainId, isTempoNetworkProvider, isTempoWalletAccount, isTempoWalletProvider, sendTip20Transaction };
|
|
167
|
+
//# sourceMappingURL=tempo.native.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tempo.native.esm.js","names":["getDefaultClient","hasExtension","getDefaultClient","packageName","packageVersion"],"sources":["../src/tempo/utils/createTempoNetworkProvider/createTempoNetworkProvider.ts","../src/tempo/registerTempoNetworkProviderBuilder/registerTempoNetworkProviderBuilder.ts","../src/tempo/addTempoExtension/addTempoExtension.ts","../src/tempo/getTempoPublicClient/getTempoPublicClient.ts","../src/tempo/isTempoNetworkProvider/isTempoNetworkProvider.ts","../src/tempo/isTempoWalletAccount/isTempoWalletAccount.ts","../src/tempo/isTempoWalletProvider/isTempoWalletProvider.ts","../src/tempo/errors/TempoNativeTokenError/TempoNativeTokenError.ts","../src/tempo/sendTip20Transaction/sendTip20Transaction.ts","../src/tempo/utils/tempoChainIds/tempoChainIds.ts","../src/exports/tempo.ts"],"sourcesContent":["import type { DynamicClient, NetworkData } from '@dynamic-labs-sdk/client';\nimport { createBaseNetworkProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { TempoNetworkProvider } from '../../TempoNetworkProvider.types';\n\n/** @notInstrumented */\nexport const createTempoNetworkProvider = (\n networkData: NetworkData,\n // Tempo has no native token so no RPC balance call is needed.\n // The client param is kept to match the builder signature.\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n client: DynamicClient\n): TempoNetworkProvider => ({\n ...createBaseNetworkProvider('TEMPO', networkData),\n getBalance: async () => ({ balance: '0' }),\n});\n","import { type DynamicClient } from '@dynamic-labs-sdk/client';\nimport { getNetworkProviderBuilderRegistry } from '@dynamic-labs-sdk/client/core';\n\nimport { createTempoNetworkProvider } from '../utils/createTempoNetworkProvider/createTempoNetworkProvider';\n\n/** @notInstrumented */\nexport const registerTempoNetworkProviderBuilder = (\n client: DynamicClient\n): void => {\n const networkProviderBuilderRegistry =\n getNetworkProviderBuilderRegistry(client);\n\n if (networkProviderBuilderRegistry.get().get('TEMPO')) {\n return;\n }\n\n networkProviderBuilderRegistry.register({\n builder: (networkData) => createTempoNetworkProvider(networkData, client),\n chain: 'TEMPO',\n });\n};\n","import {\n getDefaultClient,\n hasExtension,\n registerExtension,\n} from '@dynamic-labs-sdk/client/core';\n\nimport { registerTempoNetworkProviderBuilder } from '../registerTempoNetworkProviderBuilder/registerTempoNetworkProviderBuilder';\n\n/** Registry key for the Tempo chain extension. Used by addWaasTempoExtension to avoid duplicate registration. */\nexport const TEMPO_EXTENSION_KEY = 'tempo';\n\n/**\n * Registers the Tempo chain extension with the Dynamic client.\n * Enables support for Tempo networks (chain IDs 4217, 42429, 42431).\n * For embedded wallet (WaaS) support, also call addWaasTempoExtension\n * from @dynamic-labs-sdk/evm/tempo/waas.\n *\n * @param [client] - The Dynamic client instance. Only required when using multiple clients.\n * @notInstrumented\n */\n\nexport const addTempoExtension = (client = getDefaultClient()): void => {\n if (hasExtension({ extensionKey: TEMPO_EXTENSION_KEY }, client)) {\n return;\n }\n\n registerExtension({ extensionKey: TEMPO_EXTENSION_KEY }, client);\n registerTempoNetworkProviderBuilder(client);\n};\n","import {\n type WalletAccount,\n getActiveNetworkData,\n} from '@dynamic-labs-sdk/client';\nimport { assertDefined, getDefaultClient } from '@dynamic-labs-sdk/client/core';\nimport type { Chain, PublicClient, Transport } from 'viem';\nimport { createPublicClient, http } from 'viem';\n\nimport { mapNetworkDataToViemChain } from '../../viem/utils/mapNetworkDataToViemChain/mapNetworkDataToViemChain';\n\ntype GetTempoPublicClientParams = {\n walletAccount: WalletAccount;\n};\n\n/**\n * Returns a viem PublicClient for the active Tempo network.\n * Network data (RPC URL, chain config) is resolved from the 'TEMPO' network\n * registry at runtime — not from EVM.\n *\n * @param params.walletAccount - Must have chain === 'TEMPO'.\n \n * @notInstrumented\n */\nexport const getTempoPublicClient = async (\n { walletAccount }: GetTempoPublicClientParams,\n client = getDefaultClient()\n): Promise<PublicClient<Transport, Chain>> => {\n const { networkData } = await getActiveNetworkData({ walletAccount }, client);\n\n assertDefined(\n networkData,\n `No network data found for Tempo wallet account ${walletAccount.address}`\n );\n\n return createPublicClient({\n chain: mapNetworkDataToViemChain(networkData),\n transport: http(networkData.rpcUrls.http[0]),\n });\n};\n","import type { NetworkProvider } from '@dynamic-labs-sdk/client';\n\nimport type { TempoNetworkProvider } from '../TempoNetworkProvider.types';\n\n/**\n * Type guard — returns true if the network provider is for the Tempo chain.\n * @notInstrumented\n */\nexport const isTempoNetworkProvider = (\n provider: NetworkProvider\n): provider is TempoNetworkProvider => provider.chain === 'TEMPO';\n","import type { WalletAccount } from '@dynamic-labs-sdk/client';\n\nimport type { TempoWalletAccount } from '../TempoWalletAccount.types';\n\n/**\n * Type guard — returns true if the wallet account is for the Tempo chain.\n * @notInstrumented\n */\nexport const isTempoWalletAccount = (\n account: WalletAccount | TempoWalletAccount\n): account is TempoWalletAccount => account.chain === 'TEMPO';\n","import type { WalletProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { TempoWalletProvider } from '../TempoWalletProvider.types';\n\n/**\n * Type guard — returns true if the wallet provider is for the Tempo chain.\n * @notInstrumented\n */\nexport const isTempoWalletProvider = (\n provider: WalletProvider | TempoWalletProvider\n): provider is TempoWalletProvider => provider.chain === 'TEMPO';\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\n/**\n * Thrown when a Tempo transaction is attempted without a TIP-20 token contract address.\n * Tempo has no native token, so all value transfers require a token contract address.\n */\nexport class TempoNativeTokenError extends BaseError {\n constructor() {\n super({\n cause: null,\n code: 'tempo_native_token_error',\n docsUrl: null,\n name: 'TempoNativeTokenError',\n shortMessage:\n 'Tempo has no native token. Provide a TIP-20 token contract address via tokenAddress.',\n });\n }\n}\n","import type { Account, Chain, Hex, Transport, WalletClient } from 'viem';\nimport { parseUnits } from 'viem';\n\nimport { TempoNativeTokenError } from '../errors/TempoNativeTokenError/TempoNativeTokenError';\n\nconst erc20TransferAbi = [\n {\n inputs: [\n { name: '_to', type: 'address' },\n { name: '_value', type: 'uint256' },\n ],\n name: 'transfer',\n outputs: [{ name: '', type: 'bool' }],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const;\n\ntype SendTip20TransactionParams = {\n /** Human-readable amount, e.g. '1.5' */\n amount: string;\n /** Token decimals — defaults to 18 */\n decimals?: number;\n /** Recipient address */\n to: string;\n /** TIP-20 token contract address. Required — Tempo has no native token. */\n tokenAddress: string;\n /** Viem WalletClient with a Tempo account. Obtain from WaasTempoWalletProvider.createViemWalletClient. */\n walletClient: WalletClient<Transport, Chain, Account>;\n};\n\n/**\n * Sends a TIP-20 token transfer on a Tempo network.\n * Tempo has no native token — all transfers require a token contract address.\n * Throws if tokenAddress is empty.\n *\n * @notInstrumented\n */\nexport const sendTip20Transaction = async ({\n amount,\n decimals = 18,\n to,\n tokenAddress,\n walletClient,\n}: SendTip20TransactionParams): Promise<Hex> => {\n if (!tokenAddress) {\n throw new TempoNativeTokenError();\n }\n\n return walletClient.writeContract({\n abi: erc20TransferAbi,\n address: tokenAddress as Hex,\n args: [to as Hex, parseUnits(amount, decimals)],\n functionName: 'transfer',\n });\n};\n","/* eslint-disable custom-rules/function-name-matches-filename */\n/**\n * Immutable protocol-level chain IDs for all Tempo networks.\n * Used by isTempoChainId and serializeTempoTransaction to identify Tempo chains.\n */\nexport const TEMPO_CHAIN_IDS = [4217, 42429, 42431] as const;\n\n/**\n * Returns true if networkId belongs to a Tempo network.\n * Tempo is EVM-compatible but has no native token and uses custom transaction formats.\n * @notInstrumented\n */\nexport const isTempoChainId = (networkId: string | number): boolean =>\n TEMPO_CHAIN_IDS.includes(\n Number(networkId) as (typeof TEMPO_CHAIN_IDS)[number]\n );\n","import { assertPackageVersion } from '@dynamic-labs-sdk/assert-package-version';\n\nimport {\n name as packageName,\n version as packageVersion,\n} from '../../package.json';\nassertPackageVersion(packageName, packageVersion);\n\nexport { addTempoExtension } from '../tempo/addTempoExtension/addTempoExtension';\nexport { getTempoPublicClient } from '../tempo/getTempoPublicClient/getTempoPublicClient';\nexport { isTempoNetworkProvider } from '../tempo/isTempoNetworkProvider/isTempoNetworkProvider';\nexport { isTempoWalletAccount } from '../tempo/isTempoWalletAccount/isTempoWalletAccount';\nexport { isTempoWalletProvider } from '../tempo/isTempoWalletProvider/isTempoWalletProvider';\nexport { sendTip20Transaction } from '../tempo/sendTip20Transaction/sendTip20Transaction';\nexport type { TempoNetworkProvider } from '../tempo/TempoNetworkProvider.types';\nexport type { TempoWalletAccount } from '../tempo/TempoWalletAccount.types';\nexport type { TempoWalletProvider } from '../tempo/TempoWalletProvider.types';\nexport { TEMPO_CHAIN_IDS, isTempoChainId } from '../tempo/utils/tempoChainIds/tempoChainIds';\n"],"mappings":";;;;;;;;;AAMA,MAAa,8BACX,aAIA,YAC0B;CAC1B,GAAG,0BAA0B,SAAS,YAAY;CAClD,YAAY,aAAa,EAAE,SAAS,KAAK;CAC1C;;;;;ACTD,MAAa,uCACX,WACS;CACT,MAAM,iCACJ,kCAAkC,OAAO;AAE3C,KAAI,+BAA+B,KAAK,CAAC,IAAI,QAAQ,CACnD;AAGF,gCAA+B,SAAS;EACtC,UAAU,gBAAgB,2BAA2B,aAAa,OAAO;EACzE,OAAO;EACR,CAAC;;;;;;ACVJ,MAAa,sBAAsB;;;;;;;;;;AAYnC,MAAa,qBAAqB,SAASA,oBAAkB,KAAW;AACtE,KAAIC,eAAa,EAAE,cAAc,qBAAqB,EAAE,OAAO,CAC7D;AAGF,mBAAkB,EAAE,cAAc,qBAAqB,EAAE,OAAO;AAChE,qCAAoC,OAAO;;;;;;;;;;;;;;ACJ7C,MAAa,uBAAuB,OAClC,EAAE,iBACF,SAASC,oBAAkB,KACiB;CAC5C,MAAM,EAAE,gBAAgB,MAAM,qBAAqB,EAAE,eAAe,EAAE,OAAO;AAE7E,eACE,aACA,kDAAkD,cAAc,UACjE;AAED,QAAO,mBAAmB;EACxB,OAAO,0BAA0B,YAAY;EAC7C,WAAW,KAAK,YAAY,QAAQ,KAAK,GAAG;EAC7C,CAAC;;;;;;;;;AC7BJ,MAAa,0BACX,aACqC,SAAS,UAAU;;;;;;;;ACF1D,MAAa,wBACX,YACkC,QAAQ,UAAU;;;;;;;;ACFtD,MAAa,yBACX,aACoC,SAAS,UAAU;;;;;;;;ACJzD,IAAa,wBAAb,cAA2C,UAAU;CACnD,cAAc;AACZ,QAAM;GACJ,OAAO;GACP,MAAM;GACN,SAAS;GACT,MAAM;GACN,cACE;GACH,CAAC;;;;;;ACVN,MAAM,mBAAmB,CACvB;CACE,QAAQ,CACN;EAAE,MAAM;EAAO,MAAM;EAAW,EAChC;EAAE,MAAM;EAAU,MAAM;EAAW,CACpC;CACD,MAAM;CACN,SAAS,CAAC;EAAE,MAAM;EAAI,MAAM;EAAQ,CAAC;CACrC,iBAAiB;CACjB,MAAM;CACP,CACF;;;;;;;;AAsBD,MAAa,uBAAuB,OAAO,EACzC,QACA,WAAW,IACX,IACA,cACA,mBAC8C;AAC9C,KAAI,CAAC,aACH,OAAM,IAAI,uBAAuB;AAGnC,QAAO,aAAa,cAAc;EAChC,KAAK;EACL,SAAS;EACT,MAAM,CAAC,IAAW,WAAW,QAAQ,SAAS,CAAC;EAC/C,cAAc;EACf,CAAC;;;;;;;;;ACjDJ,MAAa,kBAAkB;CAAC;CAAM;CAAO;CAAM;;;;;;AAOnD,MAAa,kBAAkB,cAC7B,gBAAgB,SACd,OAAO,UAAU,CAClB;;;;ACTH,qBAAqBC,MAAaC,QAAe"}
|