appium-ios-remotexpc 2.2.4 → 2.3.0

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.
Files changed (50) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/build/src/index.d.ts +1 -0
  3. package/build/src/index.d.ts.map +1 -1
  4. package/build/src/index.js.map +1 -1
  5. package/build/src/services/ios/afc/codec.d.ts +5 -0
  6. package/build/src/services/ios/afc/codec.d.ts.map +1 -1
  7. package/build/src/services/ios/afc/codec.js +10 -0
  8. package/build/src/services/ios/afc/codec.js.map +1 -1
  9. package/build/src/services/ios/installation-proxy/index.d.ts.map +1 -1
  10. package/build/src/services/ios/installation-proxy/index.js +1 -24
  11. package/build/src/services/ios/installation-proxy/index.js.map +1 -1
  12. package/build/src/services/ios/zipconduit/constants.d.ts +20 -0
  13. package/build/src/services/ios/zipconduit/constants.d.ts.map +1 -0
  14. package/build/src/services/ios/zipconduit/constants.js +20 -0
  15. package/build/src/services/ios/zipconduit/constants.js.map +1 -0
  16. package/build/src/services/ios/zipconduit/index.d.ts +38 -0
  17. package/build/src/services/ios/zipconduit/index.d.ts.map +1 -0
  18. package/build/src/services/ios/zipconduit/index.js +148 -0
  19. package/build/src/services/ios/zipconduit/index.js.map +1 -0
  20. package/build/src/services/ios/zipconduit/plists.d.ts +46 -0
  21. package/build/src/services/ios/zipconduit/plists.d.ts.map +1 -0
  22. package/build/src/services/ios/zipconduit/plists.js +87 -0
  23. package/build/src/services/ios/zipconduit/plists.js.map +1 -0
  24. package/build/src/services/ios/zipconduit/stream-zip.d.ts +105 -0
  25. package/build/src/services/ios/zipconduit/stream-zip.d.ts.map +1 -0
  26. package/build/src/services/ios/zipconduit/stream-zip.js +883 -0
  27. package/build/src/services/ios/zipconduit/stream-zip.js.map +1 -0
  28. package/build/src/services/ios/zipconduit/zip-reader.d.ts +15 -0
  29. package/build/src/services/ios/zipconduit/zip-reader.d.ts.map +1 -0
  30. package/build/src/services/ios/zipconduit/zip-reader.js +33 -0
  31. package/build/src/services/ios/zipconduit/zip-reader.js.map +1 -0
  32. package/build/src/services/ios/zipconduit/zip-utils.d.ts +27 -0
  33. package/build/src/services/ios/zipconduit/zip-utils.d.ts.map +1 -0
  34. package/build/src/services/ios/zipconduit/zip-utils.js +116 -0
  35. package/build/src/services/ios/zipconduit/zip-utils.js.map +1 -0
  36. package/build/src/services.d.ts +6 -0
  37. package/build/src/services.d.ts.map +1 -1
  38. package/build/src/services.js +14 -0
  39. package/build/src/services.js.map +1 -1
  40. package/package.json +2 -1
  41. package/src/index.ts +6 -0
  42. package/src/services/ios/afc/codec.ts +15 -0
  43. package/src/services/ios/installation-proxy/index.ts +1 -42
  44. package/src/services/ios/zipconduit/constants.ts +30 -0
  45. package/src/services/ios/zipconduit/index.ts +242 -0
  46. package/src/services/ios/zipconduit/plists.ts +139 -0
  47. package/src/services/ios/zipconduit/stream-zip.ts +1082 -0
  48. package/src/services/ios/zipconduit/zip-reader.ts +48 -0
  49. package/src/services/ios/zipconduit/zip-utils.ts +185 -0
  50. package/src/services.ts +19 -0
