@leather.io/models 0.18.0 → 0.18.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
 
2
- > @leather.io/models@0.18.0 build /home/runner/work/mono/mono/packages/models
2
+ > @leather.io/models@0.18.2 build /home/runner/work/mono/mono/packages/models
3
3
  > tsup
4
4
 
5
5
  CLI Building entry: src/index.ts
@@ -8,9 +8,9 @@ CLI tsup v8.1.0
8
8
  CLI Using tsup config: /home/runner/work/mono/mono/packages/models/tsup.config.ts
9
9
  CLI Target: es2022
10
10
  ESM Build start
11
- ESM dist/index.js 9.92 KB
12
- ESM dist/index.js.map 19.82 KB
13
- ESM ⚡️ Build success in 26ms
11
+ ESM dist/index.js 10.49 KB
12
+ ESM dist/index.js.map 20.78 KB
13
+ ESM ⚡️ Build success in 29ms
14
14
  DTS Build start
15
- DTS ⚡️ Build success in 1660ms
16
- DTS dist/index.d.ts 16.49 KB
15
+ DTS ⚡️ Build success in 1777ms
16
+ DTS dist/index.d.ts 17.30 KB
package/CHANGELOG.md CHANGED
@@ -24,6 +24,20 @@
24
24
  * devDependencies
25
25
  * @leather.io/eslint-config bumped to 0.7.0
26
26
 
