@quantabit/market-sdk 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.
- package/LICENSE +21 -0
- package/README.md +125 -0
- package/dist/index.cjs +1077 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.esm.js +1051 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/styles.css +1 -0
- package/package.json +96 -0
- package/types/index.d.ts +67 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/services/marketApi.js","../src/i18n/index.js","../src/context/MarketContext.jsx","../src/types/index.js","../src/components/ListingCard.jsx","../src/utils/chainAnchor.js"],"sourcesContent":["/**\n * Market SDK - API 客户端\n * 市场交易系统后端接口封装\n * \n * 使用 BaseApiClient 基类简化代码\n */\n\nimport { BaseApiClient } from '@quantabit/sdk-config';\n\n/**\n * 市场 API 客户端\n */\nexport class MarketApiClient extends BaseApiClient {\n constructor(config = {}) {\n super('/market', config);\n }\n\n // ============ 市场浏览 ============\n\n /**\n * 获取市场商品列表\n * @param {Object} params - 查询参数\n */\n async getListings(params = {}) {\n return this.get('/listings', params);\n }\n\n /**\n * 兼容旧 Hook 命名\n */\n async getProducts(params = {}) {\n return this.getListings(params);\n }\n\n /**\n * 获取商品详情\n * @param {string} listingId - 商品 ID\n */\n async getListing(listingId) {\n return this.get(`/listings/${listingId}`);\n }\n\n /**\n * 搜索商品\n * @param {string} keyword - 关键词\n * @param {Object} params - 查询参数\n */\n async searchListings(keyword, params = {}) {\n return this.get('/listings/search', { keyword, ...params });\n }\n\n /**\n * 获取分类\n */\n async getCategories() {\n return this.get('/categories');\n }\n\n /**\n * 按分类获取商品\n * @param {string} categoryId - 分类 ID\n * @param {Object} params - 查询参数\n */\n async getListingsByCategory(categoryId, params = {}) {\n return this.get(`/categories/${categoryId}/listings`, params);\n }\n\n // ============ 挂单管理 ============\n\n /**\n * 创建挂单\n * @param {Object} listing - 挂单数据\n */\n async createListing(listing) {\n return this.post('/listings', listing);\n }\n\n /**\n * 更新挂单\n * @param {string} listingId - 挂单 ID\n * @param {Object} updates - 更新数据\n */\n async updateListing(listingId, updates) {\n return this.put(`/listings/${listingId}`, updates);\n }\n\n /**\n * 取消挂单\n * @param {string} listingId - 挂单 ID\n */\n async cancelListing(listingId) {\n return this.post(`/listings/${listingId}/cancel`);\n }\n\n /**\n * 获取我的挂单\n * @param {Object} params - 查询参数\n */\n async getMyListings(params = {}) {\n return this.get('/my/listings', params);\n }\n\n // ============ 交易操作 ============\n\n /**\n * 购买\n * @param {string} listingId - 挂单 ID\n * @param {Object} options - 购买选项\n */\n async buy(listingId, options = {}) {\n return this.post(`/listings/${listingId}/buy`, options);\n }\n\n /**\n * 兼容旧 Hook 命名\n */\n async purchase(productId, quantity = 1, options = {}) {\n return this.buy(productId, { quantity, ...options });\n }\n\n /**\n * 出价\n * @param {string} listingId - 挂单 ID\n * @param {Object} offer - 出价数据\n */\n async makeOffer(listingId, offer) {\n return this.post(`/listings/${listingId}/offer`, offer);\n }\n\n /**\n * 接受出价\n * @param {string} listingId - 挂单 ID\n * @param {string} offerId - 出价 ID\n */\n async acceptOffer(listingId, offerId) {\n return this.post(`/listings/${listingId}/offers/${offerId}/accept`);\n }\n\n /**\n * 拒绝出价\n * @param {string} listingId - 挂单 ID\n * @param {string} offerId - 出价 ID\n */\n async rejectOffer(listingId, offerId) {\n return this.post(`/listings/${listingId}/offers/${offerId}/reject`);\n }\n\n /**\n * 获取商品出价\n * @param {string} listingId - 挂单 ID\n */\n async getOffers(listingId) {\n return this.get(`/listings/${listingId}/offers`);\n }\n\n // ============ 竞拍 ============\n\n /**\n * 获取拍卖列表\n * @param {Object} params - 查询参数\n */\n async getAuctions(params = {}) {\n return this.get('/auctions', params);\n }\n\n /**\n * 参与竞拍\n * @param {string} auctionId - 拍卖 ID\n * @param {number} amount - 出价金额\n */\n async placeBid(auctionId, amount) {\n return this.post(`/auctions/${auctionId}/bid`, { amount });\n }\n\n /**\n * 获取竞拍历史\n * @param {string} auctionId - 拍卖 ID\n */\n async getBidHistory(auctionId) {\n return this.get(`/auctions/${auctionId}/bids`);\n }\n\n // ============ 收藏/关注 ============\n\n /**\n * 收藏商品\n * @param {string} listingId - 挂单 ID\n */\n async favorite(listingId) {\n return this.post(`/listings/${listingId}/favorite`);\n }\n\n /**\n * 取消收藏\n * @param {string} listingId - 挂单 ID\n */\n async unfavorite(listingId) {\n return this.delete(`/listings/${listingId}/favorite`);\n }\n\n /**\n * 获取收藏列表\n * @param {Object} params - 查询参数\n */\n async getFavorites(params = {}) {\n return this.get('/my/favorites', params);\n }\n\n /**\n * 设置价格提醒\n * @param {string} listingId - 挂单 ID\n * @param {number} targetPrice - 目标价格\n */\n async setPriceAlert(listingId, targetPrice) {\n return this.post(`/listings/${listingId}/price-alert`, { target_price: targetPrice });\n }\n\n // ============ 订单/交易记录 ============\n\n /**\n * 获取我的交易记录\n * @param {Object} params - 查询参数\n */\n async getMyTransactions(params = {}) {\n return this.get('/my/transactions', params);\n }\n\n /**\n * 获取交易详情\n * @param {string} transactionId - 交易 ID\n */\n async getTransaction(transactionId) {\n return this.get(`/transactions/${transactionId}`);\n }\n\n // ============ 链上证明 ============\n\n /**\n * 提交挂单链上交易哈希\n */\n async submitListingChainTx(listingId, txHash, data = {}) {\n return this.post(`/listings/${listingId}/chain/submit`, {\n tx_hash: txHash,\n chain: 'qbit',\n network: 'mainnet',\n ...data,\n });\n }\n\n /**\n * 提交交易链上交易哈希\n */\n async submitTransactionChainTx(transactionId, txHash, data = {}) {\n return this.post(`/transactions/${transactionId}/chain/submit`, {\n tx_hash: txHash,\n chain: 'qbit',\n network: 'mainnet',\n ...data,\n });\n }\n\n async getListingChainStatus(listingId) {\n return this.get(`/listings/${listingId}/chain/status`);\n }\n\n async getTransactionChainStatus(transactionId) {\n return this.get(`/transactions/${transactionId}/chain/status`);\n }\n\n // ============ 市场统计 ============\n\n /**\n * 获取市场统计\n */\n async getMarketStats() {\n return this.get('/stats');\n }\n\n /**\n * 获取价格趋势\n * @param {string} itemType - 物品类型\n * @param {Object} params - 查询参数\n */\n async getPriceTrend(itemType, params = {}) {\n return this.get('/trends', { item_type: itemType, ...params });\n }\n}\n\n// 创建默认实例\nexport const marketApi = new MarketApiClient();\n\n\n\nexport default marketApi;\n","/**\n * Market SDK - 国际化 i18n\n */\n\nexport const SUPPORTED_LANGUAGES = ['en', 'zh', 'ja', 'ko'];\n\nexport const messages = {\n zh: {\n loading: '加载中...',\n market: '市场',\n marketplace: '交易市场',\n \n // 商品类型\n typeNFT: 'NFT',\n typeToken: '代币',\n typeGoods: '实物商品',\n typeDigital: '数字商品',\n \n // 交易类型\n listingFixed: '一口价',\n listingAuction: '拍卖',\n listingOffer: '报价出售',\n \n // 状态\n statusListed: '在售',\n statusSold: '已售出',\n statusCancelled: '已下架',\n statusExpired: '已过期',\n \n // 操作\n buy: '购买',\n buyNow: '立即购买',\n placeBid: '出价',\n makeOffer: '发起报价',\n list: '上架',\n delist: '下架',\n edit: '编辑',\n \n // 价格\n price: '价格',\n floorPrice: '地板价',\n highestBid: '最高出价',\n currentBid: '当前出价',\n minBid: '最低出价',\n buyoutPrice: '一口价',\n \n // 拍卖\n auction: '拍卖',\n startPrice: '起拍价',\n endTime: '结束时间',\n bids: '出价记录',\n noBids: '暂无出价',\n bidSuccess: '出价成功',\n \n // 记录\n history: '交易记录',\n myListings: '我的挂单',\n myPurchases: '我的购买',\n noListings: '暂无商品',\n \n // 筛选\n filter: '筛选',\n sortBy: '排序',\n priceHighToLow: '价格从高到低',\n priceLowToHigh: '价格从低到高',\n recentlyListed: '最新上架',\n endingSoon: '即将结束',\n \n // 费用\n fee: '手续费',\n royalty: '版税',\n total: '合计',\n },\n \n en: {\n loading: 'Loading...',\n market: 'Market',\n marketplace: 'Marketplace',\n \n typeNFT: 'NFT',\n typeToken: 'Token',\n typeGoods: 'Physical Goods',\n typeDigital: 'Digital Goods',\n \n listingFixed: 'Fixed Price',\n listingAuction: 'Auction',\n listingOffer: 'Open to Offers',\n \n statusListed: 'Listed',\n statusSold: 'Sold',\n statusCancelled: 'Cancelled',\n statusExpired: 'Expired',\n \n buy: 'Buy',\n buyNow: 'Buy Now',\n placeBid: 'Place Bid',\n makeOffer: 'Make Offer',\n list: 'List',\n delist: 'Delist',\n edit: 'Edit',\n \n price: 'Price',\n floorPrice: 'Floor Price',\n highestBid: 'Highest Bid',\n currentBid: 'Current Bid',\n minBid: 'Min Bid',\n buyoutPrice: 'Buy Now Price',\n \n auction: 'Auction',\n startPrice: 'Starting Price',\n endTime: 'Ends In',\n bids: 'Bids',\n noBids: 'No bids yet',\n bidSuccess: 'Bid placed',\n \n history: 'History',\n myListings: 'My Listings',\n myPurchases: 'My Purchases',\n noListings: 'No listings',\n \n filter: 'Filter',\n sortBy: 'Sort By',\n priceHighToLow: 'Price: High to Low',\n priceLowToHigh: 'Price: Low to High',\n recentlyListed: 'Recently Listed',\n endingSoon: 'Ending Soon',\n \n fee: 'Fee',\n royalty: 'Royalty',\n total: 'Total',\n },\n ja: {\n loading: '読み込み中...',\n market: 'マーケット',\n marketplace: 'マーケットプレイス',\n \n typeNFT: 'NFT',\n typeToken: 'トークン',\n typeGoods: '実物商品',\n typeDigital: 'デジタル商品',\n \n listingFixed: '即決価格',\n listingAuction: 'オークション',\n listingOffer: 'オファー受付中',\n \n statusListed: '出品中',\n statusSold: '売却済み',\n statusCancelled: 'キャンセル',\n statusExpired: '期限切れ',\n \n buy: '購入',\n buyNow: '今すぐ購入',\n placeBid: '入札する',\n makeOffer: 'オファーする',\n list: '出品',\n delist: '出品取り消し',\n edit: '編集',\n \n price: '価格',\n floorPrice: 'フロア価格',\n highestBid: '最高入札額',\n currentBid: '現在の入札額',\n minBid: '最低入札額',\n buyoutPrice: '即決価格',\n \n auction: 'オークション',\n startPrice: '開始価格',\n endTime: '終了まで',\n bids: '入札',\n noBids: '入札はまだありません',\n bidSuccess: '入札しました',\n \n history: '履歴',\n myListings: 'マイ出品',\n myPurchases: 'マイ購入',\n noListings: '出品なし',\n \n filter: 'フィルター',\n sortBy: '並び替え',\n priceHighToLow: '価格: 高から低',\n priceLowToHigh: '価格: 低から高',\n recentlyListed: '新着出品',\n endingSoon: '終了間近',\n \n fee: '手数料',\n royalty: 'ロイヤリティ',\n total: '合計',\n },\n ko: {\n loading: '로딩 중...',\n market: '마켓',\n marketplace: '마켓플레이스',\n \n typeNFT: 'NFT',\n typeToken: '토큰',\n typeGoods: '실물 상품',\n typeDigital: '디지털 상품',\n \n listingFixed: '고정 가격',\n listingAuction: '경매',\n listingOffer: '제안 가능',\n \n statusListed: '판매 중',\n statusSold: '판매됨',\n statusCancelled: '취소됨',\n statusExpired: '만료됨',\n \n buy: '구매',\n buyNow: '바로 구매',\n placeBid: '입찰하기',\n makeOffer: '제안하기',\n list: '판매 등록',\n delist: '등록 취소',\n edit: '편집',\n \n price: '가격',\n floorPrice: '최저가',\n highestBid: '최고 입찰가',\n currentBid: '현재 입찰가',\n minBid: '최소 입찰가',\n buyoutPrice: '즉시 구매가',\n \n auction: '경매',\n startPrice: '시작 가격',\n endTime: '종료 시간',\n bids: '입찰',\n noBids: '입찰 없음',\n bidSuccess: '입찰 성공',\n \n history: '내역',\n myListings: '내 판매 목록',\n myPurchases: '내 구매 목록',\n noListings: '판매 목록 없음',\n \n filter: '필터',\n sortBy: '정렬',\n priceHighToLow: '가격: 높은 순',\n priceLowToHigh: '가격: 낮은 순',\n recentlyListed: '최근 등록',\n endingSoon: '마감 임박',\n \n fee: '수수료',\n royalty: '로열티',\n total: '합계',\n },\n};\n\nlet currentLanguage = 'zh';\n\nexport function setLanguage(lang) {\n if (SUPPORTED_LANGUAGES.includes(lang)) {\n currentLanguage = lang;\n if (typeof window !== 'undefined') {\n localStorage.setItem('qbit_did_market_language', lang);\n }\n }\n}\n\nexport function getLanguage() {\n if (typeof window !== 'undefined') {\n const saved = localStorage.getItem('qbit_did_market_language');\n if (saved && SUPPORTED_LANGUAGES.includes(saved)) {\n currentLanguage = saved;\n }\n }\n return currentLanguage;\n}\n\nexport function t(key, params) {\n const msgs = messages[getLanguage()] || messages.zh;\n let text = msgs[key] || key;\n if (params) {\n Object.keys(params).forEach(k => {\n text = text.replace(new RegExp(`\\\\{${k}\\\\}`, 'g'), params[k]);\n });\n }\n return text;\n}\n\nexport default { messages, SUPPORTED_LANGUAGES, setLanguage, getLanguage, t };\n","/**\n * Market SDK - Context Provider\n */\n\nimport React, { createContext, useContext, useState, useCallback, useEffect } from 'react';\nimport { marketApi } from '../services/marketApi';\nimport { setLanguage } from '../i18n';\n\nconst MarketContext = createContext(null);\n\nexport function MarketProvider({ \n children, \n apiUrl, \n token, \n language = 'zh',\n onPurchase,\n onBid,\n onError,\n}) {\n const [listings, setListings] = useState([]);\n const [currentListing, setCurrentListing] = useState(null);\n const [myListings, setMyListings] = useState([]);\n const [myPurchases, setMyPurchases] = useState([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(null);\n\n useEffect(() => {\n if (apiUrl) marketApi.setBaseUrl(apiUrl);\n if (token) marketApi.setToken(token);\n if (language) setLanguage(language);\n }, [apiUrl, token, language]);\n\n const handleError = useCallback((err) => {\n setError(err.message);\n onError?.(err);\n }, [onError]);\n\n // ============ 市场浏览 ============\n\n const loadListings = useCallback(async (params = {}) => {\n setLoading(true);\n try {\n const result = await marketApi.getListings(params);\n const items = result.items || result.data || result || [];\n setListings(items);\n return items;\n } catch (err) {\n handleError(err);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [handleError]);\n\n const loadListingDetail = useCallback(async (listingId) => {\n setLoading(true);\n try {\n const result = await marketApi.getListingDetail(listingId);\n setCurrentListing(result);\n return result;\n } catch (err) {\n handleError(err);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [handleError]);\n\n // ============ 交易操作 ============\n\n const buy = useCallback(async (listingId) => {\n setLoading(true);\n try {\n const result = await marketApi.buy(listingId);\n onPurchase?.(result);\n return result;\n } catch (err) {\n handleError(err);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [handleError, onPurchase]);\n\n const placeBid = useCallback(async (listingId, amount) => {\n setLoading(true);\n try {\n const result = await marketApi.placeBid(listingId, amount);\n onBid?.(result);\n return result;\n } catch (err) {\n handleError(err);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [handleError, onBid]);\n\n // ============ 我的 ============\n\n const loadMyListings = useCallback(async (params = {}) => {\n try {\n const result = await marketApi.getMyListings(params);\n const items = result.items || result.data || result || [];\n setMyListings(items);\n return items;\n } catch (err) {\n handleError(err);\n }\n }, [handleError]);\n\n const loadMyPurchases = useCallback(async (params = {}) => {\n try {\n const result = await marketApi.getMyPurchases(params);\n const items = result.items || result.data || result || [];\n setMyPurchases(items);\n return items;\n } catch (err) {\n handleError(err);\n }\n }, [handleError]);\n\n const value = {\n listings,\n currentListing,\n myListings,\n myPurchases,\n loading,\n error,\n loadListings,\n loadListingDetail,\n buy,\n placeBid,\n loadMyListings,\n loadMyPurchases,\n api: marketApi,\n };\n\n return (\n <MarketContext.Provider value={value}>\n {children}\n </MarketContext.Provider>\n );\n}\n\nexport function useMarket() {\n const context = useContext(MarketContext);\n if (!context) {\n throw new Error('useMarket must be used within a MarketProvider');\n }\n return context;\n}\n\nexport default MarketContext;\n","/**\n * Market SDK - 类型定义\n */\n\n// 商品类型\nexport const ItemType = {\n NFT: 'nft', // NFT\n TOKEN: 'token', // 代币\n GOODS: 'goods', // 实物商品\n DIGITAL: 'digital', // 数字商品\n};\n\n// 挂单类型\nexport const ListingType = {\n FIXED: 'fixed', // 一口价\n AUCTION: 'auction', // 拍卖\n OFFER: 'offer', // 报价\n};\n\n// 挂单状态\nexport const ListingStatus = {\n ACTIVE: 'active', // 活跃\n SOLD: 'sold', // 已售出\n CANCELLED: 'cancelled', // 已取消\n EXPIRED: 'expired', // 已过期\n};\n\n// 出价状态\nexport const BidStatus = {\n PENDING: 'pending',\n ACCEPTED: 'accepted',\n REJECTED: 'rejected',\n OUTBID: 'outbid', // 被超越\n CANCELLED: 'cancelled',\n};\n\n/**\n * 创建默认挂单\n */\nexport function createDefaultListing(overrides = {}) {\n return {\n id: null,\n seller_did: null,\n seller_name: '',\n item_type: ItemType.NFT,\n listing_type: ListingType.FIXED,\n status: ListingStatus.ACTIVE,\n // 商品信息\n item_id: null,\n item_name: '',\n item_image: null,\n item_description: '',\n // 价格\n price: 0,\n currency: 'ETH',\n start_price: 0, // 拍卖起拍价\n buyout_price: null, // 拍卖一口价\n min_bid_increment: 0, // 最低加价\n // 拍卖\n highest_bid: 0,\n highest_bidder: null,\n bid_count: 0,\n // 时间\n start_at: null,\n end_at: null,\n created_at: null,\n // 费用\n platform_fee: 0, // 平台手续费率\n royalty_fee: 0, // 版税率\n ...overrides,\n };\n}\n\n/**\n * 创建默认出价\n */\nexport function createDefaultBid(overrides = {}) {\n return {\n id: null,\n listing_id: null,\n bidder_did: null,\n bidder_name: '',\n amount: 0,\n currency: 'ETH',\n status: BidStatus.PENDING,\n created_at: null,\n ...overrides,\n };\n}\n\n/**\n * 格式化价格\n */\nexport function formatPrice(amount, currency = 'ETH') {\n const symbols = {\n ETH: 'Ξ',\n BTC: '₿',\n CNY: '¥',\n USD: '$',\n USDT: 'USDT ',\n };\n const symbol = symbols[currency] || '';\n return `${symbol}${parseFloat(amount)}`;\n}\n\n/**\n * 计算用户应付金额(含手续费)\n */\nexport function calculateTotalPrice(listing) {\n const price = listing.highest_bid || listing.price || listing.start_price;\n const fee = price * (listing.platform_fee || 0);\n return price + fee;\n}\n\n/**\n * 检查拍卖是否结束\n */\nexport function isAuctionEnded(listing) {\n if (listing.status !== ListingStatus.ACTIVE) return true;\n if (listing.end_at && new Date(listing.end_at) < new Date()) return true;\n return false;\n}\n\n/**\n * 获取拍卖剩余时间\n */\nexport function getTimeRemaining(endAt) {\n if (!endAt) return null;\n const now = new Date();\n const end = new Date(endAt);\n const diff = end - now;\n\n if (diff <= 0) return { ended: true, days: 0, hours: 0, minutes: 0, seconds: 0 };\n\n return {\n ended: false,\n days: Math.floor(diff / 86400000),\n hours: Math.floor((diff % 86400000) / 3600000),\n minutes: Math.floor((diff % 3600000) / 60000),\n seconds: Math.floor((diff % 60000) / 1000),\n };\n}\n","/**\n * Market SDK - ListingCard 组件\n * 市场商品卡片\n */\n\nimport React, { useState, useEffect } from 'react';\nimport { t } from '../i18n';\nimport { useMarket } from '../context/MarketContext';\nimport { ListingType, ListingStatus, formatPrice, getTimeRemaining, isAuctionEnded } from '../types';\n\nexport function ListingCard({\n listing,\n onBuy,\n onBid,\n onClick,\n showActions = true,\n className = '',\n}) {\n const { buy, placeBid, loading } = useMarket();\n const [timeRemaining, setTimeRemaining] = useState(null);\n\n const { \n item_name, \n item_image, \n listing_type, \n status,\n price, \n highest_bid, \n currency,\n end_at,\n bid_count,\n } = listing;\n\n // 拍卖倒计时\n useEffect(() => {\n if (listing_type !== ListingType.AUCTION || !end_at) return;\n\n const updateTime = () => {\n setTimeRemaining(getTimeRemaining(end_at));\n };\n updateTime();\n const timer = setInterval(updateTime, 1000);\n return () => clearInterval(timer);\n }, [listing_type, end_at]);\n\n const handleBuy = async (e) => {\n e.stopPropagation();\n try {\n const result = await buy(listing.id);\n onBuy?.(result);\n } catch (err) {\n // 错误已在 context 处理\n }\n };\n\n const handleBid = async (e) => {\n e.stopPropagation();\n onBid?.(listing);\n };\n\n const isAuction = listing_type === ListingType.AUCTION;\n const ended = isAuction && isAuctionEnded(listing);\n const displayPrice = isAuction ? (highest_bid || price) : price;\n\n const formatTimeRemaining = () => {\n if (!timeRemaining || timeRemaining.ended) return t('statusExpired');\n const { days, hours, minutes, seconds } = timeRemaining;\n if (days > 0) return `${days}天 ${hours}时`;\n if (hours > 0) return `${hours}时 ${minutes}分`;\n return `${minutes}:${String(seconds).padStart(2, '0')}`;\n };\n\n return (\n <div \n className={`listing-card ${className}`}\n onClick={() => onClick?.(listing)}\n >\n {/* 商品图片 */}\n <div className=\"listing-image\">\n {item_image ? (\n <img src={item_image} alt={item_name} />\n ) : (\n <div className=\"image-placeholder\">🏷️</div>\n )}\n {/* 状态徽章 */}\n {status === ListingStatus.SOLD && (\n <span className=\"listing-badge sold\">{t('statusSold')}</span>\n )}\n {isAuction && !ended && (\n <span className=\"listing-badge auction\">\n ⏱ {formatTimeRemaining()}\n </span>\n )}\n </div>\n\n {/* 商品信息 */}\n <div className=\"listing-info\">\n <h4 className=\"listing-name\">{item_name}</h4>\n \n <div className=\"listing-price-row\">\n <span className=\"price-label\">\n {isAuction ? (highest_bid ? t('highestBid') : t('startPrice')) : t('price')}\n </span>\n <span className=\"price-value\">{formatPrice(displayPrice, currency)}</span>\n </div>\n\n {isAuction && bid_count > 0 && (\n <span className=\"bid-count\">{bid_count} {t('bids')}</span>\n )}\n </div>\n\n {/* 操作按钮 */}\n {showActions && status === ListingStatus.ACTIVE && !ended && (\n <div className=\"listing-actions\">\n {isAuction ? (\n <button \n className=\"listing-btn listing-btn-primary\"\n onClick={handleBid}\n disabled={loading}\n >\n {t('placeBid')}\n </button>\n ) : (\n <button \n className=\"listing-btn listing-btn-primary\"\n onClick={handleBuy}\n disabled={loading}\n >\n {loading ? '...' : t('buyNow')}\n </button>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport default ListingCard;\n","const MARKET_ANCHOR_NAMESPACE = 'qbit_market';\n\nfunction pickResourceId(resource) {\n return resource?.id || resource?.listing_id || resource?.listingId || resource?.order_id || resource?.orderId || resource?.transaction_id || resource?.transactionId;\n}\n\nfunction pickContentHash(resource, options) {\n return (\n options.contentHash ||\n resource?.content_hash ||\n resource?.listing_hash ||\n resource?.order_hash ||\n resource?.transaction_hash ||\n resource?.hash ||\n null\n );\n}\n\nexport async function buildMarketAnchorMemo(resource, options = {}) {\n const { buildQBitAnchorMemo } = await import('@quantabit/qbit-chain-sdk');\n const resourceType = options.resourceType || 'listing';\n const resourceId = options.resourceId || pickResourceId(resource);\n const contentHash = pickContentHash(resource, options);\n\n return buildQBitAnchorMemo({\n action: options.action || `${resourceType}_anchor`,\n subject: resourceId ? `${resourceType}:${resourceId}` : resourceType,\n resource_id: resourceId,\n content_hash: contentHash,\n version: options.version,\n timestamp: options.timestamp,\n extra: {\n item_type: resource?.item_type || resource?.itemType,\n seller_did: resource?.seller_did,\n buyer_did: resource?.buyer_did,\n price: resource?.price,\n ...options.extra,\n },\n }, {\n namespace: options.namespace || MARKET_ANCHOR_NAMESPACE,\n maxBytes: options.maxBytes,\n });\n}\n\nexport function buildMarketChainSubmit(resourceId, txHash, options = {}) {\n return {\n resource_id: resourceId,\n tx_hash: txHash,\n chain: options.chain || 'qbit',\n network: options.network || 'mainnet',\n action: options.action || 'market_anchor',\n resource_type: options.resourceType || 'listing',\n memo: options.memo,\n content_hash: options.contentHash,\n ...options.extra,\n };\n}\n\n/**\n * 将市场资源锚定到 QBit 链(构建 memo → 钱包签名广播 → 可选确认)\n *\n * @param {Object} provider - QBit 钱包 provider(signAndSendTransaction / signTransaction)\n * @param {Object} resource - 市场资源(listing/order/transaction)\n * @param {Object} options - 选项(endpoint, network, address, waitForConfirmation, priorityFee...)\n * @returns {Promise<{txHash: string|null, memo: string, confirmed?: boolean, slot?: number|null, submit: Object}>}\n */\nexport async function anchorMarketResource(provider, resource, options = {}) {\n const sdk = await import('@quantabit/qbit-chain-sdk');\n const connection = new sdk.QBitConnection({\n endpoint: options.endpoint,\n network: options.network || 'mainnet',\n });\n const memo = await buildMarketAnchorMemo(resource, options);\n\n const result = await sdk.broadcastQBitAnchor(connection, provider, memo, {\n address: options.address,\n priorityFee: options.priorityFee,\n skipPreflight: options.skipPreflight,\n waitForConfirmation: options.waitForConfirmation,\n commitment: options.commitment,\n timeoutMs: options.confirmTimeoutMs,\n });\n\n const resourceId = options.resourceId || pickResourceId(resource);\n return {\n ...result,\n submit: buildMarketChainSubmit(resourceId, result.txHash, {\n ...options,\n memo: result.memo,\n contentHash: pickContentHash(resource, options),\n }),\n };\n}\n\n/**\n * 校验市场资源是否已成功锚定到链上\n *\n * @param {string} txHash - 交易签名\n * @param {Object} options - { endpoint, network, match }\n * @returns {Promise<{found: boolean, matched: boolean, memos: Array<Object>}>}\n */\nexport async function verifyMarketAnchor(txHash, options = {}) {\n const sdk = await import('@quantabit/qbit-chain-sdk');\n const connection = new sdk.QBitConnection({\n endpoint: options.endpoint,\n network: options.network || 'mainnet',\n });\n return sdk.verifyAnchoredMemo(connection, txHash, {\n namespace: options.namespace || MARKET_ANCHOR_NAMESPACE,\n match: options.match,\n commitment: options.commitment,\n });\n}\n\nexport { MARKET_ANCHOR_NAMESPACE };\n"],"names":["MarketApiClient","BaseApiClient","constructor","config","getListings","params","get","getProducts","getListing","listingId","searchListings","keyword","getCategories","getListingsByCategory","categoryId","createListing","listing","post","updateListing","updates","put","cancelListing","getMyListings","buy","options","purchase","productId","quantity","makeOffer","offer","acceptOffer","offerId","rejectOffer","getOffers","getAuctions","placeBid","auctionId","amount","getBidHistory","favorite","unfavorite","delete","getFavorites","setPriceAlert","targetPrice","target_price","getMyTransactions","getTransaction","transactionId","submitListingChainTx","txHash","data","tx_hash","chain","network","submitTransactionChainTx","getListingChainStatus","getTransactionChainStatus","getMarketStats","getPriceTrend","itemType","item_type","marketApi","SUPPORTED_LANGUAGES","messages","zh","loading","market","marketplace","typeNFT","typeToken","typeGoods","typeDigital","listingFixed","listingAuction","listingOffer","statusListed","statusSold","statusCancelled","statusExpired","buyNow","list","delist","edit","price","floorPrice","highestBid","currentBid","minBid","buyoutPrice","auction","startPrice","endTime","bids","noBids","bidSuccess","history","myListings","myPurchases","noListings","filter","sortBy","priceHighToLow","priceLowToHigh","recentlyListed","endingSoon","fee","royalty","total","en","ja","ko","currentLanguage","setLanguage","lang","includes","window","localStorage","setItem","getLanguage","saved","getItem","t","key","msgs","text","Object","keys","forEach","k","replace","RegExp","MarketContext","createContext","MarketProvider","children","apiUrl","token","language","onPurchase","onBid","onError","listings","setListings","useState","currentListing","setCurrentListing","setMyListings","setMyPurchases","setLoading","error","setError","useEffect","setBaseUrl","setToken","handleError","useCallback","err","message","loadListings","result","items","loadListingDetail","getListingDetail","loadMyListings","loadMyPurchases","getMyPurchases","value","api","React","createElement","Provider","useMarket","context","useContext","Error","ItemType","NFT","TOKEN","GOODS","DIGITAL","ListingType","FIXED","AUCTION","OFFER","ListingStatus","ACTIVE","SOLD","CANCELLED","EXPIRED","BidStatus","PENDING","ACCEPTED","REJECTED","OUTBID","createDefaultListing","overrides","id","seller_did","seller_name","listing_type","status","item_id","item_name","item_image","item_description","currency","start_price","buyout_price","min_bid_increment","highest_bid","highest_bidder","bid_count","start_at","end_at","created_at","platform_fee","royalty_fee","createDefaultBid","listing_id","bidder_did","bidder_name","formatPrice","symbols","ETH","BTC","CNY","USD","USDT","symbol","parseFloat","calculateTotalPrice","isAuctionEnded","Date","getTimeRemaining","endAt","now","end","diff","ended","days","hours","minutes","seconds","Math","floor","ListingCard","onBuy","onClick","showActions","className","timeRemaining","setTimeRemaining","updateTime","timer","setInterval","clearInterval","handleBuy","e","stopPropagation","handleBid","isAuction","displayPrice","formatTimeRemaining","String","padStart","src","alt","disabled","MARKET_ANCHOR_NAMESPACE","pickResourceId","resource","order_id","orderId","transaction_id","pickContentHash","contentHash","content_hash","listing_hash","order_hash","transaction_hash","hash","buildMarketAnchorMemo","buildQBitAnchorMemo","resourceType","resourceId","action","subject","resource_id","version","timestamp","extra","buyer_did","namespace","maxBytes","buildMarketChainSubmit","resource_type","memo","anchorMarketResource","provider","sdk","connection","QBitConnection","endpoint","broadcastQBitAnchor","address","priorityFee","skipPreflight","waitForConfirmation","commitment","timeoutMs","confirmTimeoutMs","submit","verifyMarketAnchor","verifyAnchoredMemo","match"],"mappings":"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"}
|