Добавить аватар профиля через Arweave и мастер загрузки

This commit is contained in:
AidarKC
2026-04-26 01:41:09 +03:00
parent 126cf2f5c3
commit 667c5310bf
10 changed files with 1002 additions and 10 deletions
@@ -1,4 +1,5 @@
import { authService, state } from '../state.js';
import { buildArweaveAvatarValue, parseArweaveAvatarValue, validateArweaveTxId } from './arweave-file-service.js';
export const profileFieldDefs = [
{ key: 'first_name', readKeys: ['first_name'], label: 'Имя', placeholder: 'Введите имя' },
@@ -118,12 +119,28 @@ export async function loadProfileSnapshot(login) {
const latestGender = loadLatestByAliasesFromItems(items, ['gender']);
const gender = normalizeGenderValue(latestGender?.value || PROFILE_GENDER_UNKNOWN);
const latestAvatar = loadLatestByAliasesFromItems(items, ['ava']);
const parsedAvatar = parseArweaveAvatarValue(latestAvatar?.value || '');
const avatar = parsedAvatar.ok
? {
value: buildArweaveAvatarValue(parsedAvatar.txId),
source: 'arweave',
txId: parsedAvatar.txId,
timeMs: latestAvatar?.timeMs || 0,
}
: {
value: '',
source: '',
txId: '',
timeMs: latestAvatar?.timeMs || 0,
};
return {
fields,
toggles,
gender,
genderTimeMs: latestGender?.timeMs || 0,
avatar,
};
}
@@ -157,3 +174,11 @@ export async function saveProfileGender(login, gender) {
storagePwd,
});
}
export async function saveProfileAvatarArweave(login, txId) {
const cleanTxId = String(txId || '').trim();
if (!validateArweaveTxId(cleanTxId)) {
throw new Error('Некорректный Transaction ID Arweave');
}
await saveProfileParamBlock(login, 'ava', buildArweaveAvatarValue(cleanTxId));
}