@absolutejs/absolute 0.20.0-beta.130 → 0.20.0-beta.131
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/CHANGELOG.md +21 -0
- package/changelog.json +41 -0
- package/dist/angular/browser.js +406 -396
- package/dist/angular/browser.js.map +4 -4
- package/dist/angular/components/core/streamingSlotRegistrar.js +1 -3
- package/dist/angular/components/core/streamingSlotRegistry.js +2 -4
- package/dist/angular/index.js +560 -701
- package/dist/angular/index.js.map +5 -5
- package/dist/angular/server.js +197 -338
- package/dist/angular/server.js.map +5 -5
- package/dist/build/buildWorker.js +27 -35
- package/dist/build.js +3833 -5876
- package/dist/build.js.map +4 -4
- package/dist/cli/{add-9sa7e3vd.js → add-hvqeg5sz.js} +23 -25
- package/dist/cli/{analyze-c1sep5y9.js → analyze-c2x2aym5.js} +6 -7
- package/dist/cli/androidEmulatorController-j73a1br6.js +22 -0
- package/dist/cli/{androidNativeWatcher-dnp95nk2.js → androidNativeWatcher-ctbnsr1v.js} +11 -14
- package/dist/cli/{api-2hd8cahp.js → api-rk13rfd9.js} +11 -13
- package/dist/cli/{build-857rc1ds.js → build-20y4b6rj.js} +8 -9
- package/dist/cli/{buildDepVendor-8akhr8n8.js → buildDepVendor-axqvbbm6.js} +5 -170
- package/dist/cli/{compile-9by2vxy5.js → compile-qygwqezx.js} +43 -48
- package/dist/cli/config/client.js +8 -8
- package/dist/cli/config/server.js +5615 -5595
- package/dist/cli/config-3te1fbry.js +7 -0
- package/dist/cli/{db-8wweexdp.js → db-p8pc325y.js} +5 -13
- package/dist/cli/{dev-qg7fr16s.js → dev-6f0gry3y.js} +75 -77
- package/dist/cli/{devCert-avr89zf3.js → devCert-n33ep8pg.js} +0 -3
- package/dist/cli/{doctor-mbh9bk05.js → doctor-8rm8p4dm.js} +13 -14
- package/dist/cli/emulatorDoctor-cwa70kgt.js +17 -0
- package/dist/cli/emulatorInstaller-dx3fmm2m.js +14 -0
- package/dist/cli/env-2107nff1.js +11 -0
- package/dist/cli/eslint-zz0t0kfp.js +17 -0
- package/dist/cli/eslintChunked-wg10jj9m.js +12 -0
- package/dist/cli/expoDevController-s70fj7vf.js +16 -0
- package/dist/cli/{expoNativeWatcher-rmc95bak.js → expoNativeWatcher-aakp7xvj.js} +1 -5
- package/dist/cli/expoProject-zy02tbfg.js +10 -0
- package/dist/cli/{generate-069p0dk3.js → generate-nz4w03yz.js} +19 -21
- package/dist/cli/{heapDiff-87v24x7p.js → heapDiff-2etr2r26.js} +5 -6
- package/dist/cli/{htmx-5wh1jh75.js → htmx-0xcaqrny.js} +12 -14
- package/dist/cli/{index-sjvydg2r.js → index-1ff9q1vx.js} +7 -7
- package/dist/cli/{index-rqbk0b30.js → index-1qewxkgy.js} +26 -26
- package/dist/cli/{index-prwyfnn3.js → index-1x1vah31.js} +2 -2
- package/dist/cli/{index-ddakkws4.js → index-31j3beht.js} +13 -13
- package/dist/cli/{index-j2nw3edf.js → index-3gtnqd57.js} +5 -5
- package/dist/cli/{index-54q7pxcx.js → index-434b7j4a.js} +2 -32
- package/dist/cli/{index-w5vswatm.js → index-43a1vvb7.js} +6 -10
- package/dist/cli/{index-nxcwg9ma.js → index-5sjk7daj.js} +31 -31
- package/dist/cli/{index-6j1xaheg.js → index-73sk1ney.js} +5 -5
- package/dist/cli/{index-3x5wpx5d.js → index-8kdmmgvc.js} +2 -2
- package/dist/cli/{index-1ys3dnrs.js → index-8w2wazrk.js} +34 -34
- package/dist/cli/{index-wtfnv3n2.js → index-92hmw204.js} +3 -3
- package/dist/cli/{index-vdbn8brx.js → index-9ehbfmeq.js} +38 -41
- package/dist/cli/{index-mywsk201.js → index-fde3c297.js} +1 -1
- package/dist/cli/{index-255xs63d.js → index-j57pgg5m.js} +10 -10
- package/dist/cli/{index-5cgsrv62.js → index-jcjwsdqt.js} +13 -182
- package/dist/cli/{index-00wfffav.js → index-k4t9k1xk.js} +5 -5
- package/dist/cli/{index-yxgaf8j0.js → index-m1vntzf1.js} +7 -5
- package/dist/cli/{index-9r7n9dqp.js → index-ma1dw7x2.js} +1 -1
- package/dist/cli/index-pch0v1z6.js +60 -0
- package/dist/cli/{index-8nym68py.js → index-ppxed116.js} +1 -1
- package/dist/cli/{index-9kwmb3c0.js → index-qyxd5n9a.js} +3 -3
- package/dist/cli/{index-tn4crd40.js → index-r62705dc.js} +12 -12
- package/dist/cli/{index-wctgx65x.js → index-r6k4xmdb.js} +21 -21
- package/dist/cli/{index-hty8111z.js → index-r915cvqp.js} +17 -17
- package/dist/cli/{index-exdd5k1g.js → index-rrxeqrbn.js} +2 -2
- package/dist/cli/{index-keg69zm1.js → index-snbzdwb9.js} +5 -5
- package/dist/cli/{index-v26ze17p.js → index-thqwfzy8.js} +3 -3
- package/dist/cli/{index-0hr7c4qe.js → index-vdnmqkt8.js} +14 -18
- package/dist/cli/{index-vkkqe08e.js → index-vj2v38sq.js} +29 -29
- package/dist/cli/{index-erngp7a9.js → index-wy0yh4jj.js} +16 -16
- package/dist/cli/{index-1cypb2zn.js → index-xcr3r6a1.js} +8 -8
- package/dist/cli/index.js +44 -48
- package/dist/cli/{info-d74dr585.js → info-kx5510rq.js} +7 -7
- package/dist/cli/{inspect-23chj4nc.js → inspect-5dj06x0m.js} +18 -20
- package/dist/cli/{iosNativeWatcher-kggp7j9a.js → iosNativeWatcher-zx49pzej.js} +12 -16
- package/dist/cli/iosSimulatorController-haa1cc3p.js +23 -0
- package/dist/cli/{islands-wpqgmwh0.js → islands-z4adh55n.js} +8 -9
- package/dist/cli/{lintProof-wx3b6dzy.js → lintProof-qcwdvzcz.js} +12 -17
- package/dist/cli/{logs-bx2n5ey6.js → logs-3p2vrq5h.js} +8 -10
- package/dist/cli/{ls-kvmcmd2j.js → ls-nkspq73y.js} +13 -14
- package/dist/cli/{mem-apbk7bx4.js → mem-h3f497cr.js} +10 -14
- package/dist/cli/{migrate-p4rp5r6b.js → migrate-52bqqp08.js} +7 -8
- package/dist/cli/{mobile-43q3zmjf.js → mobile-w295dx0t.js} +572 -575
- package/dist/cli/nativeAuth-ysv0x5dy.js +27 -0
- package/dist/cli/patchedBun-m7vj5sks.js +9 -0
- package/dist/cli/prerender-mfnwsvyt.js +7 -0
- package/dist/cli/{prettier-vtk5yaw4.js → prettier-c1624g36.js} +2 -6
- package/dist/cli/{ps-8y28kzmb.js → ps-0jedm91n.js} +12 -16
- package/dist/cli/{psTui-8e96mwgz.js → psTui-tpr5nbmc.js} +28 -30
- package/dist/cli/remoteMacProtocol-v3ax0y0f.js +41 -0
- package/dist/cli/{remove-3fd1z2hx.js → remove-z0brj5nd.js} +16 -18
- package/dist/cli/{rewriteImports-d1gmaa68.js → rewriteImports-k6rjjmg1.js} +2 -100
- package/dist/cli/{routes-0xpanj8z.js → routes-ey0sw1eq.js} +7 -9
- package/dist/cli/start-36w63t6h.js +20 -0
- package/dist/cli/telemetry-3wnc06wa.js +9 -0
- package/dist/cli/{tunnelRelay-5at2v8w6.js → tunnelRelay-19ay0fxn.js} +3 -4
- package/dist/cli/{typecheck-yj9s13eb.js → typecheck-nmf6e7k7.js} +147 -149
- package/dist/cli/{workspace-m56sgfkc.js → workspace-yetzedke.js} +32 -36
- package/dist/client/chunks/{index-dk743xs6.js → index-8m2qq61n.js} +12 -8
- package/dist/client/chunks/{index-dk743xs6.js.map → index-8m2qq61n.js.map} +4 -3
- package/dist/client/chunks/{index-m35nbkdp.js → islands-rc28k5sx.js} +104 -42
- package/dist/client/chunks/islands-rc28k5sx.js.map +15 -0
- package/dist/client/chunks/{react-yq4ss9y4.js → react-dcvkaba2.js} +5 -7
- package/dist/client/chunks/{react-yq4ss9y4.js.map → react-dcvkaba2.js.map} +2 -2
- package/dist/client/chunks/{svelte-s0c964kb.js → svelte-4yfa5bxa.js} +2 -4
- package/dist/client/chunks/{svelte-s0c964kb.js.map → svelte-4yfa5bxa.js.map} +2 -2
- package/dist/client/chunks/{vue-rdskrnyg.js → vue-a84fzp3v.js} +2 -4
- package/dist/client/chunks/{vue-rdskrnyg.js.map → vue-a84fzp3v.js.map} +2 -2
- package/dist/client/index.js +42 -15
- package/dist/client/index.js.map +2 -2
- package/dist/client/prefetch.js +1 -3
- package/dist/client/prefetch.js.map +2 -2
- package/dist/core/streamingSlotRegistrar.js +1 -64
- package/dist/core/streamingSlotRegistrar.js.map +2 -2
- package/dist/core/streamingSlotRegistry.js +1 -64
- package/dist/core/streamingSlotRegistry.js.map +2 -2
- package/dist/dev/serverBootstrap.js +1802 -2018
- package/dist/index.js +5247 -8794
- package/dist/index.js.map +9 -20
- package/dist/islands/browser.js +13 -3
- package/dist/islands/browser.js.map +2 -2
- package/dist/islands/index.js +26 -142
- package/dist/islands/index.js.map +2 -2
- package/dist/mobile/browser.js +13 -3
- package/dist/mobile/browser.js.map +2 -2
- package/dist/mobile/index.js +1067 -2182
- package/dist/mobile/index.js.map +2 -2
- package/dist/mobile/remoteMacAgentEntry.js +156 -156
- package/dist/mobile/shellAuth.js +0 -16
- package/dist/mobile/shellBootstrap.js +734 -724
- package/dist/mobile/shellExpoAuth.js +4 -18
- package/dist/mobile/shellExpoDevices.js +0 -16
- package/dist/mobile/shellExpoSync.js +0 -16
- package/dist/mobile/shellSync.js +3 -19
- package/dist/mobile/shellUpdate.js +5 -21
- package/dist/mobile/uiPrimitives.js +0 -16
- package/dist/react/browser.js +15 -5
- package/dist/react/browser.js.map +2 -2
- package/dist/react/components/index.js +68 -58
- package/dist/react/components/index.js.map +4 -4
- package/dist/react/hooks/index.js +1 -63
- package/dist/react/hooks/index.js.map +2 -2
- package/dist/react/index.js +56 -195
- package/dist/react/index.js.map +5 -5
- package/dist/react/jsxDevRuntimeCompat.js +1 -64
- package/dist/react/jsxDevRuntimeCompat.js.map +2 -2
- package/dist/react/jsxRuntimeCompat.js +1 -64
- package/dist/react/jsxRuntimeCompat.js.map +2 -2
- package/dist/react/router/browser.js +1 -64
- package/dist/react/router/browser.js.map +2 -2
- package/dist/react/router/index.js +1 -64
- package/dist/react/router/index.js.map +2 -2
- package/dist/react/server.js +38 -51
- package/dist/react/server.js.map +5 -5
- package/dist/src/cli/config/server.d.ts +7 -129
- package/dist/src/cli/patchedBun.d.ts +14 -14
- package/dist/src/core/prepare.d.ts +149 -1805
- package/dist/src/core/requestContext.d.ts +1 -1
- package/dist/src/dev/requestInspector.d.ts +1 -1
- package/dist/src/mobile/associationFiles.d.ts +2 -2
- package/dist/src/mobile/compatibilityDispatcher.d.ts +1 -1
- package/dist/src/mobile/mobilePreview.d.ts +8 -130
- package/dist/src/mobile/updateServer.d.ts +2 -2
- package/dist/src/plugins/devtoolsJson.d.ts +2 -2
- package/dist/src/plugins/hmr.d.ts +2 -2
- package/dist/src/plugins/imageOptimizer.d.ts +2 -151
- package/dist/src/plugins/telemetryPlugin.d.ts +1 -19
- package/dist/svelte/browser.js +13 -3
- package/dist/svelte/browser.js.map +2 -2
- package/dist/svelte/index.js +66 -210
- package/dist/svelte/index.js.map +5 -5
- package/dist/svelte/server.js +51 -99
- package/dist/svelte/server.js.map +5 -5
- package/dist/types/globals.d.ts +0 -6
- package/dist/vue/browser.js +13 -3
- package/dist/vue/browser.js.map +2 -2
- package/dist/vue/components/Image.js +13 -3
- package/dist/vue/components/Image.js.map +2 -2
- package/dist/vue/components/index.js +62 -50
- package/dist/vue/components/index.js.map +4 -4
- package/dist/vue/index.js +1115 -1258
- package/dist/vue/index.js.map +10 -10
- package/dist/vue/server.js +42 -59
- package/dist/vue/server.js.map +5 -5
- package/package.json +9 -9
- package/dist/cli/androidEmulatorController-sj141e1c.js +0 -30
- package/dist/cli/config-rjeexvza.js +0 -8
- package/dist/cli/emulatorDoctor-gzarrsex.js +0 -18
- package/dist/cli/emulatorInstaller-pjw4ex6q.js +0 -15
- package/dist/cli/env-4f6f6z69.js +0 -14
- package/dist/cli/eslint-qfkxe89p.js +0 -20
- package/dist/cli/eslintChunked-7ef700pn.js +0 -21
- package/dist/cli/expoDevController-weywa74d.js +0 -26
- package/dist/cli/expoProject-w2pzjwnx.js +0 -11
- package/dist/cli/index-1rabqyq0.js +0 -7
- package/dist/cli/index-ar4gz15x.js +0 -60
- package/dist/cli/iosSimulatorController-xcxxfkzx.js +0 -34
- package/dist/cli/nativeAuth-zx4tsb1f.js +0 -38
- package/dist/cli/patchedBun-zjtrn2s4.js +0 -38
- package/dist/cli/prerender-yex2zwj3.js +0 -18
- package/dist/cli/remoteMacProtocol-r38jhg44.js +0 -69
- package/dist/cli/start-gzhrkhxe.js +0 -23
- package/dist/cli/telemetry-94rka1w2.js +0 -14
- package/dist/client/chunks/angularPatch-arh4sr68.js +0 -157
- package/dist/client/chunks/angularPatch-arh4sr68.js.map +0 -10
- package/dist/client/chunks/index-jrcwp722.js +0 -12
- package/dist/client/chunks/index-jrcwp722.js.map +0 -10
- package/dist/client/chunks/index-m35nbkdp.js.map +0 -12
- package/dist/client/chunks/index-qxjc7kc5.js +0 -12
- package/dist/client/chunks/index-qxjc7kc5.js.map +0 -9
- package/dist/client/chunks/islands-50dg63j9.js +0 -284
- package/dist/client/chunks/islands-50dg63j9.js.map +0 -14
- /package/dist/cli/{index-me8nczrw.js → index-039rh39e.js} +0 -0
- /package/dist/cli/{index-bw4ktfnz.js → index-1y5mmnwg.js} +0 -0
- /package/dist/cli/{index-5xfxd7xa.js → index-3wm8p7rg.js} +0 -0
- /package/dist/cli/{index-4rme31py.js → index-420h9hq7.js} +0 -0
- /package/dist/cli/{index-4rhxthsy.js → index-65kqn88a.js} +0 -0
- /package/dist/cli/{index-r8x3839e.js → index-71gchbzt.js} +0 -0
- /package/dist/cli/{index-s2tazax7.js → index-92g14j47.js} +0 -0
- /package/dist/cli/{index-j66p8hn5.js → index-bwsa6ax4.js} +0 -0
- /package/dist/cli/{index-bzs19w3r.js → index-e6ysp900.js} +0 -0
- /package/dist/cli/{index-06cmrcdq.js → index-h7qhz02e.js} +0 -0
- /package/dist/cli/{index-6h54jqdq.js → index-hg54jyts.js} +0 -0
- /package/dist/cli/{index-czwrxgdj.js → index-hxqprc80.js} +0 -0
- /package/dist/cli/{index-zh6hhrwy.js → index-jjfbjv1z.js} +0 -0
- /package/dist/cli/{index-fc9vxw56.js → index-prs14ys9.js} +0 -0
- /package/dist/cli/{index-v1k46q3x.js → index-tx0kx9zx.js} +0 -0
- /package/dist/cli/{index-fhaf3tdk.js → index-x8x0f3ha.js} +0 -0
- /package/dist/cli/{index-18q9qc7f.js → index-ypcqx24p.js} +0 -0
|
@@ -1,125 +1,122 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
ABSOLUTE_NATIVE_EXACT_PACKAGES,
|
|
4
|
+
CAPACITOR_PACKAGE_SPECS,
|
|
5
|
+
CAPACITOR_SYNC_PACKAGE_SPECS,
|
|
6
|
+
assertNativePackageVersions,
|
|
7
|
+
packageNameFromSpec,
|
|
8
|
+
packagesNeedingExactInstall,
|
|
9
|
+
discoverAbsoluteSyncSchema,
|
|
10
|
+
absoluteDeviceNativeRequirements,
|
|
11
|
+
assertAbsoluteDeviceCapabilityPackages,
|
|
12
|
+
resolveAbsoluteDeviceCapabilityPlan,
|
|
13
|
+
ABSOLUTE_MOBILE_UPDATE_FORMAT,
|
|
14
|
+
absoluteMobileUpdateSigningPayload,
|
|
15
|
+
canonicalizeAbsoluteMobileUpdate,
|
|
16
|
+
parseAbsoluteMobileUpdateManifest,
|
|
17
|
+
unsignedAbsoluteMobileUpdate,
|
|
18
|
+
resolveAbsoluteMobileUpdateRuntime,
|
|
19
|
+
ABSOLUTE_CAPACITOR_ASSETS_SPEC,
|
|
20
|
+
generateAbsoluteCapacitorBranding,
|
|
21
|
+
inspectAbsoluteMobileBranding,
|
|
22
|
+
renderAbsoluteMobileBrandingPreview,
|
|
23
|
+
writeAbsoluteExpoProject2,
|
|
24
|
+
syncAbsoluteExpoWebAssets2
|
|
25
|
+
} from "./index-5sjk7daj.js";
|
|
5
26
|
import {
|
|
6
|
-
|
|
7
|
-
|
|
27
|
+
projectUsesAbsoluteAuth2,
|
|
28
|
+
projectUsesAbsoluteSync2
|
|
29
|
+
} from "./index-pch0v1z6.js";
|
|
8
30
|
import {
|
|
9
|
-
|
|
10
|
-
} from "./index-
|
|
31
|
+
normalizeAbsoluteMobileConfig2
|
|
32
|
+
} from "./index-rrxeqrbn.js";
|
|
33
|
+
import"./index-hxqprc80.js";
|
|
11
34
|
import {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
import"./index-s2tazax7.js";
|
|
35
|
+
ABSOLUTE_ANDROID_AVD_NAME2,
|
|
36
|
+
absoluteManagedAndroidSdkRoot2,
|
|
37
|
+
detectAbsoluteMobileHost2,
|
|
38
|
+
inspectAbsoluteMobileToolchain2
|
|
39
|
+
} from "./index-j57pgg5m.js";
|
|
18
40
|
import {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
} from "./index-
|
|
41
|
+
planAbsoluteMobileEmulatorInstall2,
|
|
42
|
+
fixAbsoluteMobileEmulatorToolchain2
|
|
43
|
+
} from "./index-wy0yh4jj.js";
|
|
22
44
|
import {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
cleanAbsoluteRemoteMacWorkspace,
|
|
26
|
-
createAbsoluteRemoteIosDevProject,
|
|
27
|
-
getAbsoluteRemoteMacProfile,
|
|
28
|
-
inspectAbsoluteRemoteMac,
|
|
29
|
-
inspectAbsoluteRemoteMacWorkspace,
|
|
30
|
-
listAbsoluteRemoteMacProfiles,
|
|
31
|
-
pairAbsoluteRemoteMac,
|
|
32
|
-
removeAbsoluteRemoteMacProfile,
|
|
33
|
-
runAbsoluteRemoteIosReleaseAcceptance
|
|
34
|
-
} from "./index-rqbk0b30.js";
|
|
45
|
+
loadConfig
|
|
46
|
+
} from "./index-h7qhz02e.js";
|
|
35
47
|
import {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
repairAbsoluteIosDevSession
|
|
39
|
-
} from "./index-vkkqe08e.js";
|
|
48
|
+
listLiveInstances
|
|
49
|
+
} from "./index-71gchbzt.js";
|
|
40
50
|
import {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
51
|
+
fingerprintAbsoluteAndroidNativeProject2,
|
|
52
|
+
repairAbsoluteAndroidDevSession2,
|
|
53
|
+
parseAdbDevices2,
|
|
54
|
+
buildAbsoluteAndroidGradleArtifact2
|
|
55
|
+
} from "./index-8w2wazrk.js";
|
|
56
|
+
import"./index-43a1vvb7.js";
|
|
46
57
|
import {
|
|
47
|
-
|
|
48
|
-
|
|
58
|
+
resolveAbsoluteMobileRoute,
|
|
59
|
+
ABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION,
|
|
60
|
+
ABSOLUTE_MOBILE_CLIENT_MANIFEST_FORMAT
|
|
61
|
+
} from "./index-r6k4xmdb.js";
|
|
49
62
|
import {
|
|
50
|
-
|
|
51
|
-
} from "./index-
|
|
52
|
-
import"./index-bw4ktfnz.js";
|
|
63
|
+
buildAbsoluteExpoAndroidWslBundle2
|
|
64
|
+
} from "./index-jcjwsdqt.js";
|
|
53
65
|
import {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
66
|
+
resolveAbsoluteIosXcodeProject,
|
|
67
|
+
requireAbsoluteIosReleaseMetadata,
|
|
68
|
+
buildAbsoluteIosRelease
|
|
69
|
+
} from "./index-thqwfzy8.js";
|
|
57
70
|
import {
|
|
58
|
-
|
|
59
|
-
|
|
71
|
+
ABSOLUTE_IOS_SIMULATOR_NAME2,
|
|
72
|
+
parseIosSimulators2,
|
|
73
|
+
repairAbsoluteIosDevSession2
|
|
74
|
+
} from "./index-vj2v38sq.js";
|
|
75
|
+
import"./index-e6ysp900.js";
|
|
60
76
|
import {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
ABSOLUTE_NATIVE_EXACT_PACKAGES,
|
|
64
|
-
CAPACITOR_PACKAGE_SPECS,
|
|
65
|
-
CAPACITOR_SYNC_PACKAGE_SPECS,
|
|
66
|
-
absoluteDeviceNativeRequirements,
|
|
67
|
-
absoluteMobileUpdateSigningPayload,
|
|
68
|
-
assertAbsoluteDeviceCapabilityPackages,
|
|
69
|
-
assertNativePackageVersions,
|
|
70
|
-
canonicalizeAbsoluteMobileUpdate,
|
|
71
|
-
discoverAbsoluteSyncSchema,
|
|
72
|
-
generateAbsoluteCapacitorBranding,
|
|
73
|
-
inspectAbsoluteMobileBranding,
|
|
74
|
-
packageNameFromSpec,
|
|
75
|
-
packagesNeedingExactInstall,
|
|
76
|
-
parseAbsoluteMobileUpdateManifest,
|
|
77
|
-
renderAbsoluteMobileBrandingPreview,
|
|
78
|
-
resolveAbsoluteDeviceCapabilityPlan,
|
|
79
|
-
resolveAbsoluteMobileUpdateRuntime,
|
|
80
|
-
syncAbsoluteExpoWebAssets,
|
|
81
|
-
unsignedAbsoluteMobileUpdate,
|
|
82
|
-
writeAbsoluteExpoProject
|
|
83
|
-
} from "./index-nxcwg9ma.js";
|
|
77
|
+
start2
|
|
78
|
+
} from "./index-9ehbfmeq.js";
|
|
84
79
|
import {
|
|
85
|
-
|
|
86
|
-
|
|
80
|
+
captureAbsoluteRemoteMacCommand2,
|
|
81
|
+
getAbsoluteRemoteMacProfile2,
|
|
82
|
+
inspectAbsoluteRemoteMac2,
|
|
83
|
+
listAbsoluteRemoteMacProfiles2,
|
|
84
|
+
pairAbsoluteRemoteMac2,
|
|
85
|
+
removeAbsoluteRemoteMacProfile2,
|
|
86
|
+
createAbsoluteRemoteIosDevProject2,
|
|
87
|
+
cleanAbsoluteRemoteMacWorkspace2,
|
|
88
|
+
inspectAbsoluteRemoteMacWorkspace2,
|
|
89
|
+
buildAbsoluteRemoteIosRelease2,
|
|
90
|
+
runAbsoluteRemoteIosReleaseAcceptance2
|
|
91
|
+
} from "./index-1qewxkgy.js";
|
|
87
92
|
import {
|
|
88
|
-
|
|
89
|
-
} from "./index-
|
|
93
|
+
installPackages
|
|
94
|
+
} from "./index-jjfbjv1z.js";
|
|
90
95
|
import {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
} from "./index-ar4gz15x.js";
|
|
96
|
+
formatBytes
|
|
97
|
+
} from "./index-ma1dw7x2.js";
|
|
94
98
|
import {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
99
|
+
__toESM,
|
|
100
|
+
__commonJS,
|
|
101
|
+
__require
|
|
102
|
+
} from "./index-fde3c297.js";
|
|
103
|
+
import {
|
|
104
|
+
sendTelemetryEvent
|
|
105
|
+
} from "./index-qyxd5n9a.js";
|
|
106
|
+
import {
|
|
107
|
+
normalizeAbsoluteIosDeviceIdentifier
|
|
108
|
+
} from "./index-bwsa6ax4.js";
|
|
100
109
|
import {
|
|
101
110
|
prepareAbsoluteCapacitorInitialization,
|
|
102
111
|
writeAbsoluteCapacitorConfig
|
|
103
|
-
} from "./index-
|
|
104
|
-
import {
|
|
105
|
-
ABSOLUTE_ANDROID_AVD_NAME,
|
|
106
|
-
absoluteManagedAndroidSdkRoot,
|
|
107
|
-
detectAbsoluteMobileHost,
|
|
108
|
-
inspectAbsoluteMobileToolchain
|
|
109
|
-
} from "./index-255xs63d.js";
|
|
112
|
+
} from "./index-ypcqx24p.js";
|
|
110
113
|
import {
|
|
111
114
|
DEFAULT_SERVER_ENTRY
|
|
112
|
-
} from "./index-
|
|
113
|
-
import"./index-
|
|
115
|
+
} from "./index-k4t9k1xk.js";
|
|
116
|
+
import"./index-92hmw204.js";
|
|
114
117
|
import {
|
|
115
118
|
getDurationString
|
|
116
|
-
} from "./index-
|
|
117
|
-
import"./index-czwrxgdj.js";
|
|
118
|
-
import {
|
|
119
|
-
__commonJS,
|
|
120
|
-
__require,
|
|
121
|
-
__toESM
|
|
122
|
-
} from "./index-mywsk201.js";
|
|
119
|
+
} from "./index-1x1vah31.js";
|
|
123
120
|
|
|
124
121
|
// node_modules/node-forge/lib/forge.js
|
|
125
122
|
var require_forge = __commonJS(function(exports, module) {
|
|
@@ -1203,12 +1200,12 @@ var require_util = __commonJS(function(exports, module) {
|
|
|
1203
1200
|
util.deflate = function(api, bytes, raw) {
|
|
1204
1201
|
bytes = util.decode64(api.deflate(util.encode64(bytes)).rval);
|
|
1205
1202
|
if (raw) {
|
|
1206
|
-
var
|
|
1203
|
+
var start = 2;
|
|
1207
1204
|
var flg = bytes.charCodeAt(1);
|
|
1208
1205
|
if (flg & 32) {
|
|
1209
|
-
|
|
1206
|
+
start = 6;
|
|
1210
1207
|
}
|
|
1211
|
-
bytes = bytes.substring(
|
|
1208
|
+
bytes = bytes.substring(start, bytes.length - 4);
|
|
1212
1209
|
}
|
|
1213
1210
|
return bytes;
|
|
1214
1211
|
};
|
|
@@ -1541,8 +1538,8 @@ var require_util = __commonJS(function(exports, module) {
|
|
|
1541
1538
|
sample([], 5, 16);
|
|
1542
1539
|
function sample(max, samples, numWorkers) {
|
|
1543
1540
|
if (samples === 0) {
|
|
1544
|
-
var avg = Math.floor(max.reduce(function(
|
|
1545
|
-
return
|
|
1541
|
+
var avg = Math.floor(max.reduce(function(avg, x) {
|
|
1542
|
+
return avg + x;
|
|
1546
1543
|
}, 0) / max.length);
|
|
1547
1544
|
util.cores = Math.max(1, avg);
|
|
1548
1545
|
URL.revokeObjectURL(blobUrl);
|
|
@@ -1553,7 +1550,7 @@ var require_util = __commonJS(function(exports, module) {
|
|
|
1553
1550
|
sample(max, samples - 1, numWorkers);
|
|
1554
1551
|
});
|
|
1555
1552
|
}
|
|
1556
|
-
function map(numWorkers,
|
|
1553
|
+
function map(numWorkers, callback) {
|
|
1557
1554
|
var workers = [];
|
|
1558
1555
|
var results = [];
|
|
1559
1556
|
for (var i = 0;i < numWorkers; ++i) {
|
|
@@ -1561,10 +1558,10 @@ var require_util = __commonJS(function(exports, module) {
|
|
|
1561
1558
|
worker.addEventListener("message", function(e) {
|
|
1562
1559
|
results.push(e.data);
|
|
1563
1560
|
if (results.length === numWorkers) {
|
|
1564
|
-
for (var
|
|
1565
|
-
workers[
|
|
1561
|
+
for (var i = 0;i < numWorkers; ++i) {
|
|
1562
|
+
workers[i].terminate();
|
|
1566
1563
|
}
|
|
1567
|
-
|
|
1564
|
+
callback(null, results);
|
|
1568
1565
|
}
|
|
1569
1566
|
});
|
|
1570
1567
|
workers.push(worker);
|
|
@@ -1588,8 +1585,8 @@ var require_util = __commonJS(function(exports, module) {
|
|
|
1588
1585
|
}
|
|
1589
1586
|
}
|
|
1590
1587
|
}
|
|
1591
|
-
return overlaps.reduce(function(max,
|
|
1592
|
-
return Math.max(max,
|
|
1588
|
+
return overlaps.reduce(function(max, overlap) {
|
|
1589
|
+
return Math.max(max, overlap.length);
|
|
1593
1590
|
}, 0);
|
|
1594
1591
|
}
|
|
1595
1592
|
};
|
|
@@ -2577,17 +2574,17 @@ var require_aes = __commonJS(function(exports, module) {
|
|
|
2577
2574
|
} else {
|
|
2578
2575
|
cipher = forge.cipher.createCipher(algorithm, options.key);
|
|
2579
2576
|
}
|
|
2580
|
-
var
|
|
2581
|
-
cipher.start = function(iv,
|
|
2577
|
+
var start = cipher.start;
|
|
2578
|
+
cipher.start = function(iv, options) {
|
|
2582
2579
|
var output = null;
|
|
2583
|
-
if (
|
|
2584
|
-
output =
|
|
2585
|
-
|
|
2586
|
-
}
|
|
2587
|
-
|
|
2588
|
-
|
|
2589
|
-
|
|
2590
|
-
|
|
2580
|
+
if (options instanceof forge.util.ByteBuffer) {
|
|
2581
|
+
output = options;
|
|
2582
|
+
options = {};
|
|
2583
|
+
}
|
|
2584
|
+
options = options || {};
|
|
2585
|
+
options.output = output;
|
|
2586
|
+
options.iv = iv;
|
|
2587
|
+
start.call(cipher, options);
|
|
2591
2588
|
};
|
|
2592
2589
|
return cipher;
|
|
2593
2590
|
}
|
|
@@ -2933,15 +2930,15 @@ var require_asn1 = __commonJS(function(exports, module) {
|
|
|
2933
2930
|
if (depth >= options.maxDepth) {
|
|
2934
2931
|
throw new Error("ASN.1 parsing error: Max depth exceeded.");
|
|
2935
2932
|
}
|
|
2936
|
-
var
|
|
2933
|
+
var start;
|
|
2937
2934
|
_checkBufferLength(bytes, remaining, 2);
|
|
2938
2935
|
var b1 = bytes.getByte();
|
|
2939
2936
|
remaining--;
|
|
2940
2937
|
var tagClass = b1 & 192;
|
|
2941
2938
|
var type = b1 & 31;
|
|
2942
|
-
|
|
2939
|
+
start = bytes.length();
|
|
2943
2940
|
var length = _getValueLength(bytes, remaining);
|
|
2944
|
-
remaining -=
|
|
2941
|
+
remaining -= start - bytes.length();
|
|
2945
2942
|
if (length !== undefined && length > remaining) {
|
|
2946
2943
|
if (options.strict) {
|
|
2947
2944
|
var error = new Error("Too few bytes to read ASN.1 value.");
|
|
@@ -2965,16 +2962,16 @@ var require_asn1 = __commonJS(function(exports, module) {
|
|
|
2965
2962
|
remaining -= 2;
|
|
2966
2963
|
break;
|
|
2967
2964
|
}
|
|
2968
|
-
|
|
2965
|
+
start = bytes.length();
|
|
2969
2966
|
value.push(_fromDer(bytes, remaining, depth + 1, options));
|
|
2970
|
-
remaining -=
|
|
2967
|
+
remaining -= start - bytes.length();
|
|
2971
2968
|
}
|
|
2972
2969
|
} else {
|
|
2973
2970
|
while (length > 0) {
|
|
2974
|
-
|
|
2971
|
+
start = bytes.length();
|
|
2975
2972
|
value.push(_fromDer(bytes, length, depth + 1, options));
|
|
2976
|
-
remaining -=
|
|
2977
|
-
length -=
|
|
2973
|
+
remaining -= start - bytes.length();
|
|
2974
|
+
length -= start - bytes.length();
|
|
2978
2975
|
}
|
|
2979
2976
|
}
|
|
2980
2977
|
}
|
|
@@ -2992,13 +2989,13 @@ var require_asn1 = __commonJS(function(exports, module) {
|
|
|
2992
2989
|
}
|
|
2993
2990
|
if (unused === 0) {
|
|
2994
2991
|
try {
|
|
2995
|
-
|
|
2992
|
+
start = bytes.length();
|
|
2996
2993
|
var subOptions = {
|
|
2997
2994
|
strict: true,
|
|
2998
2995
|
decodeBitStrings: true
|
|
2999
2996
|
};
|
|
3000
2997
|
var composed = _fromDer(bytes, remaining, depth + 1, subOptions);
|
|
3001
|
-
var used =
|
|
2998
|
+
var used = start - bytes.length();
|
|
3002
2999
|
remaining -= used;
|
|
3003
3000
|
if (type == asn1.Type.BITSTRING) {
|
|
3004
3001
|
used++;
|
|
@@ -4292,17 +4289,17 @@ var require_des = __commonJS(function(exports, module) {
|
|
|
4292
4289
|
} else {
|
|
4293
4290
|
cipher = forge.cipher.createCipher(algorithm, options.key);
|
|
4294
4291
|
}
|
|
4295
|
-
var
|
|
4296
|
-
cipher.start = function(iv,
|
|
4292
|
+
var start = cipher.start;
|
|
4293
|
+
cipher.start = function(iv, options) {
|
|
4297
4294
|
var output = null;
|
|
4298
|
-
if (
|
|
4299
|
-
output =
|
|
4300
|
-
|
|
4301
|
-
}
|
|
4302
|
-
|
|
4303
|
-
|
|
4304
|
-
|
|
4305
|
-
|
|
4295
|
+
if (options instanceof forge.util.ByteBuffer) {
|
|
4296
|
+
output = options;
|
|
4297
|
+
options = {};
|
|
4298
|
+
}
|
|
4299
|
+
options = options || {};
|
|
4300
|
+
options.output = output;
|
|
4301
|
+
options.iv = iv;
|
|
4302
|
+
start.call(cipher, options);
|
|
4306
4303
|
};
|
|
4307
4304
|
return cipher;
|
|
4308
4305
|
}
|
|
@@ -4337,16 +4334,16 @@ var require_pbkdf2 = __commonJS(function(exports, module) {
|
|
|
4337
4334
|
return crypto2.pbkdf2Sync(p, s, c, dkLen, md).toString("binary");
|
|
4338
4335
|
}
|
|
4339
4336
|
if (crypto2.pbkdf2Sync.length === 4) {
|
|
4340
|
-
return crypto2.pbkdf2(p, s, c, dkLen, function(
|
|
4341
|
-
if (
|
|
4342
|
-
return callback(
|
|
4337
|
+
return crypto2.pbkdf2(p, s, c, dkLen, function(err, key) {
|
|
4338
|
+
if (err) {
|
|
4339
|
+
return callback(err);
|
|
4343
4340
|
}
|
|
4344
4341
|
callback(null, key.toString("binary"));
|
|
4345
4342
|
});
|
|
4346
4343
|
}
|
|
4347
|
-
return crypto2.pbkdf2(p, s, c, dkLen, md, function(
|
|
4348
|
-
if (
|
|
4349
|
-
return callback(
|
|
4344
|
+
return crypto2.pbkdf2(p, s, c, dkLen, md, function(err, key) {
|
|
4345
|
+
if (err) {
|
|
4346
|
+
return callback(err);
|
|
4350
4347
|
}
|
|
4351
4348
|
callback(null, key.toString("binary"));
|
|
4352
4349
|
});
|
|
@@ -4426,9 +4423,9 @@ var require_sha256 = __commonJS(function(exports, module) {
|
|
|
4426
4423
|
var forge = require_forge();
|
|
4427
4424
|
require_md();
|
|
4428
4425
|
require_util();
|
|
4429
|
-
var
|
|
4430
|
-
forge.md.sha256 = forge.md.algorithms.sha256 =
|
|
4431
|
-
|
|
4426
|
+
var sha256 = module.exports = forge.sha256 = forge.sha256 || {};
|
|
4427
|
+
forge.md.sha256 = forge.md.algorithms.sha256 = sha256;
|
|
4428
|
+
sha256.create = function() {
|
|
4432
4429
|
if (!_initialized) {
|
|
4433
4430
|
_init();
|
|
4434
4431
|
}
|
|
@@ -4756,20 +4753,20 @@ var require_prng = __commonJS(function(exports, module) {
|
|
|
4756
4753
|
}
|
|
4757
4754
|
function _seed() {
|
|
4758
4755
|
ctx.reseeds = ctx.reseeds === 4294967295 ? 0 : ctx.reseeds + 1;
|
|
4759
|
-
var
|
|
4760
|
-
|
|
4756
|
+
var md = ctx.plugin.md.create();
|
|
4757
|
+
md.update(ctx.keyBytes);
|
|
4761
4758
|
var _2powK = 1;
|
|
4762
4759
|
for (var k = 0;k < 32; ++k) {
|
|
4763
4760
|
if (ctx.reseeds % _2powK === 0) {
|
|
4764
|
-
|
|
4761
|
+
md.update(ctx.pools[k].digest().getBytes());
|
|
4765
4762
|
ctx.pools[k].start();
|
|
4766
4763
|
}
|
|
4767
4764
|
_2powK = _2powK << 1;
|
|
4768
4765
|
}
|
|
4769
|
-
ctx.keyBytes =
|
|
4770
|
-
|
|
4771
|
-
|
|
4772
|
-
var seedBytes =
|
|
4766
|
+
ctx.keyBytes = md.digest().getBytes();
|
|
4767
|
+
md.start();
|
|
4768
|
+
md.update(ctx.keyBytes);
|
|
4769
|
+
var seedBytes = md.digest().getBytes();
|
|
4773
4770
|
ctx.key = ctx.plugin.formatKey(ctx.keyBytes);
|
|
4774
4771
|
ctx.seed = ctx.plugin.formatSeed(seedBytes);
|
|
4775
4772
|
ctx.generated = 0;
|
|
@@ -4777,10 +4774,10 @@ var require_prng = __commonJS(function(exports, module) {
|
|
|
4777
4774
|
function defaultSeedFile(needed) {
|
|
4778
4775
|
var getRandomValues = null;
|
|
4779
4776
|
var globalScope = forge.util.globalScope;
|
|
4780
|
-
var
|
|
4781
|
-
if (
|
|
4777
|
+
var _crypto = globalScope.crypto || globalScope.msCrypto;
|
|
4778
|
+
if (_crypto && _crypto.getRandomValues) {
|
|
4782
4779
|
getRandomValues = function(arr) {
|
|
4783
|
-
return
|
|
4780
|
+
return _crypto.getRandomValues(arr);
|
|
4784
4781
|
};
|
|
4785
4782
|
}
|
|
4786
4783
|
var b = forge.util.createBuffer();
|
|
@@ -4790,8 +4787,8 @@ var require_prng = __commonJS(function(exports, module) {
|
|
|
4790
4787
|
var entropy = new Uint32Array(Math.floor(count));
|
|
4791
4788
|
try {
|
|
4792
4789
|
getRandomValues(entropy);
|
|
4793
|
-
for (var
|
|
4794
|
-
b.putInt32(entropy[
|
|
4790
|
+
for (var i = 0;i < entropy.length; ++i) {
|
|
4791
|
+
b.putInt32(entropy[i]);
|
|
4795
4792
|
}
|
|
4796
4793
|
} catch (e) {
|
|
4797
4794
|
if (!(typeof QuotaExceededError !== "undefined" && e instanceof QuotaExceededError)) {
|
|
@@ -4810,8 +4807,8 @@ var require_prng = __commonJS(function(exports, module) {
|
|
|
4810
4807
|
lo += hi >> 15;
|
|
4811
4808
|
lo = (lo & 2147483647) + (lo >> 31);
|
|
4812
4809
|
seed = lo & 4294967295;
|
|
4813
|
-
for (var
|
|
4814
|
-
next = seed >>> (
|
|
4810
|
+
for (var i = 0;i < 3; ++i) {
|
|
4811
|
+
next = seed >>> (i << 3);
|
|
4815
4812
|
next ^= Math.floor(Math.random() * 256);
|
|
4816
4813
|
b.putByte(next & 255);
|
|
4817
4814
|
}
|
|
@@ -4843,29 +4840,29 @@ var require_prng = __commonJS(function(exports, module) {
|
|
|
4843
4840
|
}
|
|
4844
4841
|
ctx.collect = function(bytes) {
|
|
4845
4842
|
var count = bytes.length;
|
|
4846
|
-
for (var
|
|
4847
|
-
ctx.pools[ctx.pool].update(bytes.substr(
|
|
4843
|
+
for (var i = 0;i < count; ++i) {
|
|
4844
|
+
ctx.pools[ctx.pool].update(bytes.substr(i, 1));
|
|
4848
4845
|
ctx.pool = ctx.pool === 31 ? 0 : ctx.pool + 1;
|
|
4849
4846
|
}
|
|
4850
4847
|
};
|
|
4851
|
-
ctx.collectInt = function(
|
|
4848
|
+
ctx.collectInt = function(i, n) {
|
|
4852
4849
|
var bytes = "";
|
|
4853
4850
|
for (var x = 0;x < n; x += 8) {
|
|
4854
|
-
bytes += String.fromCharCode(
|
|
4851
|
+
bytes += String.fromCharCode(i >> x & 255);
|
|
4855
4852
|
}
|
|
4856
4853
|
ctx.collect(bytes);
|
|
4857
4854
|
};
|
|
4858
4855
|
ctx.registerWorker = function(worker) {
|
|
4859
4856
|
if (worker === self) {
|
|
4860
4857
|
ctx.seedFile = function(needed, callback) {
|
|
4861
|
-
function
|
|
4858
|
+
function listener(e) {
|
|
4862
4859
|
var data = e.data;
|
|
4863
4860
|
if (data.forge && data.forge.prng) {
|
|
4864
|
-
self.removeEventListener("message",
|
|
4861
|
+
self.removeEventListener("message", listener);
|
|
4865
4862
|
callback(data.forge.prng.err, data.forge.prng.bytes);
|
|
4866
4863
|
}
|
|
4867
4864
|
}
|
|
4868
|
-
self.addEventListener("message",
|
|
4865
|
+
self.addEventListener("message", listener);
|
|
4869
4866
|
self.postMessage({ forge: { prng: { needed } } });
|
|
4870
4867
|
};
|
|
4871
4868
|
} else {
|
|
@@ -4900,14 +4897,14 @@ var require_random = __commonJS(function(exports, module) {
|
|
|
4900
4897
|
var prng_aes = {};
|
|
4901
4898
|
var _prng_aes_output = new Array(4);
|
|
4902
4899
|
var _prng_aes_buffer = forge.util.createBuffer();
|
|
4903
|
-
prng_aes.formatKey = function(
|
|
4904
|
-
var tmp = forge.util.createBuffer(
|
|
4905
|
-
|
|
4906
|
-
|
|
4907
|
-
|
|
4908
|
-
|
|
4909
|
-
|
|
4910
|
-
return forge.aes._expandKey(
|
|
4900
|
+
prng_aes.formatKey = function(key) {
|
|
4901
|
+
var tmp = forge.util.createBuffer(key);
|
|
4902
|
+
key = new Array(4);
|
|
4903
|
+
key[0] = tmp.getInt32();
|
|
4904
|
+
key[1] = tmp.getInt32();
|
|
4905
|
+
key[2] = tmp.getInt32();
|
|
4906
|
+
key[3] = tmp.getInt32();
|
|
4907
|
+
return forge.aes._expandKey(key, false);
|
|
4911
4908
|
};
|
|
4912
4909
|
prng_aes.formatSeed = function(seed) {
|
|
4913
4910
|
var tmp = forge.util.createBuffer(seed);
|
|
@@ -4918,8 +4915,8 @@ var require_random = __commonJS(function(exports, module) {
|
|
|
4918
4915
|
seed[3] = tmp.getInt32();
|
|
4919
4916
|
return seed;
|
|
4920
4917
|
};
|
|
4921
|
-
prng_aes.cipher = function(
|
|
4922
|
-
forge.aes._updateBlock(
|
|
4918
|
+
prng_aes.cipher = function(key, seed) {
|
|
4919
|
+
forge.aes._updateBlock(key, seed, _prng_aes_output, false);
|
|
4923
4920
|
_prng_aes_buffer.putInt32(_prng_aes_output[0]);
|
|
4924
4921
|
_prng_aes_buffer.putInt32(_prng_aes_output[1]);
|
|
4925
4922
|
_prng_aes_buffer.putInt32(_prng_aes_output[2]);
|
|
@@ -7160,7 +7157,7 @@ var require_prime = __commonJS(function(exports, module) {
|
|
|
7160
7157
|
_primeinc(num, bits, rng, deltaIdx, mrTests, maxBlockTime, callback);
|
|
7161
7158
|
}
|
|
7162
7159
|
function _primeinc(num, bits, rng, deltaIdx, mrTests, maxBlockTime, callback) {
|
|
7163
|
-
var
|
|
7160
|
+
var start = +new Date;
|
|
7164
7161
|
do {
|
|
7165
7162
|
if (num.bitLength() > bits) {
|
|
7166
7163
|
num = generateRandom(bits, rng);
|
|
@@ -7169,7 +7166,7 @@ var require_prime = __commonJS(function(exports, module) {
|
|
|
7169
7166
|
return callback(null, num);
|
|
7170
7167
|
}
|
|
7171
7168
|
num.dAddOffset(GCD_30_DELTA[deltaIdx++ % 8], 0);
|
|
7172
|
-
} while (maxBlockTime < 0 || +new Date -
|
|
7169
|
+
} while (maxBlockTime < 0 || +new Date - start < maxBlockTime);
|
|
7173
7170
|
forge.util.setImmediate(function() {
|
|
7174
7171
|
_primeinc(num, bits, rng, deltaIdx, mrTests, maxBlockTime, callback);
|
|
7175
7172
|
});
|
|
@@ -7211,8 +7208,8 @@ var require_prime = __commonJS(function(exports, module) {
|
|
|
7211
7208
|
--running;
|
|
7212
7209
|
var data = e.data;
|
|
7213
7210
|
if (data.found) {
|
|
7214
|
-
for (var
|
|
7215
|
-
workers[
|
|
7211
|
+
for (var i = 0;i < workers.length; ++i) {
|
|
7212
|
+
workers[i].terminate();
|
|
7216
7213
|
}
|
|
7217
7214
|
found = true;
|
|
7218
7215
|
return callback(null, new BigInteger(data.prime, 16));
|
|
@@ -7782,11 +7779,11 @@ var require_rsa = __commonJS(function(exports, module) {
|
|
|
7782
7779
|
publicExponent: _intToUint8Array(e),
|
|
7783
7780
|
hash: { name: "SHA-256" }
|
|
7784
7781
|
}, true, ["sign", "verify"]);
|
|
7785
|
-
genOp.oncomplete = function(
|
|
7786
|
-
var pair =
|
|
7782
|
+
genOp.oncomplete = function(e) {
|
|
7783
|
+
var pair = e.target.result;
|
|
7787
7784
|
var exportOp = util.globalScope.msCrypto.subtle.exportKey("pkcs8", pair.privateKey);
|
|
7788
|
-
exportOp.oncomplete = function(
|
|
7789
|
-
var pkcs8 =
|
|
7785
|
+
exportOp.oncomplete = function(e) {
|
|
7786
|
+
var pkcs8 = e.target.result;
|
|
7790
7787
|
var privateKey = pki.privateKeyFromAsn1(asn1.fromDer(forge.util.createBuffer(pkcs8)));
|
|
7791
7788
|
callback(null, {
|
|
7792
7789
|
privateKey,
|
|
@@ -7843,25 +7840,25 @@ var require_rsa = __commonJS(function(exports, module) {
|
|
|
7843
7840
|
}
|
|
7844
7841
|
if (scheme === "RSAES-PKCS1-V1_5") {
|
|
7845
7842
|
scheme = {
|
|
7846
|
-
encode: function(m,
|
|
7847
|
-
return _encodePkcs1_v1_5(m,
|
|
7843
|
+
encode: function(m, key, pub) {
|
|
7844
|
+
return _encodePkcs1_v1_5(m, key, 2).getBytes();
|
|
7848
7845
|
}
|
|
7849
7846
|
};
|
|
7850
7847
|
} else if (scheme === "RSA-OAEP" || scheme === "RSAES-OAEP") {
|
|
7851
7848
|
scheme = {
|
|
7852
|
-
encode: function(m,
|
|
7853
|
-
return forge.pkcs1.encode_rsa_oaep(
|
|
7849
|
+
encode: function(m, key) {
|
|
7850
|
+
return forge.pkcs1.encode_rsa_oaep(key, m, schemeOptions);
|
|
7854
7851
|
}
|
|
7855
7852
|
};
|
|
7856
7853
|
} else if (["RAW", "NONE", "NULL", null].indexOf(scheme) !== -1) {
|
|
7857
|
-
scheme = { encode: function(
|
|
7858
|
-
return
|
|
7854
|
+
scheme = { encode: function(e) {
|
|
7855
|
+
return e;
|
|
7859
7856
|
} };
|
|
7860
7857
|
} else if (typeof scheme === "string") {
|
|
7861
7858
|
throw new Error('Unsupported encryption scheme: "' + scheme + '".');
|
|
7862
7859
|
}
|
|
7863
|
-
var
|
|
7864
|
-
return pki.rsa.encrypt(
|
|
7860
|
+
var e = scheme.encode(data, key, true);
|
|
7861
|
+
return pki.rsa.encrypt(e, key, true);
|
|
7865
7862
|
};
|
|
7866
7863
|
key.verify = function(digest, signature, scheme, options) {
|
|
7867
7864
|
if (typeof scheme === "string") {
|
|
@@ -7883,9 +7880,9 @@ var require_rsa = __commonJS(function(exports, module) {
|
|
|
7883
7880
|
}
|
|
7884
7881
|
if (scheme === "RSASSA-PKCS1-V1_5") {
|
|
7885
7882
|
scheme = {
|
|
7886
|
-
verify: function(
|
|
7887
|
-
|
|
7888
|
-
var obj = asn1.fromDer(
|
|
7883
|
+
verify: function(digest, d) {
|
|
7884
|
+
d = _decodePkcs1_v1_5(d, key, true, undefined, options);
|
|
7885
|
+
var obj = asn1.fromDer(d, {
|
|
7889
7886
|
parseAllBytes: options._parseAllDigestBytes
|
|
7890
7887
|
});
|
|
7891
7888
|
var capture = {};
|
|
@@ -7906,14 +7903,14 @@ var require_rsa = __commonJS(function(exports, module) {
|
|
|
7906
7903
|
throw new Error("ASN.1 object does not contain a valid RSASSA-PKCS1-v1_5 " + "DigestInfo value. " + "Missing algorithm identifier NULL parameters.");
|
|
7907
7904
|
}
|
|
7908
7905
|
}
|
|
7909
|
-
return
|
|
7906
|
+
return digest === capture.digest;
|
|
7910
7907
|
}
|
|
7911
7908
|
};
|
|
7912
7909
|
} else if (scheme === "NONE" || scheme === "NULL" || scheme === null) {
|
|
7913
7910
|
scheme = {
|
|
7914
|
-
verify: function(
|
|
7915
|
-
|
|
7916
|
-
return
|
|
7911
|
+
verify: function(digest, d) {
|
|
7912
|
+
d = _decodePkcs1_v1_5(d, key, true, undefined, options);
|
|
7913
|
+
return digest === d;
|
|
7917
7914
|
}
|
|
7918
7915
|
};
|
|
7919
7916
|
}
|
|
@@ -7939,23 +7936,23 @@ var require_rsa = __commonJS(function(exports, module) {
|
|
|
7939
7936
|
} else if (scheme === undefined) {
|
|
7940
7937
|
scheme = "RSAES-PKCS1-V1_5";
|
|
7941
7938
|
}
|
|
7942
|
-
var
|
|
7939
|
+
var d = pki.rsa.decrypt(data, key, false, false);
|
|
7943
7940
|
if (scheme === "RSAES-PKCS1-V1_5") {
|
|
7944
7941
|
scheme = { decode: _decodePkcs1_v1_5 };
|
|
7945
7942
|
} else if (scheme === "RSA-OAEP" || scheme === "RSAES-OAEP") {
|
|
7946
7943
|
scheme = {
|
|
7947
|
-
decode: function(
|
|
7948
|
-
return forge.pkcs1.decode_rsa_oaep(
|
|
7944
|
+
decode: function(d, key) {
|
|
7945
|
+
return forge.pkcs1.decode_rsa_oaep(key, d, schemeOptions);
|
|
7949
7946
|
}
|
|
7950
7947
|
};
|
|
7951
7948
|
} else if (["RAW", "NONE", "NULL", null].indexOf(scheme) !== -1) {
|
|
7952
|
-
scheme = { decode: function(
|
|
7953
|
-
return
|
|
7949
|
+
scheme = { decode: function(d) {
|
|
7950
|
+
return d;
|
|
7954
7951
|
} };
|
|
7955
7952
|
} else {
|
|
7956
7953
|
throw new Error('Unsupported encryption scheme: "' + scheme + '".');
|
|
7957
7954
|
}
|
|
7958
|
-
return scheme.decode(
|
|
7955
|
+
return scheme.decode(d, key, false);
|
|
7959
7956
|
};
|
|
7960
7957
|
key.sign = function(md, scheme) {
|
|
7961
7958
|
var bt = false;
|
|
@@ -7971,8 +7968,8 @@ var require_rsa = __commonJS(function(exports, module) {
|
|
|
7971
7968
|
} };
|
|
7972
7969
|
bt = 1;
|
|
7973
7970
|
}
|
|
7974
|
-
var
|
|
7975
|
-
return pki.rsa.encrypt(
|
|
7971
|
+
var d = scheme.encode(md, key.n.bitLength());
|
|
7972
|
+
return pki.rsa.encrypt(d, key, bt);
|
|
7976
7973
|
};
|
|
7977
7974
|
return key;
|
|
7978
7975
|
};
|
|
@@ -8178,8 +8175,8 @@ var require_rsa = __commonJS(function(exports, module) {
|
|
|
8178
8175
|
getPrime(state.qBits, finish);
|
|
8179
8176
|
});
|
|
8180
8177
|
}
|
|
8181
|
-
function getPrime(bits,
|
|
8182
|
-
forge.prime.generateProbablePrime(bits, opts,
|
|
8178
|
+
function getPrime(bits, callback) {
|
|
8179
|
+
forge.prime.generateProbablePrime(bits, opts, callback);
|
|
8183
8180
|
}
|
|
8184
8181
|
function finish(err, num) {
|
|
8185
8182
|
if (err) {
|
|
@@ -8868,9 +8865,9 @@ var require_pbe = __commonJS(function(exports, module) {
|
|
|
8868
8865
|
case pki.oids["pbewithSHAAnd40BitRC2-CBC"]:
|
|
8869
8866
|
dkLen = 5;
|
|
8870
8867
|
dIvLen = 8;
|
|
8871
|
-
cipherFn = function(
|
|
8872
|
-
var cipher = forge.rc2.createDecryptionCipher(
|
|
8873
|
-
cipher.start(
|
|
8868
|
+
cipherFn = function(key, iv) {
|
|
8869
|
+
var cipher = forge.rc2.createDecryptionCipher(key, 40);
|
|
8870
|
+
cipher.start(iv, null);
|
|
8874
8871
|
return cipher;
|
|
8875
8872
|
};
|
|
8876
8873
|
break;
|
|
@@ -10942,42 +10939,42 @@ var require_x509 = __commonJS(function(exports, module) {
|
|
|
10942
10939
|
var caStore = {
|
|
10943
10940
|
certs: {}
|
|
10944
10941
|
};
|
|
10945
|
-
caStore.getIssuer = function(
|
|
10946
|
-
var rval = getBySubject(
|
|
10942
|
+
caStore.getIssuer = function(cert) {
|
|
10943
|
+
var rval = getBySubject(cert.issuer);
|
|
10947
10944
|
return rval;
|
|
10948
10945
|
};
|
|
10949
|
-
caStore.addCertificate = function(
|
|
10950
|
-
if (typeof
|
|
10951
|
-
|
|
10952
|
-
}
|
|
10953
|
-
ensureSubjectHasHash(
|
|
10954
|
-
if (!caStore.hasCertificate(
|
|
10955
|
-
if (
|
|
10956
|
-
var tmp = caStore.certs[
|
|
10946
|
+
caStore.addCertificate = function(cert) {
|
|
10947
|
+
if (typeof cert === "string") {
|
|
10948
|
+
cert = forge.pki.certificateFromPem(cert);
|
|
10949
|
+
}
|
|
10950
|
+
ensureSubjectHasHash(cert.subject);
|
|
10951
|
+
if (!caStore.hasCertificate(cert)) {
|
|
10952
|
+
if (cert.subject.hash in caStore.certs) {
|
|
10953
|
+
var tmp = caStore.certs[cert.subject.hash];
|
|
10957
10954
|
if (!forge.util.isArray(tmp)) {
|
|
10958
10955
|
tmp = [tmp];
|
|
10959
10956
|
}
|
|
10960
|
-
tmp.push(
|
|
10961
|
-
caStore.certs[
|
|
10957
|
+
tmp.push(cert);
|
|
10958
|
+
caStore.certs[cert.subject.hash] = tmp;
|
|
10962
10959
|
} else {
|
|
10963
|
-
caStore.certs[
|
|
10960
|
+
caStore.certs[cert.subject.hash] = cert;
|
|
10964
10961
|
}
|
|
10965
10962
|
}
|
|
10966
10963
|
};
|
|
10967
|
-
caStore.hasCertificate = function(
|
|
10968
|
-
if (typeof
|
|
10969
|
-
|
|
10964
|
+
caStore.hasCertificate = function(cert) {
|
|
10965
|
+
if (typeof cert === "string") {
|
|
10966
|
+
cert = forge.pki.certificateFromPem(cert);
|
|
10970
10967
|
}
|
|
10971
|
-
var match = getBySubject(
|
|
10968
|
+
var match = getBySubject(cert.subject);
|
|
10972
10969
|
if (!match) {
|
|
10973
10970
|
return false;
|
|
10974
10971
|
}
|
|
10975
10972
|
if (!forge.util.isArray(match)) {
|
|
10976
10973
|
match = [match];
|
|
10977
10974
|
}
|
|
10978
|
-
var der1 = asn1.toDer(pki.certificateToAsn1(
|
|
10979
|
-
for (var
|
|
10980
|
-
var der2 = asn1.toDer(pki.certificateToAsn1(match[
|
|
10975
|
+
var der1 = asn1.toDer(pki.certificateToAsn1(cert)).getBytes();
|
|
10976
|
+
for (var i = 0;i < match.length; ++i) {
|
|
10977
|
+
var der2 = asn1.toDer(pki.certificateToAsn1(match[i])).getBytes();
|
|
10981
10978
|
if (der1 === der2) {
|
|
10982
10979
|
return true;
|
|
10983
10980
|
}
|
|
@@ -10992,39 +10989,39 @@ var require_x509 = __commonJS(function(exports, module) {
|
|
|
10992
10989
|
if (!forge.util.isArray(value)) {
|
|
10993
10990
|
certList.push(value);
|
|
10994
10991
|
} else {
|
|
10995
|
-
for (var
|
|
10996
|
-
certList.push(value[
|
|
10992
|
+
for (var i = 0;i < value.length; ++i) {
|
|
10993
|
+
certList.push(value[i]);
|
|
10997
10994
|
}
|
|
10998
10995
|
}
|
|
10999
10996
|
}
|
|
11000
10997
|
}
|
|
11001
10998
|
return certList;
|
|
11002
10999
|
};
|
|
11003
|
-
caStore.removeCertificate = function(
|
|
11000
|
+
caStore.removeCertificate = function(cert) {
|
|
11004
11001
|
var result;
|
|
11005
|
-
if (typeof
|
|
11006
|
-
|
|
11002
|
+
if (typeof cert === "string") {
|
|
11003
|
+
cert = forge.pki.certificateFromPem(cert);
|
|
11007
11004
|
}
|
|
11008
|
-
ensureSubjectHasHash(
|
|
11009
|
-
if (!caStore.hasCertificate(
|
|
11005
|
+
ensureSubjectHasHash(cert.subject);
|
|
11006
|
+
if (!caStore.hasCertificate(cert)) {
|
|
11010
11007
|
return null;
|
|
11011
11008
|
}
|
|
11012
|
-
var match = getBySubject(
|
|
11009
|
+
var match = getBySubject(cert.subject);
|
|
11013
11010
|
if (!forge.util.isArray(match)) {
|
|
11014
|
-
result = caStore.certs[
|
|
11015
|
-
delete caStore.certs[
|
|
11011
|
+
result = caStore.certs[cert.subject.hash];
|
|
11012
|
+
delete caStore.certs[cert.subject.hash];
|
|
11016
11013
|
return result;
|
|
11017
11014
|
}
|
|
11018
|
-
var der1 = asn1.toDer(pki.certificateToAsn1(
|
|
11019
|
-
for (var
|
|
11020
|
-
var der2 = asn1.toDer(pki.certificateToAsn1(match[
|
|
11015
|
+
var der1 = asn1.toDer(pki.certificateToAsn1(cert)).getBytes();
|
|
11016
|
+
for (var i = 0;i < match.length; ++i) {
|
|
11017
|
+
var der2 = asn1.toDer(pki.certificateToAsn1(match[i])).getBytes();
|
|
11021
11018
|
if (der1 === der2) {
|
|
11022
|
-
result = match[
|
|
11023
|
-
match.splice(
|
|
11019
|
+
result = match[i];
|
|
11020
|
+
match.splice(i, 1);
|
|
11024
11021
|
}
|
|
11025
11022
|
}
|
|
11026
11023
|
if (match.length === 0) {
|
|
11027
|
-
delete caStore.certs[
|
|
11024
|
+
delete caStore.certs[cert.subject.hash];
|
|
11028
11025
|
}
|
|
11029
11026
|
return result;
|
|
11030
11027
|
};
|
|
@@ -11612,9 +11609,9 @@ var require_pkcs12 = __commonJS(function(exports, module) {
|
|
|
11612
11609
|
validator = certBagValidator;
|
|
11613
11610
|
decoder = function() {
|
|
11614
11611
|
if (asn1.derToOid(capture.certId) !== pki.oids.x509Certificate) {
|
|
11615
|
-
var
|
|
11616
|
-
|
|
11617
|
-
throw
|
|
11612
|
+
var error = new Error("Unsupported certificate type, only X.509 supported.");
|
|
11613
|
+
error.oid = asn1.derToOid(capture.certId);
|
|
11614
|
+
throw error;
|
|
11618
11615
|
}
|
|
11619
11616
|
var certAsn1 = asn1.fromDer(capture.cert, strict);
|
|
11620
11617
|
try {
|
|
@@ -11862,10 +11859,10 @@ var require_pki = __commonJS(function(exports, module) {
|
|
|
11862
11859
|
};
|
|
11863
11860
|
return forge.pem.encode(msg, { maxline });
|
|
11864
11861
|
};
|
|
11865
|
-
pki.privateKeyInfoToPem = function(
|
|
11862
|
+
pki.privateKeyInfoToPem = function(pki, maxline) {
|
|
11866
11863
|
var msg = {
|
|
11867
11864
|
type: "PRIVATE KEY",
|
|
11868
|
-
body: asn1.toDer(
|
|
11865
|
+
body: asn1.toDer(pki).getBytes()
|
|
11869
11866
|
};
|
|
11870
11867
|
return forge.pem.encode(msg, { maxline });
|
|
11871
11868
|
};
|
|
@@ -11919,9 +11916,9 @@ var require_tls = __commonJS(function(exports, module) {
|
|
|
11919
11916
|
rval.putBytes(forge.util.xorBytes(md5bytes.getBytes(), sha1bytes.getBytes(), length));
|
|
11920
11917
|
return rval;
|
|
11921
11918
|
};
|
|
11922
|
-
var hmac_sha1 = function(
|
|
11919
|
+
var hmac_sha1 = function(key, seqNum, record) {
|
|
11923
11920
|
var hmac = forge.hmac.create();
|
|
11924
|
-
hmac.start("SHA1",
|
|
11921
|
+
hmac.start("SHA1", key);
|
|
11925
11922
|
var b = forge.util.createBuffer();
|
|
11926
11923
|
b.putInt32(seqNum[0]);
|
|
11927
11924
|
b.putInt32(seqNum[1]);
|
|
@@ -12073,8 +12070,8 @@ var require_tls = __commonJS(function(exports, module) {
|
|
|
12073
12070
|
tls.CipherSuites = {};
|
|
12074
12071
|
tls.getCipherSuite = function(twoBytes) {
|
|
12075
12072
|
var rval = null;
|
|
12076
|
-
for (var
|
|
12077
|
-
var cs = tls.CipherSuites[
|
|
12073
|
+
for (var key in tls.CipherSuites) {
|
|
12074
|
+
var cs = tls.CipherSuites[key];
|
|
12078
12075
|
if (cs.id[0] === twoBytes.charCodeAt(0) && cs.id[1] === twoBytes.charCodeAt(1)) {
|
|
12079
12076
|
rval = cs;
|
|
12080
12077
|
break;
|
|
@@ -12513,13 +12510,13 @@ var require_tls = __commonJS(function(exports, module) {
|
|
|
12513
12510
|
var msg = {
|
|
12514
12511
|
signature: readVector(b, 2).getBytes()
|
|
12515
12512
|
};
|
|
12516
|
-
var
|
|
12517
|
-
|
|
12518
|
-
|
|
12519
|
-
|
|
12513
|
+
var verify = forge.util.createBuffer();
|
|
12514
|
+
verify.putBuffer(c.session.md5.digest());
|
|
12515
|
+
verify.putBuffer(c.session.sha1.digest());
|
|
12516
|
+
verify = verify.getBytes();
|
|
12520
12517
|
try {
|
|
12521
12518
|
var cert = c.session.clientCertificate;
|
|
12522
|
-
if (!cert.publicKey.verify(
|
|
12519
|
+
if (!cert.publicKey.verify(verify, msg.signature, "NONE")) {
|
|
12523
12520
|
throw new Error("CertificateVerify signature does not match.");
|
|
12524
12521
|
}
|
|
12525
12522
|
c.session.md5.update(msgBytes);
|
|
@@ -12588,26 +12585,26 @@ var require_tls = __commonJS(function(exports, module) {
|
|
|
12588
12585
|
});
|
|
12589
12586
|
tls.queue(c, record);
|
|
12590
12587
|
c.expect = SER;
|
|
12591
|
-
var callback = function(
|
|
12592
|
-
if (
|
|
12593
|
-
tls.queue(
|
|
12588
|
+
var callback = function(c, signature) {
|
|
12589
|
+
if (c.session.certificateRequest !== null && c.session.clientCertificate !== null) {
|
|
12590
|
+
tls.queue(c, tls.createRecord(c, {
|
|
12594
12591
|
type: tls.ContentType.handshake,
|
|
12595
|
-
data: tls.createCertificateVerify(
|
|
12592
|
+
data: tls.createCertificateVerify(c, signature)
|
|
12596
12593
|
}));
|
|
12597
12594
|
}
|
|
12598
|
-
tls.queue(
|
|
12595
|
+
tls.queue(c, tls.createRecord(c, {
|
|
12599
12596
|
type: tls.ContentType.change_cipher_spec,
|
|
12600
12597
|
data: tls.createChangeCipherSpec()
|
|
12601
12598
|
}));
|
|
12602
|
-
|
|
12603
|
-
|
|
12604
|
-
tls.queue(
|
|
12599
|
+
c.state.pending = tls.createConnectionState(c);
|
|
12600
|
+
c.state.current.write = c.state.pending.write;
|
|
12601
|
+
tls.queue(c, tls.createRecord(c, {
|
|
12605
12602
|
type: tls.ContentType.handshake,
|
|
12606
|
-
data: tls.createFinished(
|
|
12603
|
+
data: tls.createFinished(c)
|
|
12607
12604
|
}));
|
|
12608
|
-
|
|
12609
|
-
tls.flush(
|
|
12610
|
-
|
|
12605
|
+
c.expect = SCC;
|
|
12606
|
+
tls.flush(c);
|
|
12607
|
+
c.process();
|
|
12611
12608
|
};
|
|
12612
12609
|
if (c.session.certificateRequest === null || c.session.clientCertificate === null) {
|
|
12613
12610
|
return callback(c, null);
|
|
@@ -12979,9 +12976,9 @@ var require_tls = __commonJS(function(exports, module) {
|
|
|
12979
12976
|
read: createMode(),
|
|
12980
12977
|
write: createMode()
|
|
12981
12978
|
};
|
|
12982
|
-
state.read.update = function(
|
|
12979
|
+
state.read.update = function(c, record) {
|
|
12983
12980
|
if (!state.read.cipherFunction(record, state.read)) {
|
|
12984
|
-
|
|
12981
|
+
c.error(c, {
|
|
12985
12982
|
message: "Could not decrypt record or bad MAC.",
|
|
12986
12983
|
send: true,
|
|
12987
12984
|
alert: {
|
|
@@ -12989,8 +12986,8 @@ var require_tls = __commonJS(function(exports, module) {
|
|
|
12989
12986
|
description: tls.Alert.Description.bad_record_mac
|
|
12990
12987
|
}
|
|
12991
12988
|
});
|
|
12992
|
-
} else if (!state.read.compressFunction(
|
|
12993
|
-
|
|
12989
|
+
} else if (!state.read.compressFunction(c, record, state.read)) {
|
|
12990
|
+
c.error(c, {
|
|
12994
12991
|
message: "Could not decompress record.",
|
|
12995
12992
|
send: true,
|
|
12996
12993
|
alert: {
|
|
@@ -12999,11 +12996,11 @@ var require_tls = __commonJS(function(exports, module) {
|
|
|
12999
12996
|
}
|
|
13000
12997
|
});
|
|
13001
12998
|
}
|
|
13002
|
-
return !
|
|
12999
|
+
return !c.fail;
|
|
13003
13000
|
};
|
|
13004
|
-
state.write.update = function(
|
|
13005
|
-
if (!state.write.compressFunction(
|
|
13006
|
-
|
|
13001
|
+
state.write.update = function(c, record) {
|
|
13002
|
+
if (!state.write.compressFunction(c, record, state.write)) {
|
|
13003
|
+
c.error(c, {
|
|
13007
13004
|
message: "Could not compress record.",
|
|
13008
13005
|
send: false,
|
|
13009
13006
|
alert: {
|
|
@@ -13012,7 +13009,7 @@ var require_tls = __commonJS(function(exports, module) {
|
|
|
13012
13009
|
}
|
|
13013
13010
|
});
|
|
13014
13011
|
} else if (!state.write.cipherFunction(record, state.write)) {
|
|
13015
|
-
|
|
13012
|
+
c.error(c, {
|
|
13016
13013
|
message: "Could not encrypt record.",
|
|
13017
13014
|
send: false,
|
|
13018
13015
|
alert: {
|
|
@@ -13021,7 +13018,7 @@ var require_tls = __commonJS(function(exports, module) {
|
|
|
13021
13018
|
}
|
|
13022
13019
|
});
|
|
13023
13020
|
}
|
|
13024
|
-
return !
|
|
13021
|
+
return !c.fail;
|
|
13025
13022
|
};
|
|
13026
13023
|
if (c.session) {
|
|
13027
13024
|
var sp = c.session.sp;
|
|
@@ -13207,8 +13204,8 @@ var require_tls = __commonJS(function(exports, module) {
|
|
|
13207
13204
|
b.putBytes(forge.random.getBytes(46));
|
|
13208
13205
|
var sp = c.session.sp;
|
|
13209
13206
|
sp.pre_master_secret = b.getBytes();
|
|
13210
|
-
var
|
|
13211
|
-
b =
|
|
13207
|
+
var key = c.session.serverCertificate.publicKey;
|
|
13208
|
+
b = key.encrypt(sp.pre_master_secret);
|
|
13212
13209
|
var length = b.length + 2;
|
|
13213
13210
|
var rval = forge.util.createBuffer();
|
|
13214
13211
|
rval.putByte(tls.HandshakeType.client_key_exchange);
|
|
@@ -13231,14 +13228,14 @@ var require_tls = __commonJS(function(exports, module) {
|
|
|
13231
13228
|
b.putBuffer(c.session.md5.digest());
|
|
13232
13229
|
b.putBuffer(c.session.sha1.digest());
|
|
13233
13230
|
b = b.getBytes();
|
|
13234
|
-
c.getSignature = c.getSignature || function(
|
|
13231
|
+
c.getSignature = c.getSignature || function(c, b, callback) {
|
|
13235
13232
|
var privateKey = null;
|
|
13236
|
-
if (
|
|
13233
|
+
if (c.getPrivateKey) {
|
|
13237
13234
|
try {
|
|
13238
|
-
privateKey =
|
|
13235
|
+
privateKey = c.getPrivateKey(c, c.session.clientCertificate);
|
|
13239
13236
|
privateKey = forge.pki.privateKeyFromPem(privateKey);
|
|
13240
13237
|
} catch (ex) {
|
|
13241
|
-
|
|
13238
|
+
c.error(c, {
|
|
13242
13239
|
message: "Could not get private key.",
|
|
13243
13240
|
cause: ex,
|
|
13244
13241
|
send: true,
|
|
@@ -13250,7 +13247,7 @@ var require_tls = __commonJS(function(exports, module) {
|
|
|
13250
13247
|
}
|
|
13251
13248
|
}
|
|
13252
13249
|
if (privateKey === null) {
|
|
13253
|
-
|
|
13250
|
+
c.error(c, {
|
|
13254
13251
|
message: "No private key set.",
|
|
13255
13252
|
send: true,
|
|
13256
13253
|
alert: {
|
|
@@ -13259,9 +13256,9 @@ var require_tls = __commonJS(function(exports, module) {
|
|
|
13259
13256
|
}
|
|
13260
13257
|
});
|
|
13261
13258
|
} else {
|
|
13262
|
-
|
|
13259
|
+
b = privateKey.sign(b, null);
|
|
13263
13260
|
}
|
|
13264
|
-
|
|
13261
|
+
callback(c, b);
|
|
13265
13262
|
};
|
|
13266
13263
|
c.getSignature(c, b, callback);
|
|
13267
13264
|
};
|
|
@@ -13278,8 +13275,8 @@ var require_tls = __commonJS(function(exports, module) {
|
|
|
13278
13275
|
var certTypes = forge.util.createBuffer();
|
|
13279
13276
|
certTypes.putByte(1);
|
|
13280
13277
|
var cAs = forge.util.createBuffer();
|
|
13281
|
-
for (var
|
|
13282
|
-
var cert = c.caStore.certs[
|
|
13278
|
+
for (var key in c.caStore.certs) {
|
|
13279
|
+
var cert = c.caStore.certs[key];
|
|
13283
13280
|
var dn = forge.pki.distinguishedNameToAsn1(cert.subject);
|
|
13284
13281
|
var byteBuffer = forge.asn1.toDer(dn);
|
|
13285
13282
|
cAs.putInt16(byteBuffer.length());
|
|
@@ -13431,12 +13428,12 @@ var require_tls = __commonJS(function(exports, module) {
|
|
|
13431
13428
|
tls.verifyCertificateChain = function(c, chain) {
|
|
13432
13429
|
try {
|
|
13433
13430
|
var options = {};
|
|
13434
|
-
for (var
|
|
13435
|
-
options[
|
|
13431
|
+
for (var key in c.verifyOptions) {
|
|
13432
|
+
options[key] = c.verifyOptions[key];
|
|
13436
13433
|
}
|
|
13437
|
-
options.verify = function(vfd, depth,
|
|
13434
|
+
options.verify = function(vfd, depth, chain) {
|
|
13438
13435
|
var desc = _certErrorToAlertDesc(vfd);
|
|
13439
|
-
var ret = c.verify(c, vfd, depth,
|
|
13436
|
+
var ret = c.verify(c, vfd, depth, chain);
|
|
13440
13437
|
if (ret !== true) {
|
|
13441
13438
|
if (typeof ret === "object" && !forge.util.isArray(ret)) {
|
|
13442
13439
|
var error = new Error("The application rejected the certificate.");
|
|
@@ -13493,26 +13490,26 @@ var require_tls = __commonJS(function(exports, module) {
|
|
|
13493
13490
|
rval.cache = cache || {};
|
|
13494
13491
|
rval.capacity = Math.max(capacity || 100, 1);
|
|
13495
13492
|
rval.order = [];
|
|
13496
|
-
for (var
|
|
13493
|
+
for (var key in cache) {
|
|
13497
13494
|
if (rval.order.length <= capacity) {
|
|
13498
|
-
rval.order.push(
|
|
13495
|
+
rval.order.push(key);
|
|
13499
13496
|
} else {
|
|
13500
|
-
delete cache[
|
|
13497
|
+
delete cache[key];
|
|
13501
13498
|
}
|
|
13502
13499
|
}
|
|
13503
13500
|
rval.getSession = function(sessionId) {
|
|
13504
13501
|
var session = null;
|
|
13505
|
-
var
|
|
13502
|
+
var key = null;
|
|
13506
13503
|
if (sessionId) {
|
|
13507
|
-
|
|
13504
|
+
key = forge.util.bytesToHex(sessionId);
|
|
13508
13505
|
} else if (rval.order.length > 0) {
|
|
13509
|
-
|
|
13506
|
+
key = rval.order[0];
|
|
13510
13507
|
}
|
|
13511
|
-
if (
|
|
13512
|
-
session = rval.cache[
|
|
13513
|
-
delete rval.cache[
|
|
13508
|
+
if (key !== null && key in rval.cache) {
|
|
13509
|
+
session = rval.cache[key];
|
|
13510
|
+
delete rval.cache[key];
|
|
13514
13511
|
for (var i in rval.order) {
|
|
13515
|
-
if (rval.order[i] ===
|
|
13512
|
+
if (rval.order[i] === key) {
|
|
13516
13513
|
rval.order.splice(i, 1);
|
|
13517
13514
|
break;
|
|
13518
13515
|
}
|
|
@@ -13522,12 +13519,12 @@ var require_tls = __commonJS(function(exports, module) {
|
|
|
13522
13519
|
};
|
|
13523
13520
|
rval.setSession = function(sessionId, session) {
|
|
13524
13521
|
if (rval.order.length === rval.capacity) {
|
|
13525
|
-
var
|
|
13526
|
-
delete rval.cache[
|
|
13522
|
+
var key = rval.order.shift();
|
|
13523
|
+
delete rval.cache[key];
|
|
13527
13524
|
}
|
|
13528
|
-
var
|
|
13529
|
-
rval.order.push(
|
|
13530
|
-
rval.cache[
|
|
13525
|
+
var key = forge.util.bytesToHex(sessionId);
|
|
13526
|
+
rval.order.push(key);
|
|
13527
|
+
rval.cache[key] = session;
|
|
13531
13528
|
};
|
|
13532
13529
|
}
|
|
13533
13530
|
return rval;
|
|
@@ -13546,8 +13543,8 @@ var require_tls = __commonJS(function(exports, module) {
|
|
|
13546
13543
|
var cipherSuites = options.cipherSuites || null;
|
|
13547
13544
|
if (cipherSuites === null) {
|
|
13548
13545
|
cipherSuites = [];
|
|
13549
|
-
for (var
|
|
13550
|
-
cipherSuites.push(tls.CipherSuites[
|
|
13546
|
+
for (var key in tls.CipherSuites) {
|
|
13547
|
+
cipherSuites.push(tls.CipherSuites[key]);
|
|
13551
13548
|
}
|
|
13552
13549
|
}
|
|
13553
13550
|
var entity = options.server ? tls.ConnectionEnd.server : tls.ConnectionEnd.client;
|
|
@@ -13576,19 +13573,19 @@ var require_tls = __commonJS(function(exports, module) {
|
|
|
13576
13573
|
dataReady: options.dataReady,
|
|
13577
13574
|
heartbeatReceived: options.heartbeatReceived,
|
|
13578
13575
|
closed: options.closed,
|
|
13579
|
-
error: function(
|
|
13580
|
-
ex.origin = ex.origin || (
|
|
13576
|
+
error: function(c, ex) {
|
|
13577
|
+
ex.origin = ex.origin || (c.entity === tls.ConnectionEnd.client ? "client" : "server");
|
|
13581
13578
|
if (ex.send) {
|
|
13582
|
-
tls.queue(
|
|
13583
|
-
tls.flush(
|
|
13579
|
+
tls.queue(c, tls.createAlert(c, ex.alert));
|
|
13580
|
+
tls.flush(c);
|
|
13584
13581
|
}
|
|
13585
13582
|
var fatal = ex.fatal !== false;
|
|
13586
13583
|
if (fatal) {
|
|
13587
|
-
|
|
13584
|
+
c.fail = true;
|
|
13588
13585
|
}
|
|
13589
|
-
options.error(
|
|
13586
|
+
options.error(c, ex);
|
|
13590
13587
|
if (fatal) {
|
|
13591
|
-
|
|
13588
|
+
c.close(false);
|
|
13592
13589
|
}
|
|
13593
13590
|
},
|
|
13594
13591
|
deflate: options.deflate || null,
|
|
@@ -13617,23 +13614,23 @@ var require_tls = __commonJS(function(exports, module) {
|
|
|
13617
13614
|
c.state.current = tls.createConnectionState(c);
|
|
13618
13615
|
};
|
|
13619
13616
|
c.reset();
|
|
13620
|
-
var _update = function(
|
|
13617
|
+
var _update = function(c, record) {
|
|
13621
13618
|
var aligned = record.type - tls.ContentType.change_cipher_spec;
|
|
13622
|
-
var handlers = ctTable[
|
|
13619
|
+
var handlers = ctTable[c.entity][c.expect];
|
|
13623
13620
|
if (aligned in handlers) {
|
|
13624
|
-
handlers[aligned](
|
|
13621
|
+
handlers[aligned](c, record);
|
|
13625
13622
|
} else {
|
|
13626
|
-
tls.handleUnexpected(
|
|
13623
|
+
tls.handleUnexpected(c, record);
|
|
13627
13624
|
}
|
|
13628
13625
|
};
|
|
13629
|
-
var _readRecordHeader = function(
|
|
13626
|
+
var _readRecordHeader = function(c) {
|
|
13630
13627
|
var rval = 0;
|
|
13631
|
-
var b =
|
|
13628
|
+
var b = c.input;
|
|
13632
13629
|
var len = b.length();
|
|
13633
13630
|
if (len < 5) {
|
|
13634
13631
|
rval = 5 - len;
|
|
13635
13632
|
} else {
|
|
13636
|
-
|
|
13633
|
+
c.record = {
|
|
13637
13634
|
type: b.getByte(),
|
|
13638
13635
|
version: {
|
|
13639
13636
|
major: b.getByte(),
|
|
@@ -13643,12 +13640,12 @@ var require_tls = __commonJS(function(exports, module) {
|
|
|
13643
13640
|
fragment: forge.util.createBuffer(),
|
|
13644
13641
|
ready: false
|
|
13645
13642
|
};
|
|
13646
|
-
var compatibleVersion =
|
|
13647
|
-
if (compatibleVersion &&
|
|
13648
|
-
compatibleVersion =
|
|
13643
|
+
var compatibleVersion = c.record.version.major === c.version.major;
|
|
13644
|
+
if (compatibleVersion && c.session && c.session.version) {
|
|
13645
|
+
compatibleVersion = c.record.version.minor === c.version.minor;
|
|
13649
13646
|
}
|
|
13650
13647
|
if (!compatibleVersion) {
|
|
13651
|
-
|
|
13648
|
+
c.error(c, {
|
|
13652
13649
|
message: "Incompatible TLS version.",
|
|
13653
13650
|
send: true,
|
|
13654
13651
|
alert: {
|
|
@@ -13660,23 +13657,23 @@ var require_tls = __commonJS(function(exports, module) {
|
|
|
13660
13657
|
}
|
|
13661
13658
|
return rval;
|
|
13662
13659
|
};
|
|
13663
|
-
var _readRecord = function(
|
|
13660
|
+
var _readRecord = function(c) {
|
|
13664
13661
|
var rval = 0;
|
|
13665
|
-
var b =
|
|
13662
|
+
var b = c.input;
|
|
13666
13663
|
var len = b.length();
|
|
13667
|
-
if (len <
|
|
13668
|
-
rval =
|
|
13664
|
+
if (len < c.record.length) {
|
|
13665
|
+
rval = c.record.length - len;
|
|
13669
13666
|
} else {
|
|
13670
|
-
|
|
13667
|
+
c.record.fragment.putBytes(b.getBytes(c.record.length));
|
|
13671
13668
|
b.compact();
|
|
13672
|
-
var s =
|
|
13673
|
-
if (s.update(
|
|
13674
|
-
if (
|
|
13675
|
-
if (
|
|
13676
|
-
|
|
13677
|
-
|
|
13669
|
+
var s = c.state.current.read;
|
|
13670
|
+
if (s.update(c, c.record)) {
|
|
13671
|
+
if (c.fragmented !== null) {
|
|
13672
|
+
if (c.fragmented.type === c.record.type) {
|
|
13673
|
+
c.fragmented.fragment.putBuffer(c.record.fragment);
|
|
13674
|
+
c.record = c.fragmented;
|
|
13678
13675
|
} else {
|
|
13679
|
-
|
|
13676
|
+
c.error(c, {
|
|
13680
13677
|
message: "Invalid fragmented record.",
|
|
13681
13678
|
send: true,
|
|
13682
13679
|
alert: {
|
|
@@ -13686,7 +13683,7 @@ var require_tls = __commonJS(function(exports, module) {
|
|
|
13686
13683
|
});
|
|
13687
13684
|
}
|
|
13688
13685
|
}
|
|
13689
|
-
|
|
13686
|
+
c.record.ready = true;
|
|
13690
13687
|
}
|
|
13691
13688
|
}
|
|
13692
13689
|
return rval;
|
|
@@ -15607,14 +15604,14 @@ var require_log = __commonJS(function(exports, module) {
|
|
|
15607
15604
|
var i;
|
|
15608
15605
|
forge.log.logMessage = function(message) {
|
|
15609
15606
|
var messageLevelIndex = sLevelInfo[message.level].index;
|
|
15610
|
-
for (var
|
|
15611
|
-
var
|
|
15612
|
-
if (
|
|
15613
|
-
|
|
15607
|
+
for (var i = 0;i < sLoggers.length; ++i) {
|
|
15608
|
+
var logger = sLoggers[i];
|
|
15609
|
+
if (logger.flags & forge.log.NO_LEVEL_CHECK) {
|
|
15610
|
+
logger.f(message);
|
|
15614
15611
|
} else {
|
|
15615
|
-
var loggerLevelIndex = sLevelInfo[
|
|
15612
|
+
var loggerLevelIndex = sLevelInfo[logger.level].index;
|
|
15616
15613
|
if (messageLevelIndex <= loggerLevelIndex) {
|
|
15617
|
-
|
|
15614
|
+
logger.f(logger, message);
|
|
15618
15615
|
}
|
|
15619
15616
|
}
|
|
15620
15617
|
}
|
|
@@ -15640,12 +15637,12 @@ var require_log = __commonJS(function(exports, module) {
|
|
|
15640
15637
|
if (true) {
|
|
15641
15638
|
levels = ["error", "warning", "info", "debug", "verbose"];
|
|
15642
15639
|
for (i = 0;i < levels.length; ++i) {
|
|
15643
|
-
(function(
|
|
15644
|
-
forge.log[
|
|
15640
|
+
(function(level) {
|
|
15641
|
+
forge.log[level] = function(category, message) {
|
|
15645
15642
|
var args = Array.prototype.slice.call(arguments).slice(2);
|
|
15646
15643
|
var msg = {
|
|
15647
15644
|
timestamp: new Date,
|
|
15648
|
-
level
|
|
15645
|
+
level,
|
|
15649
15646
|
category,
|
|
15650
15647
|
message,
|
|
15651
15648
|
arguments: args
|
|
@@ -15658,20 +15655,20 @@ var require_log = __commonJS(function(exports, module) {
|
|
|
15658
15655
|
var levels;
|
|
15659
15656
|
var i;
|
|
15660
15657
|
forge.log.makeLogger = function(logFunction) {
|
|
15661
|
-
var
|
|
15658
|
+
var logger = {
|
|
15662
15659
|
flags: 0,
|
|
15663
15660
|
f: logFunction
|
|
15664
15661
|
};
|
|
15665
|
-
forge.log.setLevel(
|
|
15666
|
-
return
|
|
15662
|
+
forge.log.setLevel(logger, "none");
|
|
15663
|
+
return logger;
|
|
15667
15664
|
};
|
|
15668
|
-
forge.log.setLevel = function(
|
|
15665
|
+
forge.log.setLevel = function(logger, level) {
|
|
15669
15666
|
var rval = false;
|
|
15670
|
-
if (
|
|
15671
|
-
for (var
|
|
15672
|
-
var aValidLevel = forge.log.levels[
|
|
15673
|
-
if (
|
|
15674
|
-
|
|
15667
|
+
if (logger && !(logger.flags & forge.log.LEVEL_LOCKED)) {
|
|
15668
|
+
for (var i = 0;i < forge.log.levels.length; ++i) {
|
|
15669
|
+
var aValidLevel = forge.log.levels[i];
|
|
15670
|
+
if (level == aValidLevel) {
|
|
15671
|
+
logger.level = level;
|
|
15675
15672
|
rval = true;
|
|
15676
15673
|
break;
|
|
15677
15674
|
}
|
|
@@ -15679,15 +15676,15 @@ var require_log = __commonJS(function(exports, module) {
|
|
|
15679
15676
|
}
|
|
15680
15677
|
return rval;
|
|
15681
15678
|
};
|
|
15682
|
-
forge.log.lock = function(
|
|
15683
|
-
if (typeof
|
|
15684
|
-
|
|
15679
|
+
forge.log.lock = function(logger, lock) {
|
|
15680
|
+
if (typeof lock === "undefined" || lock) {
|
|
15681
|
+
logger.flags |= forge.log.LEVEL_LOCKED;
|
|
15685
15682
|
} else {
|
|
15686
|
-
|
|
15683
|
+
logger.flags &= ~forge.log.LEVEL_LOCKED;
|
|
15687
15684
|
}
|
|
15688
15685
|
};
|
|
15689
|
-
forge.log.addLogger = function(
|
|
15690
|
-
sLoggers.push(
|
|
15686
|
+
forge.log.addLogger = function(logger) {
|
|
15687
|
+
sLoggers.push(logger);
|
|
15691
15688
|
};
|
|
15692
15689
|
if (typeof console !== "undefined" && "log" in console) {
|
|
15693
15690
|
if (console.error && console.warn && console.info && console.debug) {
|
|
@@ -15698,7 +15695,7 @@ var require_log = __commonJS(function(exports, module) {
|
|
|
15698
15695
|
debug: console.debug,
|
|
15699
15696
|
verbose: console.debug
|
|
15700
15697
|
};
|
|
15701
|
-
f = function(
|
|
15698
|
+
f = function(logger, message) {
|
|
15702
15699
|
forge.log.prepareStandard(message);
|
|
15703
15700
|
var handler = levelHandlers[message.level];
|
|
15704
15701
|
var args = [message.standard];
|
|
@@ -15707,7 +15704,7 @@ var require_log = __commonJS(function(exports, module) {
|
|
|
15707
15704
|
};
|
|
15708
15705
|
logger = forge.log.makeLogger(f);
|
|
15709
15706
|
} else {
|
|
15710
|
-
f = function(
|
|
15707
|
+
f = function(logger, message) {
|
|
15711
15708
|
forge.log.prepareStandardFull(message);
|
|
15712
15709
|
console.log(message.standardFull);
|
|
15713
15710
|
};
|
|
@@ -16294,9 +16291,9 @@ var require_pkcs7 = __commonJS(function(exports, module) {
|
|
|
16294
16291
|
var jan_1_2050 = new Date("2050-01-01T00:00:00Z");
|
|
16295
16292
|
var date = attr.value;
|
|
16296
16293
|
if (typeof date === "string") {
|
|
16297
|
-
var
|
|
16298
|
-
if (!isNaN(
|
|
16299
|
-
date = new Date(
|
|
16294
|
+
var timestamp = Date.parse(date);
|
|
16295
|
+
if (!isNaN(timestamp)) {
|
|
16296
|
+
date = new Date(timestamp);
|
|
16300
16297
|
} else if (date.length === 13) {
|
|
16301
16298
|
date = asn1.utcTimeToDate(date);
|
|
16302
16299
|
} else {
|
|
@@ -16819,14 +16816,14 @@ var writeChangedFile = async (path, source) => {
|
|
|
16819
16816
|
return true;
|
|
16820
16817
|
};
|
|
16821
16818
|
var replaceManagedRegion = (source, region, insertAt) => {
|
|
16822
|
-
const
|
|
16819
|
+
const start = source.indexOf(START_MARKER);
|
|
16823
16820
|
const end = source.indexOf(END_MARKER);
|
|
16824
|
-
if (
|
|
16821
|
+
if (start === NOT_FOUND !== (end === NOT_FOUND) || start !== NOT_FOUND && end < start) {
|
|
16825
16822
|
throw new TypeError("AbsoluteJS deep-link ownership markers are malformed.");
|
|
16826
16823
|
}
|
|
16827
|
-
if (
|
|
16824
|
+
if (start !== NOT_FOUND) {
|
|
16828
16825
|
const lineStart = source.lastIndexOf(`
|
|
16829
|
-
`,
|
|
16826
|
+
`, start) + 1;
|
|
16830
16827
|
const nextLine = source.indexOf(`
|
|
16831
16828
|
`, end + END_MARKER.length);
|
|
16832
16829
|
const lineEnd = nextLine === NOT_FOUND ? source.length : nextLine + 1;
|
|
@@ -17007,13 +17004,13 @@ var optionalSource = async (path) => {
|
|
|
17007
17004
|
}
|
|
17008
17005
|
};
|
|
17009
17006
|
var managed = (source, region, insertion) => {
|
|
17010
|
-
const
|
|
17007
|
+
const start = source.indexOf(START_MARKER2);
|
|
17011
17008
|
const end = source.indexOf(END_MARKER2);
|
|
17012
|
-
if (
|
|
17009
|
+
if (start === NOT_FOUND2 !== (end === NOT_FOUND2) || start !== NOT_FOUND2 && end < start)
|
|
17013
17010
|
throw new TypeError("AbsoluteJS device-capability ownership markers are malformed.");
|
|
17014
|
-
if (
|
|
17011
|
+
if (start !== NOT_FOUND2) {
|
|
17015
17012
|
const lineStart = source.lastIndexOf(`
|
|
17016
|
-
`,
|
|
17013
|
+
`, start) + 1;
|
|
17017
17014
|
const nextLine = source.indexOf(`
|
|
17018
17015
|
`, end + END_MARKER2.length);
|
|
17019
17016
|
const lineEnd = nextLine === NOT_FOUND2 ? source.length : nextLine + 1;
|
|
@@ -17074,12 +17071,12 @@ ${wholeRegion} <key>NSPrivacyCollectedDataTypes</key>
|
|
|
17074
17071
|
</dict>
|
|
17075
17072
|
</plist>
|
|
17076
17073
|
` : null;
|
|
17077
|
-
const
|
|
17078
|
-
if (
|
|
17074
|
+
const start = source.indexOf(START_MARKER2);
|
|
17075
|
+
if (start !== NOT_FOUND2) {
|
|
17079
17076
|
const end = source.indexOf(END_MARKER2);
|
|
17080
17077
|
if (end === NOT_FOUND2)
|
|
17081
17078
|
throw new TypeError("AbsoluteJS device-capability ownership markers are malformed.");
|
|
17082
|
-
const owned = source.slice(
|
|
17079
|
+
const owned = source.slice(start, end);
|
|
17083
17080
|
const ownsWholeKey = owned.includes("NSPrivacyAccessedAPITypes");
|
|
17084
17081
|
let region = "";
|
|
17085
17082
|
if (ownsWholeKey)
|
|
@@ -17246,13 +17243,13 @@ var configureIosPushNotifications = async (config, enabled) => {
|
|
|
17246
17243
|
return changed.some(Boolean);
|
|
17247
17244
|
};
|
|
17248
17245
|
var replacePushRegion = (source, region, insertion) => {
|
|
17249
|
-
const
|
|
17246
|
+
const start = source.indexOf(PUSH_START_MARKER);
|
|
17250
17247
|
const end = source.indexOf(PUSH_END_MARKER);
|
|
17251
|
-
if (
|
|
17248
|
+
if (start < 0 !== end < 0 || start >= 0 && end < start)
|
|
17252
17249
|
throw new TypeError("AbsoluteJS push-notification ownership markers are malformed.");
|
|
17253
|
-
if (
|
|
17250
|
+
if (start >= 0) {
|
|
17254
17251
|
const lineStart = source.lastIndexOf(`
|
|
17255
|
-
`,
|
|
17252
|
+
`, start) + 1;
|
|
17256
17253
|
const nextLine = source.indexOf(`
|
|
17257
17254
|
`, end + PUSH_END_MARKER.length);
|
|
17258
17255
|
const lineEnd = nextLine < 0 ? source.length : nextLine + 1;
|
|
@@ -17327,8 +17324,8 @@ var writeChanged = async (path, source) => {
|
|
|
17327
17324
|
await rename3(temporary, path);
|
|
17328
17325
|
return true;
|
|
17329
17326
|
};
|
|
17330
|
-
var replaceRegion = (source,
|
|
17331
|
-
const existingStart = source.indexOf(
|
|
17327
|
+
var replaceRegion = (source, start, end, region, insert) => {
|
|
17328
|
+
const existingStart = source.indexOf(start);
|
|
17332
17329
|
const existingEnd = source.indexOf(end);
|
|
17333
17330
|
if (existingStart < 0 !== existingEnd < 0 || existingEnd < existingStart)
|
|
17334
17331
|
throw new TypeError("AbsoluteJS background Sync markers are malformed.");
|
|
@@ -17344,19 +17341,19 @@ var replaceRegion = (source, start2, end, region, insert) => {
|
|
|
17344
17341
|
return `${source.slice(0, insert)}${region}${source.slice(insert)}`;
|
|
17345
17342
|
};
|
|
17346
17343
|
var ensurePlistArrayValues = (source, key, values, marker) => {
|
|
17347
|
-
const
|
|
17344
|
+
const start = `<!-- absolutejs:${marker}:start -->`;
|
|
17348
17345
|
const end = `<!-- absolutejs:${marker}:end -->`;
|
|
17349
17346
|
const makeRegion = (owned) => {
|
|
17350
17347
|
if (owned.length === 0)
|
|
17351
17348
|
return "";
|
|
17352
17349
|
const entries = owned.map((value) => ` <string>${value}</string>`).join(`
|
|
17353
17350
|
`);
|
|
17354
|
-
return ` ${
|
|
17351
|
+
return ` ${start}
|
|
17355
17352
|
${entries}
|
|
17356
17353
|
${end}
|
|
17357
17354
|
`;
|
|
17358
17355
|
};
|
|
17359
|
-
const existingStart = source.indexOf(
|
|
17356
|
+
const existingStart = source.indexOf(start);
|
|
17360
17357
|
const existingEnd = source.indexOf(end);
|
|
17361
17358
|
if (existingStart < 0 !== existingEnd < 0 || existingEnd < existingStart)
|
|
17362
17359
|
throw new TypeError("AbsoluteJS background Sync plist markers are malformed.");
|
|
@@ -17400,7 +17397,7 @@ ${makeRegion(values)} </array>
|
|
|
17400
17397
|
return `${source.slice(0, dictEnd)}${declaration}${source.slice(dictEnd)}`;
|
|
17401
17398
|
};
|
|
17402
17399
|
var applyAbsoluteNativeBackgroundSync = async (projectRoot, config, platforms = config.platforms) => {
|
|
17403
|
-
if (!platforms.includes("ios") || !
|
|
17400
|
+
if (!platforms.includes("ios") || !projectUsesAbsoluteAuth2(projectRoot) || !projectUsesAbsoluteSync2(projectRoot))
|
|
17404
17401
|
return { changed: false };
|
|
17405
17402
|
const identifier = `${config.appId}.absolutejs.background-sync`;
|
|
17406
17403
|
const infoPath = join3(config.nativeProjectDirectory, "ios/App/App/Info.plist");
|
|
@@ -17479,8 +17476,8 @@ var removeOwnedFile = async (path) => {
|
|
|
17479
17476
|
await rm(path);
|
|
17480
17477
|
return true;
|
|
17481
17478
|
};
|
|
17482
|
-
var replaceMarkedRegion = (source,
|
|
17483
|
-
const existingStart = source.indexOf(
|
|
17479
|
+
var replaceMarkedRegion = (source, start, end, region, insertion, error) => {
|
|
17480
|
+
const existingStart = source.indexOf(start);
|
|
17484
17481
|
const existingEnd = source.indexOf(end);
|
|
17485
17482
|
if (existingStart < 0 !== existingEnd < 0 || existingStart >= 0 && existingEnd < existingStart)
|
|
17486
17483
|
throw new TypeError("AbsoluteJS mobile update markers are malformed.");
|
|
@@ -17863,8 +17860,8 @@ var injectAndroidActivity = (source, enabled) => {
|
|
|
17863
17860
|
const generatedMethod = owned.includes("onCreate(");
|
|
17864
17861
|
if (!enabled)
|
|
17865
17862
|
return `${source.slice(0, from)}${source.slice(through)}`;
|
|
17866
|
-
const
|
|
17867
|
-
return `${source.slice(0, from)}${
|
|
17863
|
+
const region = androidManagedRegion(kotlin, generatedMethod);
|
|
17864
|
+
return `${source.slice(0, from)}${region}${source.slice(through)}`;
|
|
17868
17865
|
}
|
|
17869
17866
|
if (!enabled)
|
|
17870
17867
|
return source;
|
|
@@ -17873,7 +17870,7 @@ var injectAndroidActivity = (source, enabled) => {
|
|
|
17873
17870
|
const brace = source.indexOf("{", onCreate);
|
|
17874
17871
|
const insert = source.indexOf(`
|
|
17875
17872
|
`, brace) + 1;
|
|
17876
|
-
const
|
|
17873
|
+
const region = kotlin ? ` ${START}
|
|
17877
17874
|
AbsoluteMobileUpdateWatchdogPlugin.recoverInterruptedBoot(this)
|
|
17878
17875
|
registerPlugin(AbsoluteMobileUpdateWatchdogPlugin::class.java)
|
|
17879
17876
|
${END}
|
|
@@ -17882,7 +17879,7 @@ var injectAndroidActivity = (source, enabled) => {
|
|
|
17882
17879
|
registerPlugin(AbsoluteMobileUpdateWatchdogPlugin.class);
|
|
17883
17880
|
${END}
|
|
17884
17881
|
`;
|
|
17885
|
-
return `${source.slice(0, insert)}${
|
|
17882
|
+
return `${source.slice(0, insert)}${region}${source.slice(insert)}`;
|
|
17886
17883
|
}
|
|
17887
17884
|
const close = source.lastIndexOf("}");
|
|
17888
17885
|
if (close < 0)
|
|
@@ -17979,8 +17976,8 @@ var removeOwnedFile2 = async (path) => {
|
|
|
17979
17976
|
return true;
|
|
17980
17977
|
};
|
|
17981
17978
|
var isRecord2 = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
17982
|
-
var replaceMarkedRegion2 = (source,
|
|
17983
|
-
const existingStart = source.indexOf(
|
|
17979
|
+
var replaceMarkedRegion2 = (source, start, end, region, insertion, error) => {
|
|
17980
|
+
const existingStart = source.indexOf(start);
|
|
17984
17981
|
const existingEnd = source.indexOf(end);
|
|
17985
17982
|
if (existingStart < 0 !== existingEnd < 0 || existingStart >= 0 && existingEnd < existingStart)
|
|
17986
17983
|
throw new TypeError("AbsoluteJS native observability markers are malformed.");
|
|
@@ -19883,7 +19880,7 @@ var dependencyLockAt = async (directory) => (await Promise.all(LOCK_FILES.map(as
|
|
|
19883
19880
|
exists: await pathExists2(join8(directory, name)),
|
|
19884
19881
|
name,
|
|
19885
19882
|
path: join8(directory, name)
|
|
19886
|
-
})))).find(({ exists
|
|
19883
|
+
})))).find(({ exists }) => exists);
|
|
19887
19884
|
var declaredWorkspacePatterns = (declared) => {
|
|
19888
19885
|
if (Array.isArray(declared))
|
|
19889
19886
|
return declared;
|
|
@@ -20223,12 +20220,12 @@ var iosNativeSecurityCheck = async (iosRoot) => {
|
|
|
20223
20220
|
var iosDeepLinkProjectionCheck = async (config, iosRoot) => {
|
|
20224
20221
|
const infoPath = join8(iosRoot, "App/App/Info.plist");
|
|
20225
20222
|
const entitlementsPath = join8(iosRoot, "App/AbsoluteJS.entitlements");
|
|
20226
|
-
const
|
|
20223
|
+
const projectPath = join8(iosRoot, "App/App.xcodeproj/project.pbxproj");
|
|
20227
20224
|
try {
|
|
20228
20225
|
const [info, entitlements, project] = await Promise.all([
|
|
20229
20226
|
readFile9(infoPath, "utf8"),
|
|
20230
20227
|
readFile9(entitlementsPath, "utf8"),
|
|
20231
|
-
readFile9(
|
|
20228
|
+
readFile9(projectPath, "utf8")
|
|
20232
20229
|
]);
|
|
20233
20230
|
if (config.deepLinkScheme && (!info.includes("<key>CFBundleURLTypes</key>") || !info.includes(`<string>${config.deepLinkScheme}</string>`)))
|
|
20234
20231
|
throw new TypeError("iOS custom URL scheme does not match mobile config.");
|
|
@@ -20242,7 +20239,7 @@ var iosDeepLinkProjectionCheck = async (config, iosRoot) => {
|
|
|
20242
20239
|
}
|
|
20243
20240
|
};
|
|
20244
20241
|
var syncSchemaReleaseCheck = (projectRoot) => {
|
|
20245
|
-
if (!
|
|
20242
|
+
if (!projectUsesAbsoluteSync2(projectRoot))
|
|
20246
20243
|
return;
|
|
20247
20244
|
const manifestPath = join8(projectRoot, "package.json");
|
|
20248
20245
|
try {
|
|
@@ -20313,8 +20310,8 @@ var expoIosPushCapabilityCheck = async (iosRoot, requirements) => {
|
|
|
20313
20310
|
};
|
|
20314
20311
|
var expoIosCapabilityProjectionCheck = async (config, requirements) => {
|
|
20315
20312
|
const iosRoot = join8(config.nativeProjectDirectory, "ios");
|
|
20316
|
-
const
|
|
20317
|
-
const project = await readFile9(
|
|
20313
|
+
const projectPath = await uniqueExpoIosFile(iosRoot, "**/*.xcodeproj/project.pbxproj", "Xcode project");
|
|
20314
|
+
const project = await readFile9(projectPath, "utf8");
|
|
20318
20315
|
const privacy = await expoIosPrivacyCapabilityCheck(iosRoot, project, requirements);
|
|
20319
20316
|
if (privacy)
|
|
20320
20317
|
return privacy;
|
|
@@ -20332,10 +20329,10 @@ var iosCapabilityProjectionCheck = async (config, requirements) => {
|
|
|
20332
20329
|
return fail("mobile.device-capabilities", "iOS system-bar capability is missing its required view-controller setting.", infoPath, "Run `absolute mobile sync ios` to regenerate native capability settings.");
|
|
20333
20330
|
if (requirements.iosPrivacyAccessedApis.length > 0) {
|
|
20334
20331
|
const privacyPath = join8(appRoot, "PrivacyInfo.xcprivacy");
|
|
20335
|
-
const
|
|
20332
|
+
const projectPath = join8(config.nativeProjectDirectory, "ios/App/App.xcodeproj/project.pbxproj");
|
|
20336
20333
|
const [privacy, project] = await Promise.all([
|
|
20337
20334
|
readFile9(privacyPath, "utf8").catch(() => ""),
|
|
20338
|
-
readFile9(
|
|
20335
|
+
readFile9(projectPath, "utf8").catch(() => "")
|
|
20339
20336
|
]);
|
|
20340
20337
|
const missing = requirements.iosPrivacyAccessedApis.some(({ api, reasons }) => !privacy.includes(`<string>${api}</string>`) || reasons.some((reason) => !privacy.includes(`<string>${reason}</string>`)));
|
|
20341
20338
|
if (missing || !project.includes("PrivacyInfo.xcprivacy in Resources"))
|
|
@@ -20434,7 +20431,7 @@ var inspectExpoAndroidRelease = async (config, projectRoot) => {
|
|
|
20434
20431
|
}));
|
|
20435
20432
|
};
|
|
20436
20433
|
var uniqueExpoIosFile = async (iosRoot, pattern, label) => {
|
|
20437
|
-
const paths = (await Array.fromAsync(new Bun.Glob(pattern).scan({ cwd: iosRoot, onlyFiles: true }))).filter((
|
|
20434
|
+
const paths = (await Array.fromAsync(new Bun.Glob(pattern).scan({ cwd: iosRoot, onlyFiles: true }))).filter((path) => !path.split(/[\\/]/u).some((part) => ["Pods", "DerivedData", "build"].includes(part)));
|
|
20438
20435
|
if (paths.length !== 1)
|
|
20439
20436
|
throw new TypeError(paths.length === 0 ? `Generated Expo iOS project is missing its ${label}.` : `Generated Expo iOS project contains ambiguous ${label} files.`);
|
|
20440
20437
|
const [path] = paths;
|
|
@@ -20444,7 +20441,7 @@ var uniqueExpoIosFile = async (iosRoot, pattern, label) => {
|
|
|
20444
20441
|
};
|
|
20445
20442
|
var expoIosNativeProjectionCheck = async (config, iosRoot) => {
|
|
20446
20443
|
try {
|
|
20447
|
-
const [infoPath, entitlementsPath,
|
|
20444
|
+
const [infoPath, entitlementsPath, projectPath] = await Promise.all([
|
|
20448
20445
|
uniqueExpoIosFile(iosRoot, "**/Info.plist", "Info.plist"),
|
|
20449
20446
|
uniqueExpoIosFile(iosRoot, "**/*.entitlements", "entitlements"),
|
|
20450
20447
|
uniqueExpoIosFile(iosRoot, "**/*.xcodeproj/project.pbxproj", "Xcode project")
|
|
@@ -20452,7 +20449,7 @@ var expoIosNativeProjectionCheck = async (config, iosRoot) => {
|
|
|
20452
20449
|
const [info, entitlements, project] = await Promise.all([
|
|
20453
20450
|
readFile9(infoPath, "utf8"),
|
|
20454
20451
|
readFile9(entitlementsPath, "utf8"),
|
|
20455
|
-
readFile9(
|
|
20452
|
+
readFile9(projectPath, "utf8")
|
|
20456
20453
|
]);
|
|
20457
20454
|
if (/<key>NSAllowsArbitraryLoads<\/key>\s*<true\s*\/>/u.test(info))
|
|
20458
20455
|
throw new TypeError("Expo iOS App Transport Security permits arbitrary network loads.");
|
|
@@ -20754,8 +20751,8 @@ var buildAbsoluteAndroidRelease = async (options) => {
|
|
|
20754
20751
|
throw new TypeError("Android versionCode must be an integer from 1 through 2100000000.");
|
|
20755
20752
|
}
|
|
20756
20753
|
const projectRoot = resolve5(options.projectRoot);
|
|
20757
|
-
const host = options.host ??
|
|
20758
|
-
const androidRoot = options.androidRoot ?? process.env.ANDROID_HOME ?? process.env.ANDROID_SDK_ROOT ??
|
|
20754
|
+
const host = options.host ?? detectAbsoluteMobileHost2();
|
|
20755
|
+
const androidRoot = options.androidRoot ?? process.env.ANDROID_HOME ?? process.env.ANDROID_SDK_ROOT ?? absoluteManagedAndroidSdkRoot2(host);
|
|
20759
20756
|
const nativeDirectory = join9(options.config.nativeProjectDirectory, "android");
|
|
20760
20757
|
const manifest = requireManifest(JSON.parse(await readFile10(join9(options.config.bundleDirectory, "absolute-mobile-manifest.json"), "utf8")));
|
|
20761
20758
|
if (manifest.appId !== options.config.appId) {
|
|
@@ -20763,7 +20760,7 @@ var buildAbsoluteAndroidRelease = async (options) => {
|
|
|
20763
20760
|
}
|
|
20764
20761
|
let { versionCode } = options;
|
|
20765
20762
|
if (options.prepareVersionCode) {
|
|
20766
|
-
const nativeFingerprint = options.config.engine === "expo" ? await fingerprintExpoAndroidProject(nativeDirectory) : await
|
|
20763
|
+
const nativeFingerprint = options.config.engine === "expo" ? await fingerprintExpoAndroidProject(nativeDirectory) : await fingerprintAbsoluteAndroidNativeProject2({
|
|
20767
20764
|
nativeDirectory
|
|
20768
20765
|
});
|
|
20769
20766
|
const buildIdentity = createHash3("sha256").update(`${manifest.appBuild}\x00${nativeFingerprint}`).digest("hex");
|
|
@@ -20773,14 +20770,14 @@ var buildAbsoluteAndroidRelease = async (options) => {
|
|
|
20773
20770
|
throw new TypeError("Android versionCode must be an integer from 1 through 2100000000.");
|
|
20774
20771
|
}
|
|
20775
20772
|
const gradleArguments = versionCode === undefined ? [] : [`-Pandroid.injected.version.code=${versionCode}`];
|
|
20776
|
-
const artifactPath = options.config.engine === "expo" && host === "wsl" ? await
|
|
20773
|
+
const artifactPath = options.config.engine === "expo" && host === "wsl" ? await buildAbsoluteExpoAndroidWslBundle2({
|
|
20777
20774
|
androidRoot,
|
|
20778
20775
|
capture: options.capture,
|
|
20779
20776
|
env: options.env,
|
|
20780
20777
|
gradleArguments,
|
|
20781
20778
|
project: options.config.nativeProjectDirectory,
|
|
20782
20779
|
run: options.run
|
|
20783
|
-
}) : (await
|
|
20780
|
+
}) : (await buildAbsoluteAndroidGradleArtifact2({
|
|
20784
20781
|
capture: options.capture,
|
|
20785
20782
|
env: options.env,
|
|
20786
20783
|
gradleArguments,
|
|
@@ -21128,7 +21125,7 @@ var runAbsoluteAndroidReleaseAcceptance = async (options) => {
|
|
|
21128
21125
|
const startedAt = performance.now();
|
|
21129
21126
|
await mkdir8(options.artifactDirectory, { recursive: true });
|
|
21130
21127
|
const apksPath = join10(options.artifactDirectory, "release.apks");
|
|
21131
|
-
const windowsJava = (options.host ??
|
|
21128
|
+
const windowsJava = (options.host ?? detectAbsoluteMobileHost2()) === "wsl" && options.java.toLowerCase().endsWith(".exe");
|
|
21132
21129
|
const toolPath = async (path) => {
|
|
21133
21130
|
if (!windowsJava)
|
|
21134
21131
|
return path;
|
|
@@ -21649,8 +21646,8 @@ var runAbsoluteIosDeviceReleaseAcceptance = async (options) => {
|
|
|
21649
21646
|
xcrun
|
|
21650
21647
|
};
|
|
21651
21648
|
const installMs = options.distribution === "registered-device" ? await installRegisteredDeviceRelease(installation) : await inspectTestFlightInstallation(installation);
|
|
21652
|
-
const observe = options.observeLaunch ?? ((
|
|
21653
|
-
...
|
|
21649
|
+
const observe = options.observeLaunch ?? ((launch) => observeDeviceLaunch({
|
|
21650
|
+
...launch,
|
|
21654
21651
|
...options.signal ? { signal: options.signal } : {},
|
|
21655
21652
|
xcrun
|
|
21656
21653
|
}));
|
|
@@ -22921,8 +22918,8 @@ var addPackageDeclarations = (declarations, value) => {
|
|
|
22921
22918
|
var packageInspections = async (projectRoot, additionalNames) => {
|
|
22922
22919
|
const project = await readObject2(join14(projectRoot, "package.json"));
|
|
22923
22920
|
const declarations = new Map;
|
|
22924
|
-
for (const
|
|
22925
|
-
addPackageDeclarations(declarations, project[
|
|
22921
|
+
for (const field of ["dependencies", "devDependencies"])
|
|
22922
|
+
addPackageDeclarations(declarations, project[field]);
|
|
22926
22923
|
const names = [...new Set([...declarations.keys(), ...additionalNames])].filter((name) => MOBILE_PACKAGE_NAMES.has(name) || name.startsWith("@capacitor/") || additionalNames.includes(name)).sort();
|
|
22927
22924
|
return Promise.all(names.map(async (name) => {
|
|
22928
22925
|
const installedManifest = await readObject2(join14(projectRoot, "node_modules", name, "package.json")).catch(() => {
|
|
@@ -23070,17 +23067,17 @@ var exists5 = async (path) => {
|
|
|
23070
23067
|
}
|
|
23071
23068
|
};
|
|
23072
23069
|
var yamlString = (value) => `'${value.replaceAll("'", "''")}'`;
|
|
23073
|
-
var projectPath2 = (projectRoot, value,
|
|
23070
|
+
var projectPath2 = (projectRoot, value, field, options = {}) => {
|
|
23074
23071
|
const root = resolve12(projectRoot);
|
|
23075
23072
|
const path = resolve12(root, value);
|
|
23076
23073
|
const portable = relative11(root, path).replaceAll("\\", "/");
|
|
23077
23074
|
if (portable === ".." || portable.startsWith(`..${sep8}`) || portable.startsWith("../") || portable === "") {
|
|
23078
|
-
throw new TypeError(`${
|
|
23075
|
+
throw new TypeError(`${field} must remain inside the project root.`);
|
|
23079
23076
|
}
|
|
23080
23077
|
if (/\r|\n/u.test(portable) || portable.startsWith("-"))
|
|
23081
|
-
throw new TypeError(`${
|
|
23078
|
+
throw new TypeError(`${field} contains an unsafe path.`);
|
|
23082
23079
|
if (!options.allowMissing && !existsSync(path))
|
|
23083
|
-
throw new TypeError(`${
|
|
23080
|
+
throw new TypeError(`${field} does not exist inside the project.`);
|
|
23084
23081
|
return portable;
|
|
23085
23082
|
};
|
|
23086
23083
|
var workflowOutputPath = (projectRoot, value) => {
|
|
@@ -24665,12 +24662,12 @@ import { dirname as dirname15, extname as extname3, join as join18 } from "path"
|
|
|
24665
24662
|
var ABSOLUTE_EXPO_UPDATE_DESCRIPTOR = "_absolute/expo-update.json";
|
|
24666
24663
|
var ABSOLUTE_EXPO_UPDATE_FORMAT = 1;
|
|
24667
24664
|
var object2 = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
24668
|
-
var safePath = (value,
|
|
24665
|
+
var safePath = (value, field) => {
|
|
24669
24666
|
if (typeof value !== "string" || value.length === 0)
|
|
24670
|
-
throw new TypeError(`Expo update ${
|
|
24667
|
+
throw new TypeError(`Expo update ${field} is invalid.`);
|
|
24671
24668
|
const path = value.replaceAll("\\", "/");
|
|
24672
24669
|
if (path.startsWith("/") || path.split("/").some((segment) => !segment || segment === "." || segment === ".."))
|
|
24673
|
-
throw new TypeError(`Expo update ${
|
|
24670
|
+
throw new TypeError(`Expo update ${field} must be a relative path.`);
|
|
24674
24671
|
return path;
|
|
24675
24672
|
};
|
|
24676
24673
|
var extension = (value, path) => {
|
|
@@ -24749,7 +24746,7 @@ var finalizeAbsoluteExpoUpdateExport = async (options) => {
|
|
|
24749
24746
|
};
|
|
24750
24747
|
|
|
24751
24748
|
// src/mobile/expoCodeSigning.ts
|
|
24752
|
-
var import_code_signing_certificates = __toESM(require_main()
|
|
24749
|
+
var import_code_signing_certificates = __toESM(require_main());
|
|
24753
24750
|
import { access as access16, mkdir as mkdir18, writeFile as writeFile18 } from "fs/promises";
|
|
24754
24751
|
import { dirname as dirname16, isAbsolute as isAbsolute10, relative as relative15, resolve as resolve16, sep as sep11 } from "path";
|
|
24755
24752
|
var exists6 = async (path) => access16(path).then(() => true).catch(() => false);
|
|
@@ -25010,8 +25007,8 @@ var directProjectPackages = async (projectRoot) => {
|
|
|
25010
25007
|
if (!isRecord11(manifest))
|
|
25011
25008
|
throw new TypeError("Application package.json must contain an object.");
|
|
25012
25009
|
const names = new Set;
|
|
25013
|
-
for (const
|
|
25014
|
-
const dependencies = Reflect.get(manifest,
|
|
25010
|
+
for (const field of ["dependencies", "devDependencies"]) {
|
|
25011
|
+
const dependencies = Reflect.get(manifest, field);
|
|
25015
25012
|
if (isRecord11(dependencies))
|
|
25016
25013
|
for (const name of Object.keys(dependencies))
|
|
25017
25014
|
names.add(name);
|
|
@@ -25031,7 +25028,7 @@ var ensureCapacitorPackages = async (projectRoot, args, mobile) => {
|
|
|
25031
25028
|
const specs = [
|
|
25032
25029
|
...CAPACITOR_PACKAGE_SPECS,
|
|
25033
25030
|
...mobile?.updates ? ["@capacitor/filesystem@8.1.3"] : [],
|
|
25034
|
-
...
|
|
25031
|
+
...projectUsesAbsoluteSync2(projectRoot) ? CAPACITOR_SYNC_PACKAGE_SPECS : []
|
|
25035
25032
|
];
|
|
25036
25033
|
const installed = await directProjectPackages(projectRoot);
|
|
25037
25034
|
const missing = await packagesNeedingExactInstall(projectRoot, specs, installed, ABSOLUTE_NATIVE_EXACT_PACKAGES);
|
|
@@ -25075,7 +25072,7 @@ var runCapacitor = async (projectRoot, args) => {
|
|
|
25075
25072
|
throw new TypeError(`Capacitor exited with status ${exitCode}. Ensure this app directly depends on: ${CAPACITOR_PACKAGES.join(" ")}`);
|
|
25076
25073
|
}
|
|
25077
25074
|
};
|
|
25078
|
-
var runCapacitorForPlatforms = (projectRoot, command, platforms) => platforms.reduce((pending,
|
|
25075
|
+
var runCapacitorForPlatforms = (projectRoot, command, platforms) => platforms.reduce((pending, platform) => pending.then(() => runCapacitor(projectRoot, [command, platform])), Promise.resolve());
|
|
25079
25076
|
var expoExecutable = async (project) => {
|
|
25080
25077
|
const executable = join19(project, "node_modules", ".bin", "expo");
|
|
25081
25078
|
try {
|
|
@@ -25149,7 +25146,7 @@ var ensureExpoPackages = async (project, args) => {
|
|
|
25149
25146
|
var loadMobile = async (configPath) => {
|
|
25150
25147
|
const projectRoot = process.cwd();
|
|
25151
25148
|
const config = await loadConfig(configPath);
|
|
25152
|
-
const mobile =
|
|
25149
|
+
const mobile = normalizeAbsoluteMobileConfig2(requireMobileConfig(config.mobile), projectRoot);
|
|
25153
25150
|
return { mobile, projectRoot };
|
|
25154
25151
|
};
|
|
25155
25152
|
var requireCapacitorEngine = (mobile, command) => {
|
|
@@ -25183,7 +25180,7 @@ var pairRemoteMac = async (args) => {
|
|
|
25183
25180
|
throw new TypeError("Usage: absolute mobile pair mac <name> <user@host> [--port n] [--workspace path]");
|
|
25184
25181
|
const portValue = valueAfter(args, "--port");
|
|
25185
25182
|
const port = portValue === undefined ? undefined : Number(portValue);
|
|
25186
|
-
const profile = await
|
|
25183
|
+
const profile = await pairAbsoluteRemoteMac2({
|
|
25187
25184
|
destination: args[2],
|
|
25188
25185
|
name: args[1],
|
|
25189
25186
|
...port === undefined ? {} : { port },
|
|
@@ -25199,10 +25196,10 @@ var pairRemoteMac = async (args) => {
|
|
|
25199
25196
|
var listRemoteMacs = async (args) => {
|
|
25200
25197
|
if (args[0] === "inspect") {
|
|
25201
25198
|
const requested = args[1]?.startsWith("-") ? undefined : args[1];
|
|
25202
|
-
const profile = await
|
|
25199
|
+
const profile = await getAbsoluteRemoteMacProfile2(requested, remoteProfilePath());
|
|
25203
25200
|
if (!profile)
|
|
25204
25201
|
throw new TypeError("No Remote Mac is selected. Pair one before inspecting its workspace.");
|
|
25205
|
-
const inspection = await
|
|
25202
|
+
const inspection = await inspectAbsoluteRemoteMacWorkspace2(profile);
|
|
25206
25203
|
console.log(args.includes("--json") ? JSON.stringify(inspection, null, 2) : [
|
|
25207
25204
|
`Remote Mac: ${inspection.profile}`,
|
|
25208
25205
|
`Workspace: ${inspection.workspaceRoot}`,
|
|
@@ -25216,14 +25213,14 @@ var listRemoteMacs = async (args) => {
|
|
|
25216
25213
|
if (!args.includes("--yes"))
|
|
25217
25214
|
throw new TypeError("Remote Mac cleanup requires --yes. It removes only abandoned staging directories older than one day.");
|
|
25218
25215
|
const requested = args[1]?.startsWith("-") ? undefined : args[1];
|
|
25219
|
-
const profile = await
|
|
25216
|
+
const profile = await getAbsoluteRemoteMacProfile2(requested, remoteProfilePath());
|
|
25220
25217
|
if (!profile)
|
|
25221
25218
|
throw new TypeError("No Remote Mac is selected. Pair one before cleaning its workspace.");
|
|
25222
|
-
const
|
|
25223
|
-
console.log(`Removed ${
|
|
25219
|
+
const result = await cleanAbsoluteRemoteMacWorkspace2(profile);
|
|
25220
|
+
console.log(`Removed ${result.removed} abandoned Remote Mac staging director${result.removed === 1 ? "y" : "ies"}; project caches, releases, and active leases were retained.`);
|
|
25224
25221
|
return;
|
|
25225
25222
|
}
|
|
25226
|
-
const result = await
|
|
25223
|
+
const result = await listAbsoluteRemoteMacProfiles2(remoteProfilePath());
|
|
25227
25224
|
if (args.includes("--json")) {
|
|
25228
25225
|
console.log(JSON.stringify(result, null, 2));
|
|
25229
25226
|
return;
|
|
@@ -25239,22 +25236,22 @@ var listRemoteMacs = async (args) => {
|
|
|
25239
25236
|
var unpairRemoteMac = async (args) => {
|
|
25240
25237
|
if (args[0] !== "mac" || !args[1])
|
|
25241
25238
|
throw new TypeError("Usage: absolute mobile unpair mac <name>");
|
|
25242
|
-
const removed = await
|
|
25239
|
+
const removed = await removeAbsoluteRemoteMacProfile2(args[1], remoteProfilePath());
|
|
25243
25240
|
console.log(removed ? `Removed remote Mac profile ${args[1]}.` : `Remote Mac profile ${args[1]} was not found.`);
|
|
25244
25241
|
};
|
|
25245
25242
|
var initialize = async (args) => {
|
|
25246
25243
|
const { mobile, projectRoot } = await loadMobile(valueAfter(args, "--config"));
|
|
25247
25244
|
if (mobile.engine === "expo") {
|
|
25248
25245
|
console.warn("Experimental: Expo Android and iOS release automation is available; real macOS and physical-device acceptance remains pending.");
|
|
25249
|
-
const
|
|
25246
|
+
const generated = await writeAbsoluteExpoProject2(mobile, {
|
|
25250
25247
|
force: args.includes("--force"),
|
|
25251
25248
|
projectRoot
|
|
25252
25249
|
});
|
|
25253
|
-
console.log(`${
|
|
25254
|
-
await ensureExpoPackages(
|
|
25250
|
+
console.log(`${generated.changed > 0 ? "Generated" : "Verified"} Expo shell ${generated.path}`);
|
|
25251
|
+
await ensureExpoPackages(generated.path, args);
|
|
25255
25252
|
if (args.includes("--no-native"))
|
|
25256
25253
|
return;
|
|
25257
|
-
await runExpo(
|
|
25254
|
+
await runExpo(generated.path, [
|
|
25258
25255
|
"prebuild",
|
|
25259
25256
|
"--no-install",
|
|
25260
25257
|
"--platform",
|
|
@@ -25271,7 +25268,7 @@ var initialize = async (args) => {
|
|
|
25271
25268
|
if (args.includes("--no-native"))
|
|
25272
25269
|
return;
|
|
25273
25270
|
const platforms = await prepareAbsoluteCapacitorInitialization(mobile);
|
|
25274
|
-
await platforms.reduce((pending,
|
|
25271
|
+
await platforms.reduce((pending, platform) => pending.then(() => runCapacitor(projectRoot, [platform.command, platform.platform])), Promise.resolve());
|
|
25275
25272
|
if (mobile.branding)
|
|
25276
25273
|
await generateAbsoluteCapacitorBranding(mobile, projectRoot);
|
|
25277
25274
|
await applyAbsoluteNativeDeepLinks(mobile);
|
|
@@ -25285,30 +25282,30 @@ var sync = async (args) => {
|
|
|
25285
25282
|
const { mobile, projectRoot } = await loadMobile(valueAfter(args, "--config"));
|
|
25286
25283
|
if (mobile.engine === "expo") {
|
|
25287
25284
|
console.warn("Experimental: syncing the Expo CNG shell and embedded AbsoluteJS bundle.");
|
|
25288
|
-
await
|
|
25285
|
+
await writeAbsoluteExpoProject2(mobile, {
|
|
25289
25286
|
force: args.includes("--force"),
|
|
25290
25287
|
projectRoot
|
|
25291
25288
|
});
|
|
25292
25289
|
await ensureExpoPackages(mobile.nativeProjectDirectory, args);
|
|
25293
|
-
const assets = await
|
|
25290
|
+
const assets = await syncAbsoluteExpoWebAssets2(mobile);
|
|
25294
25291
|
console.log(`Synced ${assets.assets} embedded AbsoluteJS assets for ${assets.appBuild}.`);
|
|
25295
|
-
const
|
|
25296
|
-
const
|
|
25292
|
+
const platform = args.find((value) => value === "android" || value === "ios");
|
|
25293
|
+
const platforms = platform ? [platform] : mobile.platforms;
|
|
25297
25294
|
await runExpo(mobile.nativeProjectDirectory, [
|
|
25298
25295
|
"prebuild",
|
|
25299
25296
|
"--no-install",
|
|
25300
25297
|
"--platform",
|
|
25301
|
-
|
|
25298
|
+
platforms.length === 2 ? "all" : platforms[0] ?? "all"
|
|
25302
25299
|
]);
|
|
25303
25300
|
return;
|
|
25304
25301
|
}
|
|
25305
25302
|
await ensureCapacitorPackages(projectRoot, args, mobile);
|
|
25306
|
-
const
|
|
25307
|
-
const platforms =
|
|
25303
|
+
const platform = args.find((value) => value === "android" || value === "ios");
|
|
25304
|
+
const platforms = platform ? [platform] : mobile.platforms;
|
|
25308
25305
|
if (platforms.includes("android"))
|
|
25309
|
-
await
|
|
25306
|
+
await repairAbsoluteAndroidDevSession2(projectRoot);
|
|
25310
25307
|
if (platforms.includes("ios"))
|
|
25311
|
-
await
|
|
25308
|
+
await repairAbsoluteIosDevSession2(projectRoot);
|
|
25312
25309
|
await runCapacitorForPlatforms(projectRoot, "sync", platforms);
|
|
25313
25310
|
if (mobile.branding)
|
|
25314
25311
|
await generateAbsoluteCapacitorBranding(mobile, projectRoot, {
|
|
@@ -25344,7 +25341,7 @@ var generateMobileBranding = async (args, mobile, platforms, projectRoot) => {
|
|
|
25344
25341
|
});
|
|
25345
25342
|
return;
|
|
25346
25343
|
}
|
|
25347
|
-
await
|
|
25344
|
+
await writeAbsoluteExpoProject2(mobile, {
|
|
25348
25345
|
force: args.includes("--force"),
|
|
25349
25346
|
projectRoot
|
|
25350
25347
|
});
|
|
@@ -25403,8 +25400,8 @@ var associations = async (args) => {
|
|
|
25403
25400
|
const { mobile, projectRoot } = await loadMobile(valueAfter(args, "--config"));
|
|
25404
25401
|
const outputDirectory = resolve18(projectRoot, valueAfter(args, "--outdir") ?? ".absolutejs/mobile/associations");
|
|
25405
25402
|
if (args.includes("--verify")) {
|
|
25406
|
-
const
|
|
25407
|
-
console.log(`Verified ${
|
|
25403
|
+
const result = await verifyAbsoluteMobileAssociationFiles(mobile);
|
|
25404
|
+
console.log(`Verified ${result.results.length} hosted association files`);
|
|
25408
25405
|
return;
|
|
25409
25406
|
}
|
|
25410
25407
|
if (outputDirectory !== projectRoot && !outputDirectory.startsWith(`${projectRoot}/`)) {
|
|
@@ -25514,11 +25511,11 @@ var auditDispatchedGithubMobilePromotion = async (options) => {
|
|
|
25514
25511
|
}
|
|
25515
25512
|
};
|
|
25516
25513
|
var promotionPhaseRank = (phase) => ["dispatching", "dispatched", "discovered", "completed", "audited"].indexOf(phase);
|
|
25517
|
-
var promotionRecoveryCommand = (
|
|
25518
|
-
var promotionRecoveryError = (error,
|
|
25514
|
+
var promotionRecoveryCommand = (dispatchId) => `absolute mobile ci promote --resume ${dispatchId}`;
|
|
25515
|
+
var promotionRecoveryError = (error, dispatchId) => {
|
|
25519
25516
|
const message = error instanceof Error ? error.message : String(error);
|
|
25520
25517
|
return new TypeError(`${message}
|
|
25521
|
-
Promotion ${
|
|
25518
|
+
Promotion ${dispatchId} is recorded. Resume without redispatching: ${promotionRecoveryCommand(dispatchId)}
|
|
25522
25519
|
If immutable audit output already exists, add --outdir with a new project-local directory.`, { cause: error });
|
|
25523
25520
|
};
|
|
25524
25521
|
var watchAndPersistGithubMobilePromotion = async (options) => {
|
|
@@ -25632,8 +25629,8 @@ var dispatchGithubMobilePromotion = async (args) => {
|
|
|
25632
25629
|
const resumeDispatchId = valueAfter(args, "--resume");
|
|
25633
25630
|
if (resumeDispatchId)
|
|
25634
25631
|
return resumeGithubMobilePromotion(args, resumeDispatchId);
|
|
25635
|
-
const [
|
|
25636
|
-
if (
|
|
25632
|
+
const [platform] = args;
|
|
25633
|
+
if (platform !== "android" && platform !== "ios")
|
|
25637
25634
|
throw new TypeError("Usage: absolute mobile ci promote <android|ios> --run-id id --certification directory-or-json [--channel name] [store options] [--watch] [--audit]");
|
|
25638
25635
|
const sourceRunId = valueAfter(args, "--run-id");
|
|
25639
25636
|
if (!sourceRunId || !/^[1-9][0-9]*$/u.test(sourceRunId))
|
|
@@ -25644,18 +25641,18 @@ var dispatchGithubMobilePromotion = async (args) => {
|
|
|
25644
25641
|
const configPath = valueAfter(args, "--config");
|
|
25645
25642
|
const { mobile, projectRoot } = await loadMobile(configPath);
|
|
25646
25643
|
const { certification } = await readAbsoluteMobileReleaseCertification(projectRoot, requestedCertification);
|
|
25647
|
-
if (certification.release.platform !==
|
|
25644
|
+
if (certification.release.platform !== platform || certification.release.appId !== mobile.appId || certification.release.engine !== mobile.engine)
|
|
25648
25645
|
throw new TypeError("The certification does not match this application platform, app ID, or engine.");
|
|
25649
25646
|
const channel = valueAfter(args, "--channel") ?? "";
|
|
25650
25647
|
const playTrack = valueAfter(args, "--play-track") ?? "registry-only";
|
|
25651
25648
|
const testflightGroup = valueAfter(args, "--testflight-group") ?? "";
|
|
25652
|
-
if (channel === "" && (
|
|
25649
|
+
if (channel === "" && (platform === "android" ? playTrack === "registry-only" : testflightGroup === ""))
|
|
25653
25650
|
throw new TypeError("mobile ci promote requires --channel or a platform store target.");
|
|
25654
25651
|
const certificationBase64 = Buffer.from(serializeAbsoluteMobileReleaseCertification(certification)).toString("base64");
|
|
25655
25652
|
if (certificationBase64.length > 48000)
|
|
25656
25653
|
throw new TypeError("Mobile certification is too large for protected GitHub dispatch.");
|
|
25657
25654
|
const workflow = valueAfter(args, "--workflow") ?? ".github/workflows/absolute-mobile.yml";
|
|
25658
|
-
const
|
|
25655
|
+
const dispatchId = `amp_${randomUUID2().replaceAll("-", "")}`;
|
|
25659
25656
|
const repository = valueAfter(args, "--repo");
|
|
25660
25657
|
const ref = valueAfter(args, "--ref");
|
|
25661
25658
|
const auditRequested = args.includes("--audit");
|
|
@@ -25668,15 +25665,15 @@ var dispatchGithubMobilePromotion = async (args) => {
|
|
|
25668
25665
|
certificationId: certification.certificationId,
|
|
25669
25666
|
certificationSha256: createHash8("sha256").update(serializeAbsoluteMobileReleaseCertification(certification)).digest("hex"),
|
|
25670
25667
|
channel: channel || null,
|
|
25671
|
-
dispatchId
|
|
25672
|
-
platform
|
|
25673
|
-
playTrack:
|
|
25668
|
+
dispatchId,
|
|
25669
|
+
platform,
|
|
25670
|
+
playTrack: platform === "android" ? playTrack : null,
|
|
25674
25671
|
ref: ref ?? null,
|
|
25675
25672
|
releaseId: certification.release.releaseId,
|
|
25676
25673
|
repository: repository ?? null,
|
|
25677
25674
|
sourceRunId,
|
|
25678
|
-
testflightGroup:
|
|
25679
|
-
testflightSubmitReview:
|
|
25675
|
+
testflightGroup: platform === "ios" ? testflightGroup || null : null,
|
|
25676
|
+
testflightSubmitReview: platform === "ios" && args.includes("--testflight-submit-review"),
|
|
25680
25677
|
watchRequested,
|
|
25681
25678
|
workflow
|
|
25682
25679
|
});
|
|
@@ -25687,17 +25684,17 @@ var dispatchGithubMobilePromotion = async (args) => {
|
|
|
25687
25684
|
"-f",
|
|
25688
25685
|
"operation=promote",
|
|
25689
25686
|
"-f",
|
|
25690
|
-
`platform=${
|
|
25687
|
+
`platform=${platform}`,
|
|
25691
25688
|
"-f",
|
|
25692
25689
|
`source_run_id=${sourceRunId}`,
|
|
25693
25690
|
"-f",
|
|
25694
|
-
`dispatch_id=${
|
|
25691
|
+
`dispatch_id=${dispatchId}`,
|
|
25695
25692
|
"-f",
|
|
25696
25693
|
`certification_base64=${certificationBase64}`,
|
|
25697
25694
|
"-f",
|
|
25698
25695
|
`channel=${channel}`
|
|
25699
25696
|
];
|
|
25700
|
-
if (
|
|
25697
|
+
if (platform === "android")
|
|
25701
25698
|
command.push("-f", `play_track=${playTrack}`);
|
|
25702
25699
|
else {
|
|
25703
25700
|
command.push("-f", `testflight_group=${testflightGroup}`);
|
|
@@ -25721,12 +25718,12 @@ var dispatchGithubMobilePromotion = async (args) => {
|
|
|
25721
25718
|
]);
|
|
25722
25719
|
if (exitCode !== 0)
|
|
25723
25720
|
throw new TypeError(`GitHub promotion dispatch exited with status ${exitCode}: ${stderr.trim() || "unknown GitHub CLI error"}`);
|
|
25724
|
-
const operation = await advanceAbsoluteMobilePromotionOperation(projectRoot,
|
|
25721
|
+
const operation = await advanceAbsoluteMobilePromotionOperation(projectRoot, dispatchId, { phase: "dispatched" });
|
|
25725
25722
|
sendTelemetryEvent("mobile:ci-promotion-dispatched", {
|
|
25726
25723
|
discovery: "correlated",
|
|
25727
|
-
platform
|
|
25724
|
+
platform,
|
|
25728
25725
|
provider: "github-actions",
|
|
25729
|
-
storeTarget:
|
|
25726
|
+
storeTarget: platform === "android" ? playTrack !== "registry-only" : testflightGroup !== ""
|
|
25730
25727
|
});
|
|
25731
25728
|
return await completeGithubMobilePromotion({
|
|
25732
25729
|
audit: operation.auditRequested,
|
|
@@ -25736,15 +25733,15 @@ var dispatchGithubMobilePromotion = async (args) => {
|
|
|
25736
25733
|
watch: operation.watchRequested
|
|
25737
25734
|
});
|
|
25738
25735
|
} catch (error) {
|
|
25739
|
-
throw promotionRecoveryError(error,
|
|
25736
|
+
throw promotionRecoveryError(error, dispatchId);
|
|
25740
25737
|
}
|
|
25741
25738
|
};
|
|
25742
|
-
var resumeGithubMobilePromotion = async (args,
|
|
25739
|
+
var resumeGithubMobilePromotion = async (args, dispatchId) => {
|
|
25743
25740
|
const projectRoot = process.cwd();
|
|
25744
25741
|
const startedAt = performance.now();
|
|
25745
25742
|
let resumedPhase = "unread";
|
|
25746
25743
|
try {
|
|
25747
|
-
const operation = await readAbsoluteMobilePromotionOperation(projectRoot,
|
|
25744
|
+
const operation = await readAbsoluteMobilePromotionOperation(projectRoot, dispatchId);
|
|
25748
25745
|
resumedPhase = operation.phase;
|
|
25749
25746
|
const audit = args.includes("--audit") || operation.auditRequested;
|
|
25750
25747
|
const watch = args.includes("--watch") || audit || operation.watchRequested;
|
|
@@ -25772,7 +25769,7 @@ var resumeGithubMobilePromotion = async (args, dispatchId3) => {
|
|
|
25772
25769
|
provider: "github-actions",
|
|
25773
25770
|
success: false
|
|
25774
25771
|
});
|
|
25775
|
-
throw promotionRecoveryError(error,
|
|
25772
|
+
throw promotionRecoveryError(error, dispatchId);
|
|
25776
25773
|
}
|
|
25777
25774
|
};
|
|
25778
25775
|
var listGithubMobilePromotions = async (args) => {
|
|
@@ -25909,8 +25906,8 @@ var printDoctorChecks = (checks) => {
|
|
|
25909
25906
|
};
|
|
25910
25907
|
var runReleaseDoctor = async (args) => {
|
|
25911
25908
|
const { mobile, projectRoot } = await loadMobile(valueAfter(args, "--config"));
|
|
25912
|
-
const
|
|
25913
|
-
const effectiveMobile =
|
|
25909
|
+
const platform = args.find((value) => value === "android" || value === "ios");
|
|
25910
|
+
const effectiveMobile = platform ? { ...mobile, platforms: [platform] } : mobile;
|
|
25914
25911
|
const result = await inspectAbsoluteMobileRelease(effectiveMobile, projectRoot);
|
|
25915
25912
|
if (args.includes("--json")) {
|
|
25916
25913
|
console.log(JSON.stringify(createAbsoluteMobileComplianceReport(effectiveMobile, result), null, 2));
|
|
@@ -26026,7 +26023,7 @@ var buildMobileUpdate = async (args) => {
|
|
|
26026
26023
|
let success = false;
|
|
26027
26024
|
let expoExportDirectory;
|
|
26028
26025
|
try {
|
|
26029
|
-
await
|
|
26026
|
+
await start2(mobileBuildServerEntry(args), valueAfter(args, "--web-outdir"), configPath, { prepareOnly: true });
|
|
26030
26027
|
const embedded = JSON.parse(await readFile23(join19(mobile.bundleDirectory, "absolute-mobile-manifest.json"), "utf8"));
|
|
26031
26028
|
const runtimeFingerprint = isRecord11(embedded) ? embedded.nativeRuntime : undefined;
|
|
26032
26029
|
if (typeof runtimeFingerprint !== "string" || !/^[a-f0-9]{64}$/u.test(runtimeFingerprint))
|
|
@@ -26549,15 +26546,15 @@ var androidCiSigning = () => {
|
|
|
26549
26546
|
};
|
|
26550
26547
|
};
|
|
26551
26548
|
var prepareExpoAndroidReleaseProject = async (mobile, projectRoot, args) => {
|
|
26552
|
-
await
|
|
26549
|
+
await writeAbsoluteExpoProject2(mobile, { projectRoot });
|
|
26553
26550
|
await ensureExpoPackages(mobile.nativeProjectDirectory, [...args, "--yes"]);
|
|
26554
|
-
await
|
|
26551
|
+
await syncAbsoluteExpoWebAssets2(mobile);
|
|
26555
26552
|
await runExpo(mobile.nativeProjectDirectory, ["prebuild", "--clean", "--no-install", "--platform", "android"], { production: true });
|
|
26556
26553
|
};
|
|
26557
26554
|
var prepareExpoIosReleaseProject = async (mobile, projectRoot, args) => {
|
|
26558
|
-
await
|
|
26555
|
+
await writeAbsoluteExpoProject2(mobile, { projectRoot });
|
|
26559
26556
|
await ensureExpoPackages(mobile.nativeProjectDirectory, [...args, "--yes"]);
|
|
26560
|
-
await
|
|
26557
|
+
await syncAbsoluteExpoWebAssets2(mobile);
|
|
26561
26558
|
await runExpo(mobile.nativeProjectDirectory, ["prebuild", "--clean", "--platform", "ios"], { production: true });
|
|
26562
26559
|
};
|
|
26563
26560
|
var prepareCapacitorIosReleaseProject = async (mobile, projectRoot) => {
|
|
@@ -26591,7 +26588,7 @@ var buildAndroid = async (args, prepareVersionCode) => {
|
|
|
26591
26588
|
throw new TypeError("mobile build android requires android in mobile.platforms.");
|
|
26592
26589
|
}
|
|
26593
26590
|
const startedAt = performance.now();
|
|
26594
|
-
const host =
|
|
26591
|
+
const host = detectAbsoluteMobileHost2();
|
|
26595
26592
|
const runPhase = async (phase, action) => {
|
|
26596
26593
|
const phaseStartedAt = performance.now();
|
|
26597
26594
|
let phaseSuccess = false;
|
|
@@ -26615,8 +26612,8 @@ var buildAndroid = async (args, prepareVersionCode) => {
|
|
|
26615
26612
|
let success = false;
|
|
26616
26613
|
try {
|
|
26617
26614
|
if (mobile.engine === "capacitor")
|
|
26618
|
-
await
|
|
26619
|
-
await runPhase("bundle", () =>
|
|
26615
|
+
await repairAbsoluteAndroidDevSession2(projectRoot);
|
|
26616
|
+
await runPhase("bundle", () => start2(mobileBuildServerEntry(args), valueAfter(args, "--web-outdir"), configPath, { prepareOnly: true }));
|
|
26620
26617
|
await runPhase("native-project", () => prepareAndroidReleaseProject(mobile, projectRoot, args));
|
|
26621
26618
|
await runPhase("release-doctor", () => requireAndroidReleaseReady(mobile, projectRoot));
|
|
26622
26619
|
const release = await runPhase("native-build", () => buildAbsoluteAndroidRelease({
|
|
@@ -26667,9 +26664,9 @@ var buildAndroidCommand = async (args) => {
|
|
|
26667
26664
|
packageName: mobile.appId
|
|
26668
26665
|
}));
|
|
26669
26666
|
};
|
|
26670
|
-
var requirePublicationReleaseIdentity = (mobile, release,
|
|
26671
|
-
if (release.metadata.platform !==
|
|
26672
|
-
throw new TypeError(`The existing ${
|
|
26667
|
+
var requirePublicationReleaseIdentity = (mobile, release, platform) => {
|
|
26668
|
+
if (release.metadata.platform !== platform || release.metadata.appId !== mobile.appId || release.metadata.engine !== mobile.engine)
|
|
26669
|
+
throw new TypeError(`The existing ${platform} release does not match this application's platform, app ID, or engine.`);
|
|
26673
26670
|
};
|
|
26674
26671
|
var loadPublicationCertification = async (options) => {
|
|
26675
26672
|
const requested = valueAfter(options.args, "--certification");
|
|
@@ -26812,7 +26809,7 @@ var buildIos = async (args, prepareBuildNumber) => {
|
|
|
26812
26809
|
const requestedRemote = valueAfter(args, "--remote");
|
|
26813
26810
|
if (args.includes("--remote") && (!requestedRemote || requestedRemote.startsWith("-")))
|
|
26814
26811
|
throw new TypeError("mobile build ios requires --remote <name>.");
|
|
26815
|
-
const remoteProfile = requestedRemote !== undefined || process.platform !== "darwin" ? await
|
|
26812
|
+
const remoteProfile = requestedRemote !== undefined || process.platform !== "darwin" ? await getAbsoluteRemoteMacProfile2(requestedRemote, remoteProfilePath()) : undefined;
|
|
26816
26813
|
if (process.platform !== "darwin" && !remoteProfile)
|
|
26817
26814
|
throw new TypeError("iOS release builds require macOS or a paired Remote Mac. Run `absolute mobile pair mac <name> <user@host>`.");
|
|
26818
26815
|
let success = false;
|
|
@@ -26822,18 +26819,18 @@ var buildIos = async (args, prepareBuildNumber) => {
|
|
|
26822
26819
|
};
|
|
26823
26820
|
try {
|
|
26824
26821
|
if (!remoteProfile && mobile.engine === "capacitor")
|
|
26825
|
-
await
|
|
26826
|
-
await
|
|
26822
|
+
await repairAbsoluteIosDevSession2(projectRoot);
|
|
26823
|
+
await start2(mobileBuildServerEntry(args), valueAfter(args, "--web-outdir"), configPath, { prepareOnly: true });
|
|
26827
26824
|
stopListeningForCancellation = listenForRemoteReleaseCancellation(cancellation);
|
|
26828
|
-
const release = remoteProfile ? await
|
|
26825
|
+
const release = remoteProfile ? await buildAbsoluteRemoteIosRelease2({
|
|
26829
26826
|
allowUnsigned: args.includes("--unsigned"),
|
|
26830
26827
|
developmentTeam: process.env.ABSOLUTE_IOS_DEVELOPMENT_TEAM,
|
|
26831
26828
|
outputDirectory: valueAfter(args, "--outdir"),
|
|
26832
26829
|
log: (message) => console.log(`[remote] ${message}`),
|
|
26833
|
-
onPhaseTiming: ({ durationMs
|
|
26834
|
-
console.log(`[mobile:ios-release] ${phase} ${getDurationString(
|
|
26830
|
+
onPhaseTiming: ({ durationMs, phase }) => {
|
|
26831
|
+
console.log(`[mobile:ios-release] ${phase} ${getDurationString(durationMs)}`);
|
|
26835
26832
|
sendTelemetryEvent("mobile:ios-release-phase", {
|
|
26836
|
-
durationMs: Math.round(
|
|
26833
|
+
durationMs: Math.round(durationMs),
|
|
26837
26834
|
engine: mobile.engine,
|
|
26838
26835
|
phase,
|
|
26839
26836
|
platform: "ios",
|
|
@@ -26841,7 +26838,7 @@ var buildIos = async (args, prepareBuildNumber) => {
|
|
|
26841
26838
|
});
|
|
26842
26839
|
},
|
|
26843
26840
|
...prepareBuildNumber === undefined ? {} : { prepareBuildNumber },
|
|
26844
|
-
project:
|
|
26841
|
+
project: createAbsoluteRemoteIosDevProject2(mobile, projectRoot, remoteProfile),
|
|
26845
26842
|
registeredDeviceArtifact: args.includes("--registered-device-artifact"),
|
|
26846
26843
|
signal: cancellation?.signal
|
|
26847
26844
|
}) : await buildLocalIosRelease({
|
|
@@ -26963,7 +26960,7 @@ var publishIos = async (args) => {
|
|
|
26963
26960
|
};
|
|
26964
26961
|
var inspectRemoteMacForDoctor = async (profile) => {
|
|
26965
26962
|
try {
|
|
26966
|
-
const inspection = await
|
|
26963
|
+
const inspection = await inspectAbsoluteRemoteMac2(profile.destination, {
|
|
26967
26964
|
port: profile.port
|
|
26968
26965
|
});
|
|
26969
26966
|
return [
|
|
@@ -27000,7 +26997,7 @@ var inspectRemoteMacForDoctor = async (profile) => {
|
|
|
27000
26997
|
}
|
|
27001
26998
|
};
|
|
27002
26999
|
var appendSyncSchemaDoctorCheck = (checks, projectRoot) => {
|
|
27003
|
-
if (!
|
|
27000
|
+
if (!projectUsesAbsoluteSync2(projectRoot))
|
|
27004
27001
|
return;
|
|
27005
27002
|
try {
|
|
27006
27003
|
const schema = discoverAbsoluteSyncSchema(projectRoot);
|
|
@@ -27027,22 +27024,22 @@ var doctor = async (args) => {
|
|
|
27027
27024
|
await runReleaseDoctor(args);
|
|
27028
27025
|
return;
|
|
27029
27026
|
}
|
|
27030
|
-
const
|
|
27027
|
+
const platform = args.find((value) => value === "android" || value === "ios");
|
|
27031
27028
|
const requestedRemote = valueAfter(args, "--remote");
|
|
27032
|
-
const remoteProfile =
|
|
27029
|
+
const remoteProfile = platform === "ios" && (requestedRemote !== undefined || process.platform !== "darwin") ? await getAbsoluteRemoteMacProfile2(requestedRemote, remoteProfilePath()) : undefined;
|
|
27033
27030
|
if (remoteProfile) {
|
|
27034
27031
|
if (args.includes("--fix"))
|
|
27035
27032
|
throw new TypeError("Remote Mac doctor is read-only. Configure Xcode or Bun on the Mac, then rerun doctor.");
|
|
27036
|
-
const
|
|
27033
|
+
const selected = await inspectRemoteMacForDoctor(remoteProfile);
|
|
27037
27034
|
if (args.includes("--json"))
|
|
27038
|
-
console.log(JSON.stringify({ checks:
|
|
27035
|
+
console.log(JSON.stringify({ checks: selected }, null, 2));
|
|
27039
27036
|
else
|
|
27040
|
-
printDoctorChecks(
|
|
27037
|
+
printDoctorChecks(selected);
|
|
27041
27038
|
return;
|
|
27042
27039
|
}
|
|
27043
|
-
const checks = await
|
|
27040
|
+
const checks = await inspectAbsoluteMobileToolchain2();
|
|
27044
27041
|
appendSyncSchemaDoctorCheck(checks, process.cwd());
|
|
27045
|
-
const selected =
|
|
27042
|
+
const selected = platform ? checks.filter((check) => check.platform === "host" || check.platform === platform) : checks;
|
|
27046
27043
|
if (args.includes("--json")) {
|
|
27047
27044
|
if (args.includes("--fix")) {
|
|
27048
27045
|
throw new TypeError("mobile doctor --json cannot be combined with --fix.");
|
|
@@ -27053,14 +27050,14 @@ var doctor = async (args) => {
|
|
|
27053
27050
|
printDoctorChecks(selected);
|
|
27054
27051
|
if (!args.includes("--fix"))
|
|
27055
27052
|
return;
|
|
27056
|
-
const installPlatform =
|
|
27053
|
+
const installPlatform = platform ?? "android";
|
|
27057
27054
|
const relevantFailures = selected.filter((check) => check.platform === installPlatform && (check.status === "fail" || check.status === "warn"));
|
|
27058
27055
|
if (relevantFailures.length === 0) {
|
|
27059
27056
|
console.log(`
|
|
27060
27057
|
${installPlatform} emulator prerequisites are ready.`);
|
|
27061
27058
|
return;
|
|
27062
27059
|
}
|
|
27063
|
-
const plan =
|
|
27060
|
+
const plan = planAbsoluteMobileEmulatorInstall2(installPlatform);
|
|
27064
27061
|
console.log(`
|
|
27065
27062
|
AbsoluteJS can configure ${installPlatform} emulation:`);
|
|
27066
27063
|
for (const [index, step] of plan.steps.entries()) {
|
|
@@ -27075,7 +27072,7 @@ AbsoluteJS can configure ${installPlatform} emulation:`);
|
|
|
27075
27072
|
return;
|
|
27076
27073
|
}
|
|
27077
27074
|
console.log("");
|
|
27078
|
-
const result = await
|
|
27075
|
+
const result = await fixAbsoluteMobileEmulatorToolchain2(installPlatform, {
|
|
27079
27076
|
acceptLicenses: args.includes("--yes")
|
|
27080
27077
|
});
|
|
27081
27078
|
console.log(`
|
|
@@ -27103,7 +27100,7 @@ var requireAndroidTestPort = (args, projectRoot) => {
|
|
|
27103
27100
|
}
|
|
27104
27101
|
return { https: args.includes("--https"), port };
|
|
27105
27102
|
}
|
|
27106
|
-
const instances = listLiveInstances().filter((
|
|
27103
|
+
const instances = listLiveInstances().filter((instance) => resolve18(instance.cwd) === resolve18(projectRoot) && instance.source === "dev" && instance.port !== null);
|
|
27107
27104
|
if (instances.length !== 1) {
|
|
27108
27105
|
throw new TypeError(instances.length === 0 ? "No running AbsoluteJS dev server was found for this project. Start `bun dev`, wait for Android to report ready, then run `absolute mobile test android`." : "Multiple dev servers are running for this project. Select one with mobile test android --port <port>.");
|
|
27109
27106
|
}
|
|
@@ -27124,19 +27121,19 @@ var androidTestTimeout = (args) => {
|
|
|
27124
27121
|
return timeout;
|
|
27125
27122
|
};
|
|
27126
27123
|
var requireAndroidAdb = async () => {
|
|
27127
|
-
const checks = await
|
|
27128
|
-
const
|
|
27129
|
-
if (!
|
|
27124
|
+
const checks = await inspectAbsoluteMobileToolchain2();
|
|
27125
|
+
const adb = checks.find((check) => check.id === "android.adb" && check.status === "pass")?.path;
|
|
27126
|
+
if (!adb) {
|
|
27130
27127
|
throw new TypeError("Android Debug Bridge is unavailable. Run `absolute mobile doctor android --fix`.");
|
|
27131
27128
|
}
|
|
27132
|
-
return
|
|
27129
|
+
return adb;
|
|
27133
27130
|
};
|
|
27134
|
-
var selectAndroidSerial = (
|
|
27135
|
-
const devices = captureCommand4([
|
|
27131
|
+
var selectAndroidSerial = (adb, explicitSerial) => {
|
|
27132
|
+
const devices = captureCommand4([adb, "devices"]);
|
|
27136
27133
|
if (devices.exitCode !== 0) {
|
|
27137
27134
|
throw new Error(`Could not list Android targets: ${devices.stderr.trim() || devices.stdout.trim()}`);
|
|
27138
27135
|
}
|
|
27139
|
-
const ready =
|
|
27136
|
+
const ready = parseAdbDevices2(devices.stdout);
|
|
27140
27137
|
if (explicitSerial) {
|
|
27141
27138
|
if (!ready.includes(explicitSerial)) {
|
|
27142
27139
|
throw new TypeError(`Android target ${explicitSerial} is not connected and ready.`);
|
|
@@ -27149,20 +27146,20 @@ var selectAndroidSerial = (adb2, explicitSerial) => {
|
|
|
27149
27146
|
}
|
|
27150
27147
|
return selected;
|
|
27151
27148
|
};
|
|
27152
|
-
var selectOrStartAndroidReleaseEmulator = async (
|
|
27149
|
+
var selectOrStartAndroidReleaseEmulator = async (adb, emulator, explicitSerial, json) => {
|
|
27153
27150
|
if (explicitSerial)
|
|
27154
|
-
return selectAndroidSerial(
|
|
27155
|
-
const current = captureCommand4([
|
|
27156
|
-
const ready = current.exitCode === 0 ?
|
|
27151
|
+
return selectAndroidSerial(adb, explicitSerial);
|
|
27152
|
+
const current = captureCommand4([adb, "devices"]);
|
|
27153
|
+
const ready = current.exitCode === 0 ? parseAdbDevices2(current.stdout).find((serial) => serial.startsWith("emulator-")) : undefined;
|
|
27157
27154
|
if (ready)
|
|
27158
27155
|
return ready;
|
|
27159
27156
|
if (!emulator)
|
|
27160
27157
|
throw new TypeError("Android Emulator is unavailable. Run `absolute mobile doctor android --fix`.");
|
|
27161
|
-
(json ? console.error : console.log)(`Starting managed Android emulator ${
|
|
27158
|
+
(json ? console.error : console.log)(`Starting managed Android emulator ${ABSOLUTE_ANDROID_AVD_NAME2}\u2026`);
|
|
27162
27159
|
const launched = Bun.spawn([
|
|
27163
27160
|
emulator,
|
|
27164
27161
|
"-avd",
|
|
27165
|
-
|
|
27162
|
+
ABSOLUTE_ANDROID_AVD_NAME2,
|
|
27166
27163
|
"-netdelay",
|
|
27167
27164
|
"none",
|
|
27168
27165
|
"-netspeed",
|
|
@@ -27171,12 +27168,12 @@ var selectOrStartAndroidReleaseEmulator = async (adb2, emulator, explicitSerial,
|
|
|
27171
27168
|
launched.unref();
|
|
27172
27169
|
const startedAt = performance.now();
|
|
27173
27170
|
const bootedSerial = () => {
|
|
27174
|
-
const devices = captureCommand4([
|
|
27175
|
-
const serial = devices.exitCode === 0 ?
|
|
27171
|
+
const devices = captureCommand4([adb, "devices"]);
|
|
27172
|
+
const serial = devices.exitCode === 0 ? parseAdbDevices2(devices.stdout).find((candidate) => candidate.startsWith("emulator-")) : undefined;
|
|
27176
27173
|
if (!serial)
|
|
27177
27174
|
return;
|
|
27178
27175
|
const booted = captureCommand4([
|
|
27179
|
-
|
|
27176
|
+
adb,
|
|
27180
27177
|
"-s",
|
|
27181
27178
|
serial,
|
|
27182
27179
|
"shell",
|
|
@@ -27187,7 +27184,7 @@ var selectOrStartAndroidReleaseEmulator = async (adb2, emulator, explicitSerial,
|
|
|
27187
27184
|
};
|
|
27188
27185
|
const waitForBoot = async () => {
|
|
27189
27186
|
if (performance.now() - startedAt >= ANDROID_EMULATOR_BOOT_TIMEOUT_MS)
|
|
27190
|
-
throw new Error(`Managed Android emulator ${
|
|
27187
|
+
throw new Error(`Managed Android emulator ${ABSOLUTE_ANDROID_AVD_NAME2} did not finish booting within 180 seconds.`);
|
|
27191
27188
|
const serial = bootedSerial();
|
|
27192
27189
|
if (serial)
|
|
27193
27190
|
return serial;
|
|
@@ -27243,8 +27240,8 @@ var writeAndroidFailureArtifacts = async (options) => {
|
|
|
27243
27240
|
`);
|
|
27244
27241
|
return { diagnosticPath, screenshot };
|
|
27245
27242
|
};
|
|
27246
|
-
var captureAndroidReleaseScreenshot = async (
|
|
27247
|
-
const process2 = Bun.spawn([
|
|
27243
|
+
var captureAndroidReleaseScreenshot = async (adb, serial, destination) => {
|
|
27244
|
+
const process2 = Bun.spawn([adb, "-s", serial, "exec-out", "screencap", "-p"], { stderr: "pipe", stdin: "ignore", stdout: "pipe" });
|
|
27248
27245
|
const [exitCode, bytes, stderr] = await Promise.all([
|
|
27249
27246
|
process2.exited,
|
|
27250
27247
|
new Response(process2.stdout).bytes(),
|
|
@@ -27276,15 +27273,15 @@ var testAndroidRelease = async (args, mobile, projectRoot) => {
|
|
|
27276
27273
|
throw new TypeError(`Android release engine ${release.metadata.engine} does not match configured engine ${mobile.engine}.`);
|
|
27277
27274
|
if (mobile.engine === "expo" && mobile.expoNativeRoutes[mobile.entry])
|
|
27278
27275
|
throw new TypeError("Offline Expo release acceptance requires mobile.entry to be an embedded web route; the configured entry is native and requires trusted server page data.");
|
|
27279
|
-
const checks = await
|
|
27280
|
-
const
|
|
27276
|
+
const checks = await inspectAbsoluteMobileToolchain2();
|
|
27277
|
+
const adb = checks.find((check) => check.id === "android.adb" && check.status === "pass")?.path;
|
|
27281
27278
|
const java = checks.find((check) => check.id === "android.java" && check.status === "pass")?.path;
|
|
27282
27279
|
const emulator = checks.find((check) => check.id === "android.emulator" && check.status === "pass")?.path;
|
|
27283
|
-
if (!
|
|
27280
|
+
if (!adb)
|
|
27284
27281
|
throw new TypeError("Android Debug Bridge is unavailable. Run `absolute mobile doctor android --fix`.");
|
|
27285
27282
|
if (!java)
|
|
27286
27283
|
throw new TypeError("Java is unavailable. Install the JDK required by the Android toolchain and rerun `absolute mobile doctor android`.");
|
|
27287
|
-
const serial = await selectOrStartAndroidReleaseEmulator(
|
|
27284
|
+
const serial = await selectOrStartAndroidReleaseEmulator(adb, emulator, valueAfter(args, "--serial"), args.includes("--json"));
|
|
27288
27285
|
const inspectedBundletool = await inspectAbsoluteBundletool();
|
|
27289
27286
|
const approved = inspectedBundletool.ready || args.includes("--yes") || await confirmInstall(`Bundletool ${ABSOLUTE_BUNDLETOOL_VERSION} is required to install the exact App Bundle. Download and checksum-verify it now?`);
|
|
27290
27287
|
const bundletool = await ensureAbsoluteBundletool({
|
|
@@ -27295,10 +27292,10 @@ var testAndroidRelease = async (args, mobile, projectRoot) => {
|
|
|
27295
27292
|
const startedAt = performance.now();
|
|
27296
27293
|
try {
|
|
27297
27294
|
const result = await runAbsoluteAndroidReleaseAcceptance({
|
|
27298
|
-
adb
|
|
27295
|
+
adb,
|
|
27299
27296
|
artifactDirectory: artifactRoot,
|
|
27300
27297
|
bundletool,
|
|
27301
|
-
host:
|
|
27298
|
+
host: detectAbsoluteMobileHost2(),
|
|
27302
27299
|
java,
|
|
27303
27300
|
...mobile.deepLinkScheme ? {
|
|
27304
27301
|
launchUrl: `${mobile.deepLinkScheme}://${mobile.entry}`
|
|
@@ -27306,7 +27303,7 @@ var testAndroidRelease = async (args, mobile, projectRoot) => {
|
|
|
27306
27303
|
release,
|
|
27307
27304
|
serial
|
|
27308
27305
|
});
|
|
27309
|
-
const screenshot = reportRoot ? await captureAndroidReleaseScreenshot(
|
|
27306
|
+
const screenshot = reportRoot ? await captureAndroidReleaseScreenshot(adb, serial, join19(reportRoot, "android-release.png")) : undefined;
|
|
27310
27307
|
sendTelemetryEvent("mobile:android-release-conformance", {
|
|
27311
27308
|
durationMs: result.durationMs,
|
|
27312
27309
|
engine: result.engine,
|
|
@@ -27317,7 +27314,7 @@ var testAndroidRelease = async (args, mobile, projectRoot) => {
|
|
|
27317
27314
|
success: true
|
|
27318
27315
|
});
|
|
27319
27316
|
await writeRequestedAndroidReport({
|
|
27320
|
-
adb
|
|
27317
|
+
adb,
|
|
27321
27318
|
args,
|
|
27322
27319
|
projectRoot,
|
|
27323
27320
|
provider: mobile.engine,
|
|
@@ -27364,7 +27361,7 @@ var testAndroidRelease = async (args, mobile, projectRoot) => {
|
|
|
27364
27361
|
}, null, 2)}
|
|
27365
27362
|
`);
|
|
27366
27363
|
await writeRequestedAndroidReport({
|
|
27367
|
-
adb
|
|
27364
|
+
adb,
|
|
27368
27365
|
args,
|
|
27369
27366
|
projectRoot,
|
|
27370
27367
|
provider: mobile.engine,
|
|
@@ -27409,8 +27406,8 @@ var testAndroid = async (args) => {
|
|
|
27409
27406
|
}
|
|
27410
27407
|
const { https, port } = requireAndroidTestPort(args, projectRoot);
|
|
27411
27408
|
const timeoutMs = androidTestTimeout(args);
|
|
27412
|
-
const
|
|
27413
|
-
const serial = selectAndroidSerial(
|
|
27409
|
+
const adb = await requireAndroidAdb();
|
|
27410
|
+
const serial = selectAndroidSerial(adb, valueAfter(args, "--serial"));
|
|
27414
27411
|
const routes = valuesAfter(args, "--route");
|
|
27415
27412
|
if (routes.length === 0)
|
|
27416
27413
|
routes.push(mobile.entry);
|
|
@@ -27420,7 +27417,7 @@ var testAndroid = async (args) => {
|
|
|
27420
27417
|
let session;
|
|
27421
27418
|
try {
|
|
27422
27419
|
session = await attachAbsoluteAndroidWebView({
|
|
27423
|
-
adb
|
|
27420
|
+
adb,
|
|
27424
27421
|
appId: mobile.appId,
|
|
27425
27422
|
serial,
|
|
27426
27423
|
timeoutMs
|
|
@@ -27456,7 +27453,7 @@ var testAndroid = async (args) => {
|
|
|
27456
27453
|
printAndroidTestReport(report);
|
|
27457
27454
|
const screenshot = reportRoot ? await session.screenshot(join19(artifactRoot, "android-emulator.png")) : undefined;
|
|
27458
27455
|
await writeRequestedAndroidReport({
|
|
27459
|
-
adb
|
|
27456
|
+
adb,
|
|
27460
27457
|
args,
|
|
27461
27458
|
projectRoot,
|
|
27462
27459
|
run: {
|
|
@@ -27497,7 +27494,7 @@ var testAndroid = async (args) => {
|
|
|
27497
27494
|
session
|
|
27498
27495
|
});
|
|
27499
27496
|
await writeRequestedAndroidReport({
|
|
27500
|
-
adb
|
|
27497
|
+
adb,
|
|
27501
27498
|
args,
|
|
27502
27499
|
projectRoot,
|
|
27503
27500
|
run: {
|
|
@@ -27523,14 +27520,14 @@ var requireIosTestContext = (args, projectRoot) => {
|
|
|
27523
27520
|
const port = Number(explicit);
|
|
27524
27521
|
if (!Number.isInteger(port) || port < 1 || port > 65535)
|
|
27525
27522
|
throw new TypeError("mobile test --port must be a valid TCP port.");
|
|
27526
|
-
const
|
|
27523
|
+
const instance = listLiveInstances().find((candidate) => resolve18(candidate.cwd) === resolve18(projectRoot) && candidate.source === "dev" && candidate.port === port);
|
|
27527
27524
|
return {
|
|
27528
|
-
https:
|
|
27529
|
-
instance
|
|
27525
|
+
https: instance?.https ?? args.includes("--https"),
|
|
27526
|
+
instance,
|
|
27530
27527
|
port
|
|
27531
27528
|
};
|
|
27532
27529
|
}
|
|
27533
|
-
const instances = listLiveInstances().filter((
|
|
27530
|
+
const instances = listLiveInstances().filter((instance) => resolve18(instance.cwd) === resolve18(projectRoot) && instance.source === "dev" && instance.port !== null);
|
|
27534
27531
|
if (instances.length !== 1)
|
|
27535
27532
|
throw new TypeError(instances.length === 0 ? "No running AbsoluteJS dev server was found for this project. Start `bun dev`, wait for iOS to report ready, then run `absolute mobile test ios`." : "Multiple dev servers are running for this project. Select one with mobile test ios --port <port>.");
|
|
27536
27533
|
const [instance] = instances;
|
|
@@ -27580,7 +27577,7 @@ var printIosTestReport = (report, asJson) => {
|
|
|
27580
27577
|
console.log(`\u2713 Native iOS HMR ${report.hmrApply.outcome} in ${report.hmrApply.duration}ms${timing}.`);
|
|
27581
27578
|
};
|
|
27582
27579
|
var requireIosXcrun = async () => {
|
|
27583
|
-
const checks = await
|
|
27580
|
+
const checks = await inspectAbsoluteMobileToolchain2();
|
|
27584
27581
|
const xcrun = checks.find((check) => check.id === "ios.xcrun" && check.status === "pass")?.path;
|
|
27585
27582
|
if (!xcrun)
|
|
27586
27583
|
throw new TypeError("iOS simulator tools are unavailable. Run this command on macOS after `absolute mobile doctor ios --fix`.");
|
|
@@ -27597,11 +27594,11 @@ var physicalIosCapture = async (options) => {
|
|
|
27597
27594
|
if (remoteName && options.instance.iosRemoteMac && remoteName !== options.instance.iosRemoteMac)
|
|
27598
27595
|
throw new TypeError("--remote must match the Remote Mac used by the running bun dev session.");
|
|
27599
27596
|
const selectedRemoteName = remoteName ?? options.instance.iosRemoteMac;
|
|
27600
|
-
const remote = process.platform === "darwin" && !selectedRemoteName ? undefined : await
|
|
27597
|
+
const remote = process.platform === "darwin" && !selectedRemoteName ? undefined : await getAbsoluteRemoteMacProfile2(selectedRemoteName);
|
|
27601
27598
|
if (process.platform !== "darwin" && !remote)
|
|
27602
27599
|
throw new TypeError("Physical iOS acceptance requires macOS or a paired Remote Mac.");
|
|
27603
27600
|
if (remote) {
|
|
27604
|
-
const macos = await
|
|
27601
|
+
const macos = await captureAbsoluteRemoteMacCommand2(remote, [
|
|
27605
27602
|
"/usr/bin/sw_vers",
|
|
27606
27603
|
"-productVersion"
|
|
27607
27604
|
]);
|
|
@@ -27612,7 +27609,7 @@ var physicalIosCapture = async (options) => {
|
|
|
27612
27609
|
remote: true,
|
|
27613
27610
|
xcodeVersion: remote.xcodeVersion,
|
|
27614
27611
|
xcrun: "/usr/bin/xcrun",
|
|
27615
|
-
capture: (command) =>
|
|
27612
|
+
capture: (command) => captureAbsoluteRemoteMacCommand2(remote, command)
|
|
27616
27613
|
};
|
|
27617
27614
|
}
|
|
27618
27615
|
return {
|
|
@@ -27634,14 +27631,14 @@ var selectIosSimulator = (xcrun, explicitUdid) => {
|
|
|
27634
27631
|
]);
|
|
27635
27632
|
if (result.exitCode !== 0)
|
|
27636
27633
|
throw new Error(`Could not list iOS simulators: ${result.stderr.trim() || result.stdout.trim()}`);
|
|
27637
|
-
const devices =
|
|
27634
|
+
const devices = parseIosSimulators2(result.stdout).filter((device) => device.isAvailable);
|
|
27638
27635
|
if (explicitUdid) {
|
|
27639
27636
|
const explicit = devices.find((device) => device.udid === explicitUdid);
|
|
27640
27637
|
if (!explicit || explicit.state !== "Booted")
|
|
27641
27638
|
throw new TypeError(`iOS simulator ${explicitUdid} is not booted and ready.`);
|
|
27642
27639
|
return explicit;
|
|
27643
27640
|
}
|
|
27644
|
-
const selected = devices.find((device) => device.name ===
|
|
27641
|
+
const selected = devices.find((device) => device.name === ABSOLUTE_IOS_SIMULATOR_NAME2 && device.state === "Booted");
|
|
27645
27642
|
if (!selected)
|
|
27646
27643
|
throw new TypeError("No ready AbsoluteJS iOS simulator was found. Start `bun dev` and wait for the iOS target to become ready.");
|
|
27647
27644
|
return selected;
|
|
@@ -27657,8 +27654,8 @@ var selectOrStartIosReleaseSimulator = async (xcrun, explicitUdid) => {
|
|
|
27657
27654
|
]);
|
|
27658
27655
|
if (result.exitCode !== 0)
|
|
27659
27656
|
throw new Error(`Could not list iOS simulators: ${result.stderr.trim() || result.stdout.trim()}`);
|
|
27660
|
-
const devices =
|
|
27661
|
-
const selected = explicitUdid ? devices.find((device) => device.udid === explicitUdid) : devices.find((device) => device.name ===
|
|
27657
|
+
const devices = parseIosSimulators2(result.stdout).filter((device) => device.isAvailable);
|
|
27658
|
+
const selected = explicitUdid ? devices.find((device) => device.udid === explicitUdid) : devices.find((device) => device.name === ABSOLUTE_IOS_SIMULATOR_NAME2);
|
|
27662
27659
|
if (!selected)
|
|
27663
27660
|
throw new TypeError(explicitUdid ? `iOS simulator ${explicitUdid} is unavailable.` : "No managed AbsoluteJS iOS simulator was found. Run `absolute mobile doctor ios --fix`.");
|
|
27664
27661
|
if (selected.state !== "Booted") {
|
|
@@ -27700,14 +27697,14 @@ var writeIosFailureArtifacts = async (options) => {
|
|
|
27700
27697
|
screenshot: screenshotResult.exitCode === 0 ? screenshot : undefined
|
|
27701
27698
|
};
|
|
27702
27699
|
};
|
|
27703
|
-
var nativeReportRoot = (args, projectRoot,
|
|
27700
|
+
var nativeReportRoot = (args, projectRoot, platform) => {
|
|
27704
27701
|
const index = args.indexOf("--report");
|
|
27705
27702
|
if (index === NOT_FOUND4)
|
|
27706
27703
|
return;
|
|
27707
27704
|
const candidate = args[index + 1];
|
|
27708
27705
|
const explicit = candidate?.startsWith("--") ? undefined : candidate;
|
|
27709
|
-
const
|
|
27710
|
-
return safeArtifactRoot(projectRoot, explicit ?? `.absolutejs/mobile/test-reports/${
|
|
27706
|
+
const timestamp = new Date().toISOString().replaceAll(":", "-");
|
|
27707
|
+
return safeArtifactRoot(projectRoot, explicit ?? `.absolutejs/mobile/test-reports/${platform}-${timestamp}`);
|
|
27711
27708
|
};
|
|
27712
27709
|
var absolutejsVersionForReport = async () => {
|
|
27713
27710
|
let absolutejsVersion = process.env.ABSOLUTE_VERSION ?? "unknown";
|
|
@@ -27951,13 +27948,13 @@ var runRemoteIosReleaseTarget = async (options) => {
|
|
|
27951
27948
|
if (options.args.includes("--testflight"))
|
|
27952
27949
|
distribution = "testflight";
|
|
27953
27950
|
const simulatorUdid = valueAfter(options.args, "--udid") ?? valueAfter(options.args, "--serial");
|
|
27954
|
-
const remoteAcceptance = await
|
|
27951
|
+
const remoteAcceptance = await runAbsoluteRemoteIosReleaseAcceptance2({
|
|
27955
27952
|
...options.requestedDevice ? {
|
|
27956
27953
|
deviceIdentifier: normalizeAbsoluteIosDeviceIdentifier(options.requestedDevice),
|
|
27957
27954
|
networkUnavailableConfirmed: true
|
|
27958
27955
|
} : {},
|
|
27959
27956
|
distribution,
|
|
27960
|
-
project:
|
|
27957
|
+
project: createAbsoluteRemoteIosDevProject2(options.mobile, options.projectRoot, options.profile),
|
|
27961
27958
|
release: options.release,
|
|
27962
27959
|
signal: options.cancellation?.signal,
|
|
27963
27960
|
log: (message) => console.log(`[remote] ${message}`),
|
|
@@ -27987,7 +27984,7 @@ var testIosRelease = async (args, mobile, projectRoot) => {
|
|
|
27987
27984
|
const requestedRemote = valueAfter(args, "--remote");
|
|
27988
27985
|
if (args.includes("--remote") && (!requestedRemote || requestedRemote.startsWith("-")))
|
|
27989
27986
|
throw new TypeError("mobile test ios --release requires --remote <name>.");
|
|
27990
|
-
const remoteProfile = requestedRemote !== undefined || process.platform !== "darwin" ? await
|
|
27987
|
+
const remoteProfile = requestedRemote !== undefined || process.platform !== "darwin" ? await getAbsoluteRemoteMacProfile2(requestedRemote, remoteProfilePath()) : undefined;
|
|
27991
27988
|
if (process.platform !== "darwin" && !remoteProfile)
|
|
27992
27989
|
throw new TypeError("iOS release acceptance requires macOS or a paired Remote Mac. Run `absolute mobile pair mac <name> <user@host>`.");
|
|
27993
27990
|
const release = await readAbsoluteIosRelease(projectRoot, requested);
|
|
@@ -28011,7 +28008,7 @@ var testIosRelease = async (args, mobile, projectRoot) => {
|
|
|
28011
28008
|
let targetId = requestedDevice ?? "ios-simulator";
|
|
28012
28009
|
let remoteReportMetadata;
|
|
28013
28010
|
if (remoteProfile && reportRoot) {
|
|
28014
|
-
const macos = await
|
|
28011
|
+
const macos = await captureAbsoluteRemoteMacCommand2(remoteProfile, [
|
|
28015
28012
|
"/usr/bin/sw_vers",
|
|
28016
28013
|
"-productVersion"
|
|
28017
28014
|
]);
|