@limrun/ui 0.9.0-rc.1 → 0.9.0-rc.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/device-install/apple/client.d.ts +1 -0
- package/dist/core/device-install/apple/provisioning.d.ts +42 -31
- package/dist/core/device-install/apple/relay.d.ts +5 -9
- package/dist/core/device-install/storage/browser-storage.d.ts +19 -0
- package/dist/core/device-install/types.d.ts +2 -2
- package/dist/device-install/index.cjs +1 -9
- package/dist/device-install/index.js +76 -210
- package/dist/device-install/react.cjs +1 -1
- package/dist/device-install/react.js +1 -1
- package/dist/device-install-dialog-86RDdoK9.js +2 -0
- package/dist/device-install-dialog-CnyDWf0q.mjs +462 -0
- package/dist/device-install-dialog.css +1 -1
- package/dist/hooks/use-device-install.d.ts +21 -3
- package/dist/index.cjs +1 -1
- package/dist/index.js +3 -3
- package/dist/use-device-install-CbGVvwPp.js +31 -0
- package/dist/use-device-install-j1Gekpl4.mjs +13623 -0
- package/package.json +1 -1
- package/src/components/device-install/device-install-dialog.css +82 -1
- package/src/components/device-install/device-install-dialog.tsx +337 -187
- package/src/core/device-install/apple/client.ts +92 -4
- package/src/core/device-install/apple/provisioning.ts +67 -24
- package/src/core/device-install/apple/relay.ts +121 -205
- package/src/core/device-install/storage/browser-storage.ts +26 -1
- package/src/core/device-install/types.ts +2 -2
- package/src/hooks/use-device-install.ts +748 -60
- package/dist/device-install-dialog-CTwVViYY.js +0 -2
- package/dist/device-install-dialog-zzKJu7SM.mjs +0 -328
- package/dist/use-device-install-CgrOKKyi.mjs +0 -13042
- package/dist/use-device-install-DDKRf6IL.js +0 -23
|
@@ -8,6 +8,7 @@ export type AppleIDLoginInput = {
|
|
|
8
8
|
export type AppleIDLoginResult = {
|
|
9
9
|
appleSessionId: string;
|
|
10
10
|
completeResponse: AppleRelayResponse;
|
|
11
|
+
twoFactorChallengeResponse?: AppleRelayResponse;
|
|
11
12
|
requiresTwoFactor: boolean;
|
|
12
13
|
finishTwoFactor: (code: string) => Promise<AppleRelayResponse>;
|
|
13
14
|
finalize: () => Promise<AppleRelayResponse>;
|
|
@@ -8,13 +8,37 @@ export type AppleDeveloperPortalTeam = {
|
|
|
8
8
|
type?: string;
|
|
9
9
|
subType?: string;
|
|
10
10
|
};
|
|
11
|
+
export type AppleDeveloperPortalDevice = {
|
|
12
|
+
deviceId?: string;
|
|
13
|
+
name?: string;
|
|
14
|
+
deviceNumber?: string;
|
|
15
|
+
deviceClass?: string;
|
|
16
|
+
model?: string;
|
|
17
|
+
status?: string;
|
|
18
|
+
};
|
|
19
|
+
export type AppleDeveloperPortalAppID = {
|
|
20
|
+
appId?: string;
|
|
21
|
+
appIdId?: string;
|
|
22
|
+
identifier?: string;
|
|
23
|
+
bundleId?: string;
|
|
24
|
+
name?: string;
|
|
25
|
+
prefix?: string;
|
|
26
|
+
platform?: string;
|
|
27
|
+
};
|
|
11
28
|
export type AppleDeveloperPortalResponse = {
|
|
29
|
+
resultCode?: number;
|
|
30
|
+
resultString?: string;
|
|
31
|
+
userString?: string;
|
|
12
32
|
teams?: AppleDeveloperPortalTeam[];
|
|
13
33
|
provider?: AppleDeveloperPortalTeam;
|
|
14
34
|
availableProviders?: AppleDeveloperPortalTeam[];
|
|
15
|
-
appIds?:
|
|
16
|
-
devices?:
|
|
35
|
+
appIds?: AppleDeveloperPortalAppID[];
|
|
36
|
+
devices?: AppleDeveloperPortalDevice[];
|
|
17
37
|
certRequests?: Array<Record<string, unknown>>;
|
|
38
|
+
certRequest?: Record<string, unknown>;
|
|
39
|
+
appId?: Record<string, unknown>;
|
|
40
|
+
device?: Record<string, unknown>;
|
|
41
|
+
provisioningProfile?: Record<string, unknown>;
|
|
18
42
|
provisioningProfiles?: Array<Record<string, unknown>>;
|
|
19
43
|
};
|
|
20
44
|
export type AppleProvisioningContext = {
|
|
@@ -41,49 +65,34 @@ export declare function listTeamsRequest(): AppleProvisioningRequest;
|
|
|
41
65
|
export declare function findBundleIDRequest({ bundleID, teamID }: Pick<AppleProvisioningContext, 'bundleID' | 'teamID'>): {
|
|
42
66
|
method: "POST";
|
|
43
67
|
path: string;
|
|
44
|
-
payload:
|
|
45
|
-
pageNumber: number;
|
|
46
|
-
pageSize: number;
|
|
47
|
-
teamId: string;
|
|
48
|
-
};
|
|
68
|
+
payload: Record<string, unknown>;
|
|
49
69
|
};
|
|
50
70
|
export declare function findDeviceRequest({ deviceUDID, teamID }: Pick<AppleProvisioningContext, 'deviceUDID' | 'teamID'>): {
|
|
51
71
|
method: "POST";
|
|
52
72
|
path: string;
|
|
53
|
-
payload:
|
|
54
|
-
pageNumber: number;
|
|
55
|
-
pageSize: number;
|
|
56
|
-
teamId: string;
|
|
57
|
-
};
|
|
73
|
+
payload: Record<string, unknown>;
|
|
58
74
|
};
|
|
59
75
|
export declare function findDevelopmentCertificatesRequest(teamID?: string): {
|
|
60
76
|
method: "POST";
|
|
61
77
|
path: string;
|
|
62
|
-
payload:
|
|
63
|
-
pageNumber: number;
|
|
64
|
-
pageSize: number;
|
|
65
|
-
teamId: string;
|
|
66
|
-
};
|
|
78
|
+
payload: Record<string, unknown>;
|
|
67
79
|
};
|
|
68
80
|
export declare function findDevelopmentProfilesRequest({ bundleID, teamID, }: Pick<AppleProvisioningContext, 'bundleID' | 'teamID'>): {
|
|
69
81
|
method: "POST";
|
|
70
82
|
path: string;
|
|
71
|
-
payload:
|
|
72
|
-
pageNumber: number;
|
|
73
|
-
pageSize: number;
|
|
74
|
-
teamId: string;
|
|
75
|
-
};
|
|
83
|
+
payload: Record<string, unknown>;
|
|
76
84
|
};
|
|
77
|
-
export declare function registerDeviceRequest({ deviceUDID, teamID, name, }: AppleProvisioningContext & {
|
|
85
|
+
export declare function registerDeviceRequest({ deviceUDID, teamID, name, }: Pick<AppleProvisioningContext, 'deviceUDID' | 'teamID'> & {
|
|
78
86
|
name?: string;
|
|
79
87
|
}): {
|
|
80
88
|
method: "POST";
|
|
81
89
|
path: string;
|
|
82
90
|
payload: {
|
|
83
91
|
teamId: string;
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
92
|
+
deviceNames: string;
|
|
93
|
+
deviceNumbers: string;
|
|
94
|
+
deviceClasses: string;
|
|
95
|
+
register: string;
|
|
87
96
|
};
|
|
88
97
|
};
|
|
89
98
|
export declare function createBundleIDRequest({ bundleID, teamID, name, }: Pick<AppleProvisioningContext, 'bundleID' | 'teamID'> & {
|
|
@@ -106,15 +115,17 @@ export declare function submitDevelopmentCSRRequest({ csrPEM, teamID, }: {
|
|
|
106
115
|
path: string;
|
|
107
116
|
payload: {
|
|
108
117
|
teamId: string;
|
|
118
|
+
type: string;
|
|
109
119
|
csrContent: string;
|
|
110
120
|
};
|
|
111
121
|
};
|
|
112
122
|
export declare function downloadCertificateRequest(certificateID: string, teamID?: string): {
|
|
113
|
-
method: "
|
|
123
|
+
method: "GET";
|
|
114
124
|
path: string;
|
|
115
125
|
payload: {
|
|
116
126
|
teamId: string;
|
|
117
127
|
certificateId: string;
|
|
128
|
+
type: string;
|
|
118
129
|
};
|
|
119
130
|
};
|
|
120
131
|
export declare function createDevelopmentProfileRequest({ bundleID, teamID, appIDID, certificateID, deviceIDs, name, }: Pick<AppleProvisioningContext, 'bundleID' | 'teamID'> & {
|
|
@@ -127,16 +138,16 @@ export declare function createDevelopmentProfileRequest({ bundleID, teamID, appI
|
|
|
127
138
|
path: string;
|
|
128
139
|
payload: {
|
|
129
140
|
teamId: string;
|
|
130
|
-
|
|
141
|
+
provisioningProfileName: string;
|
|
131
142
|
certificateIds: string[];
|
|
143
|
+
appIdId: string;
|
|
132
144
|
deviceIds: string[];
|
|
133
|
-
|
|
134
|
-
name: string;
|
|
145
|
+
distributionType: string;
|
|
135
146
|
subPlatform: string;
|
|
136
147
|
};
|
|
137
148
|
};
|
|
138
149
|
export declare function downloadProfileRequest(profileID: string, teamID?: string): {
|
|
139
|
-
method: "
|
|
150
|
+
method: "GET";
|
|
140
151
|
path: string;
|
|
141
152
|
payload: {
|
|
142
153
|
teamId: string;
|
|
@@ -5,13 +5,7 @@ export type AppleRelayResponse<T = unknown> = {
|
|
|
5
5
|
headers?: Record<string, string>;
|
|
6
6
|
body?: T;
|
|
7
7
|
rawBody?: string;
|
|
8
|
-
|
|
9
|
-
};
|
|
10
|
-
export type AppleRelayRequest = {
|
|
11
|
-
method?: 'GET' | 'POST' | 'PUT' | 'DELETE';
|
|
12
|
-
url: string;
|
|
13
|
-
headers?: Record<string, string>;
|
|
14
|
-
body?: BodyInit;
|
|
8
|
+
rawBodyBase64?: string;
|
|
15
9
|
};
|
|
16
10
|
export type AppleProvisioningRequest = {
|
|
17
11
|
method?: 'GET' | 'POST';
|
|
@@ -22,12 +16,14 @@ export declare function createAppleRelaySession(limbuildApiUrl: string, token?:
|
|
|
22
16
|
appleSessionId: string;
|
|
23
17
|
}>;
|
|
24
18
|
export declare function deleteAppleRelaySession(limbuildApiUrl: string, appleSessionId: string, token?: string): Promise<void>;
|
|
25
|
-
export declare function relayAppleRequest<T = unknown>(limbuildApiUrl: string, appleSessionId: string, request: AppleRelayRequest, token?: string): Promise<AppleRelayResponse<T>>;
|
|
26
19
|
export declare function proxySrpInit(limbuildApiUrl: string, appleSessionId: string, payload: AppleSRPInitRequest, token?: string): Promise<AppleRelayResponse<AppleSRPInitResponse>>;
|
|
27
20
|
export declare function proxySrpComplete(limbuildApiUrl: string, appleSessionId: string, payload: AppleSRPCompleteProof & {
|
|
28
21
|
rememberMe: boolean;
|
|
29
22
|
trustTokens: string[];
|
|
30
23
|
}, token?: string): Promise<AppleRelayResponse<unknown>>;
|
|
24
|
+
export declare function triggerTrustedDeviceTwoFactor(limbuildApiUrl: string, appleSessionId: string, token?: string): Promise<AppleRelayResponse<unknown>>;
|
|
25
|
+
export declare function triggerPhoneTwoFactor(limbuildApiUrl: string, appleSessionId: string, phoneNumberId: number, mode?: string, token?: string): Promise<AppleRelayResponse<unknown>>;
|
|
31
26
|
export declare function proxyTwoFactorCode(limbuildApiUrl: string, appleSessionId: string, code: string, token?: string): Promise<AppleRelayResponse<unknown>>;
|
|
32
|
-
export declare function
|
|
27
|
+
export declare function proxyPhoneTwoFactorCode(limbuildApiUrl: string, appleSessionId: string, phoneNumberId: number, code: string, mode?: string, token?: string): Promise<AppleRelayResponse<unknown>>;
|
|
28
|
+
export declare function fetchAppleAccountSession(limbuildApiUrl: string, appleSessionId: string, token?: string): Promise<AppleRelayResponse<unknown>>;
|
|
33
29
|
export declare function proxyProvisioningRequest<T = unknown>(limbuildApiUrl: string, appleSessionId: string, request: AppleProvisioningRequest, token?: string): Promise<AppleRelayResponse<T>>;
|
|
@@ -10,6 +10,7 @@ export declare function getSigningAssets({ deviceUDID, bundleID, }: {
|
|
|
10
10
|
bundleID?: string;
|
|
11
11
|
}): Promise<StoredSigningAssets | undefined>;
|
|
12
12
|
export declare function getLatestSigningAssets(): Promise<StoredSigningAssets>;
|
|
13
|
+
export declare function getLatestSigningAssetsWithCertificate(teamID?: string): Promise<StoredSigningAssets>;
|
|
13
14
|
export declare function putSigningAssets(input: PutSigningAssetsInput): Promise<StoredSigningAssets>;
|
|
14
15
|
export declare function findSigningAssetsForBundle(bundleID?: string): Promise<StoredSigningAssets[]>;
|
|
15
16
|
export declare function profileContainsDevice(profile: ProvisioningProfileInfo, deviceUDID?: string): boolean;
|
|
@@ -23,3 +24,21 @@ export declare function parseProvisioningProfile(file: File): Promise<{
|
|
|
23
24
|
provisionedDevices: string[];
|
|
24
25
|
expirationDate: string | undefined;
|
|
25
26
|
}>;
|
|
27
|
+
export declare function parseProvisioningProfileBase64(base64: string): {
|
|
28
|
+
name: string | undefined;
|
|
29
|
+
uuid: string | undefined;
|
|
30
|
+
teamID: string;
|
|
31
|
+
applicationIdentifier: string | undefined;
|
|
32
|
+
bundleID: string | undefined;
|
|
33
|
+
provisionedDevices: string[];
|
|
34
|
+
expirationDate: string | undefined;
|
|
35
|
+
};
|
|
36
|
+
export declare function parseProvisioningProfileBytes(bytes: Uint8Array): {
|
|
37
|
+
name: string | undefined;
|
|
38
|
+
uuid: string | undefined;
|
|
39
|
+
teamID: string;
|
|
40
|
+
applicationIdentifier: string | undefined;
|
|
41
|
+
bundleID: string | undefined;
|
|
42
|
+
provisionedDevices: string[];
|
|
43
|
+
expirationDate: string | undefined;
|
|
44
|
+
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export type DeviceInstallLog = (message: string, detail?: string) => void;
|
|
2
|
-
export type DeviceInstallStep = '
|
|
2
|
+
export type DeviceInstallStep = 'signing' | 'connect' | 'build' | 'install';
|
|
3
3
|
export type DeviceInstallStepStatus = 'idle' | 'active' | 'complete' | 'error';
|
|
4
|
-
export type DeviceInstallBusyAction = '
|
|
4
|
+
export type DeviceInstallBusyAction = 'signing' | 'usb' | 'pair' | 'build' | 'install';
|
|
5
5
|
export type DeviceInstallBuildStatus = 'idle' | 'queued' | 'running' | 'succeeded' | 'failed' | 'cancelled';
|
|
6
6
|
export type BuildLogLine = {
|
|
7
7
|
type: 'command' | 'stdout' | 'stderr' | 'meta';
|
|
@@ -1,9 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../use-device-install-
|
|
2
|
-
${i.join(`
|
|
3
|
-
`)}
|
|
4
|
-
-----END ${t}-----
|
|
5
|
-
`}function C(t,n){const r=n.match(/.{1,64}/g)??[];return`-----BEGIN ${t}-----
|
|
6
|
-
${r.join(`
|
|
7
|
-
`)}
|
|
8
|
-
-----END ${t}-----
|
|
9
|
-
`}function c(t){let n="";for(const r of t)n+=String.fromCharCode(r);return btoa(n)}function q(t){return btoa(t)}function h(t){return atob(t)}function U(t){const n=new Uint8Array(t.byteLength);return n.set(t),n.buffer}exports.AppleGsaSrpClient=e.AppleGsaSrpClient;exports.RELAY_HEADER_BYTES=e.RELAY_HEADER_BYTES;exports.RELAY_PROTOCOL_VERSION=e.RELAY_PROTOCOL_VERSION;exports.RelayClient=e.RelayClient;exports.RelayMessageType=e.RelayMessageType;exports.claimUsbmux=e.claimUsbmux;exports.closeDeviceRelayTarget=e.closeDeviceRelayTarget;exports.closeUsbmuxSession=e.closeUsbmuxSession;exports.createAppleRelaySession=e.createAppleRelaySession;exports.createBundleIDRequest=e.createBundleIDRequest;exports.createDevelopmentProfileRequest=e.createDevelopmentProfileRequest;exports.createUsbmuxSession=e.createUsbmuxSession;exports.decodeFrame=e.decodeFrame;exports.decodeJson=e.decodeJson;exports.deleteAppleRelaySession=e.deleteAppleRelaySession;exports.deviceRelayWebSocketUrl=e.deviceRelayWebSocketUrl;exports.downloadCertificateRequest=e.downloadCertificateRequest;exports.downloadProfileRequest=e.downloadProfileRequest;exports.encodeFrame=e.encodeFrame;exports.encodeJson=e.encodeJson;exports.fetchLimbuildInfo=e.fetchLimbuildInfo;exports.finalizeAppleRelaySession=e.finalizeAppleRelaySession;exports.findBundleIDRequest=e.findBundleIDRequest;exports.findDevelopmentCertificatesRequest=e.findDevelopmentCertificatesRequest;exports.findDevelopmentProfilesRequest=e.findDevelopmentProfilesRequest;exports.findDeviceRequest=e.findDeviceRequest;exports.findSigningAssetsForBundle=e.findSigningAssetsForBundle;exports.findUsbmuxCandidates=e.findUsbmuxCandidates;exports.getBulkEndpoints=e.getBulkEndpoints;exports.getLatestSigningAssets=e.getLatestSigningAssets;exports.getPairRecord=e.getPairRecord;exports.getReusableAppleSigningAssets=e.getReusableAppleSigningAssets;exports.getSigningAssets=e.getSigningAssets;exports.listTeamsRequest=e.listTeamsRequest;exports.normalizeBundleID=e.normalizeBundleID;exports.normalizeUDID=e.normalizeUDID;exports.openStream=e.openStream;exports.parseProvisioningProfile=e.parseProvisioningProfile;exports.profileContainsDevice=e.profileContainsDevice;exports.profileMatchesBundleID=e.profileMatchesBundleID;exports.proxyProvisioningRequest=e.proxyProvisioningRequest;exports.proxySrpComplete=e.proxySrpComplete;exports.proxySrpInit=e.proxySrpInit;exports.proxyTwoFactorCode=e.proxyTwoFactorCode;exports.putAppleGeneratedSigningAssets=e.putAppleGeneratedSigningAssets;exports.putPairRecord=e.putPairRecord;exports.putSigningAssets=e.putSigningAssets;exports.receiveStreamData=e.receiveStreamData;exports.registerDeviceRequest=e.registerDeviceRequest;exports.relayAppleRequest=e.relayAppleRequest;exports.requestAppleDevice=e.requestAppleDevice;exports.requestUSBAccess=e.requestUSBAccess;exports.selectDeveloperPortalTeam=e.selectDeveloperPortalTeam;exports.sendStreamData=e.sendStreamData;exports.startBrowserOwnedAppleIDLogin=e.startBrowserOwnedAppleIDLogin;exports.startInstallRelay=e.startInstallRelay;exports.startPairingRelay=e.startPairingRelay;exports.startSignedDeviceBuild=e.startSignedDeviceBuild;exports.storedSigningAssetsReusable=e.storedSigningAssetsReusable;exports.submitDevelopmentCSRRequest=e.submitDevelopmentCSRRequest;exports.teamIDCandidates=e.teamIDCandidates;exports.transferIn=e.transferIn;exports.transferOutWithZlp=e.transferOutWithZlp;exports.useDeviceInstall=e.useDeviceInstall;exports.watchBuildLogEvents=e.watchBuildLogEvents;exports.DeviceInstallDialog=d.DeviceInstallDialog;exports.DeviceInstallRelay=d.DeviceInstallDialog;exports.exportAppleCertificateP12=S;exports.generateAppleSigningKeyAndCSR=A;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../use-device-install-CbGVvwPp.js"),t=require("../device-install-dialog-86RDdoK9.js");exports.AppleGsaSrpClient=e.AppleGsaSrpClient;exports.RELAY_HEADER_BYTES=e.RELAY_HEADER_BYTES;exports.RELAY_PROTOCOL_VERSION=e.RELAY_PROTOCOL_VERSION;exports.RelayClient=e.RelayClient;exports.RelayMessageType=e.RelayMessageType;exports.claimUsbmux=e.claimUsbmux;exports.closeDeviceRelayTarget=e.closeDeviceRelayTarget;exports.closeUsbmuxSession=e.closeUsbmuxSession;exports.createAppleRelaySession=e.createAppleRelaySession;exports.createBundleIDRequest=e.createBundleIDRequest;exports.createDevelopmentProfileRequest=e.createDevelopmentProfileRequest;exports.createUsbmuxSession=e.createUsbmuxSession;exports.decodeFrame=e.decodeFrame;exports.decodeJson=e.decodeJson;exports.deleteAppleRelaySession=e.deleteAppleRelaySession;exports.deviceRelayWebSocketUrl=e.deviceRelayWebSocketUrl;exports.downloadCertificateRequest=e.downloadCertificateRequest;exports.downloadProfileRequest=e.downloadProfileRequest;exports.encodeFrame=e.encodeFrame;exports.encodeJson=e.encodeJson;exports.exportAppleCertificateP12=e.exportAppleCertificateP12;exports.fetchAppleAccountSession=e.fetchAppleAccountSession;exports.fetchLimbuildInfo=e.fetchLimbuildInfo;exports.findBundleIDRequest=e.findBundleIDRequest;exports.findDevelopmentCertificatesRequest=e.findDevelopmentCertificatesRequest;exports.findDevelopmentProfilesRequest=e.findDevelopmentProfilesRequest;exports.findDeviceRequest=e.findDeviceRequest;exports.findSigningAssetsForBundle=e.findSigningAssetsForBundle;exports.findUsbmuxCandidates=e.findUsbmuxCandidates;exports.generateAppleSigningKeyAndCSR=e.generateAppleSigningKeyAndCSR;exports.getBulkEndpoints=e.getBulkEndpoints;exports.getLatestSigningAssets=e.getLatestSigningAssets;exports.getLatestSigningAssetsWithCertificate=e.getLatestSigningAssetsWithCertificate;exports.getPairRecord=e.getPairRecord;exports.getReusableAppleSigningAssets=e.getReusableAppleSigningAssets;exports.getSigningAssets=e.getSigningAssets;exports.listTeamsRequest=e.listTeamsRequest;exports.normalizeBundleID=e.normalizeBundleID;exports.normalizeUDID=e.normalizeUDID;exports.openStream=e.openStream;exports.parseProvisioningProfile=e.parseProvisioningProfile;exports.parseProvisioningProfileBase64=e.parseProvisioningProfileBase64;exports.parseProvisioningProfileBytes=e.parseProvisioningProfileBytes;exports.profileContainsDevice=e.profileContainsDevice;exports.profileMatchesBundleID=e.profileMatchesBundleID;exports.proxyPhoneTwoFactorCode=e.proxyPhoneTwoFactorCode;exports.proxyProvisioningRequest=e.proxyProvisioningRequest;exports.proxySrpComplete=e.proxySrpComplete;exports.proxySrpInit=e.proxySrpInit;exports.proxyTwoFactorCode=e.proxyTwoFactorCode;exports.putAppleGeneratedSigningAssets=e.putAppleGeneratedSigningAssets;exports.putPairRecord=e.putPairRecord;exports.putSigningAssets=e.putSigningAssets;exports.receiveStreamData=e.receiveStreamData;exports.registerDeviceRequest=e.registerDeviceRequest;exports.requestAppleDevice=e.requestAppleDevice;exports.requestUSBAccess=e.requestUSBAccess;exports.selectDeveloperPortalTeam=e.selectDeveloperPortalTeam;exports.sendStreamData=e.sendStreamData;exports.startBrowserOwnedAppleIDLogin=e.startBrowserOwnedAppleIDLogin;exports.startInstallRelay=e.startInstallRelay;exports.startPairingRelay=e.startPairingRelay;exports.startSignedDeviceBuild=e.startSignedDeviceBuild;exports.storedSigningAssetsReusable=e.storedSigningAssetsReusable;exports.submitDevelopmentCSRRequest=e.submitDevelopmentCSRRequest;exports.teamIDCandidates=e.teamIDCandidates;exports.transferIn=e.transferIn;exports.transferOutWithZlp=e.transferOutWithZlp;exports.triggerPhoneTwoFactor=e.triggerPhoneTwoFactor;exports.triggerTrustedDeviceTwoFactor=e.triggerTrustedDeviceTwoFactor;exports.useDeviceInstall=e.useDeviceInstall;exports.watchBuildLogEvents=e.watchBuildLogEvents;exports.DeviceInstallDialog=t.DeviceInstallDialog;exports.DeviceInstallRelay=t.DeviceInstallDialog;
|
|
@@ -1,212 +1,78 @@
|
|
|
1
|
-
import { f as o } from "../use-device-install-
|
|
2
|
-
import {
|
|
3
|
-
import { D as Ve, D as We } from "../device-install-dialog-zzKJu7SM.mjs";
|
|
4
|
-
const y = {
|
|
5
|
-
name: "RSASSA-PKCS1-v1_5",
|
|
6
|
-
modulusLength: 2048,
|
|
7
|
-
publicExponent: new Uint8Array([1, 0, 1]),
|
|
8
|
-
hash: "SHA-256"
|
|
9
|
-
};
|
|
10
|
-
async function K(e) {
|
|
11
|
-
if (!crypto.subtle)
|
|
12
|
-
throw new Error("WebCrypto is not available in this browser.");
|
|
13
|
-
const t = await crypto.subtle.generateKey(y, !0, ["sign", "verify"]), r = new Uint8Array(await crypto.subtle.exportKey("spki", t.publicKey)), s = c(
|
|
14
|
-
S(0),
|
|
15
|
-
g(e),
|
|
16
|
-
r,
|
|
17
|
-
A(0, new Uint8Array())
|
|
18
|
-
), n = new Uint8Array(
|
|
19
|
-
await crypto.subtle.sign("RSASSA-PKCS1-v1_5", t.privateKey, h(s))
|
|
20
|
-
), a = c(
|
|
21
|
-
s,
|
|
22
|
-
c(p("1.2.840.113549.1.1.11"), R()),
|
|
23
|
-
D(n)
|
|
24
|
-
), d = new Uint8Array(await crypto.subtle.exportKey("pkcs8", t.privateKey));
|
|
25
|
-
return {
|
|
26
|
-
privateKey: t.privateKey,
|
|
27
|
-
privateKeyPKCS8Base64: u(d),
|
|
28
|
-
publicKeySPKIBase64: u(r),
|
|
29
|
-
csrPEM: B("CERTIFICATE REQUEST", a),
|
|
30
|
-
csrBase64: u(a)
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
function U(e) {
|
|
34
|
-
if (!e.certificateBase64 && !e.certificatePEM)
|
|
35
|
-
throw new Error("certificateBase64 or certificatePEM is required.");
|
|
36
|
-
const t = o.pki.privateKeyFromPem(
|
|
37
|
-
E("PRIVATE KEY", e.privateKeyPKCS8Base64)
|
|
38
|
-
), r = e.certificatePEM ? o.pki.certificateFromPem(e.certificatePEM) : o.pki.certificateFromAsn1(
|
|
39
|
-
o.asn1.fromDer(o.util.createBuffer(P(e.certificateBase64)))
|
|
40
|
-
), s = o.pkcs12.toPkcs12Asn1(t, [r], e.password, {
|
|
41
|
-
algorithm: "3des",
|
|
42
|
-
friendlyName: e.friendlyName
|
|
43
|
-
}), n = o.asn1.toDer(s).getBytes();
|
|
44
|
-
return I(n);
|
|
45
|
-
}
|
|
46
|
-
function g(e) {
|
|
47
|
-
const t = [f("2.5.4.3", b(e.commonName))];
|
|
48
|
-
return e.emailAddress && t.push(f("1.2.840.113549.1.9.1", w(e.emailAddress))), c(...t);
|
|
49
|
-
}
|
|
50
|
-
function f(e, t) {
|
|
51
|
-
return m(c(p(e), t));
|
|
52
|
-
}
|
|
53
|
-
function c(...e) {
|
|
54
|
-
return i(48, l(...e));
|
|
55
|
-
}
|
|
56
|
-
function m(...e) {
|
|
57
|
-
return i(49, l(...e));
|
|
58
|
-
}
|
|
59
|
-
function A(e, t) {
|
|
60
|
-
return i(160 + e, t);
|
|
61
|
-
}
|
|
62
|
-
function S(e) {
|
|
63
|
-
return i(2, new Uint8Array([e]));
|
|
64
|
-
}
|
|
65
|
-
function R() {
|
|
66
|
-
return new Uint8Array([5, 0]);
|
|
67
|
-
}
|
|
68
|
-
function b(e) {
|
|
69
|
-
return i(12, new TextEncoder().encode(e));
|
|
70
|
-
}
|
|
71
|
-
function w(e) {
|
|
72
|
-
return i(22, new TextEncoder().encode(e));
|
|
73
|
-
}
|
|
74
|
-
function D(e) {
|
|
75
|
-
return i(3, l(new Uint8Array([0]), e));
|
|
76
|
-
}
|
|
77
|
-
function p(e) {
|
|
78
|
-
const t = e.split(".").map((s) => parseInt(s, 10));
|
|
79
|
-
if (t.length < 2 || t.some((s) => !Number.isFinite(s)))
|
|
80
|
-
throw new Error(`Invalid OID: ${e}`);
|
|
81
|
-
const r = [t[0] * 40 + t[1]];
|
|
82
|
-
for (const s of t.slice(2)) {
|
|
83
|
-
const n = [s & 127];
|
|
84
|
-
let a = s >> 7;
|
|
85
|
-
for (; a > 0; )
|
|
86
|
-
n.unshift(a & 127 | 128), a >>= 7;
|
|
87
|
-
r.push(...n);
|
|
88
|
-
}
|
|
89
|
-
return i(6, new Uint8Array(r));
|
|
90
|
-
}
|
|
91
|
-
function i(e, t) {
|
|
92
|
-
return l(new Uint8Array([e]), v(t.byteLength), t);
|
|
93
|
-
}
|
|
94
|
-
function v(e) {
|
|
95
|
-
if (e < 128)
|
|
96
|
-
return new Uint8Array([e]);
|
|
97
|
-
const t = [];
|
|
98
|
-
let r = e;
|
|
99
|
-
for (; r > 0; )
|
|
100
|
-
t.unshift(r & 255), r >>= 8;
|
|
101
|
-
return new Uint8Array([128 | t.length, ...t]);
|
|
102
|
-
}
|
|
103
|
-
function l(...e) {
|
|
104
|
-
const t = e.reduce((n, a) => n + a.byteLength, 0), r = new Uint8Array(t);
|
|
105
|
-
let s = 0;
|
|
106
|
-
for (const n of e)
|
|
107
|
-
r.set(n, s), s += n.byteLength;
|
|
108
|
-
return r;
|
|
109
|
-
}
|
|
110
|
-
function B(e, t) {
|
|
111
|
-
const s = u(t).match(/.{1,64}/g) ?? [];
|
|
112
|
-
return `-----BEGIN ${e}-----
|
|
113
|
-
${s.join(`
|
|
114
|
-
`)}
|
|
115
|
-
-----END ${e}-----
|
|
116
|
-
`;
|
|
117
|
-
}
|
|
118
|
-
function E(e, t) {
|
|
119
|
-
const r = t.match(/.{1,64}/g) ?? [];
|
|
120
|
-
return `-----BEGIN ${e}-----
|
|
121
|
-
${r.join(`
|
|
122
|
-
`)}
|
|
123
|
-
-----END ${e}-----
|
|
124
|
-
`;
|
|
125
|
-
}
|
|
126
|
-
function u(e) {
|
|
127
|
-
let t = "";
|
|
128
|
-
for (const r of e)
|
|
129
|
-
t += String.fromCharCode(r);
|
|
130
|
-
return btoa(t);
|
|
131
|
-
}
|
|
132
|
-
function I(e) {
|
|
133
|
-
return btoa(e);
|
|
134
|
-
}
|
|
135
|
-
function P(e) {
|
|
136
|
-
return atob(e);
|
|
137
|
-
}
|
|
138
|
-
function h(e) {
|
|
139
|
-
const t = new Uint8Array(e.byteLength);
|
|
140
|
-
return t.set(e), t.buffer;
|
|
141
|
-
}
|
|
1
|
+
import { A as a, O as t, N as i, R as n, P as r, a0 as o, L as l, Z as p, q as c, d, j as g, V as u, S as R, U as D, v as S, M as f, i as m, k as A, Q as v, T as P, e as y, D as C, F as I, f as q, b as B, c as x, a as T, ac as b, $ as h, g as w, a1 as E, a9 as L, aa as F, a6 as U, m as O, a8 as _, l as W, a5 as Y, a4 as k, W as z, af as G, ag as J, ah as M, ad as H, ae as K, C as N, E as V, x as Z, w as j, B as Q, p as X, a7 as $, ab as ee, Y as se, r as ae, _ as te, I as ie, o as ne, X as re, s as oe, K as le, J as pe, G as ce, n as de, h as ge, t as ue, a3 as Re, a2 as De, z as Se, y as fe, u as me, H as Ae } from "../use-device-install-j1Gekpl4.mjs";
|
|
2
|
+
import { D as Pe, D as ye } from "../device-install-dialog-CnyDWf0q.mjs";
|
|
142
3
|
export {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
4
|
+
a as AppleGsaSrpClient,
|
|
5
|
+
Pe as DeviceInstallDialog,
|
|
6
|
+
ye as DeviceInstallRelay,
|
|
7
|
+
t as RELAY_HEADER_BYTES,
|
|
8
|
+
i as RELAY_PROTOCOL_VERSION,
|
|
9
|
+
n as RelayClient,
|
|
10
|
+
r as RelayMessageType,
|
|
11
|
+
o as claimUsbmux,
|
|
12
|
+
l as closeDeviceRelayTarget,
|
|
13
|
+
p as closeUsbmuxSession,
|
|
14
|
+
c as createAppleRelaySession,
|
|
15
|
+
d as createBundleIDRequest,
|
|
16
|
+
g as createDevelopmentProfileRequest,
|
|
17
|
+
u as createUsbmuxSession,
|
|
18
|
+
R as decodeFrame,
|
|
19
|
+
D as decodeJson,
|
|
20
|
+
S as deleteAppleRelaySession,
|
|
21
|
+
f as deviceRelayWebSocketUrl,
|
|
22
|
+
m as downloadCertificateRequest,
|
|
23
|
+
A as downloadProfileRequest,
|
|
24
|
+
v as encodeFrame,
|
|
25
|
+
P as encodeJson,
|
|
26
|
+
y as exportAppleCertificateP12,
|
|
27
|
+
C as fetchAppleAccountSession,
|
|
28
|
+
I as fetchLimbuildInfo,
|
|
29
|
+
q as findBundleIDRequest,
|
|
30
|
+
B as findDevelopmentCertificatesRequest,
|
|
31
|
+
x as findDevelopmentProfilesRequest,
|
|
32
|
+
T as findDeviceRequest,
|
|
33
|
+
b as findSigningAssetsForBundle,
|
|
34
|
+
h as findUsbmuxCandidates,
|
|
35
|
+
w as generateAppleSigningKeyAndCSR,
|
|
36
|
+
E as getBulkEndpoints,
|
|
37
|
+
L as getLatestSigningAssets,
|
|
38
|
+
F as getLatestSigningAssetsWithCertificate,
|
|
39
|
+
U as getPairRecord,
|
|
40
|
+
O as getReusableAppleSigningAssets,
|
|
41
|
+
_ as getSigningAssets,
|
|
42
|
+
W as listTeamsRequest,
|
|
43
|
+
Y as normalizeBundleID,
|
|
44
|
+
k as normalizeUDID,
|
|
45
|
+
z as openStream,
|
|
46
|
+
G as parseProvisioningProfile,
|
|
47
|
+
J as parseProvisioningProfileBase64,
|
|
48
|
+
M as parseProvisioningProfileBytes,
|
|
49
|
+
H as profileContainsDevice,
|
|
50
|
+
K as profileMatchesBundleID,
|
|
51
|
+
N as proxyPhoneTwoFactorCode,
|
|
52
|
+
V as proxyProvisioningRequest,
|
|
53
|
+
Z as proxySrpComplete,
|
|
54
|
+
j as proxySrpInit,
|
|
55
|
+
Q as proxyTwoFactorCode,
|
|
56
|
+
X as putAppleGeneratedSigningAssets,
|
|
57
|
+
$ as putPairRecord,
|
|
58
|
+
ee as putSigningAssets,
|
|
59
|
+
se as receiveStreamData,
|
|
60
|
+
ae as registerDeviceRequest,
|
|
61
|
+
te as requestAppleDevice,
|
|
62
|
+
ie as requestUSBAccess,
|
|
63
|
+
ne as selectDeveloperPortalTeam,
|
|
64
|
+
re as sendStreamData,
|
|
65
|
+
oe as startBrowserOwnedAppleIDLogin,
|
|
66
|
+
le as startInstallRelay,
|
|
67
|
+
pe as startPairingRelay,
|
|
68
|
+
ce as startSignedDeviceBuild,
|
|
69
|
+
de as storedSigningAssetsReusable,
|
|
70
|
+
ge as submitDevelopmentCSRRequest,
|
|
71
|
+
ue as teamIDCandidates,
|
|
72
|
+
Re as transferIn,
|
|
73
|
+
De as transferOutWithZlp,
|
|
74
|
+
Se as triggerPhoneTwoFactor,
|
|
75
|
+
fe as triggerTrustedDeviceTwoFactor,
|
|
76
|
+
me as useDeviceInstall,
|
|
77
|
+
Ae as watchBuildLogEvents
|
|
212
78
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../use-device-install-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../use-device-install-CbGVvwPp.js");exports.useDeviceInstall=e.useDeviceInstall;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";require('./device-install-dialog.css');const e=require("react/jsx-runtime"),d=require("react"),w=require("./use-device-install-CbGVvwPp.js");function N(l){var t,a,n="";if(typeof l=="string"||typeof l=="number")n+=l;else if(typeof l=="object")if(Array.isArray(l)){var c=l.length;for(t=0;t<c;t++)l[t]&&(a=N(l[t]))&&(n&&(n+=" "),n+=a)}else for(a in l)l[a]&&(n&&(n+=" "),n+=a);return n}function u(){for(var l,t,a=0,n="",c=arguments.length;a<c;a++)(l=arguments[a])&&(t=N(l))&&(n&&(n+=" "),n+=t);return n}const P=[{id:"signing",title:"Prepare signing",description:"Choose Apple ID login or upload certificates, then confirm the target developer device."},{id:"connect",title:"Connect and pair",description:"Connect the iPhone with WebUSB, then pair this browser so installs can use the device."},{id:"build",title:"Check and build",description:"Verify the device and provisioning profile are ready, then start the signed build."},{id:"install",title:"Start installation",description:"Relay the last successful device build to the paired iPhone."}];function I({disabled:l,...t}){const[a,n]=d.useState(!1),[c,h]=d.useState("signing"),[o,j]=d.useState(),[m,S]=d.useState(""),[x,C]=d.useState(""),[_,A]=d.useState(""),f=d.useId(),i=w.useDeviceInstall(t);d.useEffect(()=>{h(i.currentStep)},[i.currentStep]);const y=(r,p)=>{i.setSigningFiles({[r]:p.currentTarget.files?.[0]})};return e.jsxs("div",{className:"lr-device-install",children:[e.jsx("button",{type:"button",className:"lr-device-install__trigger",disabled:l||!t.apiUrl,onClick:()=>n(!0),children:"Install to iPhone"}),a&&e.jsx("div",{className:"lr-device-install__backdrop",role:"presentation",children:e.jsxs("section",{"aria-labelledby":f,"aria-modal":"true",className:"lr-device-install__dialog",role:"dialog",children:[e.jsxs("header",{className:"lr-device-install__header",children:[e.jsxs("div",{children:[e.jsx("h2",{id:f,children:"Install to a real iPhone"}),e.jsx("p",{children:"Prepare signing, connect and pair the device, build, then install from this browser."})]}),e.jsx("button",{type:"button",className:"lr-device-install__icon-button",onClick:()=>n(!1),children:"Close"})]}),i.error&&e.jsx("div",{className:"lr-device-install__error",children:i.error}),e.jsx("div",{className:"lr-device-install__steps",children:P.map((r,p)=>e.jsxs(T,{index:p+1,step:r,active:i.currentStep===r.id,open:c===r.id,status:i.stepStatuses[r.id],onToggle:()=>h(r.id),children:[r.id==="signing"&&e.jsxs("div",{className:"lr-device-install__step-body",children:[e.jsxs("div",{className:"lr-device-install__choice-grid",children:[e.jsxs("button",{type:"button",className:u("lr-device-install__choice",o==="apple-id"&&"lr-device-install__choice--active"),onClick:()=>j("apple-id"),children:[e.jsx("strong",{children:"Apple ID login"}),e.jsx("span",{children:"Sign in, choose team, bundle ID, devices, then generate signing assets."})]}),e.jsxs("button",{type:"button",className:u("lr-device-install__choice",o==="upload"&&"lr-device-install__choice--active"),onClick:()=>j("upload"),children:[e.jsx("strong",{children:"Upload certificates"}),e.jsx("span",{children:"Use an existing .p12 certificate and provisioning profile."})]})]}),o==="apple-id"&&e.jsxs("div",{className:"lr-device-install__section-panel",children:[e.jsxs("div",{className:"lr-device-install__grid",children:[e.jsxs("label",{className:"lr-device-install__field",children:[e.jsx("span",{children:"Apple ID"}),e.jsx("input",{type:"email",autoComplete:"username",placeholder:"name@example.com",value:m,onChange:s=>S(s.currentTarget.value)})]}),e.jsxs("label",{className:"lr-device-install__field",children:[e.jsx("span",{children:"Apple ID password"}),e.jsx("input",{type:"password",autoComplete:"current-password",placeholder:"Password stays in this browser",value:x,onChange:s=>C(s.currentTarget.value)})]}),!i.hasReusableAppleCertificate&&e.jsxs("label",{className:"lr-device-install__field",children:[e.jsx("span",{children:"Generated .p12 password"}),e.jsx("input",{type:"password",placeholder:"Used when exporting Apple certificate",onChange:s=>i.setSigningFiles({certificatePassword:s.currentTarget.value})})]})]}),e.jsxs("div",{className:"lr-device-install__actions",children:[e.jsx("button",{type:"button",className:"lr-device-install__secondary",disabled:l||!t.apiUrl||!m||!x||i.busyAction==="signing",onClick:()=>void i.startAppleIDLogin({accountName:m,password:x}),children:i.appleSigningStatus==="authenticating"?"Signing in...":"Sign in with Apple ID"}),e.jsxs("span",{className:"lr-device-install__hint",children:["Apple password is used only by browser-side SRP. Status: ",i.appleSigningStatus]})]}),i.appleSigningStatus==="two-factor-required"&&e.jsxs("div",{className:"lr-device-install__grid",children:[e.jsxs("label",{className:"lr-device-install__field",children:[e.jsx("span",{children:"Two-factor code"}),e.jsx("input",{type:"text",inputMode:"numeric",autoComplete:"one-time-code",value:_,onChange:s=>A(s.currentTarget.value)})]}),e.jsx("button",{type:"button",className:"lr-device-install__secondary",disabled:!_||i.busyAction==="signing",onClick:()=>void i.submitAppleTwoFactorCode(_),children:"Submit Apple ID code"})]}),i.appleTeams.length>0&&e.jsxs("label",{className:"lr-device-install__field",children:[e.jsx("span",{children:"Apple Developer team"}),e.jsx("select",{value:i.selectedAppleTeamID??"",onChange:s=>i.setSelectedAppleTeamID(s.currentTarget.value||void 0),children:i.appleTeams.map((s,b)=>{const v=s.teamId??(s.providerId===void 0?void 0:String(s.providerId))??s.publicProviderId??"";return e.jsxs("option",{value:v,children:[s.name??"Apple Developer Team"," ",v?`(${v})`:""]},`${v}-${b}`)})})]}),i.appleDevices.length>0&&e.jsxs("label",{className:"lr-device-install__field",children:[e.jsx("span",{children:"Apple Developer devices"}),e.jsx("select",{multiple:!0,value:i.selectedAppleDeviceIDs,onChange:s=>i.setSelectedAppleDeviceIDs(Array.from(s.currentTarget.selectedOptions).map(b=>b.value)),children:i.appleDevices.map(s=>e.jsxs("option",{value:s.deviceId??"",children:[s.name??s.model??"Apple device"," ",s.deviceNumber??""]},s.deviceId??s.deviceNumber))})]}),i.applePortalSummary&&e.jsxs("p",{className:"lr-device-install__hint",children:["Found ",i.applePortalSummary.certificateCount," certificates and"," ",i.applePortalSummary.profileCount," provisioning profiles."]}),i.hasReusableAppleCertificate&&e.jsx("p",{className:"lr-device-install__hint",children:"Reusing the certificate and private key stored in this browser."}),e.jsx("button",{type:"button",className:"lr-device-install__primary",disabled:l||!i.canPrepareAppleSigningAssets,onClick:()=>void i.prepareAppleSigningAssets(),children:i.appleSigningStatus==="preparing-assets"?"Preparing signing assets...":"Generate certificate and profile"})]}),o==="upload"&&e.jsxs("div",{className:"lr-device-install__section-panel",children:[e.jsxs("div",{className:"lr-device-install__grid",children:[e.jsxs("label",{className:"lr-device-install__field",children:[e.jsx("span",{children:"Certificate (.p12)"}),e.jsx("input",{type:"file",accept:".p12,application/x-pkcs12",onChange:s=>y("certificateFile",s)})]}),e.jsxs("label",{className:"lr-device-install__field",children:[e.jsx("span",{children:"Provisioning profile"}),e.jsx("input",{type:"file",accept:".mobileprovision",onChange:s=>y("provisioningProfileFile",s)})]}),e.jsxs("label",{className:"lr-device-install__field",children:[e.jsx("span",{children:"Uploaded .p12 password"}),e.jsx("input",{type:"password",placeholder:"Export password",onChange:s=>i.setSigningFiles({certificatePassword:s.currentTarget.value})})]})]}),e.jsx("p",{className:"lr-device-install__hint",children:"The provisioning profile will be checked against the connected iPhone before the build starts."})]}),i.hasSigningAssets&&e.jsx("p",{children:"Signing assets are stored in this browser for the selected bundle and device."})]}),r.id==="connect"&&e.jsxs("div",{className:"lr-device-install__step-body",children:[e.jsx("p",{children:"WebUSB works in Chromium browsers on secure origins. Connect the iPhone over USB, approve the browser permission prompt, then pair this browser."}),e.jsxs("div",{className:"lr-device-install__actions",children:[e.jsx("button",{type:"button",className:"lr-device-install__primary",disabled:l||!i.canRequestUSBAccess,onClick:()=>void i.requestUSBAccess(),children:i.busyAction==="usb"?"Selecting iPhone...":"Allow USB access"}),e.jsx("button",{type:"button",className:"lr-device-install__secondary",disabled:l||!i.canPairBrowser,onClick:()=>void i.pairBrowser(),children:i.busyAction==="pair"?"Pairing...":i.pairConfirmationRequired?"Confirm pair record":"Pair browser"})]}),i.device&&e.jsx("div",{className:"lr-device-install__device",children:`${i.device.productName??"iPhone"} ${i.device.serialNumber??""}`.trim()}),i.pairConfirmationRequired&&e.jsxs("p",{children:["Unlock the iPhone and tap ",e.jsx("strong",{children:"Trust"})," in the system dialog, then confirm the pair record."]}),e.jsx("p",{children:i.hasPairRecord?"Pair record is stored locally. Continue to the build check.":"Pair this browser once before building and installing."})]}),r.id==="build"&&e.jsxs("div",{className:"lr-device-install__step-body",children:[e.jsxs("div",{className:"lr-device-install__checklist",children:[e.jsx(g,{label:"Signing assets",ready:i.hasSigningInputs,pendingText:"Ready to verify"}),e.jsx(g,{label:"USB device",ready:!!i.device}),e.jsx(g,{label:"Pair record",ready:i.hasPairRecord}),e.jsx(g,{label:"Profile includes connected device",ready:i.connectedDeviceInProfile,pendingText:"Checked when the build starts"})]}),i.device&&i.appleTeams.length>0&&!i.connectedAppleDeviceRegistered&&e.jsx("button",{type:"button",className:"lr-device-install__secondary",disabled:l||!!i.busyAction,onClick:()=>void i.registerConnectedAppleDevice(),children:"Register connected iPhone"}),e.jsx("button",{type:"button",className:"lr-device-install__primary",disabled:l||!i.canBuild,onClick:()=>void i.startDeviceBuild(),children:i.busyAction==="build"?"Starting build...":"Start device build"}),e.jsxs("details",{className:"lr-device-install__build-logs",open:i.buildLogPanelOpen,onToggle:s=>i.setBuildLogPanelOpen(s.currentTarget.open),children:[e.jsxs("summary",{children:["Build logs (",i.buildStatus,")"]}),e.jsx("pre",{children:i.buildLogs.length>0?i.buildLogs.filter(s=>s.type!=="meta").map(s=>s.data).join(`
|
|
2
|
+
`):"Build logs will appear here while the device build is running."})]})]}),r.id==="install"&&e.jsxs("div",{className:"lr-device-install__step-body",children:[e.jsx("button",{type:"button",className:"lr-device-install__primary",disabled:l||!i.canInstall,onClick:()=>void i.startInstallation(),children:i.busyAction==="install"?"Installing...":"Install last build"}),e.jsx("button",{type:"button",className:"lr-device-install__secondary",onClick:i.stopRelay,children:"Stop relay"})]})]},r.id))}),e.jsxs("footer",{className:"lr-device-install__logs",children:[e.jsx("h3",{children:"Progress"}),e.jsx("ol",{children:i.logs.map((r,p)=>e.jsx("li",{children:r},`${p}-${r.slice(0,24)}`))})]})]})})]})}function T({index:l,step:t,active:a,open:n,status:c,onToggle:h,children:o}){return e.jsxs("article",{className:u("lr-device-install__step",a&&"lr-device-install__step--active"),children:[e.jsxs("button",{type:"button",className:"lr-device-install__step-header","aria-expanded":n,onClick:h,children:[e.jsx("div",{className:"lr-device-install__step-number",children:l}),e.jsxs("div",{children:[e.jsx("h3",{children:t.title}),e.jsx("p",{children:t.description})]}),e.jsx("span",{className:u("lr-device-install__status",`lr-device-install__status--${c}`),children:c==="complete"?"✓ Completed":c})]}),n&&o]})}function g({label:l,ready:t,pendingText:a="Not ready"}){const n=t===void 0?a:t?"Ready":"Needs attention";return e.jsxs("div",{className:"lr-device-install__check-row",children:[e.jsx("span",{children:l}),e.jsx("strong",{children:n})]})}exports.DeviceInstallDialog=I;exports.clsx=u;
|