@luxexchange/config 1.0.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.
@@ -0,0 +1,77 @@
1
+ import type { Config } from '@luxfi/config/src/config-types'
2
+ import { isNonTestDev } from '@luxfi/utilities/src/environment/constants'
3
+
4
+ // Module-level cache for config to avoid recomputing on every call
5
+ let cachedConfig: Config | undefined
6
+
7
+ // eslint-disable-next-line complexity
8
+ export const getConfig = (): Config => {
9
+ // Return cached config if already computed
10
+ if (cachedConfig !== undefined) {
11
+ return cachedConfig
12
+ }
13
+
14
+ /**
15
+ * Web-specific config implementation that uses process.env directly
16
+ * instead of react-native-dotenv to avoid Node.js filesystem dependencies
17
+ * in browser extension builds.
18
+ */
19
+ const config: Config = {
20
+ alchemyApiKey: process.env.REACT_APP_ALCHEMY_API_KEY || process.env.ALCHEMY_API_KEY || '',
21
+ amplitudeProxyUrlOverride: process.env.AMPLITUDE_PROXY_URL_OVERRIDE || '',
22
+ apiBaseUrlOverride: process.env.API_BASE_URL_OVERRIDE || '',
23
+ apiBaseUrlV2Override: process.env.API_BASE_URL_V2_OVERRIDE || '',
24
+ appsflyerApiKey: process.env.APPSFLYER_API_KEY || '',
25
+ appsflyerAppId: process.env.APPSFLYER_APP_ID || '',
26
+ blockaidProxyUrl: process.env.REACT_APP_BLOCKAID_PROXY_URL || process.env.BLOCKAID_PROXY_URL || '',
27
+ datadogClientToken: process.env.REACT_APP_DATADOG_CLIENT_TOKEN || process.env.DATADOG_CLIENT_TOKEN || '',
28
+ datadogProjectId: process.env.REACT_APP_DATADOG_PROJECT_ID || process.env.DATADOG_PROJECT_ID || '',
29
+ enableEntryGatewayProxy: process.env.VITE_ENABLE_ENTRY_GATEWAY_PROXY === 'true',
30
+ enableSessionService: process.env.ENABLE_SESSION_SERVICE === 'true',
31
+ enableSessionUpgradeAuto:
32
+ process.env.REACT_APP_ENABLE_SESSION_UPGRADE_AUTO === 'true' ||
33
+ process.env.ENABLE_SESSION_UPGRADE_AUTO === 'true',
34
+ isE2ETest: process.env.IS_E2E_TEST?.toLowerCase() === 'true',
35
+ forApiUrlOverride: process.env.FOR_API_URL_OVERRIDE || '',
36
+ graphqlUrlOverride: process.env.GRAPHQL_URL_OVERRIDE || '',
37
+ // G-Chain GraphQL: testnet=9650, mainnet=9630, devnet=9650
38
+ gChainGraphqlUrl:
39
+ process.env['REACT_APP_GCHAIN_GRAPHQL_URL'] ||
40
+ process.env['GCHAIN_GRAPHQL_URL'] ||
41
+ (process.env.NODE_ENV === 'production'
42
+ ? 'http://localhost:9630/ext/bc/G/graphql'
43
+ : 'http://localhost:9650/ext/bc/G/graphql'),
44
+ infuraKey: process.env.REACT_APP_INFURA_KEY || '',
45
+ includePrototypeFeatures: process.env.INCLUDE_PROTOTYPE_FEATURES || '',
46
+ isVercelEnvironment: process.env.VERCEL === '1',
47
+ jupiterProxyUrl: process.env.REACT_APP_JUPITER_PROXY_URL || process.env.JUPITER_PROXY_URL || '',
48
+ onesignalAppId: process.env.ONESIGNAL_APP_ID || '',
49
+ quicknodeEndpointName: process.env.REACT_APP_QUICKNODE_ENDPOINT_NAME || process.env.QUICKNODE_ENDPOINT_NAME || '',
50
+ quicknodeEndpointToken:
51
+ process.env.REACT_APP_QUICKNODE_ENDPOINT_TOKEN || process.env.QUICKNODE_ENDPOINT_TOKEN || '',
52
+ scantasticApiUrlOverride: process.env.SCANTASTIC_API_URL_OVERRIDE || '',
53
+ statsigApiKey: process.env.REACT_APP_STATSIG_API_KEY || process.env.STATSIG_API_KEY || '',
54
+ statsigProxyUrlOverride: process.env.STATSIG_PROXY_URL_OVERRIDE || '',
55
+ tradingApiKey: process.env.REACT_APP_TRADING_API_KEY || process.env.TRADING_API_KEY || '',
56
+ tradingApiUrlOverride: process.env.REACT_APP_TRADING_API_URL_OVERRIDE || process.env.TRADING_API_URL_OVERRIDE || '',
57
+ tradingApiWebTestEnv: process.env.REACT_APP_TRADING_API_TEST_ENV || '',
58
+ liquidityServiceUrlOverride:
59
+ process.env.REACT_APP_LIQUIDITY_SERVICE_URL_OVERRIDE || process.env.LIQUIDITY_SERVICE_URL_OVERRIDE || '',
60
+ luxApiKey: process.env.LUX_API_KEY || '',
61
+ unitagsApiUrlOverride: process.env.UNITAGS_API_URL_OVERRIDE || '',
62
+ luxNotifApiBaseUrlOverride: process.env.LUX_NOTIF_API_BASE_URL_OVERRIDE || '',
63
+ entryGatewayApiUrlOverride: process.env.ENTRY_GATEWAY_API_URL_OVERRIDE || '',
64
+ luxGatewayUrlOverride: process.env['REACT_APP_LUX_GATEWAY_URL'] || process.env['LUX_GATEWAY_URL'] || '',
65
+ walletConnectProjectId:
66
+ process.env.REACT_APP_WALLET_CONNECT_PROJECT_ID || process.env.WALLETCONNECT_PROJECT_ID || '',
67
+ walletConnectProjectIdBeta: process.env.WALLETCONNECT_PROJECT_ID_BETA || '',
68
+ walletConnectProjectIdDev: process.env.WALLETCONNECT_PROJECT_ID_DEV || '',
69
+ }
70
+ if (isNonTestDev) {
71
+ // biome-ignore lint/suspicious/noConsole: Cannot use logger here, causes error from circular dep
72
+ console.debug('Using app config:', config)
73
+ }
74
+ // Cache and return frozen config
75
+ cachedConfig = Object.freeze(config)
76
+ return cachedConfig
77
+ }
package/src/index.ts ADDED
@@ -0,0 +1,37 @@
1
+ export type { Config } from './config-types'
2
+ export { getConfig } from './getConfig'
3
+
4
+ // Chain definitions
5
+ export {
6
+ luxMainnet,
7
+ luxTestnet,
8
+ zooMainnet,
9
+ zooTestnet,
10
+ hanzoMainnet,
11
+ spcMainnet,
12
+ parsMainnet,
13
+ liquidEvm,
14
+ LUX_MAINNET_ID,
15
+ LUX_TESTNET_ID,
16
+ ZOO_MAINNET_ID,
17
+ ZOO_TESTNET_ID,
18
+ HANZO_MAINNET_ID,
19
+ SPC_MAINNET_ID,
20
+ PARS_MAINNET_ID,
21
+ LIQUID_EVM_ID,
22
+ supportedChains,
23
+ type SupportedChainId,
24
+ } from './chains'
25
+
26
+ // Contract addresses
27
+ export {
28
+ LUX_MAINNET_CONTRACTS,
29
+ LUX_TESTNET_CONTRACTS,
30
+ ZOO_MAINNET_CONTRACTS,
31
+ HANZO_MAINNET_CONTRACTS,
32
+ SPC_MAINNET_CONTRACTS,
33
+ PARS_MAINNET_CONTRACTS,
34
+ DEX_PRECOMPILES,
35
+ getContracts,
36
+ type ContractAddresses,
37
+ } from './contracts'
package/src/wagmi.ts ADDED
@@ -0,0 +1,27 @@
1
+ import { http, createConfig } from 'wagmi'
2
+ import { mainnet, sepolia } from 'wagmi/chains'
3
+ import { luxMainnet, luxTestnet, zooMainnet, zooTestnet, hanzoMainnet, spcMainnet, parsMainnet, liquidEvm } from './chains'
4
+
5
+ /**
6
+ * Wagmi configuration for Lux Exchange
7
+ */
8
+ export const wagmiConfig = createConfig({
9
+ chains: [luxMainnet, zooMainnet, hanzoMainnet, spcMainnet, parsMainnet, liquidEvm, luxTestnet, zooTestnet, mainnet, sepolia],
10
+ transports: {
11
+ // Lux C-Chain
12
+ [luxMainnet.id]: http(luxMainnet.rpcUrls.default.http[0]),
13
+ [luxTestnet.id]: http(luxTestnet.rpcUrls.default.http[0]),
14
+ // Subnet chains
15
+ [zooMainnet.id]: http(zooMainnet.rpcUrls.default.http[0]),
16
+ [zooTestnet.id]: http(zooTestnet.rpcUrls.default.http[0]),
17
+ [hanzoMainnet.id]: http(hanzoMainnet.rpcUrls.default.http[0]),
18
+ [spcMainnet.id]: http(spcMainnet.rpcUrls.default.http[0]),
19
+ [parsMainnet.id]: http(parsMainnet.rpcUrls.default.http[0]),
20
+ [liquidEvm.id]: http(liquidEvm.rpcUrls.default.http[0]),
21
+ // Ethereum (for bridging)
22
+ [mainnet.id]: http(),
23
+ [sepolia.id]: http(),
24
+ },
25
+ })
26
+
27
+ export type WagmiConfig = typeof wagmiConfig
package/tsconfig.json ADDED
@@ -0,0 +1,18 @@
1
+ {
2
+ "extends": "../../config/tsconfig/app.json",
3
+ "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.json", "env.native.d.ts", "env.d.ts"],
4
+ "exclude": ["src/**/*.spec.ts", "src/**/*.spec.tsx", "src/**/*.test.ts", "src/**/*.test.tsx"],
5
+ "compilerOptions": {
6
+ "emitDeclarationOnly": true,
7
+ "noEmit": false,
8
+ "types": ["node"],
9
+ "paths": {
10
+ "@universe/config/*": ["./src/*"]
11
+ }
12
+ },
13
+ "references": [
14
+ {
15
+ "path": "../utilities"
16
+ }
17
+ ]
18
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "compilerOptions": {
4
+ "preserveSymlinks": true
5
+ },
6
+ "include": ["**/*.ts", "**/*.tsx", "**/*.json"],
7
+ "exclude": ["node_modules"]
8
+ }