@@ -0,0 +1,46 @@
1
+ import type { PlistDictionary } from '../../../lib/types.js';
2
+ export declare const SIGNING_ERROR = "ApplicationVerificationFailed";
3
+ export interface ZipConduitMetadata {
4
+ StandardDirectoryPerms: number;
5
+ StandardFilePerms: number;
6
+ RecordCount: number;
7
+ TotalUncompressedBytes: number;
8
+ Version: number;
9
+ }
10
+ export interface InitTransferRequest {
11
+ InstallOptionsDictionary: {
12
+ DisableDeltaTransfer: number;
13
+ InstallDeltaTypeKey: string;
14
+ IsUserInitiated: number;
15
+ PackageType: string;
16
+ PreferWifi: number;
17
+ };
18
+ InstallTransferredDirectory: number;
19
+ MediaSubdir: string;
20
+ UserInitiatedTransfer: number;
21
+ }
22
+ export interface ZipConduitProgressUpdate {
23
+ percent: number;
24
+ status: string;
25
+ }
26
+ /**
27
+ * Build the InitTransfer plist payload for zip_conduit.
28
+ * @param fileName Local IPA path used to derive the PublicStaging destination.
29
+ */
30
+ export declare function createInitTransfer(fileName: string): InitTransferRequest;
31
+ /**
32
+ * Build ZipMetadata plist values embedded in the streamed archive.
33
+ * @param numFiles Number of entries in the source IPA.
34
+ * @param totalBytes Sum of uncompressed sizes for all IPA entries.
35
+ */
36
+ export declare function createMetaInfPlist(numFiles: number, totalBytes: number): ZipConduitMetadata;
37
+ /**
38
+ * Parse a zip_conduit progress plist into completion state and percentage.
39
+ * @param progressUpdate Progress plist received from the device.
40
+ */
41
+ export declare function evaluateProgress(progressUpdate: PlistDictionary): {
42
+ done: boolean;
43
+ percent: number;
44
+ status: string;
45
+ };
46
+ //# sourceMappingURL=plists.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plists.d.ts","sourceRoot":"","sources":["../../../../../src/services/ios/zipconduit/plists.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG7D,eAAO,MAAM,aAAa,kCAAkC,CAAC;AAE7D,MAAM,WAAW,kBAAkB;IACjC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,wBAAwB,EAAE;QACxB,oBAAoB,EAAE,MAAM,CAAC;QAC7B,mBAAmB,EAAE,MAAM,CAAC;QAC5B,eAAe,EAAE,MAAM,CAAC;QACxB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,2BAA2B,EAAE,MAAM,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,CAcxE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,kBAAkB,CAQpB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,eAAe,GAAG;IACjE,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAyCA"}
@@ -0,0 +1,87 @@
1
+ import path from 'node:path';
2
+ import { STD_DIR_PERM, STD_FILE_PERM } from './constants.js';
3
+ export const SIGNING_ERROR = 'ApplicationVerificationFailed';
4
+ /**
5
+ * Build the InitTransfer plist payload for zip_conduit.
6
+ * @param fileName Local IPA path used to derive the PublicStaging destination.
7
+ */
8
+ export function createInitTransfer(fileName) {
9
+ const base = path.basename(fileName);
10
+ return {
11
+ InstallTransferredDirectory: 1,
12
+ UserInitiatedTransfer: 0,
13
+ MediaSubdir: `PublicStaging/${base}`,
14
+ InstallOptionsDictionary: {
15
+ InstallDeltaTypeKey: 'InstallDeltaTypeSparseIPAFiles',
16
+ DisableDeltaTransfer: 1,
17
+ IsUserInitiated: 1,
18
+ PreferWifi: 1,
19
+ PackageType: 'Customer',
20
+ },
21
+ };
22
+ }
23
+ /**
24
+ * Build ZipMetadata plist values embedded in the streamed archive.
25
+ * @param numFiles Number of entries in the source IPA.
26
+ * @param totalBytes Sum of uncompressed sizes for all IPA entries.
27
+ */
28
+ export function createMetaInfPlist(numFiles, totalBytes) {
29
+ return {
30
+ RecordCount: 2 + numFiles,
31
+ StandardDirectoryPerms: STD_DIR_PERM,
32
+ StandardFilePerms: STD_FILE_PERM,
33
+ TotalUncompressedBytes: totalBytes,
34
+ Version: 2,
35
+ };
36
+ }
37
+ /**
38
+ * Parse a zip_conduit progress plist into completion state and percentage.
39
+ * @param progressUpdate Progress plist received from the device.
40
+ */
41
+ export function evaluateProgress(progressUpdate) {
42
+ const topStatus = asString(progressUpdate.Status);
43
+ if (topStatus === 'DataComplete') {
44
+ return { done: true, percent: 100, status: topStatus };
45
+ }
46
+ // The device can report a failure as a top-level Error (e.g. ExtractionFailed)
47
+ // with no InstallProgressDict; surface the real reason instead of a generic
48
+ // "missing InstallProgressDict".
49
+ const topError = asString(progressUpdate.Error);
50
+ if (topError) {
51
+ const topDescription = asString(progressUpdate.ErrorDescription) ?? '';
52
+ throw new Error(`Failed installing: '${topError}'${topDescription ? ` errorDescription:'${topDescription}'` : ''}`);
53
+ }
54
+ const installProgressDict = progressUpdate.InstallProgressDict;
55
+ if (!installProgressDict || typeof installProgressDict !== 'object') {
56
+ throw new Error(`Invalid progress update, missing InstallProgressDict: ${JSON.stringify(progressUpdate)}`);
57
+ }
58
+ const progress = installProgressDict;
59
+ const errorMessage = asString(progress.Error);
60
+ if (errorMessage) {
61
+ const description = asString(progress.ErrorDescription) ?? '';
62
+ if (errorMessage === SIGNING_ERROR) {
63
+ throw new Error(`App is not properly signed for this device. original error: '${errorMessage}' errorDescription:'${description}'`);
64
+ }
65
+ throw new Error(`Failed installing: '${errorMessage}' errorDescription:'${description}'`);
66
+ }
67
+ const percent = asNumber(progress.PercentComplete) ?? 0;
68
+ const status = asString(progress.Status) ?? '';
69
+ return { done: false, percent, status };
70
+ }
71
+ function asNumber(value) {
72
+ if (typeof value === 'number' && Number.isFinite(value)) {
73
+ return value;
74
+ }
75
+ if (typeof value === 'bigint') {
76
+ return Number(value);
77
+ }
78
+ if (typeof value === 'string' && value.trim() !== '') {
79
+ const parsed = Number(value);
80
+ return Number.isFinite(parsed) ? parsed : undefined;
81
+ }
82
+ return undefined;
83
+ }
84
+ function asString(value) {
85
+ return typeof value === 'string' ? value : undefined;
86
+ }
87
+ //# sourceMappingURL=plists.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plists.js","sourceRoot":"","sources":["../../../../../src/services/ios/zipconduit/plists.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * @license node-stream-zip | (c) 2020 Antelle | https://github.com/antelle/node-stream-zip/blob/master/LICENSE
3
+ * Portions copyright https://github.com/cthackers/adm-zip | https://raw.githubusercontent.com/cthackers/adm-zip/master/LICENSE
4
+ *
5
+ * Vendored from node-stream-zip@1.15.0, trimmed to the archive-reading paths
6
+ * used by ZipConduit (central-directory listing + streaming entry reads).
7
+ * Removed unused features: extract-to-disk, synchronous entry data, setFs,
8
+ * and the async helpers entriesCount/comment/entry/entryData/extract.
9
+ */
10
+ import { EventEmitter } from 'node:events';
11
+ import stream from 'node:stream';
12
+ export interface StreamZipConfig {
13
+ file?: string;
14
+ fd?: number;
15
+ chunkSize?: number;
16
+ storeEntries?: boolean;
17
+ skipEntryNameValidation?: boolean;
18
+ nameEncoding?: string;
19
+ /**
20
+ * When true, skip local header reads for STORED entries (IPAs use STORE).
21
+ * Deflated entries always read the local header for a correct data offset.
22
+ */
23
+ skipLocalHeaderRead?: boolean;
24
+ /** When false, skip CRC32 verification while streaming (faster; default verifies). */
25
+ verifyEntryCrc?: boolean;
26
+ }
27
+ export type StreamZipEntry = ZipEntry;
28
+ declare class CentralDirectoryHeader {
29
+ volumeEntries: number;
30
+ totalEntries: number;
31
+ size: number;
32
+ offset: number;
33
+ commentLength: number;
34
+ headerOffset: number;
35
+ read(data: Buffer): void;
36
+ }
37
+ /** ZIP central-directory entry (also returned from {@link StreamZip.entries}). */
38
+ export declare class ZipEntry {
39
+ verMade: number;
40
+ version: number;
41
+ flags: number;
42
+ method: number;
43
+ time: number;
44
+ crc: number;
45
+ compressedSize: number;
46
+ size: number;
47
+ fnameLen: number;
48
+ extraLen: number;
49
+ comLen: number;
50
+ diskStart: number;
51
+ inattr: number;
52
+ attr: number;
53
+ offset: number;
54
+ headerOffset: number;
55
+ name: string;
56
+ isDirectory: boolean;
57
+ comment: string | null;
58
+ readHeader(data: Buffer, offset: number): void;
59
+ readDataHeader(data: Buffer): void;
60
+ read(data: Buffer, offset: number, textDecoder: TextDecoder | null): void;
61
+ validateName(): void;
62
+ readExtra(data: Buffer, offset: number): void;
63
+ parseZip64Extra(data: Buffer, offset: number, length: number): void;
64
+ get encrypted(): boolean;
65
+ get isFile(): boolean;
66
+ }
67
+ /** Streaming ZIP reader with promise-based entry access. */
68
+ export declare class StreamZip extends EventEmitter {
69
+ private readonly config;
70
+ entriesCount: number;
71
+ comment: string | null;
72
+ centralDirectory: CentralDirectoryHeader;
73
+ private fd;
74
+ private fileSize;
75
+ private chunkSize;
76
+ private closed;
77
+ private signatureOp;
78
+ private entriesOp;
79
+ private readonly entryMap;
80
+ private readonly textDecoder;
81
+ private readonly readyPromise;
82
+ constructor(config: StreamZipConfig);
83
+ /** Resolves when the central directory has been parsed. */
84
+ waitUntilReady(): Promise<void>;
85
+ entries(): Promise<Record<string, ZipEntry>>;
86
+ stream(entry: ZipEntry | string): Promise<stream.Readable>;
87
+ openEntry(entry: ZipEntry | string): Promise<ZipEntry>;
88
+ close(): Promise<void>;
89
+ emit(event: string | symbol, ...args: unknown[]): boolean;
90
+ private resolveFileEntry;
91
+ private open;
92
+ private readFile;
93
+ private readUntilFoundCallback;
94
+ private readCentralDirectory;
95
+ private readCentralDirectoryComplete;
96
+ private readZip64CentralDirectoryLocator;
97
+ private readZip64CentralDirectoryLocatorComplete;
98
+ private readZip64CentralDirectoryComplete;
99
+ private readEntries;
100
+ private readEntriesCallback;
101
+ private dataOffset;
102
+ private canVerifyCrc;
103
+ }
104
+ export {};
105
+ //# sourceMappingURL=stream-zip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-zip.d.ts","sourceRoot":"","sources":["../../../../../src/services/ios/zipconduit/stream-zip.ts"],"names":[],"mappings":"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"}