Files
X-Financial/web/src/services/agentAssets.js

198 lines
5.2 KiB
JavaScript
Raw Normal View History

import { apiRequest, pickSafeHeaderValue } from './api.js'
const AUTH_USER_STORAGE_KEY = 'x-financial-auth-user'
function readActorName() {
if (typeof window === 'undefined') {
return 'system'
}
const raw = window.sessionStorage.getItem(AUTH_USER_STORAGE_KEY)
if (!raw) {
return 'system'
}
try {
const payload = JSON.parse(raw)
return (
pickSafeHeaderValue(payload?.name, payload?.username) ||
pickSafeHeaderValue(payload?.username, 'system') ||
'system'
)
} catch {
return 'system'
}
}
function buildWriteHeaders(options = {}) {
const actor = String(options.actor || readActorName()).trim() || 'system'
const headers = {
'x-actor': actor
}
if (options.requestId) {
headers['x-request-id'] = String(options.requestId).trim()
}
return headers
}
function buildQuery(params = {}) {
const search = new URLSearchParams()
if (params.assetType) {
search.set('asset_type', params.assetType)
}
if (params.status) {
search.set('status', params.status)
}
if (params.domain) {
search.set('domain', params.domain)
}
if (params.keyword) {
search.set('keyword', params.keyword)
}
if (params.limit) {
search.set('limit', String(params.limit))
}
if (params.version) {
search.set('version', String(params.version))
}
if (params.agent) {
search.set('agent', params.agent)
}
if (params.source) {
search.set('source', params.source)
}
const query = search.toString()
return query ? `?${query}` : ''
}
export function fetchAgentAssets(params = {}) {
return apiRequest(`/agent-assets${buildQuery(params)}`)
}
export function fetchAgentAssetDetail(assetId) {
return apiRequest(`/agent-assets/${assetId}`)
}
export function fetchAgentAssetSpreadsheetOnlyOfficeConfig(assetId, version = '') {
const query = buildQuery({ version })
return apiRequest(`/agent-assets/${assetId}/spreadsheet/onlyoffice-config${query}`)
}
export function fetchAgentAssetSpreadsheetBlob(assetId, version = '', disposition = 'inline') {
const search = new URLSearchParams()
if (version) {
search.set('version', String(version).trim())
}
if (disposition) {
search.set('disposition', String(disposition).trim())
}
const query = search.toString()
return apiRequest(`/agent-assets/${assetId}/spreadsheet/content${query ? `?${query}` : ''}`, {
responseType: 'blob',
contentType: null
})
}
export function uploadAgentAssetSpreadsheet(assetId, file, options = {}) {
return apiRequest(
`/agent-assets/${assetId}/spreadsheet/upload?filename=${encodeURIComponent(file.name)}`,
{
method: 'POST',
body: file,
contentType: file.type || 'application/octet-stream',
headers: buildWriteHeaders(options)
}
)
}
export function importAgentAssetSpreadsheetContent(assetId, file, options = {}) {
return apiRequest(
`/agent-assets/${assetId}/spreadsheet/import-content?filename=${encodeURIComponent(file.name)}`,
{
method: 'POST',
body: file,
contentType: file.type || 'application/octet-stream',
headers: buildWriteHeaders(options)
}
)
}
export function fetchAgentAssetVersions(assetId, limit = 5) {
return apiRequest(`/agent-assets/${assetId}/versions${buildQuery({ limit })}`)
}
export function fetchAgentAssetVersionTimeline(assetId) {
return apiRequest(`/agent-assets/${assetId}/version-timeline`)
}
export function compareAgentAssetSpreadsheetVersions(assetId, baseVersion, targetVersion) {
const query = new URLSearchParams({
base_version: String(baseVersion || '').trim(),
target_version: String(targetVersion || '').trim()
})
return apiRequest(`/agent-assets/${assetId}/versions/compare?${query.toString()}`)
}
export function fetchAgentAssetSpreadsheetChangeRecords(assetId, limit = 30) {
return apiRequest(
`/agent-assets/${assetId}/spreadsheet/change-records${buildQuery({ limit })}`
)
}
export function updateAgentAsset(assetId, payload, options = {}) {
return apiRequest(`/agent-assets/${assetId}`, {
method: 'PATCH',
body: JSON.stringify(payload),
headers: buildWriteHeaders(options)
})
}
export function createAgentAssetVersion(assetId, payload, options = {}) {
return apiRequest(`/agent-assets/${assetId}/versions`, {
method: 'POST',
body: JSON.stringify(payload),
headers: buildWriteHeaders(options)
})
}
export function createAgentAssetReview(assetId, payload, options = {}) {
return apiRequest(`/agent-assets/${assetId}/reviews`, {
method: 'POST',
body: JSON.stringify(payload),
headers: buildWriteHeaders(options)
})
}
export function activateAgentAsset(assetId, options = {}) {
return apiRequest(`/agent-assets/${assetId}/activate`, {
method: 'POST',
headers: buildWriteHeaders(options)
})
}
export function restoreAgentAssetVersion(assetId, version, options = {}) {
return apiRequest(`/agent-assets/${assetId}/versions/${encodeURIComponent(version)}/restore`, {
method: 'POST',
headers: buildWriteHeaders(options)
})
}
export function fetchAgentRuns(params = {}) {
return apiRequest(`/agent-runs${buildQuery(params)}`)
}
export function fetchAgentRunDetail(runId) {
return apiRequest(`/agent-runs/${encodeURIComponent(runId)}`)
}