{"id":25094608,"url":"https://github.com/dlenroc/node-wdp","last_synced_at":"2025-07-08T06:06:43.011Z","repository":{"id":60945320,"uuid":"546227312","full_name":"dlenroc/node-wdp","owner":"dlenroc","description":"Client for Windows/Xbox Device Portal (WDP)","archived":false,"fork":false,"pushed_at":"2023-04-09T09:47:52.000Z","size":44,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-07-08T06:05:57.462Z","etag":null,"topics":["hololens","iot","windows-desktop","windows-device-portal","windows-mobile","xbox","xbox-device-portal"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dlenroc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-10-05T18:43:33.000Z","updated_at":"2022-10-07T06:31:22.000Z","dependencies_parsed_at":"2025-04-01T23:47:47.350Z","dependency_job_id":"9f119c3b-2b96-4660-b16a-62d0ba03c463","html_url":"https://github.com/dlenroc/node-wdp","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/dlenroc/node-wdp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dlenroc%2Fnode-wdp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dlenroc%2Fnode-wdp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dlenroc%2Fnode-wdp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dlenroc%2Fnode-wdp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dlenroc","download_url":"https://codeload.github.com/dlenroc/node-wdp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dlenroc%2Fnode-wdp/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264207082,"owners_count":23572727,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hololens","iot","windows-desktop","windows-device-portal","windows-mobile","xbox","xbox-device-portal"],"created_at":"2025-02-07T15:28:22.812Z","updated_at":"2025-07-08T06:06:42.992Z","avatar_url":"https://github.com/dlenroc.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# @dlenroc/wdp · [![NPM Version](https://img.shields.io/npm/v/@dlenroc/wdp)](https://www.npmjs.com/package/@dlenroc/wdp)\n\n## Installation\n\n```bash\nnpm install @dlenroc/wdp --save\n```\n\n## Usage\n\nIn this [Windows Device Portal (WDP)](https://learn.microsoft.com/en-us/windows/uwp/debug-test-perf/device-portal) binding, all functions are available in 2 styles:\n\n- Via `Wdp` class\n\n  Allows you to initialize a class by passing the configuration once through the constructor.\n\n  ```ts\n  import { Wdp } from '@dlenroc/wdp';         // ESM\n  // const { WDP } = require('@dlenroc/wdp'); // CJS\n\n  const wdp = new Wdp({ address: ... });\n  const packages = await wdp.getInstalledAppPackages()\n  console.log(packages);\n  ```\n\n- Via named import\n\n  Allows you to import/use individual methods, but requires passing the configuration as the first parameter.\n\n  ```ts\n  import * as wdp from '@dlenroc/wdp';        // ESM\n  // const wdp = require('@dlenroc/wdp');     // CJS\n\n  const ctx = { address: ... };\n  const packages = await wdp.getInstalledAppPackages(ctx);\n  console.log(packages);\n  ```\n\nRegardless of which method you choose, the configuration will look the same.\n\n```ts\ntype WdpCtx = {\n  // Target\n  address: string;\n  username?: string;\n  password?: string;\n\n  // Abort signal\n  signal?: AbortSignal;\n\n  // W3C compliant implementations\n  implementations?: {\n    fetch?: any;\n    FormData?: any;\n    WebSocket?: any;\n  };\n}\n```\n\n\u003e 📝 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.\n\n## Example\n\nBelow you can see a simple example for Node.js 16 LTS using [node-fetch](https://www.npmjs.com/package/node-fetch) and [ws](https://www.npmjs.com/package/ws).\n\n```js\nimport { Wdp } from '@dlenroc/wdp';\nimport nodeFetch, { Blob, FormData } from 'node-fetch';\nimport { readFile } from 'node:fs/promises';\nimport https from 'node:https';\nimport { setTimeout as sleep } from 'node:timers/promises';\nimport { WebSocket as NodeWebSocket } from 'ws';\n\n// Custom implementations without SSL verification\nconst agent = new https.Agent({ rejectUnauthorized: false });\nconst fetch = (url, init) =\u003e nodeFetch(url, { ...init, agent });\nconst WebSocket = function (url, protocols, options) {\n  return new NodeWebSocket(url, protocols, { ...options, agent });\n};\n\nconst wdp = new Wdp({\n  address: 'https://192.168.18.5:11443',\n  username: 'auto-xbox',\n  password: 'secret',\n  implementations: { fetch, FormData, WebSocket },\n});\n\n// Install application\n// const appContent = new Blob([await readFile('app.msix')]);\n// await wdp.installApp('app.msix', appContent);\n// while (true) {\n//   const state = await wdp.getInstallationState();\n//   if (!state.InstallRunning) break;\n//   await sleep(500);\n// }\n\n// Open \"Microsoft Edge\"\nconst app = await wdp.getInstalledAppPackages();\nconst edge = app.InstalledPackages.find((app) =\u003e app.Name === 'Microsoft Edge');\nif (!edge) throw new Error('Microsoft Edge is not installed');\nawait wdp.startApp(edge.PackageRelativeId);\nawait sleep(5000);\n\n// Scroll page\nconst input = await wdp.getRemoteInput();\ninput.move(50, 50);\nfor (let i = 0; i \u003c 500; i++) {\n  input.verticalWheelMove(50, 80, -20);\n  await sleep(50);\n}\ninput.disconnect();\n```\n\n## APIs\n\n```ts\ngetInstalledAppPackages(options?: { streamable?: boolean; includeframeworkpackages?: boolean }): Promise\u003cAppPackages\u003e\n```\n\n```ts\ngetContentGroups(packageFullName: string): Promise\u003cContentGroups\u003e\n```\n\n```ts\ninstallApp(name: string, content: Blob, extra?: Record\u003cstring, Blob\u003e): Promise\u003cvoid\u003e\n```\n\n```ts\ninstallCertificate(name: string, content: Blob): Promise\u003cvoid\u003e\n```\n\n```ts\nregisterNetworkShareApp(app: NetworkAppPackages): Promise\u003cvoid\u003e\n```\n\n```ts\ngetInstallationState(): Promise\u003cInstallState\u003e\n```\n\n```ts\nuninstallAppPackage(packageFullName: string): Promise\u003cvoid\u003e\n```\n\n```ts\nregisterLooseApp(folder: string): Promise\u003cvoid\u003e\n```\n\n```ts\nuploadLooseApp(folder: string, files: Record\u003cstring, Blob\u003e): Promise\u003cvoid\u003e\n```\n\n```ts\npullInstallFromNetwork(install: Record\u003cstring, any\u003e): Promise\u003cvoid\u003e\n```\n\n```ts\ndeleteSshPins(): Promise\u003cvoid\u003e\n```\n\n```ts\ngetDeployInfo(packageFullName: string, overlayFolder?: string): Promise\u003cAppDeployInfo\u003e\n```\n\n```ts\ngetPairedBluetoothDevices(): Promise\u003cPairedBluetoothDevices\u003e\n```\n\n```ts\ngetAvailableBluetoothDevices(): Promise\u003cAvailableBluetoothDevices\u003e\n```\n\n```ts\ngetBluetoothRadios(): Promise\u003cBluetoothRadios\u003e\n```\n\n```ts\nsetBluetoothRadioState(id: string, enable: boolean): Promise\u003cvoid\u003e\n```\n\n```ts\nremoveBluetoothDevice(deviceId: string): Promise\u003cvoid\u003e\n```\n\n```ts\ndisconnectBluetoothDevice(deviceId: string): Promise\u003cvoid\u003e\n```\n\n```ts\nconnectBluetoothDevice(deviceId: string): Promise\u003cvoid\u003e\n```\n\n```ts\ngetSSLCertificate(): Promise\u003cBlob\u003e\n```\n\n```ts\ngetContainers(): Promise\u003cany\u003e\n```\n\n```ts\ngetPluginTools(): Promise\u003cPluginTools\u003e\n```\n\n```ts\ngetPluginWorkspaces(): Promise\u003cWorkspaces\u003e\n```\n\n```ts\ngetUniqueId(): Promise\u003cUniqueId\u003e\n```\n\n```ts\ngetDevices(): Promise\u003cDevices\u003e\n```\n\n```ts\ngetUsbDevices(): Promise\u003cUsbDevices\u003e\n```\n\n```ts\ngetServiceTags(): Promise\u003cServiceTags\u003e\n```\n\n```ts\ndeleteAllServiceTags(): Promise\u003cvoid\u003e\n```\n\n```ts\naddServiceTag(tag: string): Promise\u003cvoid\u003e\n```\n\n```ts\ndeleteServiceTag(tag: string): Promise\u003cvoid\u003e\n```\n\n```ts\ngetCrashDumps(): Promise\u003cAppCrashDumps\u003e\n```\n\n```ts\ngetCrashDumpControlSettings(packageFullName: string): Promise\u003cAppCrashDumpSettings\u003e\n```\n\n```ts\nsetCrashDumpControlSettings(packageFullName: string, enable: boolean): Promise\u003cvoid\u003e\n```\n\n```ts\ngetCrashDump(packageFullName: string, fileName: string): Promise\u003cBlob\u003e\n```\n\n```ts\ndeleteCrashDump(packageFullName: string, fileName: string): Promise\u003cvoid\u003e\n```\n\n```ts\ngetProcessDump(pid: number): Promise\u003cBlob\u003e\n```\n\n```ts\ngetKernelDump(): Promise\u003cBlob\u003e\n```\n\n```ts\ngetBugCheckDumps(): Promise\u003cDumpFiles\u003e\n```\n\n```ts\ngetBugCheckDump(filename: string): Promise\u003cBlob\u003e\n```\n\n```ts\ngetCrashControlSettings(): Promise\u003cDumpSetting\u003e\n```\n\n```ts\nsetCrashControlSettings(settings: DumpSetting): Promise\u003cDumpSetting\u003e\n```\n\n```ts\ngetWerReports(): Promise\u003cWerReports\u003e\n```\n\n```ts\ngetWerReportFiles(user: string, type: string, name: string): Promise\u003cWerReportFiles\u003e\n```\n\n```ts\ngetWerReportFile(user: string, type: string, name: string, file: string): Promise\u003cBlob\u003e\n```\n\n```ts\ngetEtwEvents(): Promise\u003cEtwEvents\u003e\n```\n\n```ts\ngetEtwProviders(): Promise\u003cEtwProviders\u003e\n```\n\n```ts\ngetCustomEtwProviders(): Promise\u003cEtwProviders\u003e\n```\n\n```ts\ngetFeatures(): Promise\u003cFeatureCategories\u003e\n```\n\n```ts\nsetFeatureState(id: string, state: boolean): Promise\u003cvoid\u003e\n```\n\n```ts\ngetFiddlerTracingState(): Promise\u003cFiddlerTracingState\u003e\n```\n\n```ts\nenableFiddler(proxyAddress: string, proxyPort: number, cert?: Blob): Promise\u003cvoid\u003e\n```\n\n```ts\ndisableFiddler(): Promise\u003cvoid\u003e\n```\n\n```ts\ngetKnownFolders(): Promise\u003cKnownFolders\u003e\n```\n\n```ts\ngetFiles(knownFolderId: string, options?: { packageFullName?: string; path?: string }): Promise\u003cKnownFolderFiles\u003e\n```\n\n```ts\ndeleteFile(knownFolderId: string, filename: string, options: { packageFullName?: string; path?: string }): Promise\u003cvoid\u003e\n```\n\n```ts\nrenameFile(knownFolderId: string, filename: string, newFilename: string, options: { packageFullName?: string; path?: string }): Promise\u003cvoid\u003e\n```\n\n```ts\ncreateFolder(knownFolderId: string, newFolderName: string, options: { packageFullName?: string; path?: string }): Promise\u003cvoid\u003e\n```\n\n```ts\ngetFile(knownFolderId: string, filename: string, options?: { packageFullName?: string; path?: string }): Promise\u003cBlob\u003e\n```\n\n```ts\nuploadFiles(knownFolderId: string, files: Record\u003cstring, Blob\u003e, options: { packageFullName?: string; path?: string; extract?: boolean }): Promise\u003cvoid\u003e\n```\n\n```ts\ngetHttpMonitorState(): Promise\u003cHttpMonitorState\u003e\n```\n\n```ts\ngetHttpMonitor(): Promise\u003cHttpMonitor\u003e\n```\n\n```ts\ngetLocationOverrideMode(): Promise\u003cLocationOverride\u003e\n```\n\n```ts\nsetLocationOverrideMode(override: boolean): Promise\u003cLocationOverride\u003e\n```\n\n```ts\ngetLocation(): Promise\u003cLocation\u003e\n```\n\n```ts\nsetLocation(position: Location): Promise\u003cLocation\u003e\n```\n\n```ts\ngetScreenshot(): Promise\u003cBlob\u003e\n```\n\n```ts\ngetNetworkCredentials(): Promise\u003cNetworkCredentials\u003e\n```\n\n```ts\naddNetworkCredential(networkPath: string, username: string, password: string): Promise\u003cvoid\u003e\n```\n\n```ts\ndeleteNetworkCredential(networkPath: string): Promise\u003cvoid\u003e\n```\n\n```ts\ngetIpConfig(): Promise\u003cNetworkAdapters\u003e\n```\n\n```ts\nsetIpConfig(guid: string, options?: { ipAddress?: string; subnetMask?: string; defaultGateway?: string; primaryDNS?: string; secondaryDNS?: string }): Promise\u003cvoid\u003e\n```\n\n```ts\nsetComputerName(name: string): Promise\u003cvoid\u003e\n```\n\n```ts\ngetComputerName(): Promise\u003cComputerName\u003e\n```\n\n```ts\ngetXboxInfo(): Promise\u003cXboxInfo\u003e\n```\n\n```ts\ngetOsInfo(): Promise\u003cOSInfo\u003e\n```\n\n```ts\ngetDeviceFamily(): Promise\u003cDeviceFamily\u003e\n```\n\n```ts\nstartCustomWprTrace(name: string, content: Blob): Promise\u003cWprTraceState\u003e\n```\n\n```ts\nstartCustomWprBootTrace(name: string, content: Blob): Promise\u003cWprTraceState\u003e\n```\n\n```ts\nstartWprTrace(profile: string): Promise\u003cWprTraceState\u003e\n```\n\n```ts\nstartWprBootTrace(profile: string): Promise\u003cWprTraceState\u003e\n```\n\n```ts\nstopWprTrace(): Promise\u003cvoid\u003e\n```\n\n```ts\nstopWprBootTrace(): Promise\u003cvoid\u003e\n```\n\n```ts\ngetWprTraceState(): Promise\u003cWprTraceState\u003e\n```\n\n```ts\ngetWprTraces(): Promise\u003cWprTraces\u003e\n```\n\n```ts\ngetWprTrace(filename: string): Promise\u003cBlob\u003e\n```\n\n```ts\ndeleteWprTrace(filename: string): Promise\u003cvoid\u003e\n```\n\n```ts\ngetPowerState(): Promise\u003cPowerState\u003e\n```\n\n```ts\ngetBatteryState(): Promise\u003cBatteryState\u003e\n```\n\n```ts\ngetPowerConfig(scheme: string): Promise\u003cPowerConfig\u003e\n```\n\n```ts\nsetPowerConfig(scheme: string, valueAC: number, valueDC: number): Promise\u003cvoid\u003e\n```\n\n```ts\nsetPowerActiveScheme(scheme: string): Promise\u003cvoid\u003e\n```\n\n```ts\ngetPowerActiveScheme(): Promise\u003cActivePowerScheme\u003e\n```\n\n```ts\ngetSleepStudyReports(): Promise\u003cSleepStudyReports\u003e\n```\n\n```ts\ngetSleepStudyReport(fileName: string): Promise\u003cBlob\u003e\n```\n\n```ts\ngetSleepStudyTransform(): Promise\u003cBlob\u003e\n```\n\n```ts\ngetRootKeys(containerId?: string): Promise\u003cRegistryRootKeys\u003e\n```\n\n```ts\ngetSubKeys(rootKey: string, options?: { regKey?: string; containerId?: string }): Promise\u003cRegistrySubKeys\u003e\n```\n\n```ts\ngetRegValues(rootKey: string, options?: { regKey?: string; containerId?: string }): Promise\u003cRegistryValues\u003e\n```\n\n```ts\nrestart(): Promise\u003cvoid\u003e\n```\n\n```ts\nshutdown(): Promise\u003cvoid\u003e\n```\n\n```ts\ngetPhysicalControllers(): Promise\u003cPhysicalControllers\u003e\n```\n\n```ts\ndisconnectPhysicalControllers(): Promise\u003cvoid\u003e\n```\n\n```ts\ngetRemoteInput(options?: { timeout?: number }): Promise\u003cRemoteInput\u003e\n```\n\n```ts\ngetProcesses(options?: { containerId?: string }): Promise\u003cProcesses\u003e\n```\n\n```ts\ngetSystemPerformanceStatistics(): Promise\u003cPerformanceStatistics\u003e\n```\n\n```ts\ngetSmbCredentials(): Promise\u003cSmbCredentials\u003e\n```\n\n```ts\ngetSettings(): Promise\u003cSettings\u003e\n```\n\n```ts\ngetSetting(name: string): Promise\u003cSetting\u003e\n```\n\n```ts\nsetSetting(name: string, value: any): Promise\u003cSetting\u003e\n```\n\n```ts\nstartApp(appId: string, options?: { holographic?: boolean; packageFullName?: string }): Promise\u003cvoid\u003e\n```\n\n```ts\nstopApp(packageFullName: string, force?: boolean): Promise\u003cvoid\u003e\n```\n\n```ts\nsuspendApp(packageFullName: string): Promise\u003cvoid\u003e\n```\n\n```ts\nresumeApp(packageFullName: string): Promise\u003cvoid\u003e\n```\n\n```ts\nstopProcess(pid: number, options?: { containerId?: string }): Promise\u003cvoid\u003e\n```\n\n```ts\ngetSignedInUser(): Promise\u003cActiveUser\u003e\n```\n\n```ts\ngetUsers(): Promise\u003cUsers\u003e\n```\n\n```ts\ndeleteUser(userId: number): Promise\u003cvoid\u003e\n```\n\n```ts\naddUser(email: string, password: string, autoSignIn?: boolean): Promise\u003cvoid\u003e\n```\n\n```ts\nsetUserSignInState(userId: number, signIn: boolean): Promise\u003cvoid\u003e\n```\n\n```ts\ngetWindows(containerId?: string): Promise\u003cany\u003e\n```\n\n```ts\ngetWirelessInterfaces(): Promise\u003cWifiInterfaces\u003e\n```\n\n```ts\ngetAvailableWirelessNetworks(guid: string): Promise\u003cWifiNetworks\u003e\n```\n\n```ts\nconnectToNetwork(guid: string, ssid: string, key: string, createProfile?: boolean): Promise\u003cvoid\u003e\n```\n\n```ts\nconnectToNetworkUsingProfile(guid: string, profile: string): Promise\u003cvoid\u003e\n```\n\n```ts\ndisconnectFromNetwork(guid: string): Promise\u003cvoid\u003e\n```\n\n```ts\ndeleteWifiProfile(guid: string, profile: string): Promise\u003cvoid\u003e\n```\n\n```ts\ngetXboxLiveSandbox(): Promise\u003cXboxLiveSandbox\u003e\n```\n\n```ts\nsetXboxLiveSandbox(sandbox: string): Promise\u003cXboxLiveSandbox\u003e\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdlenroc%2Fnode-wdp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdlenroc%2Fnode-wdp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdlenroc%2Fnode-wdp/lists"}