refactor: rename SolaceScanScout to Solace and update related configurations

- Updated branding from "SolaceScanScout" to "Solace" across various files including deployment scripts, API responses, and documentation.
- Changed default base URL for Playwright tests and updated security headers to reflect the new branding.
- Enhanced README and API documentation to include new authentication endpoints and product access details.

This refactor aligns the project branding and improves clarity in the API documentation.
This commit is contained in:
defiQUG
2026-04-10 12:52:17 -07:00
parent 6eef6b07f6
commit 0972178cc5
160 changed files with 13274 additions and 1061 deletions
@@ -3,7 +3,7 @@
import { useEffect, useMemo, useState } from 'react'
import { resolveExplorerApiBase } from '@/libs/frontend-api-client/api-base'
type WalletChain = {
export type WalletChain = {
chainId: string
chainIdDecimal?: number
chainName: string
@@ -20,7 +20,7 @@ type WalletChain = {
explorerApiUrl?: string
}
type TokenListToken = {
export type TokenListToken = {
chainId: number
address: string
name: string
@@ -31,7 +31,7 @@ type TokenListToken = {
extensions?: Record<string, unknown>
}
type NetworksCatalog = {
export type NetworksCatalog = {
name?: string
version?: {
major?: number
@@ -42,7 +42,7 @@ type NetworksCatalog = {
chains?: WalletChain[]
}
type TokenListCatalog = {
export type TokenListCatalog = {
name?: string
version?: {
major?: number
@@ -53,7 +53,7 @@ type TokenListCatalog = {
tokens?: TokenListToken[]
}
type CapabilitiesCatalog = {
export type CapabilitiesCatalog = {
name?: string
version?: {
major?: number
@@ -84,11 +84,20 @@ type CapabilitiesCatalog = {
}
}
type FetchMetadata = {
export type FetchMetadata = {
source?: string | null
lastModified?: string | null
}
interface AddToMetaMaskProps {
initialNetworks?: NetworksCatalog | null
initialTokenList?: TokenListCatalog | null
initialCapabilities?: CapabilitiesCatalog | null
initialNetworksMeta?: FetchMetadata | null
initialTokenListMeta?: FetchMetadata | null
initialCapabilitiesMeta?: FetchMetadata | null
}
type EthereumProvider = {
request: (args: { method: string; params?: unknown }) => Promise<unknown>
}
@@ -99,7 +108,7 @@ const FALLBACK_CHAIN_138: WalletChain = {
chainName: 'DeFi Oracle Meta Mainnet',
nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },
rpcUrls: ['https://rpc-http-pub.d-bis.org', 'https://rpc.d-bis.org', 'https://rpc2.d-bis.org'],
blockExplorerUrls: ['https://explorer.d-bis.org'],
blockExplorerUrls: ['https://explorer.d-bis.org', 'https://blockscout.defi-oracle.io'],
iconUrls: ['https://raw.githubusercontent.com/ethereum/ethereum.org/main/static/images/eth-diamond-black.png'],
shortName: 'dbis',
infoURL: 'https://explorer.d-bis.org',
@@ -139,7 +148,7 @@ const FALLBACK_CAPABILITIES_138: CapabilitiesCatalog = {
name: 'Chain 138 RPC Capabilities',
version: { major: 1, minor: 1, patch: 0 },
timestamp: '2026-03-28T00:00:00Z',
generatedBy: 'SolaceScanScout',
generatedBy: 'SolaceScan',
chainId: 138,
chainName: 'DeFi Oracle Meta Mainnet',
rpcUrl: 'https://rpc-http-pub.d-bis.org',
@@ -211,19 +220,39 @@ function isCapabilitiesCatalog(value: unknown): value is CapabilitiesCatalog {
function getApiBase() {
return resolveExplorerApiBase({
serverFallback: 'https://explorer.d-bis.org',
serverFallback: 'https://blockscout.defi-oracle.io',
})
}
export function AddToMetaMask() {
export function AddToMetaMask({
initialNetworks = null,
initialTokenList = null,
initialCapabilities = null,
initialNetworksMeta = null,
initialTokenListMeta = null,
initialCapabilitiesMeta = null,
}: AddToMetaMaskProps) {
const [status, setStatus] = useState<string | null>(null)
const [error, setError] = useState<string | null>(null)
const [networks, setNetworks] = useState<NetworksCatalog | null>(null)
const [tokenList, setTokenList] = useState<TokenListCatalog | null>(null)
const [capabilities, setCapabilities] = useState<CapabilitiesCatalog | null>(null)
const [networksMeta, setNetworksMeta] = useState<FetchMetadata | null>(null)
const [tokenListMeta, setTokenListMeta] = useState<FetchMetadata | null>(null)
const [capabilitiesMeta, setCapabilitiesMeta] = useState<FetchMetadata | null>(null)
const [networks, setNetworks] = useState<NetworksCatalog | null>(initialNetworks)
const [tokenList, setTokenList] = useState<TokenListCatalog | null>(initialTokenList)
const [capabilities, setCapabilities] = useState<CapabilitiesCatalog | null>(
initialCapabilities || FALLBACK_CAPABILITIES_138,
)
const [networksMeta, setNetworksMeta] = useState<FetchMetadata | null>(initialNetworksMeta)
const [tokenListMeta, setTokenListMeta] = useState<FetchMetadata | null>(initialTokenListMeta)
const [capabilitiesMeta, setCapabilitiesMeta] = useState<FetchMetadata | null>(
initialCapabilitiesMeta ||
(initialCapabilities
? {
source: 'explorer-api',
lastModified: initialCapabilities.timestamp || null,
}
: {
source: 'frontend-fallback',
lastModified: FALLBACK_CAPABILITIES_138.timestamp || null,
}),
)
const ethereum = typeof window !== 'undefined'
? (window as unknown as { ethereum?: EthereumProvider }).ethereum
@@ -251,7 +280,7 @@ export function AddToMetaMask() {
})
const json = response.ok ? await response.json() : null
const meta: FetchMetadata = {
source: response.headers.get('X-Config-Source'),
source: response.headers.get('X-Config-Source') || 'explorer-api',
lastModified: response.headers.get('Last-Modified'),
}
return { json, meta }
@@ -296,15 +325,17 @@ export function AddToMetaMask() {
setCapabilitiesMeta(resolvedCapabilities.meta)
} catch {
if (!active) return
setNetworks(null)
setTokenList(null)
setCapabilities(FALLBACK_CAPABILITIES_138)
setNetworksMeta(null)
setTokenListMeta(null)
setCapabilitiesMeta({
source: 'frontend-fallback',
lastModified: FALLBACK_CAPABILITIES_138.timestamp || null,
})
setNetworks((current) => current)
setTokenList((current) => current)
setCapabilities((current) => current || FALLBACK_CAPABILITIES_138)
setNetworksMeta((current) => current)
setTokenListMeta((current) => current)
setCapabilitiesMeta((current) =>
current || {
source: 'frontend-fallback',
lastModified: FALLBACK_CAPABILITIES_138.timestamp || null,
},
)
} finally {
if (active) {
timer = setTimeout(() => {