ipa-resign 0.0.5 → 0.0.6

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/LICENSE ADDED
@@ -0,0 +1,47 @@
1
+ Copyright (c) 2026 650 Industries, Inc. All rights reserved.
2
+
3
+ PROPRIETARY SOFTWARE LICENSE
4
+
5
+ This software, including the package published as "ipa-resign" and all of its
6
+ source code, compiled bundles, native helper binaries, and accompanying files
7
+ (the "Software"), is the confidential and proprietary property of 650
8
+ Industries, Inc. ("650 Industries").
9
+
10
+ 1. No license granted. No license or right to the Software is granted to you,
11
+ whether by implication, estoppel, or otherwise, except under a separate
12
+ written agreement signed by 650 Industries. Absent such an agreement, you may
13
+ not use, copy, install, execute, or retain the Software.
14
+
15
+ 2. Restrictions. You may not, and may not permit any third party to:
16
+ (a) reverse engineer, decompile, disassemble, deobfuscate, or otherwise
17
+ attempt to derive the source code, structure, algorithms, or protocols of
18
+ the Software, in whole or in part;
19
+ (b) copy, distribute, republish, sublicense, sell, rent, lease, or otherwise
20
+ make the Software available to any third party;
21
+ (c) modify, adapt, translate, or create derivative works of the Software; or
22
+ (d) remove, obscure, or alter any proprietary notice in the Software.
23
+
24
+ Any circumvention or attempted circumvention of the technical protection
25
+ measures in the Software (including its obfuscation) is a material breach of
26
+ this license and may violate applicable law.
27
+
28
+ 3. Third-party components. The Software bundles third-party open-source
29
+ components that remain licensed under their own respective terms. Those terms,
30
+ and the required copyright and permission notices, are reproduced in
31
+ dist/THIRD-PARTY-LICENSES.txt. Nothing in this license limits your rights, or
32
+ enlarges your obligations, under those third-party licenses with respect to
33
+ those components. The restrictions in Section 2 apply only to the proprietary
34
+ portions of the Software authored by 650 Industries.
35
+
36
+ 4. Reservation of rights. All rights not expressly granted are reserved by 650
37
+ Industries. This license does not transfer any ownership, title, or
38
+ intellectual property right in the Software.
39
+
40
+ 5. No warranty. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
41
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
42
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT.
43
+
44
+ 6. Limitation of liability. IN NO EVENT SHALL 650 INDUSTRIES BE LIABLE FOR ANY
45
+ CLAIM, DAMAGES, OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT, OR
46
+ OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION WITH THE SOFTWARE OR THE USE
47
+ OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md CHANGED
@@ -95,14 +95,16 @@ and re-wrap bytes as `Buffer` for the CLI. Full design:
95
95
 
96
96
  ```bash
97
97
  yarn install
98
- yarn build # dist/: bytecode CLI bundle (index.jsc) + the ipa-resign/core and
98
+ yarn build # dist/: obfuscated CLI bundle (index.js) + the ipa-resign/core and
99
99
  # ipa-resign/anisette-browser subpath builds + bundled .d.ts
100
100
  ```
101
101
 
102
- `yarn build` is platform-agnostic — it just bundles TypeScript (via esbuild). It runs
103
- three steps: the bytecode CLI build, then `build:core` and `build:anisette-browser` (the
104
- two browser-consumable subpaths, which you can also run on their own). The native helper
105
- binaries are built separately because they require platform-specific toolchains:
102
+ `yarn build` is platform-agnostic — it bundles TypeScript (via esbuild) and runs each
103
+ bundle through `javascript-obfuscator` (`scripts/obfuscate.mjs`). It runs several
104
+ steps: the obfuscated CLI build, then `build:core`, `build:anisette-browser`,
105
+ `build:sign-browser`, and `build:browser` (the browser-consumable subpaths, which you
106
+ can also run on their own). The native helper binaries are built separately because
107
+ they require platform-specific toolchains:
106
108
 
