@expo/cli 0.1.3 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/bin/cli +8 -2
- package/build/bin/cli.map +1 -1
- package/build/src/export/index.js +1 -0
- package/build/src/export/index.js.map +1 -1
- package/build/src/run/android/runAndroidAsync.js +3 -3
- package/build/src/run/android/runAndroidAsync.js.map +1 -1
- package/build/src/run/ensureNativeProject.js +3 -0
- package/build/src/run/ensureNativeProject.js.map +1 -1
- package/build/src/run/hints.js +1 -1
- package/build/src/run/hints.js.map +1 -1
- package/build/src/run/ios/XcodeBuild.js +275 -0
- package/build/src/run/ios/XcodeBuild.js.map +1 -0
- package/build/src/run/ios/XcodeBuild.types.js +6 -0
- package/build/src/run/ios/XcodeBuild.types.js.map +1 -0
- package/build/src/run/ios/appleDevice/AppleDevice.js +161 -0
- package/build/src/run/ios/appleDevice/AppleDevice.js.map +1 -0
- package/build/src/run/ios/appleDevice/ClientManager.js +161 -0
- package/build/src/run/ios/appleDevice/ClientManager.js.map +1 -0
- package/build/src/run/ios/appleDevice/client/AFCClient.js +195 -0
- package/build/src/run/ios/appleDevice/client/AFCClient.js.map +1 -0
- package/build/src/run/ios/appleDevice/client/DebugserverClient.js +107 -0
- package/build/src/run/ios/appleDevice/client/DebugserverClient.js.map +1 -0
- package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js +97 -0
- package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js.map +1 -0
- package/build/src/run/ios/appleDevice/client/LockdowndClient.js +140 -0
- package/build/src/run/ios/appleDevice/client/LockdowndClient.js.map +1 -0
- package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js +91 -0
- package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js.map +1 -0
- package/build/src/run/ios/appleDevice/client/ServiceClient.js +21 -0
- package/build/src/run/ios/appleDevice/client/ServiceClient.js.map +1 -0
- package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js +117 -0
- package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js.map +1 -0
- package/build/src/run/ios/appleDevice/installOnDeviceAsync.js +90 -0
- package/build/src/run/ios/appleDevice/installOnDeviceAsync.js.map +1 -0
- package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js +332 -0
- package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js.map +1 -0
- package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js +115 -0
- package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js.map +1 -0
- package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js +126 -0
- package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js.map +1 -0
- package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js +74 -0
- package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js.map +1 -0
- package/build/src/run/ios/appleDevice/protocol/UsbmuxProtocol.js +65 -0
- package/build/src/run/ios/appleDevice/protocol/UsbmuxProtocol.js.map +1 -0
- package/build/src/run/ios/codeSigning/Security.js +85 -0
- package/build/src/run/ios/codeSigning/Security.js.map +1 -0
- package/build/src/run/ios/codeSigning/configureCodeSigning.js +77 -0
- package/build/src/run/ios/codeSigning/configureCodeSigning.js.map +1 -0
- package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js +102 -0
- package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js.map +1 -0
- package/build/src/run/ios/codeSigning/settings.js +21 -0
- package/build/src/run/ios/codeSigning/settings.js.map +1 -0
- package/build/src/run/ios/codeSigning/xcodeCodeSigning.js +76 -0
- package/build/src/run/ios/codeSigning/xcodeCodeSigning.js.map +1 -0
- package/build/src/run/ios/index.js +98 -0
- package/build/src/run/ios/index.js.map +1 -0
- package/build/src/run/ios/launchApp.js +75 -0
- package/build/src/run/ios/launchApp.js.map +1 -0
- package/build/src/run/ios/options/promptDevice.js +50 -0
- package/build/src/run/ios/options/promptDevice.js.map +1 -0
- package/build/src/run/ios/options/resolveDevice.js +92 -0
- package/build/src/run/ios/options/resolveDevice.js.map +1 -0
- package/build/src/run/ios/options/resolveNativeScheme.js +92 -0
- package/build/src/run/ios/options/resolveNativeScheme.js.map +1 -0
- package/build/src/run/ios/options/resolveOptions.js +44 -0
- package/build/src/run/ios/options/resolveOptions.js.map +1 -0
- package/build/src/run/ios/options/resolveXcodeProject.js +39 -0
- package/build/src/run/ios/options/resolveXcodeProject.js.map +1 -0
- package/build/src/run/ios/runIosAsync.js +85 -0
- package/build/src/run/ios/runIosAsync.js.map +1 -0
- package/build/src/run/resolveBundlerProps.js +9 -6
- package/build/src/run/resolveBundlerProps.js.map +1 -1
- package/build/src/run/startBundler.js +4 -2
- package/build/src/run/startBundler.js.map +1 -1
- package/build/src/start/doctor/Prerequisite.js +4 -4
- package/build/src/start/doctor/Prerequisite.js.map +1 -1
- package/build/src/start/doctor/SecurityBinPrerequisite.js +27 -0
- package/build/src/start/doctor/SecurityBinPrerequisite.js.map +1 -0
- package/build/src/start/doctor/apple/XcodeDeveloperDiskImagePrerequisite.js +69 -0
- package/build/src/start/doctor/apple/XcodeDeveloperDiskImagePrerequisite.js.map +1 -0
- package/build/src/start/platforms/android/emulator.js +8 -0
- package/build/src/start/platforms/android/emulator.js.map +1 -1
- package/build/src/start/platforms/android/promptAndroidDevice.js +1 -5
- package/build/src/start/platforms/android/promptAndroidDevice.js.map +1 -1
- package/build/src/start/platforms/ios/AppleDeviceManager.js +5 -1
- package/build/src/start/platforms/ios/AppleDeviceManager.js.map +1 -1
- package/build/src/start/platforms/ios/promptAppleDevice.js +1 -5
- package/build/src/start/platforms/ios/promptAppleDevice.js.map +1 -1
- package/build/src/start/platforms/ios/simctl.js +14 -0
- package/build/src/start/platforms/ios/simctl.js.map +1 -1
- package/build/src/start/platforms/ios/simctlLogging.js +220 -0
- package/build/src/start/platforms/ios/simctlLogging.js.map +1 -0
- package/build/src/start/server/middleware/ClassicManifestMiddleware.js +1 -1
- package/build/src/utils/analytics/rudderstackClient.js +30 -3
- package/build/src/utils/analytics/rudderstackClient.js.map +1 -1
- package/build/src/utils/cocoapods.js +47 -0
- package/build/src/utils/cocoapods.js.map +1 -1
- package/build/src/utils/dir.js +6 -1
- package/build/src/utils/dir.js.map +1 -1
- package/build/src/utils/plist.js +59 -0
- package/build/src/utils/plist.js.map +1 -0
- package/build/src/utils/prompts.js +16 -0
- package/build/src/utils/prompts.js.map +1 -1
- package/build/src/utils/resolveArgs.js +4 -1
- package/build/src/utils/resolveArgs.js.map +1 -1
- package/build/src/utils/terminal.js +10 -0
- package/build/src/utils/terminal.js.map +1 -0
- package/package.json +5 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/run/ios/appleDevice/client/UsbmuxdClient.ts"],"sourcesContent":["/**\n * Copyright (c) 2021 Expo, Inc.\n * Copyright (c) 2018 Drifty Co.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport plist from '@expo/plist';\nimport Debug from 'debug';\nimport { Socket, connect } from 'net';\n\nimport { CommandError } from '../../../../utils/errors';\nimport { parsePlistBuffer } from '../../../../utils/plist';\nimport { UsbmuxProtocolClient } from '../protocol/UsbmuxProtocol';\nimport { ResponseError, ServiceClient } from './ServiceClient';\n\nconst debug = Debug('expo:apple-device:client:usbmuxd');\n\nexport interface UsbmuxdDeviceProperties {\n /** 480000000 */\n ConnectionSpeed: number;\n /** 'USB' */\n ConnectionType: 'USB';\n /** 7 */\n DeviceID: number;\n /** 339738624 */\n LocationID: number;\n /** 4776 */\n ProductID: number;\n /** '00008101-001964A22629003A' */\n SerialNumber: string;\n /** '00008101-001964A22629003A' */\n UDID: string;\n /** '00008101001964A22629003A' */\n USBSerialNumber: string;\n}\n\nexport interface UsbmuxdDevice {\n /** 7 */\n DeviceID: number;\n MessageType: 'Attached'; // TODO: what else?\n Properties: UsbmuxdDeviceProperties;\n}\n\nexport interface UsbmuxdConnectResponse {\n MessageType: 'Result';\n Number: number;\n}\n\nexport interface UsbmuxdDeviceResponse {\n DeviceList: UsbmuxdDevice[];\n}\n\nexport interface UsbmuxdPairRecordResponse {\n PairRecordData: Buffer;\n}\n\nexport interface UsbmuxdPairRecord {\n DeviceCertificate: Buffer;\n EscrowBag: Buffer;\n HostCertificate: Buffer;\n HostID: string;\n HostPrivateKey: Buffer;\n RootCertificate: Buffer;\n RootPrivateKey: Buffer;\n SystemBUID: string;\n WiFiMACAddress: string;\n}\n\nfunction isUsbmuxdConnectResponse(resp: any): resp is UsbmuxdConnectResponse {\n return resp.MessageType === 'Result' && resp.Number !== undefined;\n}\n\nfunction isUsbmuxdDeviceResponse(resp: any): resp is UsbmuxdDeviceResponse {\n return resp.DeviceList !== undefined;\n}\n\nfunction isUsbmuxdPairRecordResponse(resp: any): resp is UsbmuxdPairRecordResponse {\n return resp.PairRecordData !== undefined;\n}\n\nexport class UsbmuxdClient extends ServiceClient<UsbmuxProtocolClient> {\n constructor(public socket: Socket) {\n super(socket, new UsbmuxProtocolClient(socket));\n }\n\n static connectUsbmuxdSocket(): Socket {\n debug('connectUsbmuxdSocket');\n if (process.platform === 'win32') {\n return connect({ port: 27015, host: 'localhost' });\n } else {\n return connect({ path: '/var/run/usbmuxd' });\n }\n }\n\n async connect(device: Pick<UsbmuxdDevice, 'DeviceID'>, port: number): Promise<Socket> {\n debug(`connect: ${device.DeviceID} on port ${port}`);\n debug(`connect:device: %O`, device);\n\n const response = await this.protocolClient.sendMessage({\n messageType: 'Connect',\n extraFields: {\n DeviceID: device.DeviceID,\n PortNumber: htons(port),\n },\n });\n debug(`connect:device:response: %O`, response);\n\n if (isUsbmuxdConnectResponse(response) && response.Number === 0) {\n return this.protocolClient.socket;\n } else {\n throw new ResponseError(\n `There was an error connecting to the USB connected device (id: ${device.DeviceID}, port: ${port})`,\n response\n );\n }\n }\n\n async getDevices(): Promise<UsbmuxdDevice[]> {\n debug('getDevices');\n\n const resp = await this.protocolClient.sendMessage({\n messageType: 'ListDevices',\n });\n\n if (isUsbmuxdDeviceResponse(resp)) {\n return resp.DeviceList;\n } else {\n throw new ResponseError('Invalid response from getDevices', resp);\n }\n }\n\n async getDevice(udid?: string): Promise<UsbmuxdDevice> {\n debug(`getDevice ${udid ? 'udid: ' + udid : ''}`);\n const devices = await this.getDevices();\n\n if (!devices.length) {\n throw new CommandError('APPLE_DEVICE_USBMUXD', 'No devices found');\n }\n\n if (!udid) {\n return devices[0];\n }\n\n for (const device of devices) {\n if (device.Properties && device.Properties.SerialNumber === udid) {\n return device;\n }\n }\n\n throw new CommandError('APPLE_DEVICE_USBMUXD', `No device found (udid: ${udid})`);\n }\n\n async readPairRecord(udid: string): Promise<UsbmuxdPairRecord> {\n debug(`readPairRecord: ${udid}`);\n\n const resp = await this.protocolClient.sendMessage({\n messageType: 'ReadPairRecord',\n extraFields: { PairRecordID: udid },\n });\n\n if (isUsbmuxdPairRecordResponse(resp)) {\n // the pair record can be created as a binary plist\n const BPLIST_MAGIC = Buffer.from('bplist00');\n if (BPLIST_MAGIC.compare(resp.PairRecordData, 0, 8) === 0) {\n debug('Binary plist pair record detected.');\n return parsePlistBuffer(resp.PairRecordData)[0];\n } else {\n // TODO: use parsePlistBuffer\n return plist.parse(resp.PairRecordData.toString()) as any; // TODO: type guard\n }\n } else {\n throw new ResponseError(\n `There was an error reading pair record for device (udid: ${udid})`,\n resp\n );\n }\n }\n}\n\nfunction htons(n: number): number {\n return ((n & 0xff) << 8) | ((n >> 8) & 0xff);\n}\n"],"names":["debug","Debug","isUsbmuxdConnectResponse","resp","MessageType","Number","undefined","isUsbmuxdDeviceResponse","DeviceList","isUsbmuxdPairRecordResponse","PairRecordData","UsbmuxdClient","ServiceClient","constructor","socket","UsbmuxProtocolClient","connectUsbmuxdSocket","process","platform","connect","port","host","path","device","DeviceID","response","protocolClient","sendMessage","messageType","extraFields","PortNumber","htons","ResponseError","getDevices","getDevice","udid","devices","length","CommandError","Properties","SerialNumber","readPairRecord","PairRecordID","BPLIST_MAGIC","Buffer","from","compare","parsePlistBuffer","plist","parse","toString","n"],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.getAppDeltaDirectory = getAppDeltaDirectory;
|
|
6
|
+
exports.installOnDeviceAsync = installOnDeviceAsync;
|
|
7
|
+
var _chalk = _interopRequireDefault(require("chalk"));
|
|
8
|
+
var _os = _interopRequireDefault(require("os"));
|
|
9
|
+
var _path = _interopRequireDefault(require("path"));
|
|
10
|
+
var _dir = require("../../../utils/dir");
|
|
11
|
+
var _env = require("../../../utils/env");
|
|
12
|
+
var _errors = require("../../../utils/errors");
|
|
13
|
+
var _ora = require("../../../utils/ora");
|
|
14
|
+
var _prompts = require("../../../utils/prompts");
|
|
15
|
+
var AppleDevice = _interopRequireWildcard(require("./AppleDevice"));
|
|
16
|
+
function _interopRequireDefault(obj) {
|
|
17
|
+
return obj && obj.__esModule ? obj : {
|
|
18
|
+
default: obj
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function _interopRequireWildcard(obj) {
|
|
22
|
+
if (obj && obj.__esModule) {
|
|
23
|
+
return obj;
|
|
24
|
+
} else {
|
|
25
|
+
var newObj = {};
|
|
26
|
+
if (obj != null) {
|
|
27
|
+
for(var key in obj){
|
|
28
|
+
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
29
|
+
var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
|
|
30
|
+
if (desc.get || desc.set) {
|
|
31
|
+
Object.defineProperty(newObj, key, desc);
|
|
32
|
+
} else {
|
|
33
|
+
newObj[key] = obj[key];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
newObj.default = obj;
|
|
39
|
+
return newObj;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function getAppDeltaDirectory(bundleId) {
|
|
43
|
+
// TODO: Maybe use .expo folder instead for debugging
|
|
44
|
+
// TODO: Reuse existing folder from xcode?
|
|
45
|
+
const deltaFolder = _path.default.join(_os.default.tmpdir(), "ios", "app-delta", bundleId);
|
|
46
|
+
(0, _dir).ensureDirectory(deltaFolder);
|
|
47
|
+
return deltaFolder;
|
|
48
|
+
}
|
|
49
|
+
async function installOnDeviceAsync(props) {
|
|
50
|
+
const { bundle , bundleIdentifier , appDeltaDirectory , udid , deviceName } = props;
|
|
51
|
+
let indicator;
|
|
52
|
+
try {
|
|
53
|
+
// TODO: Connect for logs
|
|
54
|
+
await AppleDevice.runOnDevice({
|
|
55
|
+
udid,
|
|
56
|
+
appPath: bundle,
|
|
57
|
+
bundleId: bundleIdentifier,
|
|
58
|
+
waitForApp: false,
|
|
59
|
+
deltaPath: appDeltaDirectory,
|
|
60
|
+
onProgress ({ status , isComplete , progress }) {
|
|
61
|
+
if (!indicator) {
|
|
62
|
+
indicator = (0, _ora).ora(status).start();
|
|
63
|
+
}
|
|
64
|
+
indicator.text = `${_chalk.default.bold(status)} ${progress}%`;
|
|
65
|
+
if (isComplete) {
|
|
66
|
+
indicator.succeed();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
} catch (error) {
|
|
71
|
+
if (indicator) {
|
|
72
|
+
indicator.fail();
|
|
73
|
+
}
|
|
74
|
+
if (error.code === "APPLE_DEVICE_LOCKED") {
|
|
75
|
+
var ref;
|
|
76
|
+
// Get the app name from the binary path.
|
|
77
|
+
const appName = (ref = _path.default.basename(bundle).split(".")[0]) != null ? ref : "app";
|
|
78
|
+
if (!_env.env.CI && await (0, _prompts).confirmAsync({
|
|
79
|
+
message: `Cannot launch ${appName} because the device is locked. Unlock ${deviceName} to continue...`,
|
|
80
|
+
initial: true
|
|
81
|
+
})) {
|
|
82
|
+
return installOnDeviceAsync(props);
|
|
83
|
+
}
|
|
84
|
+
throw new _errors.CommandError(`Cannot launch ${appName} on ${deviceName} because the device is locked.`);
|
|
85
|
+
}
|
|
86
|
+
throw error;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
//# sourceMappingURL=installOnDeviceAsync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/run/ios/appleDevice/installOnDeviceAsync.ts"],"sourcesContent":["import chalk from 'chalk';\nimport { Ora } from 'ora';\nimport os from 'os';\nimport path from 'path';\n\nimport { ensureDirectory } from '../../../utils/dir';\nimport { env } from '../../../utils/env';\nimport { CommandError } from '../../../utils/errors';\nimport { ora } from '../../../utils/ora';\nimport { confirmAsync } from '../../../utils/prompts';\nimport * as AppleDevice from './AppleDevice';\n\n/** Get the app_delta folder for faster subsequent rebuilds on devices. */\nexport function getAppDeltaDirectory(bundleId: string): string {\n // TODO: Maybe use .expo folder instead for debugging\n // TODO: Reuse existing folder from xcode?\n const deltaFolder = path.join(os.tmpdir(), 'ios', 'app-delta', bundleId);\n ensureDirectory(deltaFolder);\n return deltaFolder;\n}\n\n/**\n * Wraps the apple device method for installing and running an app,\n * adds indicator and retry loop for when the device is locked.\n */\nexport async function installOnDeviceAsync(props: {\n bundle: string;\n bundleIdentifier: string;\n appDeltaDirectory: string;\n udid: string;\n deviceName: string;\n}): Promise<void> {\n const { bundle, bundleIdentifier, appDeltaDirectory, udid, deviceName } = props;\n let indicator: Ora | undefined;\n\n try {\n // TODO: Connect for logs\n await AppleDevice.runOnDevice({\n udid,\n appPath: bundle,\n bundleId: bundleIdentifier,\n waitForApp: false,\n deltaPath: appDeltaDirectory,\n onProgress({\n status,\n isComplete,\n progress,\n }: {\n status: string;\n isComplete: boolean;\n progress: number;\n }) {\n if (!indicator) {\n indicator = ora(status).start();\n }\n indicator.text = `${chalk.bold(status)} ${progress}%`;\n if (isComplete) {\n indicator.succeed();\n }\n },\n });\n } catch (error: any) {\n if (indicator) {\n indicator.fail();\n }\n if (error.code === 'APPLE_DEVICE_LOCKED') {\n // Get the app name from the binary path.\n const appName = path.basename(bundle).split('.')[0] ?? 'app';\n if (\n !env.CI &&\n (await confirmAsync({\n message: `Cannot launch ${appName} because the device is locked. Unlock ${deviceName} to continue...`,\n initial: true,\n }))\n ) {\n return installOnDeviceAsync(props);\n }\n throw new CommandError(\n `Cannot launch ${appName} on ${deviceName} because the device is locked.`\n );\n }\n throw error;\n }\n}\n"],"names":["getAppDeltaDirectory","installOnDeviceAsync","AppleDevice","bundleId","deltaFolder","path","join","os","tmpdir","ensureDirectory","props","bundle","bundleIdentifier","appDeltaDirectory","udid","deviceName","indicator","runOnDevice","appPath","waitForApp","deltaPath","onProgress","status","isComplete","progress","ora","start","text","chalk","bold","succeed","error","fail","code","appName","basename","split","env","CI","confirmAsync","message","initial","CommandError"],"mappings":"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"}
|
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.AFC_FILE_OPEN_FLAGS = exports.AFC_STATUS = exports.AFC_OPS = exports.AFC_HEADER_SIZE = exports.AFC_MAGIC = void 0;
|
|
6
|
+
var _debug = _interopRequireDefault(require("debug"));
|
|
7
|
+
var _errors = require("../../../../utils/errors");
|
|
8
|
+
var _abstractProtocol = require("./AbstractProtocol");
|
|
9
|
+
function _interopRequireDefault(obj) {
|
|
10
|
+
return obj && obj.__esModule ? obj : {
|
|
11
|
+
default: obj
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
const debug = (0, _debug).default("expo:apple-device:protocol:afc");
|
|
15
|
+
const AFC_MAGIC = "CFA6LPAA";
|
|
16
|
+
exports.AFC_MAGIC = AFC_MAGIC;
|
|
17
|
+
const AFC_HEADER_SIZE = 40;
|
|
18
|
+
exports.AFC_HEADER_SIZE = AFC_HEADER_SIZE;
|
|
19
|
+
var AFC_OPS;
|
|
20
|
+
exports.AFC_OPS = AFC_OPS;
|
|
21
|
+
(function(AFC_OPS) {
|
|
22
|
+
AFC_OPS[AFC_OPS[/**
|
|
23
|
+
* Invalid
|
|
24
|
+
*/ "INVALID"] = 0] = "INVALID";
|
|
25
|
+
AFC_OPS[AFC_OPS[/**
|
|
26
|
+
* Status
|
|
27
|
+
*/ "STATUS"] = 1] = "STATUS";
|
|
28
|
+
AFC_OPS[AFC_OPS[/**
|
|
29
|
+
* Data
|
|
30
|
+
*/ "DATA"] = 2] = "DATA";
|
|
31
|
+
AFC_OPS[AFC_OPS[/**
|
|
32
|
+
* ReadDir
|
|
33
|
+
*/ "READ_DIR"] = 3] = "READ_DIR";
|
|
34
|
+
AFC_OPS[AFC_OPS[/**
|
|
35
|
+
* ReadFile
|
|
36
|
+
*/ "READ_FILE"] = 4] = "READ_FILE";
|
|
37
|
+
AFC_OPS[AFC_OPS[/**
|
|
38
|
+
* WriteFile
|
|
39
|
+
*/ "WRITE_FILE"] = 5] = "WRITE_FILE";
|
|
40
|
+
AFC_OPS[AFC_OPS[/**
|
|
41
|
+
* WritePart
|
|
42
|
+
*/ "WRITE_PART"] = 6] = "WRITE_PART";
|
|
43
|
+
AFC_OPS[AFC_OPS[/**
|
|
44
|
+
* TruncateFile
|
|
45
|
+
*/ "TRUNCATE"] = 7] = "TRUNCATE";
|
|
46
|
+
AFC_OPS[AFC_OPS[/**
|
|
47
|
+
* RemovePath
|
|
48
|
+
*/ "REMOVE_PATH"] = 8] = "REMOVE_PATH";
|
|
49
|
+
AFC_OPS[AFC_OPS[/**
|
|
50
|
+
* MakeDir
|
|
51
|
+
*/ "MAKE_DIR"] = 9] = "MAKE_DIR";
|
|
52
|
+
AFC_OPS[AFC_OPS[/**
|
|
53
|
+
* GetFileInfo
|
|
54
|
+
*/ "GET_FILE_INFO"] = 10] = "GET_FILE_INFO";
|
|
55
|
+
AFC_OPS[AFC_OPS[/**
|
|
56
|
+
* GetDeviceInfo
|
|
57
|
+
*/ "GET_DEVINFO"] = 11] = "GET_DEVINFO";
|
|
58
|
+
AFC_OPS[AFC_OPS[/**
|
|
59
|
+
* WriteFileAtomic (tmp file+rename)
|
|
60
|
+
*/ "WRITE_FILE_ATOM"] = 12] = "WRITE_FILE_ATOM";
|
|
61
|
+
AFC_OPS[AFC_OPS[/**
|
|
62
|
+
* FileRefOpen
|
|
63
|
+
*/ "FILE_OPEN"] = 13] = "FILE_OPEN";
|
|
64
|
+
AFC_OPS[AFC_OPS[/**
|
|
65
|
+
* FileRefOpenResult
|
|
66
|
+
*/ "FILE_OPEN_RES"] = 14] = "FILE_OPEN_RES";
|
|
67
|
+
AFC_OPS[AFC_OPS[/**
|
|
68
|
+
* FileRefRead
|
|
69
|
+
*/ "FILE_READ"] = 15] = "FILE_READ";
|
|
70
|
+
AFC_OPS[AFC_OPS[/**
|
|
71
|
+
* FileRefWrite
|
|
72
|
+
*/ "FILE_WRITE"] = 16] = "FILE_WRITE";
|
|
73
|
+
AFC_OPS[AFC_OPS[/**
|
|
74
|
+
* FileRefSeek
|
|
75
|
+
*/ "FILE_SEEK"] = 17] = "FILE_SEEK";
|
|
76
|
+
AFC_OPS[AFC_OPS[/**
|
|
77
|
+
* FileRefTell
|
|
78
|
+
*/ "FILE_TELL"] = 18] = "FILE_TELL";
|
|
79
|
+
AFC_OPS[AFC_OPS[/**
|
|
80
|
+
* FileRefTellResult
|
|
81
|
+
*/ "FILE_TELL_RES"] = 19] = "FILE_TELL_RES";
|
|
82
|
+
AFC_OPS[AFC_OPS[/**
|
|
83
|
+
* FileRefClose
|
|
84
|
+
*/ "FILE_CLOSE"] = 20] = "FILE_CLOSE";
|
|
85
|
+
AFC_OPS[AFC_OPS[/**
|
|
86
|
+
* FileRefSetFileSize (ftruncate)
|
|
87
|
+
*/ "FILE_SET_SIZE"] = 21] = "FILE_SET_SIZE";
|
|
88
|
+
AFC_OPS[AFC_OPS[/**
|
|
89
|
+
* GetConnectionInfo
|
|
90
|
+
*/ "GET_CON_INFO"] = 22] = "GET_CON_INFO";
|
|
91
|
+
AFC_OPS[AFC_OPS[/**
|
|
92
|
+
* SetConnectionOptions
|
|
93
|
+
*/ "SET_CON_OPTIONS"] = 23] = "SET_CON_OPTIONS";
|
|
94
|
+
AFC_OPS[AFC_OPS[/**
|
|
95
|
+
* RenamePath
|
|
96
|
+
*/ "RENAME_PATH"] = 24] = "RENAME_PATH";
|
|
97
|
+
AFC_OPS[AFC_OPS[/**
|
|
98
|
+
* SetFSBlockSize (0x800000)
|
|
99
|
+
*/ "SET_FS_BS"] = 25] = "SET_FS_BS";
|
|
100
|
+
AFC_OPS[AFC_OPS[/**
|
|
101
|
+
* SetSocketBlockSize (0x800000)
|
|
102
|
+
*/ "SET_SOCKET_BS"] = 26] = "SET_SOCKET_BS";
|
|
103
|
+
AFC_OPS[AFC_OPS[/**
|
|
104
|
+
* FileRefLock
|
|
105
|
+
*/ "FILE_LOCK"] = 27] = "FILE_LOCK";
|
|
106
|
+
AFC_OPS[AFC_OPS[/**
|
|
107
|
+
* MakeLink
|
|
108
|
+
*/ "MAKE_LINK"] = 28] = "MAKE_LINK";
|
|
109
|
+
AFC_OPS[AFC_OPS[/**
|
|
110
|
+
* GetFileHash
|
|
111
|
+
*/ "GET_FILE_HASH"] = 29] = "GET_FILE_HASH";
|
|
112
|
+
AFC_OPS[AFC_OPS[/**
|
|
113
|
+
* SetModTime
|
|
114
|
+
*/ "SET_FILE_MOD_TIME"] = 30] = "SET_FILE_MOD_TIME";
|
|
115
|
+
AFC_OPS[AFC_OPS[/**
|
|
116
|
+
* GetFileHashWithRange
|
|
117
|
+
*/ "GET_FILE_HASH_RANGE"] = 31] = "GET_FILE_HASH_RANGE";
|
|
118
|
+
AFC_OPS[AFC_OPS[// iOS 6+
|
|
119
|
+
/**
|
|
120
|
+
* FileRefSetImmutableHint
|
|
121
|
+
*/ "FILE_SET_IMMUTABLE_HINT"] = 32] = "FILE_SET_IMMUTABLE_HINT";
|
|
122
|
+
AFC_OPS[AFC_OPS[/**
|
|
123
|
+
* GetSizeOfPathContents
|
|
124
|
+
*/ "GET_SIZE_OF_PATH_CONTENTS"] = 33] = "GET_SIZE_OF_PATH_CONTENTS";
|
|
125
|
+
AFC_OPS[AFC_OPS[/**
|
|
126
|
+
* RemovePathAndContents
|
|
127
|
+
*/ "REMOVE_PATH_AND_CONTENTS"] = 34] = "REMOVE_PATH_AND_CONTENTS";
|
|
128
|
+
AFC_OPS[AFC_OPS[/**
|
|
129
|
+
* DirectoryEnumeratorRefOpen
|
|
130
|
+
*/ "DIR_OPEN"] = 35] = "DIR_OPEN";
|
|
131
|
+
AFC_OPS[AFC_OPS[/**
|
|
132
|
+
* DirectoryEnumeratorRefOpenResult
|
|
133
|
+
*/ "DIR_OPEN_RESULT"] = 36] = "DIR_OPEN_RESULT";
|
|
134
|
+
AFC_OPS[AFC_OPS[/**
|
|
135
|
+
* DirectoryEnumeratorRefRead
|
|
136
|
+
*/ "DIR_READ"] = 37] = "DIR_READ";
|
|
137
|
+
AFC_OPS[AFC_OPS[/**
|
|
138
|
+
* DirectoryEnumeratorRefClose
|
|
139
|
+
*/ "DIR_CLOSE"] = 38] = "DIR_CLOSE";
|
|
140
|
+
AFC_OPS[AFC_OPS[// iOS 7+
|
|
141
|
+
/**
|
|
142
|
+
* FileRefReadWithOffset
|
|
143
|
+
*/ "FILE_READ_OFFSET"] = 39] = "FILE_READ_OFFSET";
|
|
144
|
+
AFC_OPS[AFC_OPS[/**
|
|
145
|
+
* FileRefWriteWithOffset
|
|
146
|
+
*/ "FILE_WRITE_OFFSET"] = 40] = "FILE_WRITE_OFFSET";
|
|
147
|
+
})(AFC_OPS || (exports.AFC_OPS = AFC_OPS = {}));
|
|
148
|
+
var AFC_STATUS;
|
|
149
|
+
exports.AFC_STATUS = AFC_STATUS;
|
|
150
|
+
(function(AFC_STATUS) {
|
|
151
|
+
AFC_STATUS[AFC_STATUS["SUCCESS"] = 0] = "SUCCESS";
|
|
152
|
+
AFC_STATUS[AFC_STATUS["UNKNOWN_ERROR"] = 1] = "UNKNOWN_ERROR";
|
|
153
|
+
AFC_STATUS[AFC_STATUS["OP_HEADER_INVALID"] = 2] = "OP_HEADER_INVALID";
|
|
154
|
+
AFC_STATUS[AFC_STATUS["NO_RESOURCES"] = 3] = "NO_RESOURCES";
|
|
155
|
+
AFC_STATUS[AFC_STATUS["READ_ERROR"] = 4] = "READ_ERROR";
|
|
156
|
+
AFC_STATUS[AFC_STATUS["WRITE_ERROR"] = 5] = "WRITE_ERROR";
|
|
157
|
+
AFC_STATUS[AFC_STATUS["UNKNOWN_PACKET_TYPE"] = 6] = "UNKNOWN_PACKET_TYPE";
|
|
158
|
+
AFC_STATUS[AFC_STATUS["INVALID_ARG"] = 7] = "INVALID_ARG";
|
|
159
|
+
AFC_STATUS[AFC_STATUS["OBJECT_NOT_FOUND"] = 8] = "OBJECT_NOT_FOUND";
|
|
160
|
+
AFC_STATUS[AFC_STATUS["OBJECT_IS_DIR"] = 9] = "OBJECT_IS_DIR";
|
|
161
|
+
AFC_STATUS[AFC_STATUS["PERM_DENIED"] = 10] = "PERM_DENIED";
|
|
162
|
+
AFC_STATUS[AFC_STATUS["SERVICE_NOT_CONNECTED"] = 11] = "SERVICE_NOT_CONNECTED";
|
|
163
|
+
AFC_STATUS[AFC_STATUS["OP_TIMEOUT"] = 12] = "OP_TIMEOUT";
|
|
164
|
+
AFC_STATUS[AFC_STATUS["TOO_MUCH_DATA"] = 13] = "TOO_MUCH_DATA";
|
|
165
|
+
AFC_STATUS[AFC_STATUS["END_OF_DATA"] = 14] = "END_OF_DATA";
|
|
166
|
+
AFC_STATUS[AFC_STATUS["OP_NOT_SUPPORTED"] = 15] = "OP_NOT_SUPPORTED";
|
|
167
|
+
AFC_STATUS[AFC_STATUS["OBJECT_EXISTS"] = 16] = "OBJECT_EXISTS";
|
|
168
|
+
AFC_STATUS[AFC_STATUS["OBJECT_BUSY"] = 17] = "OBJECT_BUSY";
|
|
169
|
+
AFC_STATUS[AFC_STATUS["NO_SPACE_LEFT"] = 18] = "NO_SPACE_LEFT";
|
|
170
|
+
AFC_STATUS[AFC_STATUS["OP_WOULD_BLOCK"] = 19] = "OP_WOULD_BLOCK";
|
|
171
|
+
AFC_STATUS[AFC_STATUS["IO_ERROR"] = 20] = "IO_ERROR";
|
|
172
|
+
AFC_STATUS[AFC_STATUS["OP_INTERRUPTED"] = 21] = "OP_INTERRUPTED";
|
|
173
|
+
AFC_STATUS[AFC_STATUS["OP_IN_PROGRESS"] = 22] = "OP_IN_PROGRESS";
|
|
174
|
+
AFC_STATUS[AFC_STATUS["INTERNAL_ERROR"] = 23] = "INTERNAL_ERROR";
|
|
175
|
+
AFC_STATUS[AFC_STATUS["MUX_ERROR"] = 30] = "MUX_ERROR";
|
|
176
|
+
AFC_STATUS[AFC_STATUS["NO_MEM"] = 31] = "NO_MEM";
|
|
177
|
+
AFC_STATUS[AFC_STATUS["NOT_ENOUGH_DATA"] = 32] = "NOT_ENOUGH_DATA";
|
|
178
|
+
AFC_STATUS[AFC_STATUS["DIR_NOT_EMPTY"] = 33] = "DIR_NOT_EMPTY";
|
|
179
|
+
AFC_STATUS[AFC_STATUS["FORCE_SIGNED_TYPE"] = -1] = "FORCE_SIGNED_TYPE";
|
|
180
|
+
})(AFC_STATUS || (exports.AFC_STATUS = AFC_STATUS = {}));
|
|
181
|
+
var AFC_FILE_OPEN_FLAGS;
|
|
182
|
+
exports.AFC_FILE_OPEN_FLAGS = AFC_FILE_OPEN_FLAGS;
|
|
183
|
+
(function(AFC_FILE_OPEN_FLAGS) {
|
|
184
|
+
AFC_FILE_OPEN_FLAGS[AFC_FILE_OPEN_FLAGS[/**
|
|
185
|
+
* r (O_RDONLY)
|
|
186
|
+
*/ "RDONLY"] = 1] = "RDONLY";
|
|
187
|
+
AFC_FILE_OPEN_FLAGS[AFC_FILE_OPEN_FLAGS[/**
|
|
188
|
+
* r+ (O_RDWR | O_CREAT)
|
|
189
|
+
*/ "RW"] = 2] = "RW";
|
|
190
|
+
AFC_FILE_OPEN_FLAGS[AFC_FILE_OPEN_FLAGS[/**
|
|
191
|
+
* w (O_WRONLY | O_CREAT | O_TRUNC)
|
|
192
|
+
*/ "WRONLY"] = 3] = "WRONLY";
|
|
193
|
+
AFC_FILE_OPEN_FLAGS[AFC_FILE_OPEN_FLAGS[/**
|
|
194
|
+
* w+ (O_RDWR | O_CREAT | O_TRUNC)
|
|
195
|
+
*/ "WR"] = 4] = "WR";
|
|
196
|
+
AFC_FILE_OPEN_FLAGS[AFC_FILE_OPEN_FLAGS[/**
|
|
197
|
+
* a (O_WRONLY | O_APPEND | O_CREAT)
|
|
198
|
+
*/ "APPEND"] = 5] = "APPEND";
|
|
199
|
+
AFC_FILE_OPEN_FLAGS[AFC_FILE_OPEN_FLAGS[/**
|
|
200
|
+
* a+ (O_RDWR | O_APPEND | O_CREAT)
|
|
201
|
+
*/ "RDAPPEND"] = 6] = "RDAPPEND";
|
|
202
|
+
})(AFC_FILE_OPEN_FLAGS || (exports.AFC_FILE_OPEN_FLAGS = AFC_FILE_OPEN_FLAGS = {}));
|
|
203
|
+
function isAFCResponse(resp) {
|
|
204
|
+
return AFC_OPS[resp.operation] !== undefined && resp.id !== undefined && resp.data !== undefined;
|
|
205
|
+
}
|
|
206
|
+
function isStatusResponse(resp) {
|
|
207
|
+
return isAFCResponse(resp) && resp.operation === 1;
|
|
208
|
+
}
|
|
209
|
+
function isErrorStatusResponse(resp) {
|
|
210
|
+
return isStatusResponse(resp) && resp.data !== 0;
|
|
211
|
+
}
|
|
212
|
+
class AFCInternalError extends Error {
|
|
213
|
+
constructor(msg, requestId){
|
|
214
|
+
super(msg);
|
|
215
|
+
this.requestId = requestId;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
class AFCError extends Error {
|
|
219
|
+
constructor(msg, status){
|
|
220
|
+
super(msg);
|
|
221
|
+
this.status = status;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
exports.AFCError = AFCError;
|
|
225
|
+
class AFCProtocolClient extends _abstractProtocol.ProtocolClient {
|
|
226
|
+
requestId = 0;
|
|
227
|
+
requestCallbacks = {};
|
|
228
|
+
constructor(socket){
|
|
229
|
+
super(socket, new _abstractProtocol.ProtocolReaderFactory(AFCProtocolReader), new AFCProtocolWriter());
|
|
230
|
+
const reader = this.readerFactory.create((resp, err)=>{
|
|
231
|
+
if (err && err instanceof AFCInternalError) {
|
|
232
|
+
this.requestCallbacks[err.requestId](resp, err);
|
|
233
|
+
} else if (isErrorStatusResponse(resp)) {
|
|
234
|
+
this.requestCallbacks[resp.id](resp, new AFCError(AFC_STATUS[resp.data], resp.data));
|
|
235
|
+
} else {
|
|
236
|
+
this.requestCallbacks[resp.id](resp);
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
socket.on("data", reader.onData);
|
|
240
|
+
}
|
|
241
|
+
sendMessage(msg) {
|
|
242
|
+
return new Promise((resolve, reject)=>{
|
|
243
|
+
const requestId = this.requestId++;
|
|
244
|
+
this.requestCallbacks[requestId] = async (resp, err)=>{
|
|
245
|
+
if (err) {
|
|
246
|
+
reject(err);
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
if (isAFCResponse(resp)) {
|
|
250
|
+
resolve(resp);
|
|
251
|
+
} else {
|
|
252
|
+
reject(new _errors.CommandError("APPLE_DEVICE_AFC", "Malformed AFC response"));
|
|
253
|
+
}
|
|
254
|
+
};
|
|
255
|
+
this.writer.write(this.socket, {
|
|
256
|
+
...msg,
|
|
257
|
+
requestId
|
|
258
|
+
});
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
exports.AFCProtocolClient = AFCProtocolClient;
|
|
263
|
+
class AFCProtocolReader extends _abstractProtocol.ProtocolReader {
|
|
264
|
+
constructor(callback){
|
|
265
|
+
super(AFC_HEADER_SIZE, callback);
|
|
266
|
+
}
|
|
267
|
+
parseHeader(data) {
|
|
268
|
+
const magic = data.slice(0, 8).toString("ascii");
|
|
269
|
+
if (magic !== AFC_MAGIC) {
|
|
270
|
+
throw new AFCInternalError(`Invalid AFC packet received (magic != ${AFC_MAGIC})`, data.readUInt32LE(24));
|
|
271
|
+
}
|
|
272
|
+
// technically these are uint64
|
|
273
|
+
this.header = {
|
|
274
|
+
magic,
|
|
275
|
+
totalLength: data.readUInt32LE(8),
|
|
276
|
+
headerLength: data.readUInt32LE(16),
|
|
277
|
+
requestId: data.readUInt32LE(24),
|
|
278
|
+
operation: data.readUInt32LE(32)
|
|
279
|
+
};
|
|
280
|
+
debug(`parse header: ${JSON.stringify(this.header)}`);
|
|
281
|
+
if (this.header.headerLength < AFC_HEADER_SIZE) {
|
|
282
|
+
throw new AFCInternalError("Invalid AFC header", this.header.requestId);
|
|
283
|
+
}
|
|
284
|
+
return this.header.totalLength - AFC_HEADER_SIZE;
|
|
285
|
+
}
|
|
286
|
+
parseBody(data) {
|
|
287
|
+
const body = {
|
|
288
|
+
operation: this.header.operation,
|
|
289
|
+
id: this.header.requestId,
|
|
290
|
+
data
|
|
291
|
+
};
|
|
292
|
+
if (isStatusResponse(body)) {
|
|
293
|
+
const status = data.readUInt32LE(0);
|
|
294
|
+
debug(`${AFC_OPS[this.header.operation]} response: ${AFC_STATUS[status]}`);
|
|
295
|
+
body.data = status;
|
|
296
|
+
} else if (data.length <= 8) {
|
|
297
|
+
debug(`${AFC_OPS[this.header.operation]} response: ${Array.prototype.toString.call(body)}`);
|
|
298
|
+
} else {
|
|
299
|
+
debug(`${AFC_OPS[this.header.operation]} response length: ${data.length} bytes`);
|
|
300
|
+
}
|
|
301
|
+
return body;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
exports.AFCProtocolReader = AFCProtocolReader;
|
|
305
|
+
class AFCProtocolWriter {
|
|
306
|
+
write(socket, msg) {
|
|
307
|
+
const { data , payload , operation , requestId } = msg;
|
|
308
|
+
const dataLength = data ? data.length : 0;
|
|
309
|
+
const payloadLength = payload ? payload.length : 0;
|
|
310
|
+
const header = Buffer.alloc(AFC_HEADER_SIZE);
|
|
311
|
+
const magic = Buffer.from(AFC_MAGIC);
|
|
312
|
+
magic.copy(header);
|
|
313
|
+
header.writeUInt32LE(AFC_HEADER_SIZE + dataLength + payloadLength, 8);
|
|
314
|
+
header.writeUInt32LE(AFC_HEADER_SIZE + dataLength, 16);
|
|
315
|
+
header.writeUInt32LE(requestId, 24);
|
|
316
|
+
header.writeUInt32LE(operation, 32);
|
|
317
|
+
socket.write(header);
|
|
318
|
+
socket.write(data);
|
|
319
|
+
if (data.length <= 8) {
|
|
320
|
+
debug(`socket write, header: { requestId: ${requestId}, operation: ${AFC_OPS[operation]}}, body: ${Array.prototype.toString.call(data)}`);
|
|
321
|
+
} else {
|
|
322
|
+
debug(`socket write, header: { requestId: ${requestId}, operation: ${AFC_OPS[operation]}}, body: ${data.length} bytes`);
|
|
323
|
+
}
|
|
324
|
+
debug(`socket write, bytes written ${header.length} (header), ${data.length} (body)`);
|
|
325
|
+
if (payload) {
|
|
326
|
+
socket.write(payload);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
exports.AFCProtocolWriter = AFCProtocolWriter;
|
|
331
|
+
|
|
332
|
+
//# sourceMappingURL=AFCProtocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/run/ios/appleDevice/protocol/AFCProtocol.ts"],"sourcesContent":["/**\n * Copyright (c) 2021 Expo, Inc.\n * Copyright (c) 2018 Drifty Co.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport Debug from 'debug';\nimport { Socket } from 'net';\n\nimport { CommandError } from '../../../../utils/errors';\nimport type { ProtocolReaderCallback, ProtocolWriter } from './AbstractProtocol';\nimport { ProtocolClient, ProtocolReader, ProtocolReaderFactory } from './AbstractProtocol';\n\nconst debug = Debug('expo:apple-device:protocol:afc');\n\nexport const AFC_MAGIC = 'CFA6LPAA';\nexport const AFC_HEADER_SIZE = 40;\n\nexport interface AFCHeader {\n magic: typeof AFC_MAGIC;\n totalLength: number;\n headerLength: number;\n requestId: number;\n operation: AFC_OPS;\n}\n\nexport interface AFCMessage {\n operation: AFC_OPS;\n data?: any;\n payload?: any;\n}\n\nexport interface AFCResponse {\n operation: AFC_OPS;\n id: number;\n data: Buffer;\n}\n\nexport interface AFCStatusResponse {\n operation: AFC_OPS.STATUS;\n id: number;\n data: number;\n}\n\n/**\n * AFC Operations\n */\nexport enum AFC_OPS {\n /**\n * Invalid\n */\n INVALID = 0x00000000,\n\n /**\n * Status\n */\n STATUS = 0x00000001,\n\n /**\n * Data\n */\n DATA = 0x00000002,\n\n /**\n * ReadDir\n */\n READ_DIR = 0x00000003,\n\n /**\n * ReadFile\n */\n READ_FILE = 0x00000004,\n\n /**\n * WriteFile\n */\n WRITE_FILE = 0x00000005,\n\n /**\n * WritePart\n */\n WRITE_PART = 0x00000006,\n\n /**\n * TruncateFile\n */\n TRUNCATE = 0x00000007,\n\n /**\n * RemovePath\n */\n REMOVE_PATH = 0x00000008,\n\n /**\n * MakeDir\n */\n MAKE_DIR = 0x00000009,\n\n /**\n * GetFileInfo\n */\n GET_FILE_INFO = 0x0000000a,\n\n /**\n * GetDeviceInfo\n */\n GET_DEVINFO = 0x0000000b,\n\n /**\n * WriteFileAtomic (tmp file+rename)\n */\n WRITE_FILE_ATOM = 0x0000000c,\n\n /**\n * FileRefOpen\n */\n FILE_OPEN = 0x0000000d,\n\n /**\n * FileRefOpenResult\n */\n FILE_OPEN_RES = 0x0000000e,\n\n /**\n * FileRefRead\n */\n FILE_READ = 0x0000000f,\n\n /**\n * FileRefWrite\n */\n FILE_WRITE = 0x00000010,\n\n /**\n * FileRefSeek\n */\n FILE_SEEK = 0x00000011,\n\n /**\n * FileRefTell\n */\n FILE_TELL = 0x00000012,\n\n /**\n * FileRefTellResult\n */\n FILE_TELL_RES = 0x00000013,\n\n /**\n * FileRefClose\n */\n FILE_CLOSE = 0x00000014,\n\n /**\n * FileRefSetFileSize (ftruncate)\n */\n FILE_SET_SIZE = 0x00000015,\n\n /**\n * GetConnectionInfo\n */\n GET_CON_INFO = 0x00000016,\n\n /**\n * SetConnectionOptions\n */\n SET_CON_OPTIONS = 0x00000017,\n\n /**\n * RenamePath\n */\n RENAME_PATH = 0x00000018,\n\n /**\n * SetFSBlockSize (0x800000)\n */\n SET_FS_BS = 0x00000019,\n\n /**\n * SetSocketBlockSize (0x800000)\n */\n SET_SOCKET_BS = 0x0000001a,\n\n /**\n * FileRefLock\n */\n FILE_LOCK = 0x0000001b,\n\n /**\n * MakeLink\n */\n MAKE_LINK = 0x0000001c,\n\n /**\n * GetFileHash\n */\n GET_FILE_HASH = 0x0000001d,\n\n /**\n * SetModTime\n */\n SET_FILE_MOD_TIME = 0x0000001e,\n\n /**\n * GetFileHashWithRange\n */\n GET_FILE_HASH_RANGE = 0x0000001f,\n\n // iOS 6+\n\n /**\n * FileRefSetImmutableHint\n */\n FILE_SET_IMMUTABLE_HINT = 0x00000020,\n\n /**\n * GetSizeOfPathContents\n */\n GET_SIZE_OF_PATH_CONTENTS = 0x00000021,\n\n /**\n * RemovePathAndContents\n */\n REMOVE_PATH_AND_CONTENTS = 0x00000022,\n\n /**\n * DirectoryEnumeratorRefOpen\n */\n DIR_OPEN = 0x00000023,\n\n /**\n * DirectoryEnumeratorRefOpenResult\n */\n DIR_OPEN_RESULT = 0x00000024,\n\n /**\n * DirectoryEnumeratorRefRead\n */\n DIR_READ = 0x00000025,\n\n /**\n * DirectoryEnumeratorRefClose\n */\n DIR_CLOSE = 0x00000026,\n\n // iOS 7+\n\n /**\n * FileRefReadWithOffset\n */\n FILE_READ_OFFSET = 0x00000027,\n\n /**\n * FileRefWriteWithOffset\n */\n FILE_WRITE_OFFSET = 0x00000028,\n}\n\n/**\n * Error Codes\n */\nexport enum AFC_STATUS {\n SUCCESS = 0,\n UNKNOWN_ERROR = 1,\n OP_HEADER_INVALID = 2,\n NO_RESOURCES = 3,\n READ_ERROR = 4,\n WRITE_ERROR = 5,\n UNKNOWN_PACKET_TYPE = 6,\n INVALID_ARG = 7,\n OBJECT_NOT_FOUND = 8,\n OBJECT_IS_DIR = 9,\n PERM_DENIED = 10,\n SERVICE_NOT_CONNECTED = 11,\n OP_TIMEOUT = 12,\n TOO_MUCH_DATA = 13,\n END_OF_DATA = 14,\n OP_NOT_SUPPORTED = 15,\n OBJECT_EXISTS = 16,\n OBJECT_BUSY = 17,\n NO_SPACE_LEFT = 18,\n OP_WOULD_BLOCK = 19,\n IO_ERROR = 20,\n OP_INTERRUPTED = 21,\n OP_IN_PROGRESS = 22,\n INTERNAL_ERROR = 23,\n MUX_ERROR = 30,\n NO_MEM = 31,\n NOT_ENOUGH_DATA = 32,\n DIR_NOT_EMPTY = 33,\n FORCE_SIGNED_TYPE = -1,\n}\n\nexport enum AFC_FILE_OPEN_FLAGS {\n /**\n * r (O_RDONLY)\n */\n RDONLY = 0x00000001,\n\n /**\n * r+ (O_RDWR | O_CREAT)\n */\n RW = 0x00000002,\n\n /**\n * w (O_WRONLY | O_CREAT | O_TRUNC)\n */\n WRONLY = 0x00000003,\n\n /**\n * w+ (O_RDWR | O_CREAT | O_TRUNC)\n */\n WR = 0x00000004,\n\n /**\n * a (O_WRONLY | O_APPEND | O_CREAT)\n */\n APPEND = 0x00000005,\n\n /**\n * a+ (O_RDWR | O_APPEND | O_CREAT)\n */\n RDAPPEND = 0x00000006,\n}\n\nfunction isAFCResponse(resp: any): resp is AFCResponse {\n return AFC_OPS[resp.operation] !== undefined && resp.id !== undefined && resp.data !== undefined;\n}\n\nfunction isStatusResponse(resp: any): resp is AFCStatusResponse {\n return isAFCResponse(resp) && resp.operation === AFC_OPS.STATUS;\n}\n\nfunction isErrorStatusResponse(resp: AFCResponse): boolean {\n return isStatusResponse(resp) && resp.data !== AFC_STATUS.SUCCESS;\n}\n\nclass AFCInternalError extends Error {\n constructor(msg: string, public requestId: number) {\n super(msg);\n }\n}\n\nexport class AFCError extends Error {\n constructor(msg: string, public status: AFC_STATUS) {\n super(msg);\n }\n}\n\nexport class AFCProtocolClient extends ProtocolClient {\n private requestId = 0;\n private requestCallbacks: { [key: number]: ProtocolReaderCallback } = {};\n\n constructor(socket: Socket) {\n super(socket, new ProtocolReaderFactory(AFCProtocolReader), new AFCProtocolWriter());\n\n const reader = this.readerFactory.create((resp, err) => {\n if (err && err instanceof AFCInternalError) {\n this.requestCallbacks[err.requestId](resp, err);\n } else if (isErrorStatusResponse(resp)) {\n this.requestCallbacks[resp.id](resp, new AFCError(AFC_STATUS[resp.data], resp.data));\n } else {\n this.requestCallbacks[resp.id](resp);\n }\n });\n socket.on('data', reader.onData);\n }\n\n sendMessage(msg: AFCMessage): Promise<AFCResponse> {\n return new Promise<AFCResponse>((resolve, reject) => {\n const requestId = this.requestId++;\n this.requestCallbacks[requestId] = async (resp: any, err?: Error) => {\n if (err) {\n reject(err);\n return;\n }\n if (isAFCResponse(resp)) {\n resolve(resp);\n } else {\n reject(new CommandError('APPLE_DEVICE_AFC', 'Malformed AFC response'));\n }\n };\n this.writer.write(this.socket, { ...msg, requestId });\n });\n }\n}\n\nexport class AFCProtocolReader extends ProtocolReader {\n private header!: AFCHeader; // TODO: ! -> ?\n\n constructor(callback: ProtocolReaderCallback) {\n super(AFC_HEADER_SIZE, callback);\n }\n\n parseHeader(data: Buffer) {\n const magic = data.slice(0, 8).toString('ascii');\n if (magic !== AFC_MAGIC) {\n throw new AFCInternalError(\n `Invalid AFC packet received (magic != ${AFC_MAGIC})`,\n data.readUInt32LE(24)\n );\n }\n // technically these are uint64\n this.header = {\n magic,\n totalLength: data.readUInt32LE(8),\n headerLength: data.readUInt32LE(16),\n requestId: data.readUInt32LE(24),\n operation: data.readUInt32LE(32),\n };\n\n debug(`parse header: ${JSON.stringify(this.header)}`);\n if (this.header.headerLength < AFC_HEADER_SIZE) {\n throw new AFCInternalError('Invalid AFC header', this.header.requestId);\n }\n return this.header.totalLength - AFC_HEADER_SIZE;\n }\n\n parseBody(data: Buffer): AFCResponse | AFCStatusResponse {\n const body: any = {\n operation: this.header.operation,\n id: this.header.requestId,\n data,\n };\n if (isStatusResponse(body)) {\n const status = data.readUInt32LE(0);\n debug(`${AFC_OPS[this.header.operation]} response: ${AFC_STATUS[status]}`);\n body.data = status;\n } else if (data.length <= 8) {\n debug(`${AFC_OPS[this.header.operation]} response: ${Array.prototype.toString.call(body)}`);\n } else {\n debug(`${AFC_OPS[this.header.operation]} response length: ${data.length} bytes`);\n }\n return body;\n }\n}\n\nexport class AFCProtocolWriter implements ProtocolWriter {\n write(socket: Socket, msg: AFCMessage & { requestId: number }) {\n const { data, payload, operation, requestId } = msg;\n\n const dataLength = data ? data.length : 0;\n const payloadLength = payload ? payload.length : 0;\n\n const header = Buffer.alloc(AFC_HEADER_SIZE);\n const magic = Buffer.from(AFC_MAGIC);\n magic.copy(header);\n header.writeUInt32LE(AFC_HEADER_SIZE + dataLength + payloadLength, 8);\n header.writeUInt32LE(AFC_HEADER_SIZE + dataLength, 16);\n header.writeUInt32LE(requestId, 24);\n header.writeUInt32LE(operation, 32);\n socket.write(header);\n socket.write(data);\n if (data.length <= 8) {\n debug(\n `socket write, header: { requestId: ${requestId}, operation: ${\n AFC_OPS[operation]\n }}, body: ${Array.prototype.toString.call(data)}`\n );\n } else {\n debug(\n `socket write, header: { requestId: ${requestId}, operation: ${AFC_OPS[operation]}}, body: ${data.length} bytes`\n );\n }\n\n debug(`socket write, bytes written ${header.length} (header), ${data.length} (body)`);\n if (payload) {\n socket.write(payload);\n }\n }\n}\n"],"names":["debug","Debug","AFC_MAGIC","AFC_HEADER_SIZE","AFC_OPS","INVALID","STATUS","DATA","READ_DIR","READ_FILE","WRITE_FILE","WRITE_PART","TRUNCATE","REMOVE_PATH","MAKE_DIR","GET_FILE_INFO","GET_DEVINFO","WRITE_FILE_ATOM","FILE_OPEN","FILE_OPEN_RES","FILE_READ","FILE_WRITE","FILE_SEEK","FILE_TELL","FILE_TELL_RES","FILE_CLOSE","FILE_SET_SIZE","GET_CON_INFO","SET_CON_OPTIONS","RENAME_PATH","SET_FS_BS","SET_SOCKET_BS","FILE_LOCK","MAKE_LINK","GET_FILE_HASH","SET_FILE_MOD_TIME","GET_FILE_HASH_RANGE","FILE_SET_IMMUTABLE_HINT","GET_SIZE_OF_PATH_CONTENTS","REMOVE_PATH_AND_CONTENTS","DIR_OPEN","DIR_OPEN_RESULT","DIR_READ","DIR_CLOSE","FILE_READ_OFFSET","FILE_WRITE_OFFSET","AFC_STATUS","SUCCESS","UNKNOWN_ERROR","OP_HEADER_INVALID","NO_RESOURCES","READ_ERROR","WRITE_ERROR","UNKNOWN_PACKET_TYPE","INVALID_ARG","OBJECT_NOT_FOUND","OBJECT_IS_DIR","PERM_DENIED","SERVICE_NOT_CONNECTED","OP_TIMEOUT","TOO_MUCH_DATA","END_OF_DATA","OP_NOT_SUPPORTED","OBJECT_EXISTS","OBJECT_BUSY","NO_SPACE_LEFT","OP_WOULD_BLOCK","IO_ERROR","OP_INTERRUPTED","OP_IN_PROGRESS","INTERNAL_ERROR","MUX_ERROR","NO_MEM","NOT_ENOUGH_DATA","DIR_NOT_EMPTY","FORCE_SIGNED_TYPE","AFC_FILE_OPEN_FLAGS","RDONLY","RW","WRONLY","WR","APPEND","RDAPPEND","isAFCResponse","resp","operation","undefined","id","data","isStatusResponse","isErrorStatusResponse","AFCInternalError","Error","constructor","msg","requestId","AFCError","status","AFCProtocolClient","ProtocolClient","requestCallbacks","socket","ProtocolReaderFactory","AFCProtocolReader","AFCProtocolWriter","reader","readerFactory","create","err","on","onData","sendMessage","Promise","resolve","reject","CommandError","writer","write","ProtocolReader","callback","parseHeader","magic","slice","toString","readUInt32LE","header","totalLength","headerLength","JSON","stringify","parseBody","body","length","Array","prototype","call","payload","dataLength","payloadLength","Buffer","alloc","from","copy","writeUInt32LE"],"mappings":"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"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
var _plist = _interopRequireDefault(require("@expo/plist"));
|
|
6
|
+
var _plist1 = require("../../../../utils/plist");
|
|
7
|
+
function _interopRequireDefault(obj) {
|
|
8
|
+
return obj && obj.__esModule ? obj : {
|
|
9
|
+
default: obj
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
const BPLIST_MAGIC = Buffer.from("bplist00");
|
|
13
|
+
class ProtocolReaderFactory {
|
|
14
|
+
constructor(ProtocolReader1){
|
|
15
|
+
this.ProtocolReader = ProtocolReader1;
|
|
16
|
+
}
|
|
17
|
+
create(callback) {
|
|
18
|
+
return new this.ProtocolReader(callback);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.ProtocolReaderFactory = ProtocolReaderFactory;
|
|
22
|
+
class ProtocolReader {
|
|
23
|
+
constructor(headerSize, callback){
|
|
24
|
+
this.headerSize = headerSize;
|
|
25
|
+
this.callback = callback;
|
|
26
|
+
this.buffer = Buffer.alloc(0);
|
|
27
|
+
this.onData = this.onData.bind(this);
|
|
28
|
+
}
|
|
29
|
+
onData(data) {
|
|
30
|
+
try {
|
|
31
|
+
// if there's data, add it on to existing buffer
|
|
32
|
+
this.buffer = data ? Buffer.concat([
|
|
33
|
+
this.buffer,
|
|
34
|
+
data
|
|
35
|
+
]) : this.buffer;
|
|
36
|
+
// we haven't gotten the body length from the header yet
|
|
37
|
+
if (!this.bodyLength) {
|
|
38
|
+
if (this.buffer.length < this.headerSize) {
|
|
39
|
+
// partial header, wait for rest
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
this.bodyLength = this.parseHeader(this.buffer);
|
|
43
|
+
// move on to body
|
|
44
|
+
this.buffer = this.buffer.slice(this.headerSize);
|
|
45
|
+
if (!this.buffer.length) {
|
|
46
|
+
// only got header, wait for body
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (this.buffer.length < this.bodyLength) {
|
|
51
|
+
// wait for rest of body
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (this.bodyLength === -1) {
|
|
55
|
+
this.callback(this.parseBody(this.buffer));
|
|
56
|
+
this.buffer = Buffer.alloc(0);
|
|
57
|
+
} else {
|
|
58
|
+
this.body = this.buffer.slice(0, this.bodyLength);
|
|
59
|
+
this.bodyLength -= this.body.length;
|
|
60
|
+
if (!this.bodyLength) {
|
|
61
|
+
this.callback(this.parseBody(this.body));
|
|
62
|
+
}
|
|
63
|
+
this.buffer = this.buffer.slice(this.body.length);
|
|
64
|
+
// There are multiple messages here, call parse again
|
|
65
|
+
if (this.buffer.length) {
|
|
66
|
+
this.onData();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
} catch (err) {
|
|
70
|
+
this.callback(null, err);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
exports.ProtocolReader = ProtocolReader;
|
|
75
|
+
class PlistProtocolReader extends ProtocolReader {
|
|
76
|
+
parseBody(body) {
|
|
77
|
+
if (BPLIST_MAGIC.compare(body, 0, 8) === 0) {
|
|
78
|
+
return (0, _plist1).parsePlistBuffer(body);
|
|
79
|
+
} else {
|
|
80
|
+
return _plist.default.parse(body.toString("utf8"));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
exports.PlistProtocolReader = PlistProtocolReader;
|
|
85
|
+
class ProtocolClient {
|
|
86
|
+
constructor(socket, readerFactory, writer){
|
|
87
|
+
this.socket = socket;
|
|
88
|
+
this.readerFactory = readerFactory;
|
|
89
|
+
this.writer = writer;
|
|
90
|
+
}
|
|
91
|
+
sendMessage(msg, callback) {
|
|
92
|
+
return new Promise((resolve, reject)=>{
|
|
93
|
+
const reader = this.readerFactory.create(async (response, error)=>{
|
|
94
|
+
if (error) {
|
|
95
|
+
reject(error);
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
if (callback) {
|
|
99
|
+
callback(response, (value)=>{
|
|
100
|
+
this.socket.removeListener("data", reader.onData);
|
|
101
|
+
resolve(value);
|
|
102
|
+
}, reject);
|
|
103
|
+
} else {
|
|
104
|
+
this.socket.removeListener("data", reader.onData);
|
|
105
|
+
resolve(response);
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
this.socket.on("data", reader.onData);
|
|
109
|
+
this.writer.write(this.socket, msg);
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
exports.ProtocolClient = ProtocolClient;
|
|
114
|
+
|
|
115
|
+
//# sourceMappingURL=AbstractProtocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/run/ios/appleDevice/protocol/AbstractProtocol.ts"],"sourcesContent":["/**\n * Copyright (c) 2021 Expo, Inc.\n * Copyright (c) 2018 Drifty Co.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport plist from '@expo/plist';\nimport { Socket } from 'net';\n\nimport { parsePlistBuffer } from '../../../../utils/plist';\n\nconst BPLIST_MAGIC = Buffer.from('bplist00');\n\nexport type ProtocolReaderCallback = (resp: any, err?: Error) => void;\n\nexport class ProtocolReaderFactory<T> {\n constructor(private ProtocolReader: new (callback: ProtocolReaderCallback) => T) {}\n\n create(callback: (resp: any, err?: Error) => void): T {\n return new this.ProtocolReader(callback);\n }\n}\n\nexport abstract class ProtocolReader {\n protected body!: Buffer; // TODO: ! -> ?\n protected bodyLength!: number; // TODO: ! -> ?\n protected buffer = Buffer.alloc(0);\n constructor(protected headerSize: number, protected callback: ProtocolReaderCallback) {\n this.onData = this.onData.bind(this);\n }\n\n /** Returns length of body, or -1 if header doesn't contain length */\n protected abstract parseHeader(data: Buffer): number;\n protected abstract parseBody(data: Buffer): any;\n\n onData(data?: Buffer) {\n try {\n // if there's data, add it on to existing buffer\n this.buffer = data ? Buffer.concat([this.buffer, data]) : this.buffer;\n // we haven't gotten the body length from the header yet\n if (!this.bodyLength) {\n if (this.buffer.length < this.headerSize) {\n // partial header, wait for rest\n return;\n }\n this.bodyLength = this.parseHeader(this.buffer);\n // move on to body\n this.buffer = this.buffer.slice(this.headerSize);\n if (!this.buffer.length) {\n // only got header, wait for body\n return;\n }\n }\n if (this.buffer.length < this.bodyLength) {\n // wait for rest of body\n return;\n }\n\n if (this.bodyLength === -1) {\n this.callback(this.parseBody(this.buffer));\n this.buffer = Buffer.alloc(0);\n } else {\n this.body = this.buffer.slice(0, this.bodyLength);\n this.bodyLength -= this.body.length;\n if (!this.bodyLength) {\n this.callback(this.parseBody(this.body));\n }\n this.buffer = this.buffer.slice(this.body.length);\n // There are multiple messages here, call parse again\n if (this.buffer.length) {\n this.onData();\n }\n }\n } catch (err: any) {\n this.callback(null, err);\n }\n }\n}\n\nexport abstract class PlistProtocolReader extends ProtocolReader {\n protected parseBody(body: Buffer) {\n if (BPLIST_MAGIC.compare(body, 0, 8) === 0) {\n return parsePlistBuffer(body);\n } else {\n return plist.parse(body.toString('utf8'));\n }\n }\n}\n\nexport interface ProtocolWriter {\n write(sock: Socket, msg: any): void;\n}\n\nexport abstract class ProtocolClient<MessageType = any> {\n constructor(\n public socket: Socket,\n protected readerFactory: ProtocolReaderFactory<ProtocolReader>,\n protected writer: ProtocolWriter\n ) {}\n\n sendMessage<ResponseType = any>(msg: MessageType): Promise<ResponseType>;\n sendMessage<CallbackType = void, ResponseType = any>(\n msg: MessageType,\n callback: (response: ResponseType, resolve: any, reject: any) => void\n ): Promise<CallbackType>;\n sendMessage<CallbackType = void, ResponseType = any>(\n msg: MessageType,\n callback?: (response: ResponseType, resolve: any, reject: any) => void\n ): Promise<CallbackType | ResponseType> {\n return new Promise<ResponseType | CallbackType>((resolve, reject) => {\n const reader = this.readerFactory.create(async (response: ResponseType, error?: Error) => {\n if (error) {\n reject(error);\n return;\n }\n if (callback) {\n callback(\n response,\n (value: any) => {\n this.socket.removeListener('data', reader.onData);\n resolve(value);\n },\n reject\n );\n } else {\n this.socket.removeListener('data', reader.onData);\n resolve(response);\n }\n });\n this.socket.on('data', reader.onData);\n this.writer.write(this.socket, msg);\n });\n }\n}\n"],"names":["BPLIST_MAGIC","Buffer","from","ProtocolReaderFactory","constructor","ProtocolReader","create","callback","headerSize","buffer","alloc","onData","bind","data","concat","bodyLength","length","parseHeader","slice","parseBody","body","err","PlistProtocolReader","compare","parsePlistBuffer","plist","parse","toString","ProtocolClient","socket","readerFactory","writer","sendMessage","msg","Promise","resolve","reject","reader","response","error","value","removeListener","on","write"],"mappings":"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"}
|