Files
chimera-Public/renderer/pork-web-shim.js
T

2 lines
37 KiB
JavaScript

!function(){"use strict";if(window.pork)return;let e=null;const t=fetch("/api/auth/status",{credentials:"same-origin"}).then(async t=>{const a=await t.json();if(!a.authenticated)throw location.replace("/server-login.html"),new Error("Authentication required");return e=a.csrfToken,a}),a=new Map;let o=null;function s(e){let t="";for(let a=0;a<e.length;a+=32768)t+=String.fromCharCode(...e.subarray(a,a+32768));return btoa(t)}function r(e){if(null==e)return e;if(e instanceof ArrayBuffer)return{__porkBinary:!0,base64:s(new Uint8Array(e))};if(ArrayBuffer.isView(e))return{__porkBinary:!0,base64:s(new Uint8Array(e.buffer,e.byteOffset,e.byteLength))};if(Array.isArray(e))return e.map(e=>r(e));if("object"==typeof e){const t={};for(const[a,o]of Object.entries(e))t[a]=r(o);return t}return e}function i(e){if(!e||"object"!=typeof e)return e;if(!0===e.__porkBinary&&"string"==typeof e.base64)return function(e){const t=atob(e),a=new Uint8Array(t.length);for(let e=0;e<t.length;e++)a[e]=t.charCodeAt(e);return a}(e.base64);if(Array.isArray(e))return e.map(e=>i(e));const t={};for(const[a,o]of Object.entries(e))t[a]=i(o);return t}async function n(a,...o){await t;const s=await fetch(`/api/commands/${encodeURIComponent(a)}`,{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json","X-CSRF-Token":e},body:JSON.stringify({args:r(o)})});if(401===s.status)throw location.replace("/server-login.html"),new Error("Authentication required");const n=await s.json();if(!n.ok){const e=new Error(n.error||"IPC error");throw e.status=s.status,e.code=n.code||"COMMAND_FAILED",e.expected=["NOT_CONFIGURED","UNAVAILABLE","UPSTREAM_UNAVAILABLE"].includes(e.code),e}return i(n.result)}async function p(a,{method:o="GET",body:s}={}){await t;const r={"X-CSRF-Token":e};void 0!==s&&(r["Content-Type"]="application/json");const i=await fetch(a,{method:o,credentials:"same-origin",headers:r,body:void 0===s?void 0:JSON.stringify(s)});if(401===i.status)throw location.replace("/server-login.html"),new Error("Authentication required");const n=await i.json();if(!i.ok||!1===n.ok)throw new Error(n.error||`HTTP ${i.status}`);return n}function c(e){return"string"==typeof e&&e.startsWith("pork-cache://")?"/pork-cache/"+e.slice(13):e}async function l(e){const t=await e;if(t?.downloadUrl){const e=document.createElement("a");e.href=t.downloadUrl,e.download=t.filename||"",e.style.display="none",document.body.appendChild(e),e.click(),e.remove()}return t}async function m(e){const t=await l(e);return t?.filename||t}function d(e=""){return new Promise((t,a)=>{const o=document.createElement("input");o.type="file",o.accept=e,o.style.display="none",o.addEventListener("change",async()=>{try{const e=o.files?.[0];t(e?{filename:e.name,data:new Uint8Array(await e.arrayBuffer())}:null)}catch(e){a(e)}finally{o.remove()}},{once:!0}),o.addEventListener("cancel",()=>{o.remove(),t(null)},{once:!0}),document.body.appendChild(o),o.click()})}function u(e=""){return new Promise((t,a)=>{const o=document.createElement("input");o.type="file",o.multiple=!0,o.accept=e,o.style.display="none",o.addEventListener("change",async()=>{try{const e=[...o.files||[]];t(await Promise.all(e.map(async e=>({name:e.name,data:new Uint8Array(await e.arrayBuffer())}))))}catch(e){a(e)}finally{o.remove()}},{once:!0}),o.addEventListener("cancel",()=>{o.remove(),t([])},{once:!0}),document.body.appendChild(o),o.click()})}function y(e,t){const a=window.prompt(`${e}\n\nGebruik een pad dat als volume in de Chimera-container is gekoppeld.`,t||"/data");return Promise.resolve(null!=a&&String(a).trim()?String(a).trim():null)}function h(e){const t=Object.getOwnPropertyDescriptor(e,"src");if(!t||!t.set)return;const a=t.set;Object.defineProperty(e,"src",{...t,set(e){a.call(this,c(e))}})}!function e(){const t="https:"===location.protocol?"wss:":"ws:";o=new WebSocket(`${t}//${location.host}/ws`),o.onmessage=e=>{try{const{channel:t,args:o}=JSON.parse(e.data),s=a.get(t);if(s)for(const e of s)e(...o||[])}catch(e){}},o.onclose=()=>setTimeout(e,2e3),o.onerror=()=>{try{o.close()}catch(e){}}}(),h(HTMLVideoElement.prototype),h(HTMLImageElement.prototype);const g=Element.prototype.setAttribute;Element.prototype.setAttribute=function(e,t){return"src"===e&&(t=c(t)),g.call(this,e,t)},window.pork={isWebMode:!0,minimize:()=>{},maximize:()=>{},close:()=>{},getSettings:()=>n("settings:get"),setSettings:e=>n("settings:set",e),isAdmin:()=>Promise.resolve(!0),ftpConnect:e=>n("ftp:connect",e),ftpDisconnect:()=>n("ftp:disconnect"),ftpStatus:()=>n("ftp:status"),ftpScan:()=>n("ftp:scan"),ftpDownload:e=>n("ftp:download",e),ftpDownloadFolder:e=>n("ftp:download-folder",{game_id:e}),ftpUpload:e=>n("ftp:upload",e),ftpInstallPfs:e=>n("ftp:install-pfs",e),ftpListDir:e=>n("ftp:list-dir",{path:e}),ftpFindGame:e=>n("ftp:find-game",{game_id:e}),ftpDeleteGame:(e,t)=>n("ftp:delete-game",{game_id:e,confirmation:t}),ftpDownloadFile:e=>n("ftp:download-file",{remotePath:e}),ftpDeleteFile:(e,t)=>n("ftp:delete-file",{remotePath:e,confirmation:t}),listGames:e=>n("db:games:list",e),listLibraryTitles:e=>n("library:titles:list",e),etahenLinkInventoryStatus:()=>n("etahen-link:inventory:status"),listStorageInventory:e=>n("storage:inventory:list",e||{}),labelStorageDevice:e=>n("storage:inventory:label",e||{}),storageGameLocator:e=>n("storage:locator:list",e||{}),guidedMoveList:e=>n("guided-move:list",e||{}),guidedMoveCreate:e=>n("guided-move:create",e||{}),guidedMoveCancel:e=>n("guided-move:cancel",{id:e}),guidedMoveReconcile:e=>n("guided-move:reconcile",{id:e}),gameMoveCapabilities:()=>n("game-move:capabilities"),installDestinations:e=>n("install:destinations:list",e||{}),packageRecipesList:e=>n("package-recipes:list",{titleId:e}),packageCatalog:()=>n("package-catalog:list"),compatibilityGuidance:e=>n("compatibility:guidance",e||{}),packageRecipeSave:e=>n("package-recipes:save",e),ps4PackageBuilderStatus:()=>n("ps4-packages:builder-status"),ps4PackageInspect:e=>n("ps4-packages:inspect",e),ps4PackageCreate:e=>n("ps4-packages:create",e),ps4PackageJobs:()=>n("ps4-packages:list"),ps4PackageJob:e=>n("ps4-packages:get",{id:e}),ps4PackageRun:e=>n("ps4-packages:run",{id:e}),ps4PackageResume:e=>n("ps4-packages:resume",{id:e}),ps4PackageRestorePlan:e=>n("ps4-packages:restore-plan",e),ps4PackageRestore:e=>n("ps4-packages:restore",e),ps4PackageRestoreVerify:e=>n("ps4-packages:restore-verify",{titleId:e}),ps5NativePackageBuilderStatus:()=>n("ps5-native-packages:builder-status"),ps5NativePackageInspectBackup:e=>n("ps5-native-packages:inspect-backup",e),ps5NativePackageInspectFile:e=>n("ps5-native-packages:inspect-package",{filePath:e}),ps5PackageComparison:e=>n("ps5-native-packages:compare",e),ps5UpstreamControl:(e,t)=>n(`ps5-native-packages:control-${e}`,t),ps5A8DistinctControl:(e,t)=>n(`ps5-native-packages:a8-distinct-control-${e}`,t),ps5A10TransitionControl:(e,t)=>n(`ps5-native-packages:a10-transition-control-${e}`,t),ps5LaunchReference:(e,t)=>n(`ps5-native-packages:launch-reference-${e}`,t),ps5NativePackageCreate:e=>n("ps5-native-packages:create",e),ps5NativePackageJobs:()=>n("ps5-native-packages:list"),ps5NativePackageJob:e=>n("ps5-native-packages:get",{id:e}),ps5NativePackageRun:e=>n("ps5-native-packages:run",{id:e}),ps5NativePackageResume:e=>n("ps5-native-packages:resume",{id:e}),ps5ConsoleStagingProbe:()=>n("ps5-console-staging:probe"),ps5ConsoleStagingDiscover:e=>n("ps5-console-staging:discover",{titleId:e}),ps5ConsoleStagingCreate:e=>n("ps5-console-staging:create",e),ps5ConsoleStagingJobs:()=>n("ps5-console-staging:list"),ps5ConsoleStagingJob:e=>n("ps5-console-staging:get",{id:e}),ps5ConsoleStagingRun:e=>n("ps5-console-staging:run",{id:e}),ps5ConsoleStagingResume:e=>n("ps5-console-staging:resume",{id:e}),ps5NativePackageRestorePlan:e=>n("ps5-native-packages:restore-plan",e),ps5NativePackageRestore:e=>n("ps5-native-packages:restore",e),ps5NativePackageRestoreStatus:e=>n("ps5-native-packages:restore-status",{operationId:e}),ps5NativePackageRestoreList:()=>n("ps5-native-packages:restore-list"),ps5NativePackageRestoreCancel:(e,t)=>n("ps5-native-packages:restore-cancel",{operationId:e,confirmation:t}),ps5NativePackageRestoreVerify:e=>n("ps5-native-packages:restore-verify","object"==typeof e?e:{titleId:e}),ps5NativePackageRestoreLaunchPlan:e=>n("ps5-native-packages:restore-launch-plan",{operationId:e}),ps5NativePackageRestoreLaunch:e=>n("ps5-native-packages:restore-launch",e),ps5NativePackageRestoreLaunchStatus:e=>n("ps5-native-packages:restore-launch-status",{operationId:e}),recordSemanticEvidence:e=>n("library:evidence:override",e),listSemanticEvidence:e=>n("library:evidence:list",e||{}),legacySemanticDiagnostics:()=>n("library:legacy-diagnostics"),gameCatalogHealth:()=>n("games:catalog-health"),updateGame:e=>n("db:games:update",e),updateGameMetadata:(e,t)=>n("games:metadata-override",{game_id:e,fields:t}),listBackups:e=>n("db:backups:list",e),deleteBackup:(e,t)=>n("db:backups:delete",{id:e,confirmation:t}),addBackup:(e,t)=>n("db:backups:upsert",{game_id:e,backup_path:t}),getStats:()=>n("db:stats"),dbQuery:e=>n("db:query",{sql:e}),dbClear:e=>n("db:clear",{confirmation:e}),dbClearSelective:(e,t)=>n("db:clear-selective",{...e,confirmation:t}),dbDeleteRows:(e,t,a)=>n("db:delete-rows",{table:e,ids:t,confirmation:a}),dbClearHashes:e=>n("db:clear-hashes",{confirmation:e}),exportSql:()=>m(n("db:export:sql")),exportCsv:e=>m(n("db:export:csv",{table:e})),scanBackups:()=>n("local:scan-backups"),selectFolder:()=>y("Servermap (bijv. /game-backups, /payloads of /import):","/game-backups"),openShell:e=>(/^https?:\/\//i.test(String(e||""))&&window.open(e,"_blank","noopener,noreferrer"),Promise.resolve({ok:!0})),prosperoFetch:e=>n("prospero:fetch",{game_id:e}),prosperoFetchIcon:e=>n("prospero:fetch-icon",{game_id:e}),prosperoRefreshAll:()=>n("prospero:refresh-all"),backporksList:()=>n("backporks:list"),backporksAdd:(e,t)=>n("backporks:add",{name:e,path:t}),backporksAddRoot:e=>n("backporks:add-root",{rootPath:e}),backporksRemove:(e,t)=>n("backporks:remove",{id:e,confirmation:t}),backporksScan:e=>n("backporks:scan",{id:e}),backporksScanAll:()=>n("backporks:scan-all"),backporksGames:e=>n("backporks:games",{folder:e}),backporksEntries:e=>n("backporks:entries",{game_id:e}),backporksPork:(e,t,a)=>n("backporks:pork",{game_id:e,folder_name:t,folder_path:a}),backporksCreateFolder:(e,t)=>n("backporks:create-folder",{name:e,parentPath:t}),firmwareLabels:()=>n("db:firmware:labels"),hashStatus:e=>n("hash:status",{game_id:e}),hashCompute:(e,t)=>n("hash:compute",{backup_path:e,game_id:t}),hashAdd:e=>n("hash:add",e),hashExport:()=>m(n("hash:export")),hashBulk:e=>n("hash:bulk",{source:e}),hashImportCommunity:async()=>{const e=await d(".json,application/json");return e?n("hash:import-community",e):null},hashCommunityInfo:()=>n("hash:community-info"),hashGameSummary:()=>n("hash:game-summary"),savemgrPushPayload:e=>n("savemgr:push-payload",e),savemgrStart:()=>n("savemgr:start"),savemgrRequest:e=>n("savemgr:request",{path:e}),savemgrUpload:(e,t)=>n("savemgr:upload",{path:e,data:t}),savemgrDownload:(e,t)=>l(n("savemgr:download",{path:e,filename:t})),savemgrDecrypt:(e,t)=>l(n("savemgr:decrypt",{data:e,filename:t})),savemgrResign:(e,t,a)=>l(n("savemgr:resign",{data:e,aid:t,filename:a})),savemgrIcon:()=>n("savemgr:icon"),savemgrDumpUsb:e=>n("savemgr:dump-usb",{idx:e}),savemgrCreatePfs:e=>n("savemgr:create-pfs",{size:e}),savemgrDownloadNew:(e,t)=>l(n("savemgr:download-new",{name:e,aid:t})),psnotifySend:(e,t)=>n("psnotify:send",{message:e,subMessage:t}),psnotifyHistory:()=>n("psnotify:history"),psnotifyTest:()=>n("psnotify:test"),psnotifyPushPayload:()=>n("psnotify:pushPayload"),y2jbCheck:()=>n("y2jb:check"),y2jbApply:()=>n("y2jb:apply"),y2jbDiscover:(e=!1)=>n("y2jb:discover",{refresh:e}),y2jbGenCatalog:()=>n("y2jbgen:catalog"),y2jbGenSelectPayloads:()=>u(".elf,.bin,.js,.jar"),y2jbGenBuild:e=>l(n("y2jbgen:build",e)),systemStateStatus:()=>n("system-state:status"),systemStateDeploy:()=>n("system-state:deploy"),systemStateCommand:e=>n("system-state:command",e),bdjbGenSelectPayloads:()=>u(".elf,.bin"),bdjbGenBuild:e=>l(n("bdjbgen:build",e)),transferState:()=>n("transfer:state"),transferPause:()=>n("transfer:pause"),transferResume:()=>n("transfer:resume"),transferCancel:e=>n("transfer:cancel",{id:e}),transferClearDone:()=>n("transfer:clear-done"),transferSetConcurrent:e=>n("transfer:set-concurrent",{n:e}),transferRetry:e=>n("transfer:retry",{id:e}),transferSetPolicy:e=>n("transfer:set-policy",e),payloadSourcesList:()=>n("payload:sources:list"),payloadSourcesAdd:(e,t)=>n("payload:sources:add",{name:e,url:t}),payloadSourcesRemove:(e,t)=>n("payload:sources:remove",{id:e,confirmation:t}),payloadSourcesToggle:e=>n("payload:sources:toggle",{id:e}),payloadCheckUpdates:e=>n("payload:check-updates",null!=e?{id:e}:{}),payloadCatalog:()=>n("payload:catalog"),payloadUpdateDownloaded:()=>n("payload:update-downloaded"),payloadDownload:e=>n("payload:download",e),payloadListLocal:()=>n("payload:list-local"),payloadListRemote:()=>n("payload:list-remote"),payloadPush:e=>n("payload:push",e),payloadDeleteRemote:(e,t)=>n("payload:delete-remote",{filename:e,confirmation:t}),payloadDeleteLocal:e=>n("payload:delete-local",e),ps5ServiceMatrix:()=>n("system:service-matrix"),openSystemViewPopout:()=>(window.open("/system-view.html","chimera-system-view","popup=yes,width=1280,height=800,noopener,noreferrer"),Promise.resolve({ok:!0})),cheatsStats:()=>n("cheats:stats"),cheatsForGame:e=>n("cheats:for-game",{cusa_id:e}),cheatsSearch:e=>n("cheats:search",{query:e}),cheatsAll:()=>n("cheats:all"),cheatsFetchIndex:()=>n("cheats:fetch-index"),cheatsDownloadAll:()=>n("cheats:download-all"),cheatsCancel:()=>n("cheats:cancel"),cheatsUnmatched:()=>n("cheats:unmatched"),cheatsAssign:(e,t)=>n("cheats:assign",{filename:e,cusaId:t}),cheatsFtpInstall:e=>n("cheats:ftp-install",{remotePath:e}),mediaCatalog:()=>n("media:catalog"),mediaScan:e=>n("media:scan",e||{}),mediaScanCancel:()=>n("media:scan:cancel"),mediaDownload:e=>n("media:download",e),mediaFetchThumb:e=>n("media:fetch-thumb",{remotePath:e}),mediaGetCachePath:e=>n("media:get-cache-path",{remotePath:e}),mediaFetchVideoPreview:e=>n("media:fetch-video-preview",{remotePath:e}),mediaOpen:async e=>{const t=await n("media:open",{remotePath:e});return t?.url&&window.open(t.url,"_blank","noopener,noreferrer"),t},mediaDiscordSend:e=>n("media:discord-send",e),mediaFetchClipThumbs:e=>n("media:batch-clip-thumbs",e),mediaLoadClipThumbs:()=>n("media:clip-thumbs:load"),mediaCacheStatus:()=>n("media:cache:status"),mediaCachePin:(e,t)=>n("media:cache:pin",{id:e,pinned:t}),mediaCacheClear:e=>n("media:cache:clear",e||{}),mediaCacheRetention:e=>n("media:cache:retention",e||{}),mediaImportsList:(e="")=>p("/api/media/imports"+(e?`?titleId=${encodeURIComponent(e)}`:"")).then(e=>e.result),mediaImportFinalize:e=>p("/api/media/imports/finalize",{method:"POST",body:e}).then(e=>e.result),mediaImportPreferred:(e,t)=>p("/api/media/imports/preferred",{method:"POST",body:{titleId:e,assetId:t}}).then(e=>e.result),autoloaderList:()=>n("autoloader:list"),autoloaderRead:()=>n("autoloader:read"),autoloaderSave:e=>n("autoloader:save",{content:e}),autoloaderSaveLocal:e=>n("autoloader:save-local",e),payloadManagerAutoloadRepairPlan:()=>n("payload-manager:autoload-repair-plan"),payloadManagerAutoloadRepairApply:e=>n("payload-manager:autoload-repair-apply",e),payloadManagerVerifiedStart:e=>n("payload-manager:verified-start",e),payloadManagerAutoloadRollbackPlan:()=>n("payload-manager:autoload-repair-rollback-plan"),payloadManagerAutoloadRollbackApply:e=>n("payload-manager:autoload-repair-rollback",e),etaHenAutoloadPersistencePlan:()=>n("etahen:autoload-persistence-plan"),etaHenAutoloadPersistenceApply:e=>n("etahen:autoload-persistence-apply",e),etaHenDirectStart:e=>n("etahen:direct-start",e),etaHenAutoloadPersistenceRollbackPlan:()=>n("etahen:autoload-persistence-rollback-plan"),etaHenAutoloadPersistenceRollback:e=>n("etahen:autoload-persistence-rollback",e),snapshotTake:e=>n("snapshot:autoloader:take",{label:e}),snapshotList:()=>n("snapshot:autoloader:list"),snapshotRestore:(e,t)=>n("snapshot:autoloader:restore",{id:e,confirmation:t}),snapshotDelete:(e,t)=>n("snapshot:autoloader:delete",{id:e,confirmation:t}),snapshotExport:e=>l(n("snapshot:autoloader:export",{id:e})),snapshotImport:async e=>{if(e?.data)return n("snapshot:autoloader:import",e);const t=await d(".porksnap,.zip,application/zip");return t?n("snapshot:autoloader:import",{...t,label:e?.label||""}):{canceled:!0}},langList:()=>n("lang:list"),langLoad:e=>n("lang:load",e),langExportBase:()=>m(n("lang:export-base")),langImport:async()=>{const e=await d(".json,application/json");return e?n("lang:import",e):{canceled:!0}},payloadTcpSend:e=>n("payload:tcp-send",e),pldmgrProbe:()=>n("pldmgr:probe"),pldmgrObservability:()=>n("pldmgr:observability"),pldmgrLaunchPreflight:e=>n("pldmgr:launch-preflight",{path:e}),pldmgrEmbedUrl:()=>n("pldmgr:embed-url"),pldmgrRequest:e=>n("pldmgr:request",{route:e}),pldmgrLaunch:(e,t=!1,a="")=>n("pldmgr:launch",{path:e,confirmConflict:t,confirmation:a}),xavatarUploadToPs5:(e,t)=>n("xavatar:upload-to-ps5",{buffer:e,filename:t}),xavatarSaveFile:(e,t)=>l(n("xavatar:save-file",{buffer:e,filename:t})),xavatarConvertCanvas:(e,t,a,o)=>n("xavatar:convert-rgba",{rgba:e,width:t,height:a,filename:o}),xavatarExtractPng:e=>n("xavatar:extract-png",{buffer:e}),xavatarCompanion:()=>n("xavatar:companion"),xavatarInstallCompanion:(e="")=>n("xavatar:install-companion",{confirmation:e}),ps5ProfileInspect:()=>n("ps5-profile:inspect"),ps5ProfileRuntimeStatus:()=>n("ps5-profile:runtime-status"),ps5ProfileRuntimePreflight:()=>n("ps5-profile:runtime-preflight"),ps5ProfileStartPayload:e=>n("ps5-profile:start-payload",e),ps5P15A10:(e,t)=>n(`ps5-p15-a10:${e}`,t),ps5P15R2Status:()=>n("ps5-p15-r2:status"),ps5P15R2Preflight:()=>n("ps5-p15-r2:preflight"),ps5P15R2Qualify:()=>n("ps5-p15-r2:qualify"),ps5ProfileCurrentAvatar:e=>n("ps5-profile:current-avatar",e),ps5ProfileListOperations:()=>n("ps5-profile:list-operations"),ps5ProfilePrepareRename:e=>n("ps5-profile:prepare-rename",e),ps5ProfilePrepareAvatar:e=>n("ps5-profile:prepare-avatar",e),ps5ProfileApply:e=>n("ps5-profile:apply",e),ps5ProfileRollback:e=>n("ps5-profile:rollback",e),convToolInfo:()=>n("conv:tool-info"),convExfatToolInfo:()=>n("conv:exfat-tool-info"),convToolPick:()=>Promise.resolve(null),convExfatToolPick:()=>Promise.resolve(null),convPickOutputDir:async()=>{const e=await y("Map voor conversie-uitvoer:","/export");return e&&await n("settings:set",{convOutputDir:e}),e},convPickTempDir:async()=>{const e=await y("Tijdelijke servermap:","/data/tmp");return e&&await n("settings:set",{convTempDir:e}),e},convQueueAdd:e=>n("conv:queue:add",e),convQueueAddBatch:e=>n("conv:queue:add-batch",e),convQueueList:()=>n("conv:queue:list"),convQueueIsPaused:()=>n("conv:queue:is-paused"),convQueueStart:()=>n("conv:queue:start"),convQueueCancel:e=>n("conv:queue:cancel",{id:e}),convQueueClearDone:()=>n("conv:queue:clear-done"),convQueueRetry:e=>n("conv:queue:retry",{id:e}),convQueueCleanupTemp:()=>n("conv:queue:cleanup-temp"),garlicStart:()=>n("garlic:start"),eaVersion:()=>n("ea:version"),eaStart:()=>n("ea:start"),eaEmbedUrl:()=>n("ea:embed-url"),eaList:e=>n("ea:list",{path:e}),eaStat:e=>n("ea:stat",{path:e}),eaUsb:()=>n("ea:usb"),eaMkdir:e=>n("ea:mkdir",{path:e}),eaRename:(e,t)=>n("ea:rename",{src:e,dst:t}),eaDelete:(e,t)=>n("ea:delete",{path:e,recursive:t,confirmation:"VERWIJDER"}),eaCopy:(e,t)=>n("ea:copy",{src:e,dst:t}),eaMove:(e,t)=>n("ea:move",{src:e,dst:t}),eaJobStatus:()=>n("ea:job-status"),eaJobCancel:()=>n("ea:job-cancel"),eaLaunch:(e,t,a)=>n("ea:launch",{path:e,args:t,daemon:a}),eaDownload:(e,t)=>l(n("ea:download",{path:e,filename:t})),eaUpload:async(e,t)=>{const a=await d();if(!a)return null;return n("ea:upload",{remotePath:String(t||"/data/").endsWith("/")?`${t||"/data/"}${a.filename}`:String(t),filename:a.filename,data:a.data})},pfsFoldersList:()=>n("pfsripper:folders:list"),pfsFoldersAdd:async()=>{const e=await y("PFS-bibliotheekmap:","/import");return e?n("pfsripper:folders:add",{folder:e}):null},pfsFoldersRemove:e=>n("pfsripper:folders:remove",{folder:e}),pfsScan:()=>n("pfsripper:scan"),pfsExportCopy:e=>n("pfsripper:export-copy",{path:e}),pfsExportFtp:(e,t)=>n("pfsripper:export-ftp",{path:e,remoteDir:t}),pfsReveal:e=>n("pfsripper:reveal",{path:e}),operationsStatus:()=>n("operations:status"),operationsRuns:e=>n("operations:runs",{limit:e}),operationsConfigureTask:(e,t)=>n("operations:task:configure",{taskId:e,...t}),operationsRunTask:e=>n("operations:task:run",{taskId:e}),backupReplicationStatus:()=>n("backup-replication:status"),backupReplicationRun:e=>n("backup-replication:run",e||{}),backupReplicationVerify:e=>n("backup-replication:verify",{id:e}),backupReplicationRestoreDrill:e=>n("backup-replication:restore-drill",{id:e}),backupReplicationRetention:()=>n("backup-replication:retention-preview"),backupReplicationRetentionSave:e=>n("backup-replication:retention-configure",e),monitoringSnapshot:()=>n("monitoring:snapshot"),monitoringTokenStatus:()=>n("monitoring:token-status"),monitoringTokenRotate:()=>n("monitoring:token-rotate"),commandCatalog:()=>p("/api/commands/catalog"),authSessions:()=>p("/api/auth/sessions"),authSessionRevoke:e=>p("/api/auth/sessions/revoke",{method:"POST",body:{id:e}}),authPasswordChange:(e,t)=>p("/api/auth/password",{method:"POST",body:{currentPassword:e,newPassword:t}}),importUploadCreate:e=>p("/api/import/uploads",{method:"POST",body:{files:e}}).then(e=>e.result),importUploadList:()=>p("/api/import/uploads").then(e=>e.result),importUploadGet:e=>p(`/api/import/uploads/${encodeURIComponent(e)}`).then(e=>e.result),importUploadCancel:e=>p(`/api/import/uploads/${encodeURIComponent(e)}`,{method:"DELETE"}).then(e=>e.result),importUploadChunk:(a,o,s,r,i)=>async function(a,o,s,r,i){await t;const n=await fetch(`/api/import/uploads/${encodeURIComponent(a)}/files/${encodeURIComponent(o)}`,{method:"PUT",credentials:"same-origin",body:r,headers:{"X-CSRF-Token":e,"Upload-Offset":String(s),"X-Chunk-SHA256":i,"Content-Type":"application/octet-stream"}});if(401===n.status)throw location.replace("/server-login.html"),new Error("Authentication required");const p=await n.json();if(!n.ok||!1===p.ok)throw new Error(p.error||`HTTP ${n.status}`);return{...p.result,uploadOffset:Number(n.headers.get("upload-offset")||s)}}(a,o,s,r,i),importJobCreate:e=>p("/api/import/jobs",{method:"POST",body:{uploadSessionId:e}}).then(e=>e.result),importJobList:()=>p("/api/import/jobs").then(e=>e.result),importJobGet:e=>p(`/api/import/jobs/${encodeURIComponent(e)}`).then(e=>e.result),importClassify:e=>p(`/api/import/jobs/${encodeURIComponent(e)}/classification`,{method:"POST",body:{}}).then(e=>e.result),importClassificationGet:e=>p(`/api/import/jobs/${encodeURIComponent(e)}/classification`).then(e=>e.result),importManifestPreview:(e,t)=>p(`/api/import/jobs/${encodeURIComponent(e)}/manifest/preview`,{method:"POST",body:t}).then(e=>e.result),importManifestCreate:(e,t)=>p(`/api/import/jobs/${encodeURIComponent(e)}/manifest`,{method:"POST",body:t}).then(e=>e.result),importDestinations:()=>p("/api/import/destinations").then(e=>e.result),importJobValidate:e=>p(`/api/import/jobs/${encodeURIComponent(e)}/validate`,{method:"POST",body:{inspectionPassed:!0,userValidated:!0}}).then(e=>e.result),importJobFinalize:(e,t)=>p(`/api/import/jobs/${encodeURIComponent(e)}/finalize`,{method:"POST",body:t}).then(e=>e.result),recoveryList:()=>n("recovery:list"),recoveryCreate:e=>n("recovery:create",e||{}),recoveryVerify:e=>n("recovery:verify",{id:e}),recoveryImport:async()=>{const e=await y("Recovery ZIP op de server:","/import/chimera-recovery.zip");return e?n("recovery:import",{path:e}):null},recoveryExport:e=>l(n("recovery:export",{id:e})),recoveryRestore:(e,t)=>n("recovery:restore",{id:e,restoreRemote:t,confirmation:"HERSTEL"}),recoveryDelete:e=>n("recovery:delete",{id:e,confirmation:"VERWIJDER"}),storageAudit:()=>n("storage:audit"),storageStatus:()=>n("storage:status"),compatibilityGet:()=>n("compatibility:get"),compatibilitySet:e=>n("compatibility:set",e),shadowMountStatus:()=>n("shadowmount:status"),shadowMountProposal:()=>n("shadowmount:proposal"),shadowMountPreflight:e=>n("shadowmount:preflight",{config:e}),shadowMountSave:e=>n("shadowmount:save",e),shadowMountLogs:()=>n("shadowmount:logs"),packagesStatus:()=>n("packages:status"),packagesList:()=>n("packages:list"),packagesProgress:()=>n("packages:progress"),packagesInstallUrl:e=>n("packages:install-url",{url:e}),gameUpdatesCatalog:()=>n("game-updates:catalog"),gameUpdatesInspect:(e,t="")=>n("game-updates:manifest:inspect",{url:e,gameId:t}),gameUpdatesAutoInspect:(e,t=!1)=>n("game-updates:manifest:auto-inspect",{gameId:e,refresh:t}),gameUpdatesDiscover:(e,t=!1)=>n("game-updates:manifest:discover",{gameId:e,refresh:t}),gameUpdatesRefreshAll:()=>n("game-updates:manifest:refresh-all",{}),gameUpdatesDownload:e=>n("game-updates:download",{token:e}),gameUpdatesJobs:()=>n("game-updates:jobs"),gameUpdatesCancel:e=>n("game-updates:cancel",{id:e}),gameUpdatesStage:e=>n("game-updates:stage",{id:e}),gameUpdatesHttpsHandoff:e=>n("game-updates:https-handoff",{id:e}),gameUpdatesDelete:e=>n("game-updates:delete",{id:e,confirmation:"VERWIJDER"}),diagnosticsSummary:()=>n("diagnostics:summary"),diagnosticsLogs:e=>n("diagnostics:logs",{limit:e}),diagnosticsExport:()=>l(n("diagnostics:export")),auditQuery:e=>n("audit:query",e||{}),auditHealth:()=>n("audit:health"),auditExport:e=>l(n("audit:export",e||{})),klogStatus:()=>n("klog:status"),klogStart:e=>n("klog:start",e||{}),klogStop:()=>n("klog:stop"),klogQuery:e=>n("klog:query",e||{}),klogExport:e=>l(n("klog:export",e||{})),ecosystemOverview:()=>n("ecosystem:overview"),ecosystemServices:()=>n("ecosystem:services"),ecosystemComponents:()=>n("ecosystem:components:list"),ecosystemRefreshComponents:(e=!1)=>n("ecosystem:components:refresh",{force:e}),ecosystemInventory:()=>n("ecosystem:inventory"),trophyActiveCatalogStatus:()=>n("trophy:active-catalog:status"),trophyActiveCatalog:()=>n("trophy:active-catalog"),trophyInstalledCatalogStatus:()=>n("trophy:installed-catalog:status"),trophyInstalledCatalog:()=>n("trophy:installed-catalog"),trophyImportedCatalog:()=>n("trophy:imported-catalog:list"),trophyImportDefinition:e=>n("trophy:imported-catalog:import",{package:e}),trophyUnlockOne:e=>n("trophy:unlock-one",e),trophyHistoryImportStatus:()=>n("trophy:history-import:status"),trophyHistoryAuthenticate:e=>n("trophy:history-import:authenticate",e),trophyHistoryRevoke:()=>n("trophy:history-import:revoke"),trophyHistoryPreview:e=>n("trophy:history-import:preview",e),trophyHistoryApply:e=>n("trophy:history-import:apply",e),trophyHistorySnapshots:e=>n("trophy:history-import:snapshots",e||{}),trophyHistorySnapshot:e=>n("trophy:history-import:snapshot",e),trophyProgressionStatus:()=>n("trophy:progression:status"),trophyProgressionCatalogs:()=>n("trophy:progression:catalogs"),trophyProgressionCreate:e=>n("trophy:progression:create",e),trophyProgressionPlans:e=>n("trophy:progression:plans",e||{}),trophyProgressionPlan:e=>n("trophy:progression:plan",e),ecosystemCapabilityGraph:()=>n("ecosystem:capability-graph"),platformBindings:()=>n("platform:bindings:list"),platformBindingsRefresh:()=>n("platform:bindings:refresh"),platformBindingReview:e=>n("platform:bindings:review",e),unifiedAutoloaderList:()=>n("platform:autoloader:list"),unifiedAutoloaderSave:e=>n("platform:autoloader:save",e),unifiedAutoloaderRemove:e=>n("platform:autoloader:remove",e),unifiedAutoloaderPreview:e=>n("platform:autoloader:preview",e),unifiedAutoloaderRecovery:e=>n("platform:autoloader:recovery",e),platformWebsrvDiscover:()=>n("platform:websrv:discover"),remotePlayIntelligence:()=>n("platform:remote-play:intelligence"),shadps4Roots:()=>n("platform:shadps4:roots"),shadps4Select:e=>n("platform:shadps4:select",e),shadps4Scan:()=>n("platform:shadps4:scan"),shadps4Cached:()=>n("platform:shadps4:cached"),shadps4LaunchRoots:()=>n("platform:shadps4:launch-roots"),shadps4LaunchConfigure:e=>n("platform:shadps4:launch-configure",e),shadps4LaunchProbe:()=>n("platform:shadps4:launch-probe"),shadps4LaunchPlan:e=>n("platform:shadps4:launch-plan",e),shadps4Launch:e=>n("platform:shadps4:launch",e),platformArtifactRoots:()=>n("platform:artifacts:roots"),platformArtifacts:()=>n("platform:artifacts:list"),platformArtifactInspect:e=>n("platform:artifacts:inspect",e),platformArtifactReview:e=>n("platform:artifacts:review",e),platformAutoloaderStage:e=>n("platform:artifacts:stage-autoloader",e),platformOperationTypes:()=>n("platform:operations:types"),platformOperationStart:e=>n("platform:operations:start",e),platformOperations:()=>n("platform:operations:list"),platformOperation:e=>n("platform:operations:get",e),platformContracts:()=>n("platform:contracts"),platformNotifications:()=>n("platform:notifications"),platformSearch:e=>n("platform:search",e),ecosystemConsolePayloads:()=>n("ecosystem:console-payloads"),ecosystemPayloadWatchdog:()=>n("ecosystem:payload-runtime:watchdog"),ecosystemPayloadUpdates:()=>n("ecosystem:payload-runtime:updates"),ecosystemPayloadRefresh:()=>n("ecosystem:payload-runtime:refresh"),ecosystemPayloadInstall:e=>n("ecosystem:payload-runtime:install",e),chimeraBeaconStatus:()=>n("chimera-beacon:status"),chimeraBeaconArtifact:()=>n("chimera-beacon:artifact"),chimeraSentinelPair:e=>n("chimera-sentinel:pair",e),ecosystemUpdatePlan:e=>n("ecosystem:updates:plan",{selected:e}),ecosystemUpdatesRefresh:()=>n("ecosystem:updates:refresh"),ecosystemUpdatePrepare:e=>n("ecosystem:updates:prepare",e),ecosystemTrackVersion:(e,t)=>n("ecosystem:updates:track-version",{id:e,version:t}),ecosystemFollowAutomatic:e=>n("ecosystem:updates:follow-automatic",{id:e}),sessionExpertMode:(e,t)=>n("session:expert-mode",{enabled:e,confirmation:t}),ecosystemSupplyPolicy:()=>n("ecosystem:supply-chain:policy"),ecosystemSupplyPolicySave:e=>n("ecosystem:supply-chain:policy-save",e),ecosystemSupplyAudit:()=>n("ecosystem:supply-chain:audit"),ecosystemHealthLatest:()=>n("ecosystem:health:latest"),ecosystemHealthRun:(e=!1)=>n("ecosystem:health:run",{notify:e}),ecosystemHealthHistory:(e=30)=>n("ecosystem:health:history",{limit:e}),ecosystemHealthAcknowledge:e=>n("ecosystem:health:acknowledge",{id:e}),ecosystemHealthOptions:e=>n("ecosystem:health:options",{notificationsEnabled:e}),ecosystemActivity:(e=100)=>n("ecosystem:activity",{limit:e}),ecosystemWebsrvDiscover:()=>n("ecosystem:websrv:discover"),ecosystemWebsrvFiles:(e="/")=>n("ecosystem:websrv:files",{remotePath:e}),ecosystemWebsrvDownload:e=>l(n("ecosystem:websrv:download",{remotePath:e})),ecosystemWebsrvSmb:(e,t="")=>n("ecosystem:websrv:smb",{sourceId:e,smbPath:t}),ecosystemWebsrvSmbDownload:(e,t)=>l(n("ecosystem:websrv:smb-download",{sourceId:e,smbPath:t})),ecosystemLiveSession:()=>n("ecosystem:live-session"),remotePlayStatus:()=>n("remote-play:status"),remotePlayCompanion:()=>n("remote-play:companion"),remotePlayProfileExport:()=>l(n("remote-play:profile-export")),remotePlaySave:e=>n("remote-play:profile-save",e),remotePlayDiscover:()=>n("remote-play:discover"),remotePlayWake:()=>n("remote-play:wake",{confirmation:"WEK PS5"}),remotePlayStart:e=>n("remote-play:start",{...e,confirmation:"START REMOTE PLAY"}),remotePlayWorkerPackage:e=>l(n("remote-play:worker-package",e)),remotePlayWorkerAction:e=>n("remote-play:worker-action",e),remotePlayWorkerRemove:e=>n("remote-play:worker-remove",{workerId:e,confirmation:"VERWIJDER"}),ecosystemEtaHenGet:()=>n("ecosystem:etahen:get"),ecosystemEtaHenPreview:e=>n("ecosystem:etahen:preview",e),ecosystemEtaHenApply:(e,t="")=>n("ecosystem:etahen:apply",{...e,confirmation:t}),ecosystemEtaHenHistory:()=>n("ecosystem:etahen:history"),ecosystemEtaHenRestore:e=>n("ecosystem:etahen:restore",{id:e,confirmation:"HERSTEL"}),ecosystemHomebrewList:()=>n("ecosystem:homebrew:list"),ecosystemHomebrewScan:()=>n("ecosystem:homebrew:scan"),ecosystemHomebrewLaunch:(e,t="")=>n("ecosystem:homebrew:launch",{id:e,confirmation:t}),ecosystemPacbrewCatalog:()=>n("ecosystem:pacbrew:catalog"),ecosystemPacbrewRefresh:()=>n("ecosystem:pacbrew:refresh"),ecosystemPacbrewPackage:e=>n("ecosystem:pacbrew:package",{name:e}),ecosystemLinuxLab:()=>n("ecosystem:linux-lab"),ecosystemSources:()=>n("ecosystem:sources:list"),ecosystemSourceSave:e=>n("ecosystem:sources:save",e),ecosystemSourceRemove:e=>n("ecosystem:sources:remove",{id:e,confirmation:"VERWIJDER"}),ecosystemSourceTest:e=>n("ecosystem:sources:test",{id:e}),ecosystemSourceWebUis:()=>n("ecosystem:sources:webuis"),ezRemoteStatus:()=>n("ezremote:status"),ezRemoteDownloads:()=>n("ezremote:downloads"),ezRemoteDownload:e=>n("ezremote:download",e),consoleProfiles:()=>n("console-profiles:list"),consoleIdentity:()=>n("console:identity"),consoleProfilesCompare:()=>n("console-profiles:comparison"),consoleProfileSave:e=>n("console-profiles:save",e),consoleProfileActivate:e=>n("console-profiles:activate",{id:e}),consoleProfileRemove:e=>n("console-profiles:remove",{id:e,confirmation:"VERWIJDER"}),consoleStorageTopology:()=>n("console:storage-topology"),companionWorkers:()=>n("companion-workers:list"),companionWorkerSave:e=>n("companion-workers:save",e),companionWorkerRemove:e=>n("companion-workers:remove",{id:e,confirmation:"VERWIJDER"}),companionWorkerPair:e=>n("companion-workers:pair",e),companionWorkerCapabilities:e=>n("companion-workers:capabilities",{id:e}),companionWorkerSubmit:e=>n("companion-workers:submit",e),totpStatus:()=>n("auth:totp:status"),totpBegin:()=>n("auth:totp:begin"),totpConfirm:e=>n("auth:totp:confirm",{code:e}),totpDisable:e=>n("auth:totp:disable",{code:e,confirmation:"UITSCHAKELEN"}),genericNotificationStatus:()=>n("notifications:generic:status"),genericNotificationSave:e=>n("notifications:generic:save",e),genericNotificationTest:()=>n("notifications:generic:test"),genericNotificationPreview:e=>n("notifications:generic:preview",{rule:e}),automationSourcesAnalyze:()=>n("automation:sources:analyze"),automationProtectionStatus:()=>n("automation:protection:eligibility"),ecosystemPlugins:()=>n("ecosystem:plugins:list"),ecosystemPluginsScan:()=>n("ecosystem:plugins:scan"),ecosystemPluginInspect:e=>n("ecosystem:plugins:inspect",{id:e}),ecosystemPluginToggle:(e,t,a="")=>n("ecosystem:plugins:toggle",{id:e,enabled:t,confirmation:a}),ecosystemPluginInstall:async(e,t="")=>{const a=await d(".elf,.prx");return a?n("ecosystem:plugins:install",{filename:a.filename,data:a.data,targetRoot:e,confirmation:t}):null},ecosystemCheats:e=>n("ecosystem:cheats:list",e||{}),ecosystemCheatsSync:()=>n("ecosystem:cheats:sync"),ecosystemCheatDeploy:e=>n("ecosystem:cheats:deploy",e),ecosystemRemoteSaves:()=>n("ecosystem:saves:remote"),ecosystemSaveVault:()=>n("ecosystem:saves:list"),ecosystemSaveSnapshot:e=>n("ecosystem:saves:snapshot",{titleId:e}),ecosystemSaveSnapshotAll:()=>n("ecosystem:saves:snapshot-all"),ecosystemSaveDownload:e=>l(n("ecosystem:saves:download",{id:e})),ecosystemSaveDelete:e=>n("ecosystem:saves:delete",{id:e,confirmation:"VERWIJDER"}),ecosystemSaveRestoreCapabilities:()=>n("ecosystem:saves:restore-capabilities"),ecosystemSaveVerify:e=>n("ecosystem:saves:verify",{id:e}),ecosystemSaveRestorePlan:(e,t="")=>n("ecosystem:saves:restore-plan",{id:e,targetUid:t}),ecosystemSaveRestore:(e,t)=>n("ecosystem:saves:restore",{token:e,phrase:t,confirmation:"HERSTEL"}),ecosystemTimeline:(e={})=>n("ecosystem:timeline:status",e),ecosystemTimelineConfigure:e=>n("ecosystem:timeline:configure",e),ecosystemTimelineExport:(e={})=>l(n("ecosystem:timeline:export",e)),ecosystemTimelineStart:e=>n("ecosystem:timeline:start",{port:e}),ecosystemTimelineStop:()=>n("ecosystem:timeline:stop"),ecosystemTimelineImport:()=>n("ecosystem:timeline:import"),ecosystemItemzflowStatus:()=>n("ecosystem:itemzflow:status"),bpgenSdkPairs:()=>n("bpgen:sdk-pairs"),bpgenListMissing:e=>n("bpgen:list-missing",{firmwareLabel:e||""}),bpgenListAll:()=>n("bpgen:list-all-with-local"),bpgenPickFolder:()=>y("Backpork-uitvoermap:","/export"),bpgenRun:e=>n("bpgen:run",e),bpgenCancel:()=>n("bpgen:cancel"),bpgenFakelibScan:()=>n("bpgen:fakelib-scan"),bpgenFakelibSetBasedir:e=>n("bpgen:fakelib-set-basedir",{dir:e||null}),bpgenFakelibPickPup:()=>y("Pad naar het ontsleutelde .PUP.dec-bestand:","/import/PS5UPDATE.PUP.dec"),bpgenFakelibExtract:e=>n("bpgen:fakelib-extract",e),webuiStatus:()=>n("webui:status"),webuiStart:async()=>({ok:!1,...await n("webui:status"),error:"De webserver wordt door de Unraid-container beheerd."}),webuiStop:async()=>({ok:!1,...await n("webui:status"),error:"Stop of herstart Chimera vanuit de Unraid Dockerlijst."}),openDonate:()=>window.open("/donation.html","chimera-donation","popup=yes,width=720,height=760,noopener,noreferrer"),logout:async()=>{await t,await fetch("/api/auth/logout",{method:"POST",credentials:"same-origin",headers:{"X-CSRF-Token":e}}),location.replace("/server-login.html")},systemViewPickSave:()=>Promise.resolve({canceled:!0,filePath:""}),systemViewWriteFile:()=>Promise.resolve({ok:!1}),systemViewAppendFile:()=>Promise.resolve({ok:!1}),systemViewDeleteFile:()=>Promise.resolve({ok:!0}),on:(e,t)=>{a.has(e)||a.set(e,new Set),a.get(e).add(t)},off:e=>a.delete(e)},document.body?.classList.add("web-mode");const f=document.createElement("button");f.type="button",f.id="server-logout",f.textContent="Sign out",f.dataset.i18n="auth.signOut",f.setAttribute("aria-label","Sign out of Chimera server"),f.addEventListener("click",()=>window.pork.logout()),(document.getElementById("sidebar")||document.body)?.appendChild(f)}();