107
109
  ```bash
108
110
  # Build the macOS anisette helper (only works on macOS — needs swiftc, i.e. Xcode CLT).
@@ -9,6 +9,10 @@ async function Module(moduleArg = {}) {
9
9
  // include: shell.js
10
10
  // include: minimum_runtime_check.js
11
11
  (function() {
12
+ // HAND-PATCHED (re-apply when regenerating this file): emscripten's UA
13
+ // version check misparses modern Safari/WebKit and throws before the wasm
14
+ // loads (APPLE-SIGN-20). Skip the whole check.
15
+ return;
12
16
  // "30.0.0" -> 300000
13
17
  function humanReadableVersionToPacked(str) {
14
18
  str = str.split('-')[0]; // Remove any trailing part from e.g. "12.53.3-alpha"
@@ -22,6 +22,7 @@ var createZsignModule = (() => {
22
22
  // include: shell.js
23
23
  // include: minimum_runtime_check.js
24
24
  (function() {
25
+ return; // patched by vendor-zsign.mjs: UA version check misparses modern Safari (APPLE-SIGN-20)
25
26
  // "30.0.0" -> 300000
26
27
  function humanReadableVersionToPacked(str) {
27
28
  str = str.split('-')[0]; // Remove any trailing part from e.g. "12.53.3-alpha"
@@ -1,4 +1,4 @@
1
- Third-party software bundled into index.jsc.
1
+ Third-party software bundled into index.js.
2
2
  Generated by scripts/build.mjs. 28 packages.
3
3
 
4
4
  ========================================================================
@@ -32,6 +32,32 @@ export type AnisetteSource = {
32
32
  export declare function setAnisetteSource(source: AnisetteSource): void;
33
33
  export declare function getAnisetteHeadersAsync(): Promise<AnisetteHeaders>;
34
34
  export declare function clearAnisetteCache(): void;
35
+ /** How the browser device presents to Apple's account device list. */
36
+ export type AnisetteDeviceConfig = {
37
+ /** Real Apple model id, e.g. `Macmini9,1` or `MacBookPro18,1`. Unknown ids show as "Mac". */
38
+ model?: string;
39
+ /** macOS version shown on the Version line, e.g. `26.5`. Free-form; recorded at registration. */
40
+ osVersion?: string;
41
+ /** macOS build paired with the version, e.g. `25F71`. Not displayed; kept for realism. */
42
+ osBuild?: string;
43
+ };
44
+ /**
45
+ * Set how browser sign-ins present to Apple's account device list, by part. Merges with the
46
+ * current config, so `setAnisetteDevice({ osVersion: '26.5' })` changes only the version. The
47
+ * `model` MUST be a real Apple model id (unknown → generic "Mac"); `osVersion`/`osBuild` are
48
+ * free-form (probe-verified, 2026-08). Call before the first sign-in — this resets the in-memory
49
+ * instance so the change takes effect. Note: the OS version only *records* at fresh device
50
+ * registration; re-authing an already-provisioned device keeps its original version.
51
+ */
52
+ export declare function setAnisetteDevice(config: AnisetteDeviceConfig): void;
53
+ /**
54
+ * Escape hatch: set the raw `X-MMe-Client-Info` string directly, e.g.
55
+ * `<Macmini9,1> <macOS;26.5;25F71> <com.apple.AuthKit/1 (com.apple.dt.Xcode/3594.4.19)>`.
56
+ * Prefer setAnisetteDevice() for the common case; this is for non-macOS platform strings or
57
+ * custom app slots. Same rules apply (real model id; version passes through). Call before the
58
+ * first sign-in.
59
+ */
60
+ export declare function setAnisetteClientInfo(value: string): void;
35
61
  export declare function generateAnisetteHeadersLocallyAsync(onProgress?: SscProgress): Promise<Record<string, string>>;
36
62
  export declare function clearLocalAnisetteState(): void;
37
63