npm install @dlenroc/wdp --saveIn this Windows Device Portal (WDP) binding, all functions are available in 2 styles:
Via
WdpclassAllows you to initialize a class by passing the configuration once through the constructor.
import{Wdp}from'@dlenroc/wdp';// ESM// const { WDP } = require('@dlenroc/wdp'); // CJSconstwdp=newWdp({address: ... });constpackages=awaitwdp.getInstalledAppPackages()console.log(packages);
Via named import
Allows you to import/use individual methods, but requires passing the configuration as the first parameter.
import*aswdpfrom'@dlenroc/wdp';// ESM// const wdp = require('@dlenroc/wdp'); // CJSconstctx={address: ... };constpackages=awaitwdp.getInstalledAppPackages(ctx);console.log(packages);
Regardless of which method you choose, the configuration will look the same.
typeWdpCtx={// Targetaddress: string;username?: string;password?: string;// Abort signalsignal?: AbortSignal;// W3C compliant implementationsimplementations?: {fetch?: any;FormData?: any;WebSocket?: any;};}📝 The ability to provide implementations allows you to provide only features that are missing in the engine, as well as customize those that may not meet your needs.
Below you can see a simple example for Node.js 16 LTS using node-fetch and ws.
import{Wdp}from'@dlenroc/wdp';importnodeFetch,{Blob,FormData}from'node-fetch';import{readFile}from'node:fs/promises';importhttpsfrom'node:https';import{setTimeoutassleep}from'node:timers/promises';import{WebSocketasNodeWebSocket}from'ws';// Custom implementations without SSL verificationconstagent=newhttps.Agent({rejectUnauthorized: false});constfetch=(url,init)=>nodeFetch(url,{ ...init, agent });constWebSocket=function(url,protocols,options){returnnewNodeWebSocket(url,protocols,{ ...options, agent });};constwdp=newWdp({address: 'https://192.168.18.5:11443',username: 'auto-xbox',password: 'secret',implementations: { fetch, FormData, WebSocket },});// Install application// const appContent = new Blob([await readFile('app.msix')]);// await wdp.installApp('app.msix', appContent);// while (true) {// const state = await wdp.getInstallationState();// if (!state.InstallRunning) break;// await sleep(500);// }// Open "Microsoft Edge"constapp=awaitwdp.getInstalledAppPackages();constedge=app.InstalledPackages.find((app)=>app.Name==='Microsoft Edge');if(!edge)thrownewError('Microsoft Edge is not installed');awaitwdp.startApp(edge.PackageRelativeId);awaitsleep(5000);// Scroll pageconstinput=awaitwdp.getRemoteInput();input.move(50,50);for(leti=0;i<500;i++){input.verticalWheelMove(50,80,-20);awaitsleep(50);}input.disconnect();getInstalledAppPackages(options?: {streamable?: boolean;includeframeworkpackages?: boolean}): Promise<AppPackages>getContentGroups(packageFullName: string): Promise<ContentGroups>installApp(name: string,content: Blob,extra?: Record<string,Blob>): Promise<void>installCertificate(name: string,content: Blob): Promise<void>registerNetworkShareApp(app: NetworkAppPackages): Promise<void>getInstallationState(): Promise<InstallState>uninstallAppPackage(packageFullName: string): Promise<void>registerLooseApp(folder: string): Promise<void>uploadLooseApp(folder: string,files: Record<string,Blob>): Promise<void>pullInstallFromNetwork(install: Record<string,any>): Promise<void>deleteSshPins(): Promise<void>getDeployInfo(packageFullName: string,overlayFolder?: string): Promise<AppDeployInfo>getPairedBluetoothDevices(): Promise<PairedBluetoothDevices>getAvailableBluetoothDevices(): Promise<AvailableBluetoothDevices>getBluetoothRadios(): Promise<BluetoothRadios>setBluetoothRadioState(id: string,enable: boolean): Promise<void>removeBluetoothDevice(deviceId: string): Promise<void>disconnectBluetoothDevice(deviceId: string): Promise<void>connectBluetoothDevice(deviceId: string): Promise<void>getSSLCertificate(): Promise<Blob>getContainers(): Promise<any>getPluginTools(): Promise<PluginTools>getPluginWorkspaces(): Promise<Workspaces>getUniqueId(): Promise<UniqueId>getDevices(): Promise<Devices>getUsbDevices(): Promise<UsbDevices>getServiceTags(): Promise<ServiceTags>deleteAllServiceTags(): Promise<void>addServiceTag(tag: string): Promise<void>deleteServiceTag(tag: string): Promise<void>getCrashDumps(): Promise<AppCrashDumps>getCrashDumpControlSettings(packageFullName: string): Promise<AppCrashDumpSettings>setCrashDumpControlSettings(packageFullName: string,enable: boolean): Promise<void>getCrashDump(packageFullName: string,fileName: string): Promise<Blob>deleteCrashDump(packageFullName: string,fileName: string): Promise<void>getProcessDump(pid: number): Promise<Blob>getKernelDump(): Promise<Blob>getBugCheckDumps(): Promise<DumpFiles>getBugCheckDump(filename: string): Promise<Blob>getCrashControlSettings(): Promise<DumpSetting>setCrashControlSettings(settings: DumpSetting): Promise<DumpSetting>getWerReports(): Promise<WerReports>getWerReportFiles(user: string,type: string,name: string): Promise<WerReportFiles>getWerReportFile(user: string,type: string,name: string,file: string): Promise<Blob>getEtwEvents(): Promise<EtwEvents>getEtwProviders(): Promise<EtwProviders>getCustomEtwProviders(): Promise<EtwProviders>getFeatures(): Promise<FeatureCategories>setFeatureState(id: string,state: boolean): Promise<void>getFiddlerTracingState(): Promise<FiddlerTracingState>enableFiddler(proxyAddress: string,proxyPort: number,cert?: Blob): Promise<void>disableFiddler(): Promise<void>getKnownFolders(): Promise<KnownFolders>getFiles(knownFolderId: string,options?: {packageFullName?: string;path?: string}): Promise<KnownFolderFiles>deleteFile(knownFolderId: string,filename: string,options: {packageFullName?: string;path?: string}): Promise<void>renameFile(knownFolderId: string,filename: string,newFilename: string,options: {packageFullName?: string;path?: string}): Promise<void>createFolder(knownFolderId: string,newFolderName: string,options: {packageFullName?: string;path?: string}): Promise<void>getFile(knownFolderId: string,filename: string,options?: {packageFullName?: string;path?: string}): Promise<Blob>uploadFiles(knownFolderId: string,files: Record<string,Blob>,options: {packageFullName?: string;path?: string;extract?: boolean}): Promise<void>getHttpMonitorState(): Promise<HttpMonitorState>getHttpMonitor(): Promise<HttpMonitor>getLocationOverrideMode(): Promise<LocationOverride>setLocationOverrideMode(override: boolean): Promise<LocationOverride>getLocation(): Promise<Location>setLocation(position: Location): Promise<Location>getScreenshot(): Promise<Blob>getNetworkCredentials(): Promise<NetworkCredentials>addNetworkCredential(networkPath: string,username: string,password: string): Promise<void>deleteNetworkCredential(networkPath: string): Promise<void>getIpConfig(): Promise<NetworkAdapters>setIpConfig(guid: string,options?: {ipAddress?: string;subnetMask?: string;defaultGateway?: string;primaryDNS?: string;secondaryDNS?: string}): Promise<void>setComputerName(name: string): Promise<void>getComputerName(): Promise<ComputerName>getXboxInfo(): Promise<XboxInfo>getOsInfo(): Promise<OSInfo>getDeviceFamily(): Promise<DeviceFamily>startCustomWprTrace(name: string,content: Blob): Promise<WprTraceState>startCustomWprBootTrace(name: string,content: Blob): Promise<WprTraceState>startWprTrace(profile: string): Promise<WprTraceState>startWprBootTrace(profile: string): Promise<WprTraceState>stopWprTrace(): Promise<void>stopWprBootTrace(): Promise<void>getWprTraceState(): Promise<WprTraceState>getWprTraces(): Promise<WprTraces>getWprTrace(filename: string): Promise<Blob>deleteWprTrace(filename: string): Promise<void>getPowerState(): Promise<PowerState>getBatteryState(): Promise<BatteryState>getPowerConfig(scheme: string): Promise<PowerConfig>setPowerConfig(scheme: string,valueAC: number,valueDC: number): Promise<void>setPowerActiveScheme(scheme: string): Promise<void>getPowerActiveScheme(): Promise<ActivePowerScheme>getSleepStudyReports(): Promise<SleepStudyReports>getSleepStudyReport(fileName: string): Promise<Blob>getSleepStudyTransform(): Promise<Blob>getRootKeys(containerId?: string): Promise<RegistryRootKeys>getSubKeys(rootKey: string,options?: {regKey?: string;containerId?: string}): Promise<RegistrySubKeys>getRegValues(rootKey: string,options?: {regKey?: string;containerId?: string}): Promise<RegistryValues>restart(): Promise<void>shutdown(): Promise<void>getPhysicalControllers(): Promise<PhysicalControllers>disconnectPhysicalControllers(): Promise<void>getRemoteInput(options?: {timeout?: number}): Promise<RemoteInput>getProcesses(options?: {containerId?: string}): Promise<Processes>getSystemPerformanceStatistics(): Promise<PerformanceStatistics>getSmbCredentials(): Promise<SmbCredentials>getSettings(): Promise<Settings>getSetting(name: string): Promise<Setting>setSetting(name: string,value: any): Promise<Setting>startApp(appId: string,options?: {holographic?: boolean;packageFullName?: string}): Promise<void>stopApp(packageFullName: string,force?: boolean): Promise<void>suspendApp(packageFullName: string): Promise<void>resumeApp(packageFullName: string): Promise<void>stopProcess(pid: number,options?: {containerId?: string}): Promise<void>getSignedInUser(): Promise<ActiveUser>getUsers(): Promise<Users>deleteUser(userId: number): Promise<void>addUser(email: string,password: string,autoSignIn?: boolean): Promise<void>setUserSignInState(userId: number,signIn: boolean): Promise<void>getWindows(containerId?: string): Promise<any>getWirelessInterfaces(): Promise<WifiInterfaces>getAvailableWirelessNetworks(guid: string): Promise<WifiNetworks>connectToNetwork(guid: string,ssid: string,key: string,createProfile?: boolean): Promise<void>connectToNetworkUsingProfile(guid: string,profile: string): Promise<void>disconnectFromNetwork(guid: string): Promise<void>deleteWifiProfile(guid: string,profile: string): Promise<void>getXboxLiveSandbox(): Promise<XboxLiveSandbox>setXboxLiveSandbox(sandbox: string): Promise<XboxLiveSandbox>