XuqmGroup-Web/tenant-platform/src/api/app.ts
XuqmGroup dcbd833e64 feat(push): 添加多厂商推送集成支持
- 实现了华为 HMS 推送服务集成
- 实现了小米推送服务集成
- 实现了 OPPO 推送服务集成
- 实现了 vivo 推送服务集成
- 实现了荣耀推送服务集成
- 实现了 FCM 推送服务集成
- 添加了统一的厂商推送接口和检测机制
- 添加了推送配置 API 和存储管理
- 添加了推送令牌管理和设备注册功能
- 添加了模拟器环境的推送测试用例
2026-05-05 17:54:59 +08:00

136 行
3.8 KiB
TypeScript

import client from './client'
export interface App {
id: string
tenantId: string
packageName: string
name: string
description?: string
iconUrl?: string
appKey: string
appSecret: string
createdAt: string
}
export interface CreateAppRequest {
packageName: string
name: string
description?: string
iconUrl?: string
}
export interface FeatureService {
id: string
appId: string
platform: 'ANDROID' | 'IOS' | 'HARMONY'
serviceType: 'IM' | 'PUSH' | 'UPDATE'
enabled: boolean
config?: string | null
createdAt: string
}
export interface ImServiceConfig {
allowStrangerMessage: boolean
allowFriendRequest: boolean
friendRequestMode: 'REQUIRE_CONFIRM' | 'DIRECT_ACCEPT' | 'DISALLOW'
allowGroupJoinRequest: boolean
blacklistSendSuccess: boolean
messageRecallMinutes: number
historyRetentionDays: number
conversationPullLimit: number
multiClientConversationDeleteSync: boolean
}
export interface UpdateServiceConfig {
defaultStoreTargets?: string[]
defaultPublishMode?: 'MANUAL' | 'NOW' | 'SCHEDULED' | 'AUTO_REVIEW'
defaultPublishImmediately?: boolean
defaultScheduledPublishAt?: string
defaultAutoPublishAfterReview?: boolean
defaultWebhookUrl?: string
defaultForceUpdate?: boolean
defaultGrayEnabled?: boolean
defaultGrayPercent?: number
defaultPackageName?: string
defaultAppStoreUrl?: string
defaultMarketUrl?: string
}
export interface PushVendorConfig {
appId?: string
appKey?: string
appSecret?: string
masterSecret?: string
clientId?: string
clientSecret?: string
teamId?: string
keyId?: string
bundleId?: string
keyPath?: string
sandbox?: boolean
serviceAccountJson?: string
}
export interface PushServiceConfig {
huawei?: PushVendorConfig
xiaomi?: PushVendorConfig
oppo?: PushVendorConfig
vivo?: PushVendorConfig
honor?: PushVendorConfig
apns?: PushVendorConfig
fcm?: PushVendorConfig
}
export const appApi = {
list: () => client.get<{ data: App[] }>('/apps'),
get: (id: string) => client.get<{ data: App }>(`/apps/${id}`),
create: (data: CreateAppRequest) => client.post<{ data: App }>('/apps', data),
update: (id: string, data: CreateAppRequest) => client.put<{ data: App }>(`/apps/${id}`, data),
delete: (id: string) => client.delete(`/apps/${id}`),
getServices: (appId: string) =>
client.get<{ data: FeatureService[] }>(`/apps/${appId}/services`),
getService: async (appId: string, platform: string, serviceType: string) => {
const res = await client.get<{ data: FeatureService[] }>(`/apps/${appId}/services`)
const service = res.data.data.find(item => item.platform === platform && item.serviceType === serviceType)
if (!service) {
throw new Error('服务不存在')
}
return {
...res,
data: { data: service },
} as typeof res & { data: { data: FeatureService } }
},
toggleService: (appId: string, platform: string, serviceType: string, enable: boolean) =>
client.post<{ data: FeatureService }>(`/apps/${appId}/services/toggle`, null, {
params: { platform, serviceType, enable },
}),
updateServiceConfig: (
appId: string,
platform: string,
serviceType: string,
config: Partial<ImServiceConfig> & Partial<UpdateServiceConfig> & Partial<PushServiceConfig> | Record<string, unknown>,
) =>
client.put<{ data: FeatureService }>(`/apps/${appId}/services/config`, config, {
params: { platform, serviceType },
}),
requestSecretVerify: (appId: string, purpose: 'REVEAL_SECRET' | 'RESET_SECRET') =>
client.post<{ data: null }>(`/apps/${appId}/request-secret-verify`, null, {
params: { purpose },
}),
revealSecret: (appId: string, code: string) =>
client.post<{ data: { appSecret: string } }>(`/apps/${appId}/reveal-secret`, { code }),
resetSecret: (appId: string, code: string) =>
client.post<{ data: { appSecret: string } }>(`/apps/${appId}/reset-secret`, { code }),
}