27
+ ## [0.18.2](https://github.com/leather-io/mono/compare/@leather.io/models-v0.18.1...@leather.io/models-v0.18.2) (2024-10-18)
28
+
29
+
30
+ ### Bug Fixes
31
+
32
+ * **models:** testnet4 schema updates ([e607680](https://github.com/leather-io/mono/commit/e60768079308999182b8d14a542ea8e2e206a0a2))
33
+
34
+ ## [0.18.1](https://github.com/leather-io/mono/compare/@leather.io/models-v0.18.0...@leather.io/models-v0.18.1) (2024-10-17)
35
+
36
+
37
+ ### Bug Fixes
38
+
39
+ * issue with testnet4 config ([59eba3c](https://github.com/leather-io/mono/commit/59eba3cde52c4793b670ff016b43b0b41522ed12))
40
+
27
41
  ## [0.18.0](https://github.com/leather-io/mono/compare/@leather.io/models-v0.17.0...@leather.io/models-v0.18.0) (2024-10-17)
28
42
 
29
43
 
package/dist/index.d.ts CHANGED
@@ -225,6 +225,7 @@ interface MarketData {
225
225
  declare function createMarketData(pair: MarketPair, price: Money): MarketData;
226
226
 
227
227
  declare const bitcoinNetworkModesSchema: z.ZodEnum<["mainnet", "testnet", "testnet", "regtest", "signet"]>;
228
+ declare const bitcoinNetworkSchema: z.ZodEnum<["mainnet", "testnet3", "testnet4", "regtest", "signet"]>;
228
229
  declare const networkConfigurationSchema: z.ZodObject<{
229
230
  name: z.ZodString;
230
231
  id: z.ZodString;
@@ -232,15 +233,18 @@ declare const networkConfigurationSchema: z.ZodObject<{
232
233
  bitcoin: z.ZodObject<{
233
234
  blockchain: z.ZodLiteral<"bitcoin">;
234
235
  bitcoinUrl: z.ZodString;
235
- bitcoinNetwork: z.ZodEnum<["mainnet", "testnet", "testnet", "regtest", "signet"]>;
236
+ bitcoinNetwork: z.ZodEnum<["mainnet", "testnet3", "testnet4", "regtest", "signet"]>;
237
+ mode: z.ZodEnum<["mainnet", "testnet", "testnet", "regtest", "signet"]>;
236
238
  }, "strip", z.ZodTypeAny, {
237
239
  blockchain: "bitcoin";
238
240
  bitcoinUrl: string;
239
- bitcoinNetwork: "mainnet" | "testnet" | "regtest" | "signet";
241
+ bitcoinNetwork: "mainnet" | "regtest" | "signet" | "testnet3" | "testnet4";
242
+ mode: "mainnet" | "testnet" | "regtest" | "signet";
240
243
  }, {
241
244
  blockchain: "bitcoin";
242
245
  bitcoinUrl: string;
243
- bitcoinNetwork: "mainnet" | "testnet" | "regtest" | "signet";
246
+ bitcoinNetwork: "mainnet" | "regtest" | "signet" | "testnet3" | "testnet4";
247
+ mode: "mainnet" | "testnet" | "regtest" | "signet";
244
248
  }>;
245
249
  stacks: z.ZodObject<{
246
250
  blockchain: z.ZodLiteral<"stacks">;
@@ -262,7 +266,8 @@ declare const networkConfigurationSchema: z.ZodObject<{
262
266
  bitcoin: {
263
267
  blockchain: "bitcoin";
264
268
  bitcoinUrl: string;
265
- bitcoinNetwork: "mainnet" | "testnet" | "regtest" | "signet";
269
+ bitcoinNetwork: "mainnet" | "regtest" | "signet" | "testnet3" | "testnet4";
270
+ mode: "mainnet" | "testnet" | "regtest" | "signet";
266
271
  };
267
272
  stacks: {
268
273
  blockchain: "stacks";
@@ -274,7 +279,8 @@ declare const networkConfigurationSchema: z.ZodObject<{
274
279
  bitcoin: {
275
280
  blockchain: "bitcoin";
276
281
  bitcoinUrl: string;
277
- bitcoinNetwork: "mainnet" | "testnet" | "regtest" | "signet";
282
+ bitcoinNetwork: "mainnet" | "regtest" | "signet" | "testnet3" | "testnet4";
283
+ mode: "mainnet" | "testnet" | "regtest" | "signet";
278
284
  };
279
285
  stacks: {
280
286
  blockchain: "stacks";
@@ -290,7 +296,8 @@ declare const networkConfigurationSchema: z.ZodObject<{
290
296
  bitcoin: {
291
297
  blockchain: "bitcoin";
292
298
  bitcoinUrl: string;
293
- bitcoinNetwork: "mainnet" | "testnet" | "regtest" | "signet";
299
+ bitcoinNetwork: "mainnet" | "regtest" | "signet" | "testnet3" | "testnet4";
300
+ mode: "mainnet" | "testnet" | "regtest" | "signet";
294
301
  };
295
302
  stacks: {
296
303
  blockchain: "stacks";
@@ -306,7 +313,8 @@ declare const networkConfigurationSchema: z.ZodObject<{
306
313
  bitcoin: {
307
314
  blockchain: "bitcoin";
308
315
  bitcoinUrl: string;
309
- bitcoinNetwork: "mainnet" | "testnet" | "regtest" | "signet";
316
+ bitcoinNetwork: "mainnet" | "regtest" | "signet" | "testnet3" | "testnet4";
317
+ mode: "mainnet" | "testnet" | "regtest" | "signet";
310
318
  };
311
319
  stacks: {
312
320
  blockchain: "stacks";
@@ -351,6 +359,7 @@ declare const bitcoinNetworks: readonly ["mainnet", "testnet3", "testnet4", "reg
351
359
  type BitcoinNetwork = (typeof bitcoinNetworks)[number];
352
360
  type NetworkModes = (typeof networkModes)[number];
353
361
  type BitcoinTestnetModes = (typeof testnetModes)[number];
362
+ declare function bitcoinNetworkToNetworkMode(network: BitcoinNetwork): BitcoinNetworkModes;
354
363
  type BitcoinNetworkModes = NetworkModes | BitcoinTestnetModes;
355
364
  interface BaseChainConfig {
356
365
  blockchain: Blockchain;
@@ -358,7 +367,8 @@ interface BaseChainConfig {
358
367
  interface BitcoinChainConfig extends BaseChainConfig {
359
368
  blockchain: 'bitcoin';
360
369
  bitcoinUrl: string;
361
- bitcoinNetwork: BitcoinNetworkModes;
370
+ bitcoinNetwork: BitcoinNetwork;
371
+ mode: BitcoinNetworkModes;
362
372
  }
363
373
  interface StacksChainConfig extends BaseChainConfig {
364
374
  blockchain: 'stacks';
@@ -469,4 +479,4 @@ interface UtxoItem {
469
479
  value: number;
470
480
  }
471
481
 
472
- export { type AccountDisplayPreference, type AccountDisplayPreferenceInfo, type AllowAdditionalProperties, type AnalyticsPreference, type AverageBitcoinFeeRates, BESTINSLOT_API_BASE_URL_MAINNET, BESTINSLOT_API_BASE_URL_TESTNET, BITCOIN_API_BASE_URL_MAINNET, BITCOIN_API_BASE_URL_SIGNET, BITCOIN_API_BASE_URL_TESTNET3, BITCOIN_API_BASE_URL_TESTNET4, type BaseCryptoAssetBalance, type BaseCryptoAssetInfo, type BitcoinChainConfig, type BitcoinNetwork, type BitcoinNetworkModes, type BitcoinTransactionVectorInput, type BitcoinTransactionVectorOutput, type BitcoinTx, type BitcoinUnit, type BitcoinUnitInfo, type BitcoinUnitSymbol, type Blockchain, type Brc20CryptoAssetInfo, type BtcCryptoAssetBalance, type BtcCryptoAssetInfo, BtcFeeType, ChainID, type CryptoAssetBalance, type CryptoCurrency, type Currency, type DefaultNetworkConfigurations, type EmailAddress, type Entries, FeeCalculationTypes, FeeTypes, type Fees, type FiatCurrency, type FtTransfer, HIRO_API_BASE_URL_MAINNET, HIRO_API_BASE_URL_MAINNET_EXTENDED, HIRO_API_BASE_URL_NAKAMOTO_TESTNET, HIRO_API_BASE_URL_TESTNET, HIRO_API_BASE_URL_TESTNET_EXTENDED, HIRO_INSCRIPTIONS_API_URL, type Inscription, type InscriptionCryptoAssetInfo, type InscriptionMimeType, type LiteralUnion, type MarketData, type Money, type NetworkConfiguration, type NetworkModes, type NumType, type RuneCryptoAssetInfo, STX20_API_BASE_URL_MAINNET, type Sip10CryptoAssetInfo, type Sip9CryptoAssetInfo, type Src20CryptoAssetInfo, type StacksChainConfig, type StacksFeeEstimate, type StacksTx, type StacksTxStatus, type StampCryptoAssetInfo, type Stx20CryptoAssetInfo, type StxCryptoAssetBalance, type StxCryptoAssetInfo, type StxTransfer, type SupportedBlockchains, type UtxoItem, type ValueOf, WalletDefaultNetworkConfigurationIds, bitcoinNetworkModesSchema, bitcoinNetworks, btcTxTimeMap, createCryptoAssetBalance, createInscription, createMarketData, createMarketPair, defaultCurrentNetwork, defaultNetworksKeyedById, emailAddressSchema, formatMarketPair, networkConfigurationSchema, networkModes, testnetModes, whenInscriptionMimeType };
482
+ export { type AccountDisplayPreference, type AccountDisplayPreferenceInfo, type AllowAdditionalProperties, type AnalyticsPreference, type AverageBitcoinFeeRates, BESTINSLOT_API_BASE_URL_MAINNET, BESTINSLOT_API_BASE_URL_TESTNET, BITCOIN_API_BASE_URL_MAINNET, BITCOIN_API_BASE_URL_SIGNET, BITCOIN_API_BASE_URL_TESTNET3, BITCOIN_API_BASE_URL_TESTNET4, type BaseCryptoAssetBalance, type BaseCryptoAssetInfo, type BitcoinChainConfig, type BitcoinNetwork, type BitcoinNetworkModes, type BitcoinTransactionVectorInput, type BitcoinTransactionVectorOutput, type BitcoinTx, type BitcoinUnit, type BitcoinUnitInfo, type BitcoinUnitSymbol, type Blockchain, type Brc20CryptoAssetInfo, type BtcCryptoAssetBalance, type BtcCryptoAssetInfo, BtcFeeType, ChainID, type CryptoAssetBalance, type CryptoCurrency, type Currency, type DefaultNetworkConfigurations, type EmailAddress, type Entries, FeeCalculationTypes, FeeTypes, type Fees, type FiatCurrency, type FtTransfer, HIRO_API_BASE_URL_MAINNET, HIRO_API_BASE_URL_MAINNET_EXTENDED, HIRO_API_BASE_URL_NAKAMOTO_TESTNET, HIRO_API_BASE_URL_TESTNET, HIRO_API_BASE_URL_TESTNET_EXTENDED, HIRO_INSCRIPTIONS_API_URL, type Inscription, type InscriptionCryptoAssetInfo, type InscriptionMimeType, type LiteralUnion, type MarketData, type Money, type NetworkConfiguration, type NetworkModes, type NumType, type RuneCryptoAssetInfo, STX20_API_BASE_URL_MAINNET, type Sip10CryptoAssetInfo, type Sip9CryptoAssetInfo, type Src20CryptoAssetInfo, type StacksChainConfig, type StacksFeeEstimate, type StacksTx, type StacksTxStatus, type StampCryptoAssetInfo, type Stx20CryptoAssetInfo, type StxCryptoAssetBalance, type StxCryptoAssetInfo, type StxTransfer, type SupportedBlockchains, type UtxoItem, type ValueOf, WalletDefaultNetworkConfigurationIds, bitcoinNetworkModesSchema, bitcoinNetworkSchema, bitcoinNetworkToNetworkMode, bitcoinNetworks, btcTxTimeMap, createCryptoAssetBalance, createInscription, createMarketData, createMarketPair, defaultCurrentNetwork, defaultNetworksKeyedById, emailAddressSchema, formatMarketPair, networkConfigurationSchema, networkModes, testnetModes, whenInscriptionMimeType };
package/dist/index.js CHANGED
@@ -34,6 +34,20 @@ var WalletDefaultNetworkConfigurationIds = /* @__PURE__ */ ((WalletDefaultNetwor
34
34
  var networkModes = ["mainnet", "testnet"];
35
35
  var testnetModes = ["testnet", "regtest", "signet"];
36
36
  var bitcoinNetworks = ["mainnet", "testnet3", "testnet4", "regtest", "signet"];
37
+ function bitcoinNetworkToNetworkMode(network) {
38
+ switch (network) {
39
+ case "mainnet":
40
+ return "mainnet";
41
+ case "testnet3":
42
+ return "testnet";
43
+ case "testnet4":
44
+ return "testnet";
45
+ case "regtest":
46
+ return "regtest";
47
+ case "signet":
48
+ return "signet";
49
+ }
50
+ }
37
51
  var networkMainnet = {
38
52
  id: "mainnet" /* mainnet */,
39
53
  name: "Mainnet",
@@ -46,6 +60,7 @@ var networkMainnet = {
46
60
  bitcoin: {
47
61
  blockchain: "bitcoin",
48
62
  bitcoinNetwork: "mainnet",
63
+ mode: "mainnet",
49
64
  bitcoinUrl: BITCOIN_API_BASE_URL_MAINNET
50
65
  }
51
66
  }
@@ -61,13 +76,14 @@ var networkTestnet = {
61
76
  },
62
77
  bitcoin: {
63
78
  blockchain: "bitcoin",
64
- bitcoinNetwork: "testnet",
79
+ bitcoinNetwork: "testnet3",
80
+ mode: "testnet",
65
81
  bitcoinUrl: BITCOIN_API_BASE_URL_TESTNET3
66
82
  }
67
83
  }
68
84
  };
69
85
  var networkTestnet4 = {
70
- id: "testnet" /* testnet */,
86
+ id: "testnet4" /* testnet4 */,
71
87
  name: "Testnet4",
72
88
  chain: {
73
89
  stacks: {
@@ -77,7 +93,8 @@ var networkTestnet4 = {
77
93
  },
78
94
  bitcoin: {
79
95
  blockchain: "bitcoin",
80
- bitcoinNetwork: "testnet",
96
+ bitcoinNetwork: "testnet4",
97
+ mode: "testnet",
81
98
  bitcoinUrl: BITCOIN_API_BASE_URL_TESTNET4
82
99
  }
83
100
  }
@@ -94,6 +111,7 @@ var networkSignet = {
94
111
  bitcoin: {
95
112
  blockchain: "bitcoin",
96
113
  bitcoinNetwork: "signet",
114
+ mode: "signet",
97
115
  bitcoinUrl: BITCOIN_API_BASE_URL_SIGNET
98
116
  }
99
117
  }
@@ -110,6 +128,7 @@ var networkSbtcDevenv = {
110
128
  bitcoin: {
111
129
  blockchain: "bitcoin",
112
130
  bitcoinNetwork: "regtest",
131
+ mode: "regtest",
113
132
  bitcoinUrl: "http://localhost:8999/api"
114
133
  }
115
134
  }
@@ -126,6 +145,7 @@ var networkDevnet = {
126
145
  bitcoin: {
127
146
  blockchain: "bitcoin",
128
147
  bitcoinNetwork: "regtest",
148
+ mode: "regtest",
129
149
  bitcoinUrl: "http://localhost:18443"
130
150
  }
131
151
  }
@@ -283,6 +303,7 @@ function createMarketData(pair, price) {
283
303
  // src/network/network.schema.ts
284
304
  import { z } from "zod";
285
305
  var bitcoinNetworkModesSchema = z.enum([...networkModes, ...testnetModes]);
306
+ var bitcoinNetworkSchema = z.enum([...bitcoinNetworks]);
286
307
  var networkConfigurationSchema = z.object({
287
308
  name: z.string(),
288
309
  id: z.string(),
@@ -290,7 +311,8 @@ var networkConfigurationSchema = z.object({
290
311
  bitcoin: z.object({
291
312
  blockchain: z.literal("bitcoin"),
292
313
  bitcoinUrl: z.string(),
293
- bitcoinNetwork: bitcoinNetworkModesSchema
314
+ bitcoinNetwork: bitcoinNetworkSchema,
315
+ mode: bitcoinNetworkModesSchema
294
316
  }),
295
317
  stacks: z.object({
296
318
  blockchain: z.literal("stacks"),
@@ -324,6 +346,8 @@ export {
324
346
  STX20_API_BASE_URL_MAINNET,
325
347
  WalletDefaultNetworkConfigurationIds,
326
348
  bitcoinNetworkModesSchema,
349
+ bitcoinNetworkSchema,
350
+ bitcoinNetworkToNetworkMode,
327
351
  bitcoinNetworks,
328
352
  btcTxTimeMap,
329
353
  createCryptoAssetBalance,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/crypto-assets/crypto-asset-balance.model.ts","../src/network/network.model.ts","../src/crypto-assets/bitcoin/inscription.model.ts","../src/fees/bitcoin-fees.model.ts","../src/fees/fees.model.ts","../src/market.model.ts","../src/network/network.schema.ts","../src/settings.model.ts"],"sourcesContent":["import { Money } from '../money.model';\n\nexport interface BaseCryptoAssetBalance {\n /**\n * totalBalance after filtering out outboundBalance, protectedBalance, and uneconomicalBalance\n */\n readonly availableBalance: Money;\n}\n\nexport interface BtcCryptoAssetBalance extends BaseCryptoAssetBalance {\n /**\n * Balance of UTXOs with collectibles\n */\n readonly protectedBalance: Money;\n /**\n * Balance across UTXOs with need for larger fee than principal by UTXO given standard rate\n */\n readonly uneconomicalBalance: Money;\n}\n\nexport interface StxCryptoAssetBalance extends BaseCryptoAssetBalance {\n /**\n * availableBalance minus lockedBalance\n */\n readonly availableUnlockedBalance: Money;\n /**\n * Balance of pending receipt into account given pending transactions\n */\n readonly inboundBalance: Money;\n /**\n * totalBalance minus total amount locked by contracts\n */\n readonly lockedBalance: Money;\n /**\n * Balance of pending delivery from account given pending transactions\n */\n readonly outboundBalance: Money;\n /**\n * totalBalance plus inboundBalance minus outboundBalance\n */\n readonly pendingBalance: Money;\n /**\n * Balance as confirmed on chain\n */\n readonly totalBalance: Money;\n /**\n * totalBalance minus lockedBalance\n */\n readonly unlockedBalance: Money;\n}\n\nexport type CryptoAssetBalance =\n | BaseCryptoAssetBalance\n | BtcCryptoAssetBalance\n | StxCryptoAssetBalance;\n\nexport function createCryptoAssetBalance(balance: Money): BaseCryptoAssetBalance {\n return { availableBalance: balance };\n}\n","import { z } from 'zod';\n\nimport { Blockchain } from '../types';\nimport { networkConfigurationSchema } from './network.schema';\n\nexport const HIRO_API_BASE_URL_MAINNET = 'https://api.hiro.so';\nexport const HIRO_API_BASE_URL_TESTNET = 'https://api.testnet.hiro.so';\nexport const HIRO_INSCRIPTIONS_API_URL = 'https://api.hiro.so/ordinals/v1/inscriptions';\nexport const HIRO_API_BASE_URL_NAKAMOTO_TESTNET = 'https://api.nakamoto.testnet.hiro.so';\n\nexport const HIRO_API_BASE_URL_MAINNET_EXTENDED = 'https://api.hiro.so/extended/v1';\nexport const HIRO_API_BASE_URL_TESTNET_EXTENDED = 'https://api.testnet.hiro.so/extended';\n\nexport const BITCOIN_API_BASE_URL_MAINNET = 'https://leather.mempool.space/api';\nexport const BITCOIN_API_BASE_URL_TESTNET3 = 'https://leather.mempool.space/testnet/api';\nexport const BITCOIN_API_BASE_URL_TESTNET4 = 'https://leather.mempool.space/testnet4/api';\nexport const BITCOIN_API_BASE_URL_SIGNET = 'https://mempool.space/signet/api';\n\nexport const BESTINSLOT_API_BASE_URL_MAINNET = 'https://leatherapi.bestinslot.xyz/v3';\nexport const BESTINSLOT_API_BASE_URL_TESTNET = 'https://leatherapi_testnet.bestinslot.xyz/v3';\n\nexport const STX20_API_BASE_URL_MAINNET = 'https://api.stx20.com/api/v1';\n\n// Copied from @stacks/transactions to avoid dependencies\nexport enum ChainID {\n Testnet = 2147483648,\n Mainnet = 1,\n}\n\nexport enum WalletDefaultNetworkConfigurationIds {\n mainnet = 'mainnet',\n testnet = 'testnet',\n testnet4 = 'testnet4',\n signet = 'signet',\n sbtcDevenv = 'sbtcDevenv',\n devnet = 'devnet',\n}\n\nexport type DefaultNetworkConfigurations = keyof typeof WalletDefaultNetworkConfigurationIds;\n\nconst supportedBlockchains = ['stacks', 'bitcoin'] as const;\n\nexport type SupportedBlockchains = (typeof supportedBlockchains)[number];\n\nexport const networkModes = ['mainnet', 'testnet'] as const;\nexport const testnetModes = ['testnet', 'regtest', 'signet'] as const;\n\nexport const bitcoinNetworks = ['mainnet', 'testnet3', 'testnet4', 'regtest', 'signet'] as const;\nexport type BitcoinNetwork = (typeof bitcoinNetworks)[number];\n\nexport type NetworkModes = (typeof networkModes)[number];\ntype BitcoinTestnetModes = (typeof testnetModes)[number];\n\nexport type BitcoinNetworkModes = NetworkModes | BitcoinTestnetModes;\n\ninterface BaseChainConfig {\n blockchain: Blockchain;\n}\n\nexport interface BitcoinChainConfig extends BaseChainConfig {\n blockchain: 'bitcoin';\n bitcoinUrl: string;\n bitcoinNetwork: BitcoinNetworkModes;\n}\n\nexport interface StacksChainConfig extends BaseChainConfig {\n blockchain: 'stacks';\n url: string;\n /** The chainId of the network (or parent network if this is a subnet) */\n chainId: ChainID;\n /** An additional chainId for subnets. Indicated a subnet if defined and is mainly used for signing. */\n subnetChainId?: ChainID;\n}\n\nexport type NetworkConfiguration = z.infer<typeof networkConfigurationSchema>;\n\nconst networkMainnet: NetworkConfiguration = {\n id: WalletDefaultNetworkConfigurationIds.mainnet,\n name: 'Mainnet',\n chain: {\n stacks: {\n blockchain: 'stacks',\n chainId: ChainID.Mainnet,\n url: HIRO_API_BASE_URL_MAINNET,\n },\n bitcoin: {\n blockchain: 'bitcoin',\n bitcoinNetwork: 'mainnet',\n bitcoinUrl: BITCOIN_API_BASE_URL_MAINNET,\n },\n },\n};\n\nconst networkTestnet: NetworkConfiguration = {\n id: WalletDefaultNetworkConfigurationIds.testnet,\n name: 'Testnet3',\n chain: {\n stacks: {\n blockchain: 'stacks',\n chainId: ChainID.Testnet,\n url: HIRO_API_BASE_URL_TESTNET,\n },\n bitcoin: {\n blockchain: 'bitcoin',\n bitcoinNetwork: 'testnet',\n bitcoinUrl: BITCOIN_API_BASE_URL_TESTNET3,\n },\n },\n};\n\nconst networkTestnet4: NetworkConfiguration = {\n id: WalletDefaultNetworkConfigurationIds.testnet,\n name: 'Testnet4',\n chain: {\n stacks: {\n blockchain: 'stacks',\n chainId: ChainID.Testnet,\n url: HIRO_API_BASE_URL_TESTNET,\n },\n bitcoin: {\n blockchain: 'bitcoin',\n bitcoinNetwork: 'testnet',\n bitcoinUrl: BITCOIN_API_BASE_URL_TESTNET4,\n },\n },\n};\n\nconst networkSignet: NetworkConfiguration = {\n id: WalletDefaultNetworkConfigurationIds.signet,\n name: 'Signet',\n chain: {\n stacks: {\n blockchain: 'stacks',\n chainId: ChainID.Testnet,\n url: HIRO_API_BASE_URL_TESTNET,\n },\n bitcoin: {\n blockchain: 'bitcoin',\n bitcoinNetwork: 'signet',\n bitcoinUrl: BITCOIN_API_BASE_URL_SIGNET,\n },\n },\n};\n\nconst networkSbtcDevenv: NetworkConfiguration = {\n id: WalletDefaultNetworkConfigurationIds.sbtcDevenv,\n name: 'sBTC Devenv',\n chain: {\n stacks: {\n blockchain: 'stacks',\n chainId: ChainID.Testnet,\n url: 'http://localhost:3999',\n },\n bitcoin: {\n blockchain: 'bitcoin',\n bitcoinNetwork: 'regtest',\n bitcoinUrl: 'http://localhost:8999/api',\n },\n },\n};\n\nconst networkDevnet: NetworkConfiguration = {\n id: WalletDefaultNetworkConfigurationIds.devnet,\n name: 'Devnet',\n chain: {\n stacks: {\n blockchain: 'stacks',\n chainId: ChainID.Testnet,\n url: 'http://localhost:3999',\n },\n bitcoin: {\n blockchain: 'bitcoin',\n bitcoinNetwork: 'regtest',\n bitcoinUrl: 'http://localhost:18443',\n },\n },\n};\n\nexport const defaultCurrentNetwork: NetworkConfiguration = networkMainnet;\n\nexport const defaultNetworksKeyedById: Record<\n WalletDefaultNetworkConfigurationIds,\n NetworkConfiguration\n> = {\n [WalletDefaultNetworkConfigurationIds.mainnet]: networkMainnet,\n [WalletDefaultNetworkConfigurationIds.testnet]: networkTestnet,\n [WalletDefaultNetworkConfigurationIds.testnet4]: networkTestnet4,\n [WalletDefaultNetworkConfigurationIds.signet]: networkSignet,\n [WalletDefaultNetworkConfigurationIds.sbtcDevenv]: networkSbtcDevenv,\n [WalletDefaultNetworkConfigurationIds.devnet]: networkDevnet,\n};\n","import { HIRO_INSCRIPTIONS_API_URL } from '../../network/network.model';\nimport { InscriptionCryptoAssetInfo } from '../crypto-asset-info.model';\n\n/**\n * Inscriptions contain arbitrary data. When retrieving an inscription, it should be\n * classified into one of the types below, indicating that the app can handle it\n * appropriately and securely. Inscriptions of types not ready to be handled by the\n * app should be classified as \"other\".\n */\nconst inscriptionMimeTypes = [\n 'audio',\n 'gltf',\n 'html',\n 'image',\n 'svg',\n 'text',\n 'video',\n 'other',\n] as const;\n\nexport type InscriptionMimeType = (typeof inscriptionMimeTypes)[number];\n\nexport function whenInscriptionMimeType<T>(\n mimeType: string,\n branches: { [k in InscriptionMimeType]?: () => T }\n) {\n if (mimeType.startsWith('audio/') && branches.audio) {\n return branches.audio();\n }\n\n if (mimeType.startsWith('text/html') && branches.html) {\n return branches.html();\n }\n\n if (mimeType.startsWith('image/svg') && branches.svg) {\n return branches.svg();\n }\n\n if (mimeType.startsWith('image/') && branches.image) {\n return branches.image();\n }\n\n if (mimeType.startsWith('text') && branches.text) {\n return branches.text();\n }\n\n if (mimeType.startsWith('video/') && branches.video) {\n return branches.video();\n }\n\n if (mimeType.startsWith('model/gltf') && branches.gltf) {\n return branches.gltf();\n }\n\n if (branches.other) return branches.other();\n\n throw new Error('Unhandled inscription type');\n}\nexport interface Inscription extends InscriptionCryptoAssetInfo {\n preview: string;\n src: string;\n title: string;\n output: string;\n txid: string;\n offset: string;\n address: string;\n genesisBlockHash: string;\n genesisTimestamp: number;\n genesisBlockHeight: number;\n value: string;\n}\n\ninterface RawInscription {\n id: string;\n number: number;\n output: string;\n contentType: string;\n txid: string;\n offset: string;\n address: string;\n genesisBlockHash: string;\n genesisTimestamp: number;\n genesisBlockHeight: number;\n value: string;\n}\n\nexport function createInscription(inscription: RawInscription): Inscription {\n const contentSrc = `${HIRO_INSCRIPTIONS_API_URL}/${inscription.id}/content`;\n const iframeSrc = `https://ordinals.com/preview/${inscription.id}`;\n const preview = `https://ordinals.hiro.so/inscription/${inscription.id}`;\n const title = `Inscription ${inscription.number}`;\n\n const sharedInfo = {\n id: inscription.id,\n number: inscription.number,\n output: inscription.output,\n txid: inscription.txid,\n offset: inscription.offset,\n address: inscription.address,\n genesisBlockHash: inscription.genesisBlockHash,\n genesisTimestamp: inscription.genesisTimestamp,\n genesisBlockHeight: inscription.genesisBlockHeight,\n value: inscription.value,\n preview,\n title,\n };\n\n return whenInscriptionMimeType<Inscription>(inscription.contentType, {\n audio: () => ({\n ...sharedInfo,\n mimeType: 'audio',\n name: 'inscription',\n src: iframeSrc,\n }),\n gltf: () => ({\n ...sharedInfo,\n mimeType: 'gltf',\n name: 'inscription',\n src: iframeSrc,\n }),\n html: () => ({\n ...sharedInfo,\n mimeType: 'html',\n name: 'inscription',\n src: iframeSrc,\n }),\n image: () => ({\n ...sharedInfo,\n mimeType: 'image',\n name: 'inscription',\n src: contentSrc,\n }),\n svg: () => ({\n ...sharedInfo,\n mimeType: 'svg',\n name: 'inscription',\n src: iframeSrc,\n }),\n text: () => ({\n ...sharedInfo,\n mimeType: 'text',\n name: 'inscription',\n src: contentSrc,\n }),\n video: () => ({\n ...sharedInfo,\n mimeType: 'video',\n name: 'inscription',\n src: iframeSrc,\n }),\n other: () => ({\n ...sharedInfo,\n mimeType: 'other',\n name: 'inscription',\n src: '',\n }),\n });\n}\n","import type BigNumber from 'bignumber.js';\n\nexport interface AverageBitcoinFeeRates {\n fastestFee: BigNumber;\n halfHourFee: BigNumber;\n hourFee: BigNumber;\n}\n\nexport const btcTxTimeMap: Record<keyof AverageBitcoinFeeRates, string> = {\n fastestFee: '~10 – 20min',\n halfHourFee: '~30 min',\n hourFee: '~1 hour+',\n};\n\nexport enum BtcFeeType {\n High = 'High',\n Standard = 'Standard',\n Low = 'Low',\n}\n","import { Blockchain } from '../types';\nimport { StacksFeeEstimate } from './stacks-fees.model';\n\nexport enum FeeTypes {\n Low,\n Middle,\n High,\n Custom,\n Unknown,\n}\n\nexport enum FeeCalculationTypes {\n Api = 'api',\n Default = 'default',\n DefaultSimulated = 'default-simulated',\n FeesCapped = 'fees-capped',\n}\n\nexport interface Fees {\n blockchain: Blockchain;\n estimates: StacksFeeEstimate[];\n calculation: FeeCalculationTypes;\n}\n","import type { CryptoCurrency, FiatCurrency } from './currencies.model';\nimport type { Money } from './money.model';\n\ninterface MarketPair {\n readonly base: CryptoCurrency;\n readonly quote: FiatCurrency;\n}\n\nexport function createMarketPair(base: CryptoCurrency, quote: FiatCurrency): MarketPair {\n return Object.freeze({ base, quote });\n}\n\nexport function formatMarketPair({ base, quote }: MarketPair) {\n return `${base}/${quote}`;\n}\n\nexport interface MarketData {\n readonly pair: MarketPair;\n readonly price: Money;\n}\n\nexport function createMarketData(pair: MarketPair, price: Money): MarketData {\n if (pair.quote !== price.symbol)\n throw new Error('Cannot create market data when price does not match quote');\n return Object.freeze({ pair, price });\n}\n","import { z } from 'zod';\n\nimport { networkModes, testnetModes } from './network.model';\n\nexport const bitcoinNetworkModesSchema = z.enum([...networkModes, ...testnetModes]);\n\nexport const networkConfigurationSchema = z.object({\n name: z.string(),\n id: z.string(),\n chain: z.object({\n bitcoin: z.object({\n blockchain: z.literal('bitcoin'),\n bitcoinUrl: z.string(),\n bitcoinNetwork: bitcoinNetworkModesSchema,\n }),\n stacks: z.object({\n blockchain: z.literal('stacks'),\n url: z.string(),\n chainId: z.number(),\n subnetChainId: z.number().optional(),\n }),\n }),\n});\n","import { z } from 'zod';\n\nimport { Blockchain } from './types';\n\nexport type AccountDisplayPreference = 'native-segwit' | 'taproot' | 'bns' | 'stacks';\nexport interface AccountDisplayPreferenceInfo {\n type: AccountDisplayPreference;\n blockchain: Blockchain;\n name: string;\n}\n\nexport type AnalyticsPreference = 'consent-given' | 'rejects-tracking';\n\nexport const emailAddressSchema = z.string().email({ message: 'Invalid email address' });\nexport type EmailAddress = z.infer<typeof emailAddressSchema>;\n"],"mappings":"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","names":["ChainID","WalletDefaultNetworkConfigurationIds","BtcFeeType","FeeTypes","FeeCalculationTypes","z"]}
1
+ {"version":3,"sources":["../src/crypto-assets/crypto-asset-balance.model.ts","../src/network/network.model.ts","../src/crypto-assets/bitcoin/inscription.model.ts","../src/fees/bitcoin-fees.model.ts","../src/fees/fees.model.ts","../src/market.model.ts","../src/network/network.schema.ts","../src/settings.model.ts"],"sourcesContent":["import { Money } from '../money.model';\n\nexport interface BaseCryptoAssetBalance {\n /**\n * totalBalance after filtering out outboundBalance, protectedBalance, and uneconomicalBalance\n */\n readonly availableBalance: Money;\n}\n\nexport interface BtcCryptoAssetBalance extends BaseCryptoAssetBalance {\n /**\n * Balance of UTXOs with collectibles\n */\n readonly protectedBalance: Money;\n /**\n * Balance across UTXOs with need for larger fee than principal by UTXO given standard rate\n */\n readonly uneconomicalBalance: Money;\n}\n\nexport interface StxCryptoAssetBalance extends BaseCryptoAssetBalance {\n /**\n * availableBalance minus lockedBalance\n */\n readonly availableUnlockedBalance: Money;\n /**\n * Balance of pending receipt into account given pending transactions\n */\n readonly inboundBalance: Money;\n /**\n * totalBalance minus total amount locked by contracts\n */\n readonly lockedBalance: Money;\n /**\n * Balance of pending delivery from account given pending transactions\n */\n readonly outboundBalance: Money;\n /**\n * totalBalance plus inboundBalance minus outboundBalance\n */\n readonly pendingBalance: Money;\n /**\n * Balance as confirmed on chain\n */\n readonly totalBalance: Money;\n /**\n * totalBalance minus lockedBalance\n */\n readonly unlockedBalance: Money;\n}\n\nexport type CryptoAssetBalance =\n | BaseCryptoAssetBalance\n | BtcCryptoAssetBalance\n | StxCryptoAssetBalance;\n\nexport function createCryptoAssetBalance(balance: Money): BaseCryptoAssetBalance {\n return { availableBalance: balance };\n}\n","import { z } from 'zod';\n\nimport { Blockchain } from '../types';\nimport { networkConfigurationSchema } from './network.schema';\n\nexport const HIRO_API_BASE_URL_MAINNET = 'https://api.hiro.so';\nexport const HIRO_API_BASE_URL_TESTNET = 'https://api.testnet.hiro.so';\nexport const HIRO_INSCRIPTIONS_API_URL = 'https://api.hiro.so/ordinals/v1/inscriptions';\nexport const HIRO_API_BASE_URL_NAKAMOTO_TESTNET = 'https://api.nakamoto.testnet.hiro.so';\n\nexport const HIRO_API_BASE_URL_MAINNET_EXTENDED = 'https://api.hiro.so/extended/v1';\nexport const HIRO_API_BASE_URL_TESTNET_EXTENDED = 'https://api.testnet.hiro.so/extended';\n\nexport const BITCOIN_API_BASE_URL_MAINNET = 'https://leather.mempool.space/api';\nexport const BITCOIN_API_BASE_URL_TESTNET3 = 'https://leather.mempool.space/testnet/api';\nexport const BITCOIN_API_BASE_URL_TESTNET4 = 'https://leather.mempool.space/testnet4/api';\nexport const BITCOIN_API_BASE_URL_SIGNET = 'https://mempool.space/signet/api';\n\nexport const BESTINSLOT_API_BASE_URL_MAINNET = 'https://leatherapi.bestinslot.xyz/v3';\nexport const BESTINSLOT_API_BASE_URL_TESTNET = 'https://leatherapi_testnet.bestinslot.xyz/v3';\n\nexport const STX20_API_BASE_URL_MAINNET = 'https://api.stx20.com/api/v1';\n\n// Copied from @stacks/transactions to avoid dependencies\nexport enum ChainID {\n Testnet = 2147483648,\n Mainnet = 1,\n}\n\nexport enum WalletDefaultNetworkConfigurationIds {\n mainnet = 'mainnet',\n testnet = 'testnet',\n testnet4 = 'testnet4',\n signet = 'signet',\n sbtcDevenv = 'sbtcDevenv',\n devnet = 'devnet',\n}\n\nexport type DefaultNetworkConfigurations = keyof typeof WalletDefaultNetworkConfigurationIds;\n\nconst supportedBlockchains = ['stacks', 'bitcoin'] as const;\n\nexport type SupportedBlockchains = (typeof supportedBlockchains)[number];\n\nexport const networkModes = ['mainnet', 'testnet'] as const;\nexport const testnetModes = ['testnet', 'regtest', 'signet'] as const;\n\nexport const bitcoinNetworks = ['mainnet', 'testnet3', 'testnet4', 'regtest', 'signet'] as const;\nexport type BitcoinNetwork = (typeof bitcoinNetworks)[number];\n\nexport type NetworkModes = (typeof networkModes)[number];\ntype BitcoinTestnetModes = (typeof testnetModes)[number];\n\nexport function bitcoinNetworkToNetworkMode(network: BitcoinNetwork): BitcoinNetworkModes {\n switch (network) {\n case 'mainnet':\n return 'mainnet';\n case 'testnet3':\n return 'testnet';\n case 'testnet4':\n return 'testnet';\n case 'regtest':\n return 'regtest';\n case 'signet':\n return 'signet';\n }\n}\n\nexport type BitcoinNetworkModes = NetworkModes | BitcoinTestnetModes;\n\ninterface BaseChainConfig {\n blockchain: Blockchain;\n}\n\nexport interface BitcoinChainConfig extends BaseChainConfig {\n blockchain: 'bitcoin';\n bitcoinUrl: string;\n bitcoinNetwork: BitcoinNetwork;\n mode: BitcoinNetworkModes;\n}\n\nexport interface StacksChainConfig extends BaseChainConfig {\n blockchain: 'stacks';\n url: string;\n /** The chainId of the network (or parent network if this is a subnet) */\n chainId: ChainID;\n /** An additional chainId for subnets. Indicated a subnet if defined and is mainly used for signing. */\n subnetChainId?: ChainID;\n}\n\nexport type NetworkConfiguration = z.infer<typeof networkConfigurationSchema>;\n\nconst networkMainnet: NetworkConfiguration = {\n id: WalletDefaultNetworkConfigurationIds.mainnet,\n name: 'Mainnet',\n chain: {\n stacks: {\n blockchain: 'stacks',\n chainId: ChainID.Mainnet,\n url: HIRO_API_BASE_URL_MAINNET,\n },\n bitcoin: {\n blockchain: 'bitcoin',\n bitcoinNetwork: 'mainnet',\n mode: 'mainnet',\n bitcoinUrl: BITCOIN_API_BASE_URL_MAINNET,\n },\n },\n};\n\nconst networkTestnet: NetworkConfiguration = {\n id: WalletDefaultNetworkConfigurationIds.testnet,\n name: 'Testnet3',\n chain: {\n stacks: {\n blockchain: 'stacks',\n chainId: ChainID.Testnet,\n url: HIRO_API_BASE_URL_TESTNET,\n },\n bitcoin: {\n blockchain: 'bitcoin',\n bitcoinNetwork: 'testnet3',\n mode: 'testnet',\n bitcoinUrl: BITCOIN_API_BASE_URL_TESTNET3,\n },\n },\n};\n\nconst networkTestnet4: NetworkConfiguration = {\n id: WalletDefaultNetworkConfigurationIds.testnet4,\n name: 'Testnet4',\n chain: {\n stacks: {\n blockchain: 'stacks',\n chainId: ChainID.Testnet,\n url: HIRO_API_BASE_URL_TESTNET,\n },\n bitcoin: {\n blockchain: 'bitcoin',\n bitcoinNetwork: 'testnet4',\n mode: 'testnet',\n bitcoinUrl: BITCOIN_API_BASE_URL_TESTNET4,\n },\n },\n};\n\nconst networkSignet: NetworkConfiguration = {\n id: WalletDefaultNetworkConfigurationIds.signet,\n name: 'Signet',\n chain: {\n stacks: {\n blockchain: 'stacks',\n chainId: ChainID.Testnet,\n url: HIRO_API_BASE_URL_TESTNET,\n },\n bitcoin: {\n blockchain: 'bitcoin',\n bitcoinNetwork: 'signet',\n mode: 'signet',\n bitcoinUrl: BITCOIN_API_BASE_URL_SIGNET,\n },\n },\n};\n\nconst networkSbtcDevenv: NetworkConfiguration = {\n id: WalletDefaultNetworkConfigurationIds.sbtcDevenv,\n name: 'sBTC Devenv',\n chain: {\n stacks: {\n blockchain: 'stacks',\n chainId: ChainID.Testnet,\n url: 'http://localhost:3999',\n },\n bitcoin: {\n blockchain: 'bitcoin',\n bitcoinNetwork: 'regtest',\n mode: 'regtest',\n bitcoinUrl: 'http://localhost:8999/api',\n },\n },\n};\n\nconst networkDevnet: NetworkConfiguration = {\n id: WalletDefaultNetworkConfigurationIds.devnet,\n name: 'Devnet',\n chain: {\n stacks: {\n blockchain: 'stacks',\n chainId: ChainID.Testnet,\n url: 'http://localhost:3999',\n },\n bitcoin: {\n blockchain: 'bitcoin',\n bitcoinNetwork: 'regtest',\n mode: 'regtest',\n bitcoinUrl: 'http://localhost:18443',\n },\n },\n};\n\nexport const defaultCurrentNetwork: NetworkConfiguration = networkMainnet;\n\nexport const defaultNetworksKeyedById: Record<\n WalletDefaultNetworkConfigurationIds,\n NetworkConfiguration\n> = {\n [WalletDefaultNetworkConfigurationIds.mainnet]: networkMainnet,\n [WalletDefaultNetworkConfigurationIds.testnet]: networkTestnet,\n [WalletDefaultNetworkConfigurationIds.testnet4]: networkTestnet4,\n [WalletDefaultNetworkConfigurationIds.signet]: networkSignet,\n [WalletDefaultNetworkConfigurationIds.sbtcDevenv]: networkSbtcDevenv,\n [WalletDefaultNetworkConfigurationIds.devnet]: networkDevnet,\n};\n","import { HIRO_INSCRIPTIONS_API_URL } from '../../network/network.model';\nimport { InscriptionCryptoAssetInfo } from '../crypto-asset-info.model';\n\n/**\n * Inscriptions contain arbitrary data. When retrieving an inscription, it should be\n * classified into one of the types below, indicating that the app can handle it\n * appropriately and securely. Inscriptions of types not ready to be handled by the\n * app should be classified as \"other\".\n */\nconst inscriptionMimeTypes = [\n 'audio',\n 'gltf',\n 'html',\n 'image',\n 'svg',\n 'text',\n 'video',\n 'other',\n] as const;\n\nexport type InscriptionMimeType = (typeof inscriptionMimeTypes)[number];\n\nexport function whenInscriptionMimeType<T>(\n mimeType: string,\n branches: { [k in InscriptionMimeType]?: () => T }\n) {\n if (mimeType.startsWith('audio/') && branches.audio) {\n return branches.audio();\n }\n\n if (mimeType.startsWith('text/html') && branches.html) {\n return branches.html();\n }\n\n if (mimeType.startsWith('image/svg') && branches.svg) {\n return branches.svg();\n }\n\n if (mimeType.startsWith('image/') && branches.image) {\n return branches.image();\n }\n\n if (mimeType.startsWith('text') && branches.text) {\n return branches.text();\n }\n\n if (mimeType.startsWith('video/') && branches.video) {\n return branches.video();\n }\n\n if (mimeType.startsWith('model/gltf') && branches.gltf) {\n return branches.gltf();\n }\n\n if (branches.other) return branches.other();\n\n throw new Error('Unhandled inscription type');\n}\nexport interface Inscription extends InscriptionCryptoAssetInfo {\n preview: string;\n src: string;\n title: string;\n output: string;\n txid: string;\n offset: string;\n address: string;\n genesisBlockHash: string;\n genesisTimestamp: number;\n genesisBlockHeight: number;\n value: string;\n}\n\ninterface RawInscription {\n id: string;\n number: number;\n output: string;\n contentType: string;\n txid: string;\n offset: string;\n address: string;\n genesisBlockHash: string;\n genesisTimestamp: number;\n genesisBlockHeight: number;\n value: string;\n}\n\nexport function createInscription(inscription: RawInscription): Inscription {\n const contentSrc = `${HIRO_INSCRIPTIONS_API_URL}/${inscription.id}/content`;\n const iframeSrc = `https://ordinals.com/preview/${inscription.id}`;\n const preview = `https://ordinals.hiro.so/inscription/${inscription.id}`;\n const title = `Inscription ${inscription.number}`;\n\n const sharedInfo = {\n id: inscription.id,\n number: inscription.number,\n output: inscription.output,\n txid: inscription.txid,\n offset: inscription.offset,\n address: inscription.address,\n genesisBlockHash: inscription.genesisBlockHash,\n genesisTimestamp: inscription.genesisTimestamp,\n genesisBlockHeight: inscription.genesisBlockHeight,\n value: inscription.value,\n preview,\n title,\n };\n\n return whenInscriptionMimeType<Inscription>(inscription.contentType, {\n audio: () => ({\n ...sharedInfo,\n mimeType: 'audio',\n name: 'inscription',\n src: iframeSrc,\n }),\n gltf: () => ({\n ...sharedInfo,\n mimeType: 'gltf',\n name: 'inscription',\n src: iframeSrc,\n }),\n html: () => ({\n ...sharedInfo,\n mimeType: 'html',\n name: 'inscription',\n src: iframeSrc,\n }),\n image: () => ({\n ...sharedInfo,\n mimeType: 'image',\n name: 'inscription',\n src: contentSrc,\n }),\n svg: () => ({\n ...sharedInfo,\n mimeType: 'svg',\n name: 'inscription',\n src: iframeSrc,\n }),\n text: () => ({\n ...sharedInfo,\n mimeType: 'text',\n name: 'inscription',\n src: contentSrc,\n }),\n video: () => ({\n ...sharedInfo,\n mimeType: 'video',\n name: 'inscription',\n src: iframeSrc,\n }),\n other: () => ({\n ...sharedInfo,\n mimeType: 'other',\n name: 'inscription',\n src: '',\n }),\n });\n}\n","import type BigNumber from 'bignumber.js';\n\nexport interface AverageBitcoinFeeRates {\n fastestFee: BigNumber;\n halfHourFee: BigNumber;\n hourFee: BigNumber;\n}\n\nexport const btcTxTimeMap: Record<keyof AverageBitcoinFeeRates, string> = {\n fastestFee: '~10 – 20min',\n halfHourFee: '~30 min',\n hourFee: '~1 hour+',\n};\n\nexport enum BtcFeeType {\n High = 'High',\n Standard = 'Standard',\n Low = 'Low',\n}\n","import { Blockchain } from '../types';\nimport { StacksFeeEstimate } from './stacks-fees.model';\n\nexport enum FeeTypes {\n Low,\n Middle,\n High,\n Custom,\n Unknown,\n}\n\nexport enum FeeCalculationTypes {\n Api = 'api',\n Default = 'default',\n DefaultSimulated = 'default-simulated',\n FeesCapped = 'fees-capped',\n}\n\nexport interface Fees {\n blockchain: Blockchain;\n estimates: StacksFeeEstimate[];\n calculation: FeeCalculationTypes;\n}\n","import type { CryptoCurrency, FiatCurrency } from './currencies.model';\nimport type { Money } from './money.model';\n\ninterface MarketPair {\n readonly base: CryptoCurrency;\n readonly quote: FiatCurrency;\n}\n\nexport function createMarketPair(base: CryptoCurrency, quote: FiatCurrency): MarketPair {\n return Object.freeze({ base, quote });\n}\n\nexport function formatMarketPair({ base, quote }: MarketPair) {\n return `${base}/${quote}`;\n}\n\nexport interface MarketData {\n readonly pair: MarketPair;\n readonly price: Money;\n}\n\nexport function createMarketData(pair: MarketPair, price: Money): MarketData {\n if (pair.quote !== price.symbol)\n throw new Error('Cannot create market data when price does not match quote');\n return Object.freeze({ pair, price });\n}\n","import { z } from 'zod';\n\nimport { bitcoinNetworks, networkModes, testnetModes } from './network.model';\n\nexport const bitcoinNetworkModesSchema = z.enum([...networkModes, ...testnetModes]);\n\nexport const bitcoinNetworkSchema = z.enum([...bitcoinNetworks]);\n\nexport const networkConfigurationSchema = z.object({\n name: z.string(),\n id: z.string(),\n chain: z.object({\n bitcoin: z.object({\n blockchain: z.literal('bitcoin'),\n bitcoinUrl: z.string(),\n bitcoinNetwork: bitcoinNetworkSchema,\n mode: bitcoinNetworkModesSchema,\n }),\n stacks: z.object({\n blockchain: z.literal('stacks'),\n url: z.string(),\n chainId: z.number(),\n subnetChainId: z.number().optional(),\n }),\n }),\n});\n","import { z } from 'zod';\n\nimport { Blockchain } from './types';\n\nexport type AccountDisplayPreference = 'native-segwit' | 'taproot' | 'bns' | 'stacks';\nexport interface AccountDisplayPreferenceInfo {\n type: AccountDisplayPreference;\n blockchain: Blockchain;\n name: string;\n}\n\nexport type AnalyticsPreference = 'consent-given' | 'rejects-tracking';\n\nexport const emailAddressSchema = z.string().email({ message: 'Invalid email address' });\nexport type EmailAddress = z.infer<typeof emailAddressSchema>;\n"],"mappings":"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","names":["ChainID","WalletDefaultNetworkConfigurationIds","BtcFeeType","FeeTypes","FeeCalculationTypes","z"]}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@leather.io/models",
3
3
  "author": "Leather.io contact@leather.io",
4
4
  "description": "Leather models and types",
5
- "version": "0.18.0",
5
+ "version": "0.18.2",
6
6
  "license": "MIT",
7
7
  "homepage": "https://github.com/leather-io/mono/tree/dev/packages/models",
8
8
  "repository": {
@@ -25,8 +25,8 @@
25
25
  "prettier": "3.3.3",
26
26
  "tsup": "8.1.0",
27
27
  "typescript": "5.5.4",
28
- "@leather.io/tsconfig-config": "0.6.0",
29
28
  "@leather.io/prettier-config": "0.6.0",
29
+ "@leather.io/tsconfig-config": "0.6.0",
30
30
  "@leather.io/eslint-config": "0.7.0"
31
31
  },
32
32
  "keywords": [
@@ -51,6 +51,21 @@ export type BitcoinNetwork = (typeof bitcoinNetworks)[number];
51
51
  export type NetworkModes = (typeof networkModes)[number];
52
52
  type BitcoinTestnetModes = (typeof testnetModes)[number];
53
53
 
54
+ export function bitcoinNetworkToNetworkMode(network: BitcoinNetwork): BitcoinNetworkModes {
55
+ switch (network) {
56
+ case 'mainnet':
57
+ return 'mainnet';
58
+ case 'testnet3':
59
+ return 'testnet';
60
+ case 'testnet4':
61
+ return 'testnet';
62
+ case 'regtest':
63
+ return 'regtest';
64
+ case 'signet':
65
+ return 'signet';
66
+ }
67
+ }
68
+
54
69
  export type BitcoinNetworkModes = NetworkModes | BitcoinTestnetModes;
55
70
 
56
71
  interface BaseChainConfig {
@@ -60,7 +75,8 @@ interface BaseChainConfig {
60
75
  export interface BitcoinChainConfig extends BaseChainConfig {
61
76
  blockchain: 'bitcoin';
62
77
  bitcoinUrl: string;
63
- bitcoinNetwork: BitcoinNetworkModes;
78
+ bitcoinNetwork: BitcoinNetwork;
79
+ mode: BitcoinNetworkModes;
64
80
  }
65
81
 
66
82
  export interface StacksChainConfig extends BaseChainConfig {
@@ -86,6 +102,7 @@ const networkMainnet: NetworkConfiguration = {
86
102
  bitcoin: {
87
103
  blockchain: 'bitcoin',
88
104
  bitcoinNetwork: 'mainnet',
105
+ mode: 'mainnet',
89
106
  bitcoinUrl: BITCOIN_API_BASE_URL_MAINNET,
90
107
  },
91
108
  },
@@ -102,14 +119,15 @@ const networkTestnet: NetworkConfiguration = {
102
119
  },
103
120
  bitcoin: {
104
121
  blockchain: 'bitcoin',
105
- bitcoinNetwork: 'testnet',
122
+ bitcoinNetwork: 'testnet3',
123
+ mode: 'testnet',
106
124
  bitcoinUrl: BITCOIN_API_BASE_URL_TESTNET3,
107
125
  },
108
126
  },
109
127
  };
110
128
 
111
129
  const networkTestnet4: NetworkConfiguration = {
112
- id: WalletDefaultNetworkConfigurationIds.testnet,
130
+ id: WalletDefaultNetworkConfigurationIds.testnet4,
113
131
  name: 'Testnet4',
114
132
  chain: {
115
133
  stacks: {
@@ -119,7 +137,8 @@ const networkTestnet4: NetworkConfiguration = {
119
137
  },
120
138
  bitcoin: {
121
139
  blockchain: 'bitcoin',
122
- bitcoinNetwork: 'testnet',
140
+ bitcoinNetwork: 'testnet4',
141
+ mode: 'testnet',
123
142
  bitcoinUrl: BITCOIN_API_BASE_URL_TESTNET4,
124
143
  },
125
144
  },
@@ -137,6 +156,7 @@ const networkSignet: NetworkConfiguration = {
137
156
  bitcoin: {
138
157
  blockchain: 'bitcoin',
139
158
  bitcoinNetwork: 'signet',
159
+ mode: 'signet',
140
160
  bitcoinUrl: BITCOIN_API_BASE_URL_SIGNET,
141
161
  },
142
162
  },
@@ -154,6 +174,7 @@ const networkSbtcDevenv: NetworkConfiguration = {
154
174
  bitcoin: {
155
175
  blockchain: 'bitcoin',
156
176
  bitcoinNetwork: 'regtest',
177
+ mode: 'regtest',
157
178
  bitcoinUrl: 'http://localhost:8999/api',
158
179
  },
159
180
  },
@@ -171,6 +192,7 @@ const networkDevnet: NetworkConfiguration = {
171
192
  bitcoin: {
172
193
  blockchain: 'bitcoin',
173
194
  bitcoinNetwork: 'regtest',
195
+ mode: 'regtest',
174
196
  bitcoinUrl: 'http://localhost:18443',
175
197
  },
176
198
  },
@@ -1,9 +1,11 @@
1
1
  import { z } from 'zod';
2
2
 
3
- import { networkModes, testnetModes } from './network.model';
3
+ import { bitcoinNetworks, networkModes, testnetModes } from './network.model';
4
4
 
5
5
  export const bitcoinNetworkModesSchema = z.enum([...networkModes, ...testnetModes]);
6
6
 
7
+ export const bitcoinNetworkSchema = z.enum([...bitcoinNetworks]);
8
+
7
9
  export const networkConfigurationSchema = z.object({
8
10
  name: z.string(),
9
11
  id: z.string(),
@@ -11,7 +13,8 @@ export const networkConfigurationSchema = z.object({
11
13
  bitcoin: z.object({
12
14
  blockchain: z.literal('bitcoin'),
13
15
  bitcoinUrl: z.string(),
14
- bitcoinNetwork: bitcoinNetworkModesSchema,
16
+ bitcoinNetwork: bitcoinNetworkSchema,
17
+ mode: bitcoinNetworkModesSchema,
15
18
  }),
16
19
  stacks: z.object({
17
20
  blockchain: z.literal('stacks'),