@quantabit/points-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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../src/services/pointsApi.js","../src/i18n/index.js","../src/context/PointsContext.jsx","../src/types/index.js","../src/components/PointsBalance.jsx","../src/components/CheckInCalendar.jsx","../src/components/PointsHistory.jsx","../src/components/TransferPoints.jsx","../src/utils/chainAnchor.js","../src/components/Advanced.jsx"],"sourcesContent":["/**\n * Points SDK - API 客户端\n * 积分系统后端接口封装\n * \n * 对接 QuantaBit 后端真实 API:\n * - /points/balance - 积分余额\n * - /points/add - 增加积分\n * - /points/deduct - 扣减积分\n * - /points/logs - 积分变动日志\n * \n * 使用 BaseApiClient 基类简化代码\n */\n\nimport { BaseApiClient } from '@quantabit/sdk-config';\n\n/**\n * 积分 API 客户端\n * \n * 支持多种积分类型:\n * - general: 通用积分\n * - vip: VIP 积分\n * - activity: 活动积分\n */\nexport class PointsApiClient extends BaseApiClient {\n constructor(config = {}) {\n super('', config);\n \n // 当前用户身份信息\n this._currentDid = null;\n this._currentUserId = null;\n this._platformInfo = null;\n \n // 默认积分类型\n this._defaultPointsType = 'general';\n }\n\n /**\n * 设置当前用户 DID\n * @param {string} did - 用户的 DID 标识\n */\n setCurrentDid(did) {\n this._currentDid = did;\n }\n\n /**\n * 设置当前用户 ID\n * @param {number} userId - 用户 ID\n */\n setCurrentUserId(userId) {\n this._currentUserId = userId;\n }\n\n /**\n * 设置平台信息(用于跨平台调用)\n * @param {string} platformId - 平台标识\n * @param {string} platformUserId - 平台内用户 ID\n */\n setPlatformInfo(platformId, platformUserId) {\n this._platformInfo = { platform_id: platformId, platform_user_id: platformUserId };\n }\n\n /**\n * 设置默认积分类型\n * @param {string} type - 积分类型(general/vip/activity)\n */\n setDefaultPointsType(type) {\n this._defaultPointsType = type;\n }\n\n /**\n * 获取用户标识参数\n * @private\n */\n _getUserIdentifier() {\n if (this._currentDid) {\n return { did: this._currentDid };\n }\n if (this._currentUserId) {\n return { user_id: this._currentUserId };\n }\n if (this._platformInfo) {\n return {\n platform_user_id: this._platformInfo.platform_user_id,\n source_platform: this._platformInfo.platform_id,\n };\n }\n return {};\n }\n\n // ============ 积分查询 ============\n\n /**\n * 获取积分余额\n * @param {string} pointsType - 积分类型(可选,默认使用默认类型)\n * @returns {Promise<{code: number, data: {points_type: string, balance: number, frozen: number, available: number, total_earned: number, total_used: number}}>}\n */\n async getBalance(pointsType = null) {\n const params = {\n ...this._getUserIdentifier(),\n points_type: pointsType || this._defaultPointsType,\n };\n return this.get('/points/balance', params);\n }\n\n /**\n * 获取所有积分类型的余额\n * @returns {Promise<Array<{points_type: string, balance: number}>>}\n */\n async getAllBalances() {\n const types = ['general', 'vip', 'activity'];\n const results = await Promise.all(\n types.map(type => this.getBalance(type))\n );\n return results.map((result, index) => ({\n points_type: types[index],\n ...result.data,\n }));\n }\n\n /**\n * 获取积分统计\n * @returns {Promise<{code: number, data: Object}>}\n */\n async getStats() {\n return this.getBalance();\n }\n\n // ============ 积分变动记录 ============\n\n /**\n * 获取积分变动日志\n * @param {Object} params - 查询参数\n * @param {string} params.points_type - 积分类型\n * @param {string} params.change_type - 变动类型(earn/use/expire/adjust)\n * @param {string} params.start_date - 开始日期\n * @param {string} params.end_date - 结束日期\n * @param {number} params.page - 页码\n * @param {number} params.page_size - 每页数量\n * @returns {Promise<{code: number, data: {list: Array, total: number}}>}\n */\n async getTransactions(params = {}) {\n const queryParams = {\n ...this._getUserIdentifier(),\n points_type: params.points_type || this._defaultPointsType,\n ...params,\n };\n return this.get('/points/logs', queryParams);\n }\n\n /**\n * 获取即将过期的积分\n * @param {number} days - 天数\n * @returns {Promise<{code: number, data: {expiring_points: number, expire_date: string}}>}\n */\n async getExpiringPoints(days = 30) {\n const params = {\n ...this._getUserIdentifier(),\n days,\n };\n return this.get('/points/expiring', params);\n }\n\n // ============ 积分获取 ============\n\n /**\n * 增加积分\n * 用于任务完成、活动奖励等场景\n * \n * @param {Object} data - 增加数据\n * @param {number} data.amount - 积分数量(必须大于 0)\n * @param {string} data.points_type - 积分类型\n * @param {string} data.source_platform - 来源平台\n * @param {string} data.source_id - 来源 ID(如任务 ID)\n * @param {string} data.description - 描述\n * @returns {Promise<{code: number, data: {balance: number}}>}\n */\n async addPoints(data) {\n const payload = {\n ...this._getUserIdentifier(),\n amount: data.amount,\n points_type: data.points_type || this._defaultPointsType,\n source_platform: data.source_platform || 'qbit-did',\n source_id: data.source_id,\n description: data.description || '积分奖励',\n };\n return this.post('/points/add', payload);\n }\n\n /**\n * 完成积分任务并获得奖励\n * @param {string} taskId - 任务 ID\n * @param {Object} data - 任务数据\n */\n async completeEarnTask(taskId, data = {}) {\n return this.addPoints({\n source_id: taskId,\n source_platform: data.source_platform,\n amount: data.points || data.amount,\n description: data.description || `完成任务 ${taskId}`,\n });\n }\n\n // ============ 积分使用 ============\n\n /**\n * 扣减积分\n * 用于订单抵扣、商品兑换等场景\n * \n * @param {Object} data - 扣减数据\n * @param {number} data.amount - 积分数量(必须大于 0)\n * @param {string} data.points_type - 积分类型\n * @param {string} data.source_platform - 来源平台\n * @param {string} data.source_id - 来源 ID(如订单 ID)\n * @param {string} data.description - 描述\n * @returns {Promise<{code: number, data: {deducted: number, balance: number}} | {code: number, msg: string, data: {available: number, required: number}}>}\n */\n async deductPoints(data) {\n const payload = {\n ...this._getUserIdentifier(),\n amount: data.amount,\n points_type: data.points_type || this._defaultPointsType,\n source_platform: data.source_platform || 'qbit-did',\n source_id: data.source_id,\n description: data.description || '积分抵扣',\n };\n return this.post('/points/deduct', payload);\n }\n\n /**\n * 积分抵扣(别名方法)\n * @param {number} points - 积分数量\n * @param {Object} orderInfo - 订单信息\n */\n async deduct(points, orderInfo) {\n return this.deductPoints({\n amount: points,\n source_id: orderInfo.order_id,\n source_platform: orderInfo.source_platform,\n description: orderInfo.description,\n });\n }\n\n // ============ 积分兑换 ============\n\n /**\n * 获取可兑换商品\n * @param {Object} params - 查询参数\n */\n async getRedeemItems(params = {}) {\n return this.get('/points/redeem/items', params);\n }\n\n /**\n * 兑换商品\n * @param {string} itemId - 商品 ID\n * @param {Object} data - 兑换数据\n */\n async redeemItem(itemId, data = {}) {\n const payload = {\n ...this._getUserIdentifier(),\n item_id: itemId,\n ...data,\n };\n return this.post('/points/redeem', payload);\n }\n\n /**\n * 获取兑换记录\n * @param {Object} params - 查询参数\n */\n async getRedeemHistory(params = {}) {\n const queryParams = {\n ...this._getUserIdentifier(),\n ...params,\n };\n return this.get('/points/redeem/history', queryParams);\n }\n\n // ============ 链上证明 ============\n\n /**\n * 提交积分变动链上交易哈希\n * @param {string} pointsId - 积分来源/流水 ID\n * @param {string} txHash - QBit 主网交易哈希\n * @param {Object} data - 附加提交数据\n */\n async submitChainTx(pointsId, txHash, data = {}) {\n return this.post(`/points/${pointsId}/chain/submit`, {\n tx_hash: txHash,\n chain: 'qbit',\n network: 'mainnet',\n ...data,\n });\n }\n\n /**\n * 查询积分变动链上确认状态\n * @param {string} pointsId - 积分来源/流水 ID\n */\n async getChainStatus(pointsId) {\n return this.get(`/points/${pointsId}/chain/status`);\n }\n\n // ============ 积分等级 ============\n\n /**\n * 获取用户积分等级信息\n */\n async getLevelInfo() {\n const params = this._getUserIdentifier();\n return this.get('/points/level', params);\n }\n\n /**\n * 获取等级规则\n */\n async getLevelRules() {\n return this.get('/points/level/rules');\n }\n\n /**\n * 获取等级权益\n */\n async getLevelBenefits() {\n const params = this._getUserIdentifier();\n return this.get('/points/level/benefits', params);\n }\n\n // ============ 排行榜 ============\n\n /**\n * 获取积分排行榜\n * @param {Object} params - 查询参数\n * @param {string} params.period - 周期(daily/weekly/monthly/all)\n * @param {number} params.limit - 数量限制\n */\n async getLeaderboard(params = {}) {\n return this.get('/points/leaderboard', params);\n }\n\n /**\n * 获取我的排名\n */\n async getMyRank() {\n const params = this._getUserIdentifier();\n return this.get('/points/my/rank', params);\n }\n\n // ============ 便捷方法 ============\n\n /**\n * 获取可用积分数量\n * @param {string} pointsType - 积分类型\n * @returns {Promise<number>} 可用积分\n */\n async getAvailablePoints(pointsType = null) {\n const result = await this.getBalance(pointsType);\n if (result.code === 0 && result.data) {\n return result.data.available || (result.data.balance - (result.data.frozen || 0));\n }\n return 0;\n }\n\n /**\n * 检查积分是否充足\n * @param {number} amount - 需要的积分\n * @param {string} pointsType - 积分类型\n * @returns {Promise<{sufficient: boolean, available: number, required: number}>}\n */\n async checkPoints(amount, pointsType = null) {\n const available = await this.getAvailablePoints(pointsType);\n return {\n sufficient: available >= amount,\n available,\n required: amount,\n shortfall: Math.max(0, amount - available),\n };\n }\n\n /**\n * 计算积分可抵扣金额\n * @param {number} points - 积分数量\n * @param {number} ratio - 抵扣比例(默认 100 积分 = 1 元)\n * @returns {number} 可抵扣金额\n */\n calculateDeductionAmount(points, ratio = 100) {\n return points / ratio;\n }\n}\n\n// 创建默认实例\nexport const pointsApi = new PointsApiClient();\n\n\n\nexport default pointsApi;\n","/**\n * Points SDK - 国际化 i18n\n * 积分体系多语言支持\n */\n\nexport const SUPPORTED_LANGUAGES = ['en', 'zh', 'ja', 'ko'];\n\nexport const messages = {\n zh: {\n // 通用\n loading: '加载中...',\n points: '积分',\n credits: '点数',\n balance: '余额',\n available: '可用',\n frozen: '冻结',\n \n // 积分操作\n earn: '获得',\n spend: '消费',\n transfer: '转赠',\n exchange: '兑换',\n refund: '退款',\n expire: '过期',\n \n // 积分来源\n sourceTask: '任务奖励',\n sourceLogin: '登录奖励',\n sourceSignIn: '签到奖励',\n sourceInvite: '邀请奖励',\n sourcePurchase: '消费返积分',\n sourceEvent: '活动奖励',\n sourceAdmin: '系统发放',\n sourceTransfer: '好友赠送',\n \n // 积分消费\n consumeGoods: '兑换商品',\n consumeService: '购买服务',\n consumePrivilege: '解锁权益',\n consumeTransfer: '转赠好友',\n consumeLottery: '抽奖消费',\n \n // 签到\n checkIn: '签到',\n checkInSuccess: '签到成功',\n checkInReward: '获得 {points} 积分',\n consecutiveDays: '连续签到 {days} 天',\n todayCheckedIn: '今日已签到',\n missedCheckIn: '漏签',\n \n // 兑换\n exchangePoints: '积分兑换',\n exchangeRate: '兑换比例',\n exchangeHistory: '兑换记录',\n confirmExchange: '确认兑换',\n insufficientPoints: '积分不足',\n \n // 转赠\n transferPoints: '转赠积分',\n transferTo: '转赠给',\n transferAmount: '转赠数量',\n transferSuccess: '转赠成功',\n transferFailed: '转赠失败',\n \n // 历史记录\n history: '积分明细',\n income: '收入',\n expense: '支出',\n all: '全部',\n noRecords: '暂无记录',\n \n // 额外文本\n transferToPlaceholder: '请输入对方 DID',\n transferMinError: '最少转赠 {min} 积分',\n transferSuccessMsg: '已成功转赠 {amount} 积分',\n continueTransfer: '继续转赠',\n minAmountMsg: '最少 {min}',\n allAmount: '全部',\n messageOptional: '留言(可选)',\n messagePlaceholder: '给对方留言...',\n expireWarning: '将于 {date} 过期',\n \n // 统计\n totalEarned: '累计获得',\n totalSpent: '累计消费',\n thisMonth: '本月获得',\n \n // 规则\n rules: '积分规则',\n howToEarn: '如何获取积分',\n howToSpend: '如何使用积分',\n expireRule: '积分有效期',\n \n // 错误\n errorLoad: '加载失败',\n errorTransfer: '转赠失败',\n errorExchange: '兑换失败',\n },\n \n en: {\n // General\n loading: 'Loading...',\n points: 'Points',\n credits: 'Credits',\n balance: 'Balance',\n available: 'Available',\n frozen: 'Frozen',\n \n // Point Operations\n earn: 'Earn',\n spend: 'Spend',\n transfer: 'Transfer',\n exchange: 'Exchange',\n refund: 'Refund',\n expire: 'Expire',\n \n // Point Sources\n sourceTask: 'Task Reward',\n sourceLogin: 'Login Bonus',\n sourceSignIn: 'Check-in Bonus',\n sourceInvite: 'Referral Bonus',\n sourcePurchase: 'Purchase Reward',\n sourceEvent: 'Event Reward',\n sourceAdmin: 'System Grant',\n sourceTransfer: 'Gift Received',\n \n // Point Consumption\n consumeGoods: 'Redeem Items',\n consumeService: 'Purchase Service',\n consumePrivilege: 'Unlock Privilege',\n consumeTransfer: 'Gift to Friend',\n consumeLottery: 'Lottery Entry',\n \n // Check-in\n checkIn: 'Check In',\n checkInSuccess: 'Check-in Successful',\n checkInReward: 'Earned {points} points',\n consecutiveDays: '{days} consecutive days',\n todayCheckedIn: 'Already checked in today',\n missedCheckIn: 'Missed',\n \n // Exchange\n exchangePoints: 'Exchange Points',\n exchangeRate: 'Exchange Rate',\n exchangeHistory: 'Exchange History',\n confirmExchange: 'Confirm Exchange',\n insufficientPoints: 'Insufficient points',\n \n // Transfer\n transferPoints: 'Transfer Points',\n transferTo: 'Transfer to',\n transferAmount: 'Amount',\n transferSuccess: 'Transfer Successful',\n transferFailed: 'Transfer Failed',\n \n // History\n history: 'Points History',\n income: 'Income',\n expense: 'Expense',\n all: 'All',\n noRecords: 'No records yet',\n \n // 额外文本\n transferToPlaceholder: 'Enter recipient DID',\n transferMinError: 'Minimum transfer is {min} points',\n transferSuccessMsg: 'Successfully transferred {amount} points',\n continueTransfer: 'Continue Transfer',\n minAmountMsg: 'Min {min}',\n allAmount: 'All',\n messageOptional: 'Message (Optional)',\n messagePlaceholder: 'Leave a message...',\n expireWarning: 'will expire on {date}',\n \n // Statistics\n totalEarned: 'Total Earned',\n totalSpent: 'Total Spent',\n thisMonth: 'This Month',\n \n // Rules\n rules: 'Points Rules',\n howToEarn: 'How to Earn',\n howToSpend: 'How to Spend',\n expireRule: 'Expiration Policy',\n \n // Errors\n errorLoad: 'Failed to load',\n errorTransfer: 'Transfer failed',\n errorExchange: 'Exchange failed',\n },\n \n ja: {\n // General\n loading: '読み込み中...',\n points: 'ポイント',\n credits: 'クレジット',\n balance: '残高',\n available: '利用可能',\n frozen: '凍結中',\n \n // Point Operations\n earn: '獲得',\n spend: '消費',\n transfer: '譲渡',\n exchange: '交換',\n refund: '返金',\n expire: '失効',\n \n // Point Sources\n sourceTask: 'タスク報酬',\n sourceLogin: 'ログインボーナス',\n sourceSignIn: 'チェックイン報酬',\n sourceInvite: '紹介ボーナス',\n sourcePurchase: '購入還元',\n sourceEvent: 'イベント報酬',\n sourceAdmin: 'システム付与',\n sourceTransfer: 'ギフト受け取り',\n \n // Point Consumption\n consumeGoods: 'アイテム交換',\n consumeService: 'サービス購入',\n consumePrivilege: '特典ロック解除',\n consumeTransfer: '友達にギフト',\n consumeLottery: '抽選参加',\n \n // Check-in\n checkIn: 'チェックイン',\n checkInSuccess: 'チェックイン成功',\n checkInReward: '{points} ポイント獲得',\n consecutiveDays: '{days} 日連続',\n todayCheckedIn: '本日はチェックイン済みです',\n missedCheckIn: 'チェックイン忘れ',\n \n // Exchange\n exchangePoints: 'ポイント交換',\n exchangeRate: '交換レート',\n exchangeHistory: '交換履歴',\n confirmExchange: '交換を確認',\n insufficientPoints: 'ポイントが不足しています',\n \n // Transfer\n transferPoints: 'ポイントを譲渡',\n transferTo: '譲渡先',\n transferAmount: '数量',\n transferSuccess: '譲渡成功',\n transferFailed: '譲渡失敗',\n \n // History\n history: 'ポイント履歴',\n income: '収入',\n expense: '支出',\n all: 'すべて',\n noRecords: '記録がありません',\n \n // 额外文本\n transferToPlaceholder: '相手のDIDを入力',\n transferMinError: '最小 {min} ポイントから譲渡可能',\n transferSuccessMsg: '{amount} ポイントを譲渡しました',\n continueTransfer: '続けて譲渡',\n minAmountMsg: '最小 {min}',\n allAmount: 'すべて',\n messageOptional: 'メッセージ(任意)',\n messagePlaceholder: 'メッセージを残す...',\n expireWarning: '{date} に失効します',\n \n // Statistics\n totalEarned: '累計獲得',\n totalSpent: '累計消費',\n thisMonth: '今月',\n \n // Rules\n rules: 'ポイントルール',\n howToEarn: '獲得方法',\n howToSpend: '利用方法',\n expireRule: '有効期限について',\n \n // Errors\n errorLoad: '読み込み失敗',\n errorTransfer: '譲渡失敗',\n errorExchange: '交換失敗',\n },\n \n ko: {\n // General\n loading: '로딩 중...',\n points: '포인트',\n credits: '크레딧',\n balance: '잔액',\n available: '사용 가능',\n frozen: '동결됨',\n \n // Point Operations\n earn: '획득',\n spend: '사용',\n transfer: '양도',\n exchange: '교환',\n refund: '환불',\n expire: '만료',\n \n // Point Sources\n sourceTask: '미션 보상',\n sourceLogin: '로그인 보너스',\n sourceSignIn: '출석 체크 보상',\n sourceInvite: '초대 보너스',\n sourcePurchase: '구매 리워드',\n sourceEvent: '이벤트 보상',\n sourceAdmin: '시스템 지급',\n sourceTransfer: '선물 받음',\n \n // Point Consumption\n consumeGoods: '아이템 교환',\n consumeService: '서비스 구매',\n consumePrivilege: '혜택 잠금 해제',\n consumeTransfer: '친구에게 선물',\n consumeLottery: '추첨 참여',\n \n // Check-in\n checkIn: '출석 체크',\n checkInSuccess: '출석 체크 완료',\n checkInReward: '{points} 포인트 획득',\n consecutiveDays: '{days}일 연속',\n todayCheckedIn: '오늘 이미 출석했습니다',\n missedCheckIn: '출석 누락',\n \n // Exchange\n exchangePoints: '포인트 교환',\n exchangeRate: '교환 비율',\n exchangeHistory: '교환 내역',\n confirmExchange: '교환 확인',\n insufficientPoints: '포인트 부족',\n \n // Transfer\n transferPoints: '포인트 양도',\n transferTo: '양도 대상',\n transferAmount: '수량',\n transferSuccess: '양도 성공',\n transferFailed: '양도 실패',\n \n // History\n history: '포인트 내역',\n income: '수입',\n expense: '지출',\n all: '전체',\n noRecords: '기록이 없습니다',\n \n // 额外文本\n transferToPlaceholder: '상대방의 DID 입력',\n transferMinError: '최소 {min} 포인트부터 양도 가능',\n transferSuccessMsg: '{amount} 포인트를 양도했습니다',\n continueTransfer: '계속 양도하기',\n minAmountMsg: '최소 {min}',\n allAmount: '전체',\n messageOptional: '메시지 (선택)',\n messagePlaceholder: '메시지 남기기...',\n expireWarning: '{date} 에 만료됩니다',\n \n // Statistics\n totalEarned: '누적 획득',\n totalSpent: '누적 사용',\n thisMonth: '이번 달',\n \n // Rules\n rules: '포인트 규칙',\n howToEarn: '획득 방법',\n howToSpend: '사용 방법',\n expireRule: '만료 정책',\n \n // Errors\n errorLoad: '로딩 실패',\n errorTransfer: '양도 실패',\n errorExchange: '교환 실패',\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_points_language', lang);\n }\n }\n}\n\nexport function getLanguage() {\n if (typeof window !== 'undefined') {\n const saved = localStorage.getItem('qbit_did_points_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 * Points SDK - Context Provider\n * 积分体系状态管理\n */\n\nimport React, { createContext, useContext, useState, useCallback, useEffect } from 'react';\nimport { pointsApi } from '../services/pointsApi';\nimport { setLanguage } from '../i18n';\n\nconst PointsContext = createContext(null);\n\n/**\n * Points Provider 组件\n */\nexport function PointsProvider({ \n children, \n apiUrl, \n token, \n language = 'zh',\n onPointsChange,\n onError,\n}) {\n const [account, setAccount] = useState(null);\n const [checkInStatus, setCheckInStatus] = useState(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(null);\n\n // 初始化配置\n useEffect(() => {\n if (apiUrl) pointsApi.setBaseUrl(apiUrl);\n if (token) pointsApi.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 /** 加载积分账户 */\n const loadAccount = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const result = await pointsApi.getMyAccount();\n const prevBalance = account?.balance;\n setAccount(result);\n // 检测积分变化\n if (prevBalance !== undefined && result.balance !== prevBalance) {\n onPointsChange?.(result.balance - prevBalance, result);\n }\n return result;\n } catch (err) {\n handleError(err);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [account, onPointsChange, handleError]);\n\n /** 刷新账户 */\n const refreshAccount = useCallback(() => loadAccount(), [loadAccount]);\n\n // ============ 签到操作 ============\n\n /** 加载签到状态 */\n const loadCheckInStatus = useCallback(async () => {\n try {\n const result = await pointsApi.getCheckInStatus();\n setCheckInStatus(result);\n return result;\n } catch (err) {\n handleError(err);\n throw err;\n }\n }, [handleError]);\n\n /** 执行签到 */\n const checkIn = useCallback(async () => {\n setLoading(true);\n try {\n const result = await pointsApi.checkIn();\n setCheckInStatus(prev => ({ ...prev, checked_in_today: true }));\n // 刷新账户余额\n await loadAccount();\n return result;\n } catch (err) {\n handleError(err);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [loadAccount, handleError]);\n\n // ============ 消费操作 ============\n\n /** 消费积分 */\n const spendPoints = useCallback(async (amount, reason, options = {}) => {\n setLoading(true);\n try {\n const result = await pointsApi.spendPoints({\n amount,\n reason,\n ...options,\n });\n await loadAccount();\n return result;\n } catch (err) {\n handleError(err);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [loadAccount, handleError]);\n\n // ============ 转赠操作 ============\n\n /** 转赠积分 */\n const transferPoints = useCallback(async (toDid, amount, message = '') => {\n setLoading(true);\n try {\n const result = await pointsApi.transferPoints({\n to_did: toDid,\n amount,\n message,\n });\n await loadAccount();\n return result;\n } catch (err) {\n handleError(err);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [loadAccount, handleError]);\n\n // ============ 兑换操作 ============\n\n /** 兑换积分 */\n const exchangePoints = useCallback(async (ruleId, amount) => {\n setLoading(true);\n try {\n const result = await pointsApi.exchangePoints({\n rule_id: ruleId,\n amount,\n });\n await loadAccount();\n return result;\n } catch (err) {\n handleError(err);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [loadAccount, handleError]);\n\n // ============ 初始化 ============\n\n const initialize = useCallback(async () => {\n setLoading(true);\n try {\n await Promise.all([\n loadAccount(),\n loadCheckInStatus(),\n ]);\n } catch (err) {\n // 错误已在各自 load 函数中处理\n } finally {\n setLoading(false);\n }\n }, [loadAccount, loadCheckInStatus]);\n\n const value = {\n // 状态\n account,\n checkInStatus,\n loading,\n error,\n \n // 账户操作\n loadAccount,\n refreshAccount,\n \n // 签到操作\n loadCheckInStatus,\n checkIn,\n \n // 积分操作\n spendPoints,\n transferPoints,\n exchangePoints,\n \n // 初始化\n initialize,\n \n // API 实例\n api: pointsApi,\n };\n\n return (\n <PointsContext.Provider value={value}>\n {children}\n </PointsContext.Provider>\n );\n}\n\n/**\n * 使用 Points Context\n */\nexport function usePoints() {\n const context = useContext(PointsContext);\n if (!context) {\n throw new Error('usePoints must be used within a PointsProvider');\n }\n return context;\n}\n\nexport default PointsContext;\n","/**\n * Points SDK - 类型定义\n * 积分体系的核心类型\n */\n\n// 积分交易类型\nexport const TransactionType = {\n EARN: 'earn', // 获得\n SPEND: 'spend', // 消费\n TRANSFER_IN: 'transfer_in', // 转入\n TRANSFER_OUT: 'transfer_out', // 转出\n REFUND: 'refund', // 退款\n EXPIRE: 'expire', // 过期\n FREEZE: 'freeze', // 冻结\n UNFREEZE: 'unfreeze', // 解冻\n};\n\n// 积分来源类型\nexport const PointSource = {\n TASK: 'task', // 任务奖励\n LOGIN: 'login', // 登录奖励\n SIGN_IN: 'sign_in', // 签到奖励\n INVITE: 'invite', // 邀请奖励\n PURCHASE: 'purchase', // 消费返积分\n EVENT: 'event', // 活动奖励\n ADMIN: 'admin', // 系统发放\n TRANSFER: 'transfer', // 好友赠送\n LOTTERY: 'lottery', // 抽奖获得\n};\n\n// 积分消费类型\nexport const PointConsume = {\n GOODS: 'goods', // 兑换商品\n SERVICE: 'service', // 购买服务\n PRIVILEGE: 'privilege', // 解锁权益\n TRANSFER: 'transfer', // 转赠好友\n LOTTERY: 'lottery', // 抽奖消费\n ORDER: 'order', // 订单抵扣\n};\n\n// 积分状态\nexport const PointStatus = {\n AVAILABLE: 'available', // 可用\n FROZEN: 'frozen', // 冻结\n EXPIRED: 'expired', // 已过期\n USED: 'used', // 已使用\n};\n\n/**\n * 创建默认积分账户\n */\nexport function createDefaultPointsAccount(overrides = {}) {\n return {\n user_did: null,\n balance: 0,\n available: 0,\n frozen: 0,\n total_earned: 0,\n total_spent: 0,\n this_month_earned: 0,\n will_expire: 0,\n expire_date: null,\n created_at: null,\n updated_at: null,\n ...overrides,\n };\n}\n\n/**\n * 创建默认积分交易记录\n */\nexport function createDefaultPointsTransaction(overrides = {}) {\n return {\n id: null,\n user_did: null,\n type: TransactionType.EARN,\n amount: 0,\n balance_after: 0,\n source: null,\n source_id: null,\n description: '',\n expire_at: null,\n created_at: null,\n ...overrides,\n };\n}\n\n/**\n * 创建默认签到配置\n */\nexport function createDefaultCheckInConfig(overrides = {}) {\n return {\n base_points: 10,\n max_consecutive_bonus: 7,\n consecutive_bonus: [10, 10, 15, 15, 20, 20, 30], // 7天连续签到奖励\n monthly_special_days: [], // 特殊日期额外奖励\n special_day_bonus: 50,\n ...overrides,\n };\n}\n\n/**\n * 创建默认兑换规则\n */\nexport function createDefaultExchangeRule(overrides = {}) {\n return {\n id: null,\n name: '',\n from_type: 'points',\n to_type: 'credits',\n rate: 100, // 100 积分 = 1 点数\n min_amount: 100,\n max_amount: 10000,\n daily_limit: 1,\n is_active: true,\n ...overrides,\n };\n}\n\n/**\n * 格式化积分数值\n */\nexport function formatPoints(value, options = {}) {\n const { compact = false, prefix = '', suffix = '' } = options;\n \n if (compact) {\n if (value >= 10000) {\n return `${prefix}${(value / 10000).toFixed(1)}w${suffix}`;\n }\n if (value >= 1000) {\n return `${prefix}${(value / 1000).toFixed(1)}k${suffix}`;\n }\n }\n \n return `${prefix}${value.toLocaleString()}${suffix}`;\n}\n","/**\n * Points SDK - PointsBalance 组件\n * 积分余额展示\n */\n\nimport React from 'react';\nimport { t } from '../i18n';\nimport { formatPoints } from '../types';\n\n/**\n * 积分余额组件\n */\nexport function PointsBalance({\n balance = 0,\n available = 0,\n frozen = 0,\n willExpire = 0,\n expireDate = null,\n size = 'medium', // small, medium, large\n showDetails = true,\n showExpire = true,\n onRefresh,\n className = '',\n}) {\n const sizeClasses = {\n small: 'points-balance-sm',\n medium: 'points-balance-md',\n large: 'points-balance-lg',\n };\n\n const formatDate = (dateStr) => {\n if (!dateStr) return '';\n return new Date(dateStr).toLocaleDateString();\n };\n\n return (\n <div className={`points-balance ${sizeClasses[size]} ${className}`}>\n {/* 主余额 */}\n <div className=\"points-balance-main\">\n <div className=\"points-balance-icon\">💰</div>\n <div className=\"points-balance-info\">\n <span className=\"points-balance-label\">{t('balance')}</span>\n <span className=\"points-balance-value\">{formatPoints(balance)}</span>\n </div>\n {onRefresh && (\n <button className=\"points-refresh-btn\" onClick={onRefresh}>\n 🔄\n </button>\n )}\n </div>\n\n {/* 详细信息 */}\n {showDetails && (\n <div className=\"points-balance-details\">\n <div className=\"points-detail-item\">\n <span className=\"points-detail-label\">{t('available')}</span>\n <span className=\"points-detail-value available\">{formatPoints(available)}</span>\n </div>\n {frozen > 0 && (\n <div className=\"points-detail-item\">\n <span className=\"points-detail-label\">{t('frozen')}</span>\n <span className=\"points-detail-value frozen\">{formatPoints(frozen)}</span>\n </div>\n )}\n </div>\n )}\n\n {/* 即将过期提示 */}\n {showExpire && willExpire > 0 && (\n <div className=\"points-expire-warning\">\n <span className=\"points-expire-icon\">⚠️</span>\n <span>\n {formatPoints(willExpire)} {t('points')} \n {expireDate && ` ${t('expireWarning', { date: formatDate(expireDate) })}`}\n </span>\n </div>\n )}\n </div>\n );\n}\n\nexport default PointsBalance;\n","/**\n * Points SDK - CheckInCalendar 组件\n * 签到日历\n */\n\nimport React, { useState, useCallback, useEffect } from 'react';\nimport { t } from '../i18n';\nimport { usePoints } from '../context/PointsContext';\n\n/**\n * 签到日历组件\n */\nexport function CheckInCalendar({\n onCheckIn,\n className = '',\n}) {\n const { api, checkInStatus, checkIn: doCheckIn, loading } = usePoints();\n const [calendar, setCalendar] = useState([]);\n const [currentMonth, setCurrentMonth] = useState(() => {\n const now = new Date();\n return { year: now.getFullYear(), month: now.getMonth() + 1 };\n });\n\n // 加载签到日历\n const loadCalendar = useCallback(async () => {\n try {\n const result = await api.getCheckInCalendar(currentMonth.year, currentMonth.month);\n setCalendar(result.days || []);\n } catch (err) {\n console.error('Load calendar error:', err);\n }\n }, [api, currentMonth]);\n\n useEffect(() => {\n loadCalendar();\n }, [loadCalendar]);\n\n // 生成日历网格\n const generateCalendarGrid = useCallback(() => {\n const { year, month } = currentMonth;\n const firstDay = new Date(year, month - 1, 1).getDay();\n const daysInMonth = new Date(year, month, 0).getDate();\n const today = new Date();\n const isCurrentMonth = today.getFullYear() === year && today.getMonth() + 1 === month;\n \n const grid = [];\n \n // 空白格子\n for (let i = 0; i < firstDay; i++) {\n grid.push({ day: null, status: 'empty' });\n }\n \n // 日期格子\n for (let day = 1; day <= daysInMonth; day++) {\n const checkedIn = calendar.includes(day);\n const isFuture = isCurrentMonth && day > today.getDate();\n const isToday = isCurrentMonth && day === today.getDate();\n \n grid.push({\n day,\n status: isFuture ? 'future' : checkedIn ? 'checked' : 'missed',\n isToday,\n });\n }\n \n return grid;\n }, [currentMonth, calendar]);\n\n // 切换月份\n const changeMonth = (delta) => {\n setCurrentMonth(prev => {\n let newMonth = prev.month + delta;\n let newYear = prev.year;\n if (newMonth < 1) {\n newMonth = 12;\n newYear--;\n } else if (newMonth > 12) {\n newMonth = 1;\n newYear++;\n }\n return { year: newYear, month: newMonth };\n });\n };\n\n // 执行签到\n const handleCheckIn = async () => {\n try {\n const result = await doCheckIn();\n await loadCalendar();\n onCheckIn?.(result);\n } catch (err) {\n console.error('Check-in error:', err);\n }\n };\n\n const grid = generateCalendarGrid();\n const weekDays = ['日', '一', '二', '三', '四', '五', '六'];\n const canCheckIn = !checkInStatus?.checked_in_today;\n\n return (\n <div className={`points-check-in ${className}`}>\n {/* 头部 */}\n <div className=\"points-check-in-header\">\n <button className=\"points-month-btn\" onClick={() => changeMonth(-1)}>\n ‹\n </button>\n <span className=\"points-month-text\">\n {currentMonth.year} 年 {currentMonth.month} 月\n </span>\n <button className=\"points-month-btn\" onClick={() => changeMonth(1)}>\n ›\n </button>\n </div>\n\n {/* 连续签到信息 */}\n {checkInStatus && (\n <div className=\"points-streak-info\">\n <span className=\"points-streak-badge\">\n 🔥 {t('consecutiveDays', { days: checkInStatus.consecutive_days || 0 })}\n </span>\n {checkInStatus.next_reward && (\n <span className=\"points-next-reward\">\n 明日奖励: +{checkInStatus.next_reward}\n </span>\n )}\n </div>\n )}\n\n {/* 日历网格 */}\n <div className=\"points-calendar\">\n {/* 星期标题 */}\n <div className=\"points-calendar-header\">\n {weekDays.map(day => (\n <span key={day} className=\"points-week-day\">{day}</span>\n ))}\n </div>\n \n {/* 日期格子 */}\n <div className=\"points-calendar-grid\">\n {grid.map((cell, index) => (\n <div \n key={index}\n className={`points-calendar-day ${cell.status} ${cell.isToday ? 'today' : ''}`}\n >\n {cell.day && (\n <>\n <span className=\"points-day-number\">{cell.day}</span>\n {cell.status === 'checked' && (\n <span className=\"points-check-mark\">✓</span>\n )}\n </>\n )}\n </div>\n ))}\n </div>\n </div>\n\n {/* 签到按钮 */}\n <button\n className={`points-check-in-btn ${canCheckIn ? '' : 'checked'}`}\n onClick={handleCheckIn}\n disabled={!canCheckIn || loading}\n >\n {loading ? t('loading') : canCheckIn ? t('checkIn') : t('todayCheckedIn')}\n </button>\n </div>\n );\n}\n\nexport default CheckInCalendar;\n","/**\n * Points SDK - PointsHistory 组件\n * 积分历史记录\n */\n\nimport React, { useState, useCallback, useEffect } from 'react';\nimport { t } from '../i18n';\nimport { usePoints } from '../context/PointsContext';\nimport { TransactionType, formatPoints } from '../types';\n\n/**\n * 积分历史组件\n */\nexport function PointsHistory({\n pageSize = 20,\n showFilter = true,\n className = '',\n}) {\n const { api } = usePoints();\n const [history, setHistory] = useState([]);\n const [loading, setLoading] = useState(false);\n const [filter, setFilter] = useState('all'); // all, income, expense\n const [pagination, setPagination] = useState({\n page: 1,\n total: 0,\n totalPages: 0,\n });\n\n // 加载历史记录\n const loadHistory = useCallback(async (page = 1) => {\n setLoading(true);\n try {\n const params = { page, page_size: pageSize };\n if (filter === 'income') {\n params.type = [TransactionType.EARN, TransactionType.TRANSFER_IN, TransactionType.REFUND].join(',');\n } else if (filter === 'expense') {\n params.type = [TransactionType.SPEND, TransactionType.TRANSFER_OUT, TransactionType.EXPIRE].join(',');\n }\n \n const result = await api.getHistory(params);\n const items = result.items || result.data || [];\n setHistory(items);\n setPagination({\n page,\n total: result.total || items.length,\n totalPages: result.total_pages || Math.ceil((result.total || items.length) / pageSize),\n });\n } catch (err) {\n console.error('Load history error:', err);\n } finally {\n setLoading(false);\n }\n }, [api, filter, pageSize]);\n\n useEffect(() => {\n loadHistory(1);\n }, [filter]);\n\n // 获取交易类型样式\n const getTypeStyle = (type) => {\n const incomeTypes = [TransactionType.EARN, TransactionType.TRANSFER_IN, TransactionType.REFUND];\n return incomeTypes.includes(type) ? 'income' : 'expense';\n };\n\n // 格式化日期\n const formatDate = (dateStr) => {\n if (!dateStr) return '';\n const date = new Date(dateStr);\n return date.toLocaleDateString() + ' ' + date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });\n };\n\n return (\n <div className={`points-history ${className}`}>\n {/* 筛选器 */}\n {showFilter && (\n <div className=\"points-history-filter\">\n <button \n className={filter === 'all' ? 'active' : ''}\n onClick={() => setFilter('all')}\n >\n {t('all')}\n </button>\n <button \n className={filter === 'income' ? 'active' : ''}\n onClick={() => setFilter('income')}\n >\n {t('income')}\n </button>\n <button \n className={filter === 'expense' ? 'active' : ''}\n onClick={() => setFilter('expense')}\n >\n {t('expense')}\n </button>\n </div>\n )}\n\n {/* 列表 */}\n {loading ? (\n <div className=\"points-history-loading\">\n <div className=\"points-loading-spinner\" />\n <span>{t('loading')}</span>\n </div>\n ) : history.length === 0 ? (\n <div className=\"points-history-empty\">\n <span className=\"points-empty-icon\">📋</span>\n <span>{t('noRecords')}</span>\n </div>\n ) : (\n <div className=\"points-history-list\">\n {history.map((item, index) => (\n <div key={item.id || index} className=\"points-history-item\">\n <div className=\"points-history-icon\">\n {getTypeStyle(item.type) === 'income' ? '📈' : '📉'}\n </div>\n <div className=\"points-history-info\">\n <span className=\"points-history-desc\">{item.description}</span>\n <span className=\"points-history-time\">{formatDate(item.created_at)}</span>\n </div>\n <div className={`points-history-amount ${getTypeStyle(item.type)}`}>\n {getTypeStyle(item.type) === 'income' ? '+' : '-'}\n {formatPoints(Math.abs(item.amount))}\n </div>\n </div>\n ))}\n </div>\n )}\n\n {/* 分页 */}\n {pagination.totalPages > 1 && (\n <div className=\"points-history-pagination\">\n <button \n disabled={pagination.page <= 1}\n onClick={() => loadHistory(pagination.page - 1)}\n >\n 上一页\n </button>\n <span>{pagination.page} / {pagination.totalPages}</span>\n <button \n disabled={pagination.page >= pagination.totalPages}\n onClick={() => loadHistory(pagination.page + 1)}\n >\n 下一页\n </button>\n </div>\n )}\n </div>\n );\n}\n\nexport default PointsHistory;\n","/**\n * Points SDK - TransferPoints 组件\n * 积分转赠\n */\n\nimport React, { useState, useCallback } from 'react';\nimport { t } from '../i18n';\nimport { usePoints } from '../context/PointsContext';\nimport { formatPoints } from '../types';\n\n/**\n * 积分转赠组件\n */\nexport function TransferPoints({\n maxAmount = 0,\n minAmount = 1,\n onSuccess,\n onCancel,\n className = '',\n}) {\n const { account, transferPoints, loading } = usePoints();\n const [toDid, setToDid] = useState('');\n const [amount, setAmount] = useState('');\n const [message, setMessage] = useState('');\n const [error, setError] = useState('');\n const [success, setSuccess] = useState(false);\n\n const available = maxAmount || account?.available || 0;\n\n // 验证\n const validate = () => {\n if (!toDid.trim()) {\n setError(t('transferToPlaceholder'));\n return false;\n }\n const amt = parseInt(amount);\n if (!amt || amt < minAmount) {\n setError(t('transferMinError', { min: minAmount }));\n return false;\n }\n if (amt > available) {\n setError(t('insufficientPoints'));\n return false;\n }\n return true;\n };\n\n // 提交转赠\n const handleSubmit = async () => {\n setError('');\n if (!validate()) return;\n\n try {\n const result = await transferPoints(toDid, parseInt(amount), message);\n setSuccess(true);\n onSuccess?.(result);\n } catch (err) {\n setError(err.message || t('transferFailed'));\n }\n };\n\n // 设置快捷金额\n const setQuickAmount = (percent) => {\n const amt = Math.floor(available * percent / 100);\n setAmount(amt.toString());\n };\n\n if (success) {\n return (\n <div className={`points-transfer points-transfer-success ${className}`}>\n <div className=\"points-success-icon\">✅</div>\n <h3>{t('transferSuccess')}</h3>\n <p>{t('transferSuccessMsg', { amount: formatPoints(parseInt(amount)) })}</p>\n <button \n className=\"points-btn points-btn-primary\"\n onClick={() => {\n setSuccess(false);\n setToDid('');\n setAmount('');\n setMessage('');\n }}\n >\n {t('continueTransfer')}\n </button>\n </div>\n );\n }\n\n return (\n <div className={`points-transfer ${className}`}>\n <h3>{t('transferPoints')}</h3>\n \n {/* 可用余额 */}\n <div className=\"points-transfer-balance\">\n <span>{t('available')}:</span>\n <span className=\"points-balance-value\">{formatPoints(available)}</span>\n </div>\n\n {/* 表单 */}\n <div className=\"points-transfer-form\">\n {/* 对方 DID */}\n <div className=\"points-form-group\">\n <label>{t('transferTo')}</label>\n <input\n type=\"text\"\n className=\"points-input\"\n placeholder={t('transferToPlaceholder')}\n value={toDid}\n onChange={(e) => setToDid(e.target.value)}\n disabled={loading}\n />\n </div>\n\n {/* 转赠数量 */}\n <div className=\"points-form-group\">\n <label>{t('transferAmount')}</label>\n <input\n type=\"number\"\n className=\"points-input\"\n placeholder={t('minAmountMsg', { min: minAmount })}\n value={amount}\n onChange={(e) => setAmount(e.target.value)}\n min={minAmount}\n max={available}\n disabled={loading}\n />\n <div className=\"points-quick-amounts\">\n <button onClick={() => setQuickAmount(25)} disabled={loading}>25%</button>\n <button onClick={() => setQuickAmount(50)} disabled={loading}>50%</button>\n <button onClick={() => setQuickAmount(75)} disabled={loading}>75%</button>\n <button onClick={() => setQuickAmount(100)} disabled={loading}>{t('allAmount')}</button>\n </div>\n </div>\n\n {/* 留言 */}\n <div className=\"points-form-group\">\n <label>{t('messageOptional')}</label>\n <textarea\n className=\"points-input\"\n placeholder={t('messagePlaceholder')}\n value={message}\n onChange={(e) => setMessage(e.target.value)}\n rows={2}\n disabled={loading}\n />\n </div>\n\n {/* 错误提示 */}\n {error && (\n <div className=\"points-error\">{error}</div>\n )}\n\n {/* 按钮 */}\n <div className=\"points-form-actions\">\n {onCancel && (\n <button \n className=\"points-btn points-btn-secondary\"\n onClick={onCancel}\n disabled={loading}\n >\n {t('cancel')}\n </button>\n )}\n <button \n className=\"points-btn points-btn-primary\"\n onClick={handleSubmit}\n disabled={loading}\n >\n {loading ? t('loading') : t('transfer')}\n </button>\n </div>\n </div>\n </div>\n );\n}\n\nexport default TransferPoints;\n","const POINTS_ANCHOR_NAMESPACE = 'qbit_points';\n\nfunction pickPointsId(points) {\n return points?.id || points?.points_id || points?.pointsId || points?.source_id || points?.sourceId || points?.transaction_id || points?.transactionId;\n}\n\nfunction pickContentHash(points, options) {\n return (\n options.contentHash ||\n points?.content_hash ||\n points?.points_hash ||\n points?.transaction_hash ||\n points?.hash ||\n null\n );\n}\n\nexport async function buildPointsAnchorMemo(points, options = {}) {\n const { buildQBitAnchorMemo } = await import('@quantabit/qbit-chain-sdk');\n const pointsId = options.pointsId || pickPointsId(points);\n\n return buildQBitAnchorMemo({\n action: options.action || 'points_anchor',\n subject: pointsId ? `points:${pointsId}` : 'points',\n resource_id: pointsId,\n content_hash: pickContentHash(points, options),\n version: options.version,\n timestamp: options.timestamp,\n extra: {\n amount: points?.amount,\n points_type: points?.points_type || points?.pointsType,\n user_did: points?.user_did || points?.userDid,\n source_platform: points?.source_platform || points?.sourcePlatform,\n change_type: points?.change_type || points?.changeType,\n ...options.extra,\n },\n }, {\n namespace: options.namespace || POINTS_ANCHOR_NAMESPACE,\n maxBytes: options.maxBytes,\n });\n}\n\nexport function buildPointsChainSubmit(pointsId, txHash, options = {}) {\n return {\n points_id: pointsId,\n tx_hash: txHash,\n chain: options.chain || 'qbit',\n network: options.network || 'mainnet',\n action: options.action || 'points_anchor',\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\n * @param {Object} points - 积分记录对象\n * @param {Object} options - 选项(endpoint, network, address, waitForConfirmation...)\n * @returns {Promise<{txHash: string|null, memo: string, confirmed?: boolean, slot?: number|null, submit: Object}>}\n */\nexport async function anchorPoints(provider, points, 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 buildPointsAnchorMemo(points, 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 pointsId = options.pointsId || pickPointsId(points);\n return {\n ...result,\n submit: buildPointsChainSubmit(pointsId, result.txHash, {\n ...options,\n memo: result.memo,\n contentHash: pickContentHash(points, 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 verifyPointsAnchor(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 || POINTS_ANCHOR_NAMESPACE,\n match: options.match,\n commitment: options.commitment,\n });\n}\n\nexport { POINTS_ANCHOR_NAMESPACE };\n","/**\n * Points SDK - 高级组件: 积分概览、任务中心、兑换商城\n */\n\nimport React, { useState, useCallback } from 'react';\nimport { t } from '../i18n';\n\n// 积分概览卡片\nexport function PointsOverview({\n balance = 0,\n todayEarned = 0,\n monthlyEarned = 0,\n rank,\n level,\n nextLevelPoints,\n onHistoryClick,\n className = '',\n}) {\n const progress = nextLevelPoints ? Math.min((balance / nextLevelPoints) * 100, 100) : 0;\n\n return (\n <div className={`points-overview ${className}`}>\n <div className=\"points-balance-section\">\n <div className=\"points-balance-label\">{t('currentPoints')}</div>\n <div className=\"points-balance-value\">\n <span className=\"points-icon\">⭐</span>\n {balance.toLocaleString()}\n </div>\n <div className=\"points-balance-stats\">\n <span>{t('todayEarned')}: +{todayEarned}</span>\n <span>·</span>\n <span>{t('monthlyEarned')}: +{monthlyEarned}</span>\n </div>\n </div>\n\n {level && (\n <div className=\"points-level-section\">\n <div className=\"points-level-header\">\n <span className=\"points-level-badge\">Lv.{level.current}</span>\n <span className=\"points-level-name\">{level.name}</span>\n </div>\n <div className=\"points-level-progress\">\n <div className=\"points-level-bar\" style={{ width: `${progress}%` }} />\n </div>\n <div className=\"points-level-text\">\n 距离 Lv.{level.current + 1} 还需 {(nextLevelPoints - balance).toLocaleString()} 积分\n </div>\n </div>\n )}\n\n {rank && (\n <div className=\"points-rank-section\">\n <span className=\"points-rank-icon\">🏆</span>\n <span>排名 #{rank}</span>\n </div>\n )}\n\n <button className=\"points-btn points-btn-outline\" onClick={onHistoryClick}>\n {t('viewHistory')} →\n </button>\n </div>\n );\n}\n\n// 积分任务列表\nexport function PointsTasks({\n tasks = [],\n loading = false,\n onTaskClick,\n onTaskComplete,\n className = '',\n}) {\n const taskTypeIcons = {\n daily: '📅',\n weekly: '📆',\n onetime: '🎯',\n achievement: '🏆',\n };\n\n if (loading) {\n return <div className={`points-tasks ${className}`}><div className=\"points-loading\"><div className=\"points-spinner\" /></div></div>;\n }\n\n if (tasks.length === 0) {\n return (\n <div className={`points-tasks ${className}`}>\n <div className=\"points-empty\">\n <span style={{ fontSize: '48px' }}>✅</span>\n <span>{t('allTasksCompleted')}</span>\n </div>\n </div>\n );\n }\n\n return (\n <div className={`points-tasks ${className}`}>\n {tasks.map((task) => (\n <div\n key={task.id}\n className={`points-task-item ${task.completed ? 'completed' : ''}`}\n onClick={() => onTaskClick?.(task)}\n >\n <div className=\"points-task-icon\">\n {taskTypeIcons[task.type] || '📋'}\n </div>\n \n <div className=\"points-task-content\">\n <div className=\"points-task-title\">{task.title}</div>\n <div className=\"points-task-desc\">{task.description}</div>\n \n {task.progress !== undefined && !task.completed && (\n <div className=\"points-task-progress\">\n <div className=\"points-task-progress-bar\">\n <div style={{ width: `${(task.progress / task.target) * 100}%` }} />\n </div>\n <span className=\"points-task-progress-text\">\n {task.progress}/{task.target}\n </span>\n </div>\n )}\n </div>\n \n <div className=\"points-task-reward\">\n <span className=\"points-reward-icon\">⭐</span>\n <span className=\"points-reward-value\">+{task.reward}</span>\n </div>\n \n {!task.completed && task.progress >= task.target && (\n <button\n className=\"points-btn points-btn-sm points-btn-primary\"\n onClick={(e) => { e.stopPropagation(); onTaskComplete?.(task.id); }}\n >\n {t('claim')}\n </button>\n )}\n \n {task.completed && (\n <span className=\"points-task-completed-badge\">✓ {t('completed')}</span>\n )}\n </div>\n ))}\n </div>\n );\n}\n\n// 积分兑换商城\nexport function PointsShop({\n products = [],\n userPoints = 0,\n loading = false,\n onProductClick,\n onExchange,\n className = '',\n}) {\n if (loading) {\n return <div className={`points-shop ${className}`}><div className=\"points-loading\"><div className=\"points-spinner\" /></div></div>;\n }\n\n if (products.length === 0) {\n return (\n <div className={`points-shop ${className}`}>\n <div className=\"points-empty\">\n <span style={{ fontSize: '48px' }}>🎁</span>\n <span>{t('noProducts')}</span>\n </div>\n </div>\n );\n }\n\n return (\n <div className={`points-shop ${className}`}>\n <div className=\"points-shop-grid\">\n {products.map((product) => {\n const canAfford = userPoints >= product.price;\n const soldOut = product.stock <= 0;\n \n return (\n <div\n key={product.id}\n className={`points-product-card ${!canAfford ? 'unaffordable' : ''} ${soldOut ? 'sold-out' : ''}`}\n onClick={() => onProductClick?.(product)}\n >\n <div className=\"points-product-image\">\n {product.image ? (\n <img src={product.image} alt={product.name} />\n ) : (\n <span className=\"points-product-placeholder\">🎁</span>\n )}\n {soldOut && <div className=\"points-product-badge sold-out\">{t('soldOut')}</div>}\n {product.hot && !soldOut && <div className=\"points-product-badge hot\">🔥 {t('hot')}</div>}\n </div>\n \n <div className=\"points-product-info\">\n <div className=\"points-product-name\">{product.name}</div>\n <div className=\"points-product-desc\">{product.description}</div>\n </div>\n \n <div className=\"points-product-footer\">\n <div className=\"points-product-price\">\n <span className=\"points-icon\">⭐</span>\n {product.price.toLocaleString()}\n </div>\n \n <button\n className=\"points-btn points-btn-sm points-btn-primary\"\n disabled={!canAfford || soldOut}\n onClick={(e) => { e.stopPropagation(); onExchange?.(product); }}\n >\n {soldOut ? t('soldOut') : !canAfford ? t('insufficientPoints') : t('exchange')}\n </button>\n </div>\n \n {product.stock > 0 && product.stock <= 10 && (\n <div className=\"points-product-stock\">\n {t('onlyLeft').replace('{count}', product.stock)}\n </div>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\n// 积分历史\nexport function PointsHistory({\n records = [],\n loading = false,\n onLoadMore,\n hasMore = false,\n className = '',\n}) {\n if (loading && records.length === 0) {\n return <div className={`points-history ${className}`}><div className=\"points-loading\"><div className=\"points-spinner\" /></div></div>;\n }\n\n if (records.length === 0) {\n return (\n <div className={`points-history ${className}`}>\n <div className=\"points-empty\">\n <span style={{ fontSize: '48px' }}>📋</span>\n <span>{t('noHistory')}</span>\n </div>\n </div>\n );\n }\n\n return (\n <div className={`points-history ${className}`}>\n {records.map((record, index) => (\n <div key={record.id || index} className=\"points-history-item\">\n <div className=\"points-history-icon\">\n {record.amount > 0 ? '📥' : '📤'}\n </div>\n <div className=\"points-history-content\">\n <div className=\"points-history-title\">{record.title}</div>\n <div className=\"points-history-time\">\n {new Date(record.created_at).toLocaleString()}\n </div>\n </div>\n <div className={`points-history-amount ${record.amount > 0 ? 'positive' : 'negative'}`}>\n {record.amount > 0 ? '+' : ''}{record.amount.toLocaleString()}\n </div>\n </div>\n ))}\n \n {hasMore && (\n <button\n className=\"points-btn points-btn-outline\"\n onClick={onLoadMore}\n disabled={loading}\n style={{ width: '100%', marginTop: '16px' }}\n >\n {loading ? t('loading') : t('loadMore')}\n </button>\n )}\n </div>\n );\n}\n\nexport default PointsOverview;\n"],"names":["PointsApiClient","BaseApiClient","constructor","config","_currentDid","_currentUserId","_platformInfo","_defaultPointsType","setCurrentDid","did","setCurrentUserId","userId","setPlatformInfo","platformId","platformUserId","platform_id","platform_user_id","setDefaultPointsType","type","_getUserIdentifier","user_id","source_platform","getBalance","pointsType","params","points_type","get","getAllBalances","types","results","Promise","all","map","result","index","data","getStats","getTransactions","queryParams","getExpiringPoints","days","addPoints","payload","amount","source_id","description","post","completeEarnTask","taskId","points","deductPoints","deduct","orderInfo","order_id","getRedeemItems","redeemItem","itemId","item_id","getRedeemHistory","submitChainTx","pointsId","txHash","tx_hash","chain","network","getChainStatus","getLevelInfo","getLevelRules","getLevelBenefits","getLeaderboard","getMyRank","getAvailablePoints","code","available","balance","frozen","checkPoints","sufficient","required","shortfall","Math","max","calculateDeductionAmount","ratio","pointsApi","SUPPORTED_LANGUAGES","messages","zh","loading","credits","earn","spend","transfer","exchange","refund","expire","sourceTask","sourceLogin","sourceSignIn","sourceInvite","sourcePurchase","sourceEvent","sourceAdmin","sourceTransfer","consumeGoods","consumeService","consumePrivilege","consumeTransfer","consumeLottery","checkIn","checkInSuccess","checkInReward","consecutiveDays","todayCheckedIn","missedCheckIn","exchangePoints","exchangeRate","exchangeHistory","confirmExchange","insufficientPoints","transferPoints","transferTo","transferAmount","transferSuccess","transferFailed","history","income","expense","noRecords","transferToPlaceholder","transferMinError","transferSuccessMsg","continueTransfer","minAmountMsg","allAmount","messageOptional","messagePlaceholder","expireWarning","totalEarned","totalSpent","thisMonth","rules","howToEarn","howToSpend","expireRule","errorLoad","errorTransfer","errorExchange","en","ja","ko","currentLanguage","setLanguage","lang","includes","window","localStorage","setItem","getLanguage","saved","getItem","t","key","msgs","text","Object","keys","forEach","k","replace","RegExp","PointsContext","createContext","PointsProvider","children","apiUrl","token","language","onPointsChange","onError","account","setAccount","useState","checkInStatus","setCheckInStatus","setLoading","error","setError","useEffect","setBaseUrl","setToken","handleError","useCallback","err","message","loadAccount","getMyAccount","prevBalance","undefined","refreshAccount","loadCheckInStatus","getCheckInStatus","prev","checked_in_today","spendPoints","reason","options","toDid","to_did","ruleId","rule_id","initialize","value","api","React","createElement","Provider","usePoints","context","useContext","Error","TransactionType","EARN","SPEND","TRANSFER_IN","TRANSFER_OUT","REFUND","EXPIRE","FREEZE","UNFREEZE","PointSource","TASK","LOGIN","SIGN_IN","INVITE","PURCHASE","EVENT","ADMIN","TRANSFER","LOTTERY","PointConsume","GOODS","SERVICE","PRIVILEGE","ORDER","PointStatus","AVAILABLE","FROZEN","EXPIRED","USED","createDefaultPointsAccount","overrides","user_did","total_earned","total_spent","this_month_earned","will_expire","expire_date","created_at","updated_at","createDefaultPointsTransaction","id","balance_after","source","expire_at","createDefaultCheckInConfig","base_points","max_consecutive_bonus","consecutive_bonus","monthly_special_days","special_day_bonus","createDefaultExchangeRule","name","from_type","to_type","rate","min_amount","max_amount","daily_limit","is_active","formatPoints","compact","prefix","suffix","toFixed","toLocaleString","PointsBalance","willExpire","expireDate","size","showDetails","showExpire","onRefresh","className","sizeClasses","small","medium","large","formatDate","dateStr","Date","toLocaleDateString","onClick","date","CheckInCalendar","onCheckIn","doCheckIn","calendar","setCalendar","currentMonth","setCurrentMonth","now","year","getFullYear","month","getMonth","loadCalendar","getCheckInCalendar","console","generateCalendarGrid","firstDay","getDay","daysInMonth","getDate","today","isCurrentMonth","grid","i","push","day","status","checkedIn","isFuture","isToday","changeMonth","delta","newMonth","newYear","handleCheckIn","weekDays","canCheckIn","consecutive_days","next_reward","cell","Fragment","disabled","PointsHistory","pageSize","showFilter","setHistory","filter","setFilter","pagination","setPagination","page","total","totalPages","loadHistory","page_size","join","getHistory","items","length","total_pages","ceil","getTypeStyle","incomeTypes","toLocaleTimeString","hour","minute","item","abs","TransferPoints","maxAmount","minAmount","onSuccess","onCancel","setToDid","setAmount","setMessage","success","setSuccess","validate","trim","amt","parseInt","min","handleSubmit","setQuickAmount","percent","floor","toString","placeholder","onChange","e","target","rows","POINTS_ANCHOR_NAMESPACE","pickPointsId","points_id","sourceId","transaction_id","transactionId","pickContentHash","contentHash","content_hash","points_hash","transaction_hash","hash","buildPointsAnchorMemo","buildQBitAnchorMemo","action","subject","resource_id","version","timestamp","extra","userDid","sourcePlatform","change_type","changeType","namespace","maxBytes","buildPointsChainSubmit","memo","anchorPoints","provider","sdk","connection","QBitConnection","endpoint","broadcastQBitAnchor","address","priorityFee","skipPreflight","waitForConfirmation","commitment","timeoutMs","confirmTimeoutMs","submit","verifyPointsAnchor","verifyAnchoredMemo","match","PointsOverview","todayEarned","monthlyEarned","rank","level","nextLevelPoints","onHistoryClick","progress","current","style","width","PointsTasks","tasks","onTaskClick","onTaskComplete","taskTypeIcons","daily","weekly","onetime","achievement","fontSize","task","completed","title","reward","stopPropagation","PointsShop","products","userPoints","onProductClick","onExchange","product","canAfford","price","soldOut","stock","image","src","alt","hot","records","onLoadMore","hasMore","record","marginTop"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ :root{--points-primary:#f59e0b;--points-primary-hover:#d97706;--points-primary-light:#fffbeb;--points-success:#10b981;--points-error:#ef4444;--points-bg:#fff;--points-bg-secondary:#f9fafb;--points-border:#e5e7eb;--points-text:#111827;--points-text-secondary:#6b7280;--points-text-muted:#9ca3af;--points-radius:8px;--points-radius-lg:12px;--points-shadow:0 1px 3px rgba(0,0,0,.1);--points-transition:all 0.2s ease}.points-balance{background:linear-gradient(135deg,var(--points-primary),#ea580c);border-radius:var(--points-radius-lg);color:#fff;padding:24px}.points-balance-sm{padding:16px}.points-balance-lg{padding:32px}.points-balance-main{align-items:center;display:flex;gap:16px}.points-balance-icon{font-size:40px}.points-balance-lg .points-balance-icon{font-size:48px}.points-balance-info{flex:1}.points-balance-label{display:block;margin-bottom:4px}.points-balance-value{font-size:32px;font-weight:700}.points-balance-lg .points-balance-value{font-size:40px}.points-refresh-btn{background:hsla(0,0%,100%,.2);border:none;border-radius:8px;cursor:pointer;font-size:18px;padding:8px;transition:var(--points-transition)}.points-refresh-btn:hover{background:hsla(0,0%,100%,.3)}.points-balance-details{border-top:1px solid hsla(0,0%,100%,.2);display:flex;gap:24px;margin-top:20px;padding-top:20px}.points-detail-item{display:flex;flex-direction:column;gap:4px}.points-detail-label{font-size:12px;opacity:.8}.points-detail-value{font-size:18px;font-weight:600}.points-detail-value.frozen{opacity:.7}.points-expire-warning{align-items:center;background:hsla(0,0%,100%,.15);border-radius:var(--points-radius);display:flex;font-size:13px;gap:8px;margin-top:16px;padding:12px}.points-check-in{background:var(--points-bg);border-radius:var(--points-radius-lg);box-shadow:var(--points-shadow);padding:24px}.points-check-in-header{align-items:center;display:flex;gap:16px;justify-content:center;margin-bottom:16px}.points-month-btn{background:var(--points-bg-secondary);border:none;border-radius:8px;cursor:pointer;font-size:18px;height:32px;transition:var(--points-transition);width:32px}.points-month-btn:hover{background:var(--points-border)}.points-month-text{color:var(--points-text);font-size:16px;font-weight:600}.points-streak-info{align-items:center;display:flex;gap:16px;justify-content:center;margin-bottom:16px}.points-streak-badge{background:var(--points-primary-light);border-radius:20px;color:var(--points-primary);font-size:13px;font-weight:500;padding:6px 12px}.points-next-reward{color:var(--points-text-secondary);font-size:13px}.points-calendar{margin-bottom:20px}.points-calendar-header{display:grid;gap:4px;grid-template-columns:repeat(7,1fr);margin-bottom:8px}.points-week-day{color:var(--points-text-muted);font-size:12px;padding:8px 0;text-align:center}.points-calendar-grid{display:grid;gap:4px;grid-template-columns:repeat(7,1fr)}.points-calendar-day{align-items:center;aspect-ratio:1;border-radius:8px;display:flex;flex-direction:column;font-size:14px;justify-content:center;transition:var(--points-transition)}.points-calendar-day.empty{background:transparent}.points-calendar-day.future{background:var(--points-bg-secondary);color:var(--points-text-muted)}.points-calendar-day.missed{background:var(--points-bg-secondary);color:var(--points-text-secondary)}.points-calendar-day.checked{background:var(--points-success);color:#fff}.points-calendar-day.today{box-shadow:0 0 0 2px var(--points-primary)}.points-day-number{font-weight:500}.points-check-mark{font-size:10px}.points-check-in-btn{background:var(--points-primary);border:none;border-radius:var(--points-radius);color:#fff;cursor:pointer;font-size:16px;font-weight:600;padding:14px;transition:var(--points-transition);width:100%}.points-check-in-btn:hover:not(:disabled){background:var(--points-primary-hover)}.points-check-in-btn.checked{background:var(--points-success);cursor:default}.points-check-in-btn:disabled{opacity:.7}.points-history{background:var(--points-bg);border-radius:var(--points-radius-lg)}.points-history-filter{border-bottom:1px solid var(--points-border);display:flex;gap:8px;padding:16px}.points-history-filter button{background:var(--points-bg);border:1px solid var(--points-border);border-radius:20px;color:var(--points-text-secondary);cursor:pointer;font-size:13px;padding:8px 16px;transition:var(--points-transition)}.points-history-filter button.active{background:var(--points-primary);border-color:var(--points-primary);color:#fff}.points-history-item{border-bottom:1px solid var(--points-border);gap:16px;padding:16px;transition:var(--points-transition)}.points-history-item:hover{background:var(--points-bg-secondary)}.points-history-icon{font-size:24px}.points-history-desc{color:var(--points-text);display:block}.points-history-time{color:var(--points-text-muted);display:block}.points-history-amount.income{color:var(--points-success)}.points-history-amount.expense{color:var(--points-error)}.points-history-empty,.points-history-loading{align-items:center;color:var(--points-text-muted);display:flex;flex-direction:column;gap:12px;justify-content:center;padding:48px}.points-empty-icon{font-size:40px}.points-loading-spinner{animation:points-spin .8s linear infinite;border:3px solid var(--points-border);border-radius:50%;border-top-color:var(--points-primary);height:32px;width:32px}.points-history-pagination{align-items:center;border-top:1px solid var(--points-border);display:flex;gap:16px;justify-content:center;padding:16px}.points-history-pagination button{background:var(--points-bg);border:1px solid var(--points-border);border-radius:var(--points-radius);color:var(--points-text-secondary);cursor:pointer;font-size:13px;padding:8px 16px;transition:var(--points-transition)}.points-history-pagination button:hover:not(:disabled){border-color:var(--points-primary);color:var(--points-primary)}.points-history-pagination button:disabled{cursor:not-allowed;opacity:.5}.points-transfer{background:var(--points-bg);border-radius:var(--points-radius-lg);box-shadow:var(--points-shadow);padding:24px}.points-transfer h3{color:var(--points-text);font-size:18px;margin:0 0 20px}.points-transfer-balance{align-items:center;background:var(--points-primary-light);border-radius:var(--points-radius);display:flex;justify-content:space-between;margin-bottom:20px;padding:16px}.points-transfer-balance .points-balance-value{color:var(--points-primary);font-size:20px;font-weight:600}.points-form-group{margin-bottom:16px}.points-form-group label{display:block;font-weight:500;margin-bottom:8px}.points-form-group label,.points-input{color:var(--points-text);font-size:14px}.points-input{background:var(--points-bg);border:1px solid var(--points-border);border-radius:var(--points-radius);padding:12px;transition:var(--points-transition);width:100%}.points-input:focus{border-color:var(--points-primary);outline:none}.points-quick-amounts{display:flex;gap:8px;margin-top:8px}.points-quick-amounts button{background:var(--points-bg);border:1px solid var(--points-border);border-radius:var(--points-radius);color:var(--points-text-secondary);cursor:pointer;flex:1;font-size:12px;padding:8px;transition:var(--points-transition)}.points-quick-amounts button:hover{border-color:var(--points-primary);color:var(--points-primary)}.points-error{background:#fef2f2;border-radius:var(--points-radius);color:var(--points-error);font-size:13px;margin-bottom:16px;padding:12px}.points-form-actions{display:flex;gap:12px}.points-btn{border-radius:var(--points-radius);flex:1;padding:12px 20px;transition:var(--points-transition)}.points-btn-primary{background:var(--points-primary)}.points-btn-primary:hover:not(:disabled){background:var(--points-primary-hover)}.points-btn-secondary{background:var(--points-bg-secondary);color:var(--points-text-secondary)}.points-btn:disabled{opacity:.6}.points-transfer-success{padding:48px 24px;text-align:center}.points-success-icon{font-size:64px;margin-bottom:16px}.points-transfer-success h3{color:var(--points-success);font-size:20px;margin:0 0 8px}.points-transfer-success p{color:var(--points-text-secondary);margin:0 0 24px}@media (max-width:768px){.points-balance-details{flex-direction:column;gap:12px}.points-quick-amounts{flex-wrap:wrap}.points-quick-amounts button{flex:0 0 calc(50% - 4px)}}.points-overview{background:linear-gradient(135deg,#f59e0b,#d97706);border-radius:24px;color:#fff;padding:32px;text-align:center}.points-balance{margin-bottom:24px}.points-balance-label{font-size:14px;margin-bottom:8px;opacity:.9}.points-balance-value{font-size:48px;font-weight:800}.points-balance-unit{font-size:18px;margin-left:4px;opacity:.8}.points-stats{display:flex;gap:48px;justify-content:center}.points-stat{text-align:center}.points-stat-value{font-size:24px;font-weight:700}.points-stat-label{font-size:13px;margin-top:4px;opacity:.8}.points-tasks{background:#fff;border-radius:20px;box-shadow:0 4px 24px rgba(0,0,0,.08);padding:24px}.points-tasks-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:20px}.points-tasks-title{align-items:center;color:#111827;display:flex;font-size:18px;font-weight:700;gap:8px;margin:0}.points-tasks-list{display:flex;flex-direction:column;gap:12px}.points-task-item{align-items:center;background:#f9fafb;border-radius:14px;display:flex;gap:16px;padding:16px;transition:all .2s}.points-task-item:hover{background:#f3f4f6}.points-task-item.completed{opacity:.6}.points-task-icon{align-items:center;background:linear-gradient(135deg,#fef3c7,#fde68a);border-radius:12px;display:flex;flex-shrink:0;font-size:24px;height:48px;justify-content:center;width:48px}.points-task-info{flex:1}.points-task-name{color:#111827;font-size:15px;font-weight:600;margin-bottom:4px}.points-task-desc{color:#6b7280;font-size:13px}.points-task-progress{background:#e5e7eb;border-radius:3px;height:6px;margin-top:8px;overflow:hidden}.points-task-progress-bar{background:linear-gradient(90deg,#f59e0b,#eab308);border-radius:3px;height:100%}.points-task-reward{align-items:center;display:flex;flex-direction:column;gap:4px}.points-task-reward-value{color:#f59e0b;font-size:18px;font-weight:700}.points-task-reward-label{color:#9ca3af;font-size:11px}.points-shop{display:grid;gap:20px;grid-template-columns:repeat(auto-fill,minmax(220px,1fr))}.points-shop-item{background:#fff;border-radius:16px;box-shadow:0 2px 12px rgba(0,0,0,.06);cursor:pointer;overflow:hidden;transition:all .3s}.points-shop-item:hover{box-shadow:0 12px 32px rgba(0,0,0,.12);transform:translateY(-6px)}.points-shop-item.out-of-stock{opacity:.6;pointer-events:none}.points-shop-image{aspect-ratio:1;background:#f8fafc;overflow:hidden}.points-shop-image img{height:100%;object-fit:cover;width:100%}.points-shop-info{padding:16px}.points-shop-name{color:#111827;font-size:15px;font-weight:600;margin-bottom:8px}.points-shop-footer{align-items:center;display:flex;justify-content:space-between}.points-shop-price{align-items:center;color:#f59e0b;display:flex;font-size:18px;font-weight:700;gap:4px}.points-shop-stock{color:#9ca3af;font-size:12px}.points-history{background:#fff;border-radius:20px;box-shadow:0 4px 24px rgba(0,0,0,.08);overflow:hidden}.points-history-header{border-bottom:1px solid #e5e7eb;padding:20px 24px}.points-history-title{color:#111827;font-size:18px;font-weight:700;margin:0}.points-history-list{max-height:400px;overflow-y:auto}.points-history-item{align-items:center;border-bottom:1px solid #f3f4f6;display:flex;justify-content:space-between;padding:16px 24px}.points-history-item:last-child{border-bottom:none}.points-history-info{flex:1}.points-history-desc{color:#111827;font-size:14px}.points-history-time{color:#9ca3af;font-size:12px;margin-top:4px}.points-history-amount{font-size:16px;font-weight:600}.points-history-amount.positive{color:#22c55e}.points-history-amount.positive:before{content:"+"}.points-history-amount.negative{color:#ef4444}.points-btn{border:none;border-radius:12px;cursor:pointer;font-size:14px;font-weight:500;padding:12px 24px;transition:all .2s}.points-btn-sm{font-size:13px;padding:8px 16px}.points-btn-primary{background:linear-gradient(135deg,#f59e0b,#d97706);color:#fff}.points-btn-primary:hover{box-shadow:0 8px 24px rgba(245,158,11,.4);transform:translateY(-2px)}.points-btn:disabled{cursor:not-allowed;opacity:.5}.points-empty,.points-loading{align-items:center;color:#6b7280;display:flex;flex-direction:column;gap:12px;justify-content:center;padding:48px}.points-spinner{animation:points-spin .8s linear infinite;border:3px solid #fef3c7;border-radius:50%;border-top-color:#f59e0b;height:32px;width:32px}@keyframes points-spin{to{transform:rotate(1turn)}}
package/package.json ADDED
@@ -0,0 +1,96 @@
1
+ {
2
+ "name": "@quantabit/points-sdk",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "description": "QuantaBit Points System SDK - Points earning, spending, exchange, and balance management",
6
+ "main": "dist/index.cjs",
7
+ "module": "dist/index.esm.js",
8
+ "types": "types/index.d.ts",
9
+ "files": [
10
+ "dist",
11
+ "README.md",
12
+ "LICENSE",
13
+ "types"
14
+ ],
15
+ "exports": {
16
+ ".": {
17
+ "import": "./dist/index.esm.js",
18
+ "require": "./dist/index.cjs",
19
+ "types": "./types/index.d.ts"
20
+ },
21
+ "./styles": "./dist/styles.css",
22
+ "./styles.css": "./dist/styles.css"
23
+ },
24
+ "scripts": {
25
+ "build": "rollup -c",
26
+ "dev": "rollup -c -w",
27
+ "clean": "rm -rf dist",
28
+ "prepublishOnly": "npm run clean && npm run build",
29
+ "test": "jest --passWithNoTests"
30
+ },
31
+ "peerDependencies": {
32
+ "@quantabit/qbit-chain-sdk": "^1.1.0",
33
+ "react": ">=17.0.0",
34
+ "react-dom": ">=17.0.0"
35
+ },
36
+ "peerDependenciesMeta": {
37
+ "@quantabit/qbit-chain-sdk": {
38
+ "optional": true
39
+ }
40
+ },
41
+ "devDependencies": {
42
+ "@babel/core": "^7.23.0",
43
+ "@babel/preset-env": "^7.23.0",
44
+ "@babel/preset-react": "^7.23.0",
45
+ "@rollup/plugin-babel": "^6.0.0",
46
+ "@rollup/plugin-commonjs": "^25.0.0",
47
+ "@rollup/plugin-node-resolve": "^15.0.0",
48
+ "babel-jest": "^29.7.0",
49
+ "identity-obj-proxy": "^3.0.0",
50
+ "jest": "^29.7.0",
51
+ "jest-environment-jsdom": "^29.7.0",
52
+ "react": "^19.2.0",
53
+ "react-dom": "^19.2.0",
54
+ "rollup": "^4.0.0",
55
+ "rollup-plugin-postcss": "^4.0.0"
56
+ },
57
+ "keywords": [
58
+ "points",
59
+ "credits",
60
+ "tokens",
61
+ "rewards",
62
+ "quantabit"
63
+ ],
64
+ "author": "QuantaBit Team",
65
+ "license": "MIT",
66
+ "publishConfig": {
67
+ "access": "public",
68
+ "registry": "https://registry.npmjs.org"
69
+ },
70
+ "dependencies": {
71
+ "@quantabit/sdk-config": "^1.0.6"
72
+ },
73
+ "repository": {
74
+ "type": "git",
75
+ "url": "https://github.com/quantabit-chain/qbit-sdk.git",
76
+ "directory": "packages/points-sdk"
77
+ },
78
+ "homepage": "https://github.com/quantabit-chain/qbit-sdk/tree/main/packages/points-sdk#readme",
79
+ "bugs": {
80
+ "url": "https://github.com/quantabit-chain/qbit-sdk/issues"
81
+ },
82
+ "engines": {
83
+ "node": ">=18.0.0"
84
+ },
85
+ "sideEffects": [
86
+ "*.css"
87
+ ],
88
+ "qbit": {
89
+ "privacy": {
90
+ "level": "functional",
91
+ "dataCollection": "Feature-related data for personalization. Requires user consent.",
92
+ "gdprCompliant": true,
93
+ "ccpaCompliant": true
94
+ }
95
+ }
96
+ }
@@ -0,0 +1,92 @@
1
+ /**
2
+ * @quantabit/points-sdk TypeScript Type Definitions
3
+ *
4
+ * Auto-generated type stubs. Enhance with specific types as the SDK matures.
5
+ */
6
+
7
+ import { FC, ReactNode } from 'react';
8
+
9
+ // ============ Provider ============
10
+
11
+ export interface PointsProviderProps {
12
+ children: ReactNode;
13
+ apiUrl?: string;
14
+ token?: string;
15
+ language?: string;
16
+ onError?: (error: Error) => void;
17
+ }
18
+
19
+ export declare const PointsProvider: FC<PointsProviderProps>;
20
+
21
+ // ============ Components ============
22
+
23
+ export interface PointsBalanceProps {
24
+ className?: string;
25
+ style?: React.CSSProperties;
26
+ [key: string]: any;
27
+ }
28
+
29
+ export declare const PointsBalance: FC<PointsBalanceProps>;
30
+
31
+ export interface CheckInCalendarProps {
32
+ className?: string;
33
+ style?: React.CSSProperties;
34
+ [key: string]: any;
35
+ }
36
+
37
+ export declare const CheckInCalendar: FC<CheckInCalendarProps>;
38
+
39
+ export interface PointsHistoryProps {
40
+ className?: string;
41
+ style?: React.CSSProperties;
42
+ [key: string]: any;
43
+ }
44
+
45
+ export declare const PointsHistory: FC<PointsHistoryProps>;
46
+
47
+ export interface TransferPointsProps {
48
+ className?: string;
49
+ style?: React.CSSProperties;
50
+ [key: string]: any;
51
+ }
52
+
53
+ export declare const TransferPoints: FC<TransferPointsProps>;
54
+
55
+ // ============ Hooks ============
56
+
57
+ export interface UsePointsReturn {
58
+ data: any;
59
+ loading: boolean;
60
+ error: string | null;
61
+ [key: string]: any;
62
+ }
63
+
64
+ export declare function usePoints(...args: any[]): UsePointsReturn;
65
+
66
+ // ============ Services ============
67
+
68
+ export declare const pointsApi: any;
69
+
70
+ export declare class PointsApiClient {
71
+ constructor(config?: Record<string, any>);
72
+ setCurrentDid(did: string): void;
73
+ setCurrentUserId(userId: number): void;
74
+ setPlatformInfo(platformId: string, platformUserId: string): void;
75
+ setDefaultPointsType(type: string): void;
76
+ getBalance(pointsType?: string | null): Promise<any>;
77
+ getAllBalances(): Promise<any>;
78
+ getTransactions(params?: Record<string, any>): Promise<any>;
79
+ addPoints(data: Record<string, any>): Promise<any>;
80
+ deductPoints(data: Record<string, any>): Promise<any>;
81
+ submitChainTx(pointsId: string, txHash: string, data?: Record<string, any>): Promise<any>;
82
+ getChainStatus(pointsId: string): Promise<any>;
83
+ setToken(token: string): void;
84
+ setBaseUrl(url: string): void;
85
+ destroy(): void;
86
+ }
87
+
88
+ export declare const POINTS_ANCHOR_NAMESPACE: 'qbit_points';
89
+ export declare function buildPointsAnchorMemo(points: Record<string, any>, options?: Record<string, any>): Promise<string>;
90
+ export declare function buildPointsChainSubmit(pointsId: string, txHash: string, options?: Record<string, any>): Record<string, any>;
91
+ export declare function anchorPoints(provider: any, points: Record<string, any>, options?: Record<string, any>): Promise<any>;
92
+ export declare function verifyPointsAnchor(txHash: string, options?: Record<string, any>): Promise<any>;