2026-07-12 17:38:53 +08:00

244 lines
9.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(function () {
'use strict';
function params() {
return new URLSearchParams(window.location.search || '');
}
function settled(promise) {
return Promise.resolve(promise).then(
function (value) {
return { ok: true, value: value };
},
function (error) {
return { ok: false, error: error };
}
);
}
function firstBalance(payload, assetType) {
var items = Array.isArray(payload)
? payload
: (payload && (payload.balances || payload.items)) || [];
return (
items.find(function (item) {
return (
String(
item.asset_type || item.assetType || ''
).toUpperCase() === assetType
);
}) || null
);
}
function normalizeProfile(payload) {
var profile =
(payload && (payload.profile || payload.user)) || payload || {};
return {
contact: String(profile.contact_info || profile.contactInfo || ''),
};
}
function normalizeOverview(payload) {
var agency = (payload && payload.agency) || {};
return {
agency: {
id: String(agency.agency_id || agency.agencyId || ''),
shortId: String(
agency.short_id ||
agency.shortId ||
agency.agency_id ||
agency.agencyId ||
''
),
name: String(agency.name || ''),
avatar: String(agency.avatar || agency.avatar_url || ''),
createdAtMS: Number(
agency.created_at_ms || agency.createdAtMs || 0
),
},
};
}
function normalizeStats(payload, range) {
var source = payload || {};
var summary = source.summary || {};
return {
range: source.range || range,
summary: {
total_earnings: Number(summary.total_earnings || 0),
gift_income: Number(summary.gift_income || 0),
share_income: Number(summary.share_income || 0),
total_hosts: Number(summary.total_hosts || 0),
gifted_host_count: Number(summary.gifted_host_count || 0),
},
hosts: Array.isArray(source.hosts)
? source.hosts.map(function (host) {
return {
membershipId: String(host.membership_id || ''),
userId: String(host.host_user_id || ''),
displayUserId: String(
host.display_user_id || host.host_user_id || ''
),
name: String(host.username || ''),
avatar: String(host.avatar || ''),
joinedAtMS: Number(host.joined_at_ms || 0),
diamondEarnings: Number(host.diamond_earnings || 0),
diamondExchanged: Number(host.diamond_exchanged || 0),
giftSenders: Number(host.gift_senders || 0),
onlineDurationMS: Number(
host.online_duration_ms || 0
),
validMicDurationMS: Number(
host.valid_mic_duration_ms || 0
),
validMicDays: Number(host.valid_mic_days || 0),
removable: host.removable !== false,
};
})
: [],
};
}
function mockData(range) {
return {
agency: {
id: '343434',
shortId: '343434',
name: 'Fami Stars Agency',
avatar: '',
createdAtMS: new Date(2025, 9, 12, 15, 0).getTime(),
},
contact: '+20 1524151515',
pointBalance: 5152051511212,
stats: normalizeStats(
{
summary: {
total_earnings: 10000,
gift_income: 10000,
share_income: 10000,
total_hosts: 1,
gifted_host_count: 1,
},
hosts: [
{
membership_id: '8001',
host_user_id: '3534',
display_user_id: '3534',
username: 'Host dada',
diamond_earnings: 343434,
diamond_exchanged: 343434,
gift_senders: 343434,
online_duration_ms: 165 * 60 * 1000,
valid_mic_duration_ms: 152 * 60 * 1000,
valid_mic_days: 12,
joined_at_ms: new Date(
2025,
4,
31,
15,
0
).getTime(),
},
],
},
range
),
errors: {},
};
}
function load(range) {
if (params().get('mock') === '1')
return Promise.resolve(mockData(range));
var api = window.HyAppAPI || {};
if (!api.user || !api.agencyCenter || !api.wallet) {
return Promise.reject(new Error('guild_api_unavailable'));
}
return Promise.all([
settled(api.user.me()),
settled(api.agencyCenter.overview()),
settled(api.wallet.balances(['POINT'])),
settled(
api.agencyCenter.stats({
start_date: range.startDate,
end_date: range.endDate,
})
),
]).then(function (results) {
// owner 身份和 agency 资料是页面最小事实;余额/统计允许独立降级,避免聚合服务故障遮住管理入口。
if (!results[0].ok) throw results[0].error;
if (!results[1].ok) throw results[1].error;
var overview = normalizeOverview(results[1].value);
var profile = normalizeProfile(results[0].value);
var point = results[2].ok
? firstBalance(results[2].value, 'POINT')
: null;
return {
agency: overview.agency,
contact: profile.contact,
pointBalance: point
? Number(
point.available_amount || point.availableAmount || 0
)
: null,
stats: results[3].ok
? normalizeStats(results[3].value, range)
: normalizeStats({}, range),
errors: {
balance: results[2].ok ? null : results[2].error,
stats: results[3].ok ? null : results[3].error,
},
};
});
}
function commandID(prefix) {
var random =
window.crypto && window.crypto.randomUUID
? window.crypto.randomUUID()
: Date.now() + '-' + Math.random().toString(16).slice(2);
return prefix + ':' + random;
}
function saveContact(value) {
if (params().get('mock') === '1') return Promise.resolve({});
return window.HyAppAPI.user.updateContact({ contact_info: value });
}
function inviteHost(displayUserID) {
if (params().get('mock') === '1') return Promise.resolve({});
var api = window.HyAppAPI;
// 邀请写接口只接受内部 user_id先通过公共解析接口把用户输入的展示 ID 转换,禁止前端猜测两种 ID 相同。
return api.user
.resolveDisplayUserID(displayUserID)
.then(function (payload) {
var user =
(payload && (payload.user || payload.profile)) ||
payload ||
{};
var userID = user.user_id || user.userId;
if (!userID) throw new Error('host_not_found');
return api.agencyCenter.inviteHost({
command_id: commandID('fami-agency-invite-host'),
target_user_id: String(userID),
});
});
}
function removeHost(hostUserID) {
if (params().get('mock') === '1') return Promise.resolve({});
return window.HyAppAPI.agencyCenter.removeHost(hostUserID, {
command_id: commandID('fami-agency-remove-host'),
});
}
window.HyGuild = window.HyGuild || {};
window.HyGuild.agencyCenter = {
load: load,
saveContact: saveContact,
inviteHost: inviteHost,
removeHost: removeHost,
};
})();