@sitepong/fastnode 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +81 -0
- package/bin/fastnode.js +13 -0
- package/bin/fastnode.ts +5 -0
- package/dist/actions/index.cjs +7405 -0
- package/dist/actions/index.cjs.map +1 -0
- package/dist/actions/index.d.cts +15 -0
- package/dist/actions/index.d.ts +15 -0
- package/dist/actions/index.mjs +7377 -0
- package/dist/actions/index.mjs.map +1 -0
- package/dist/cert/index.cjs +219 -0
- package/dist/cert/index.cjs.map +1 -0
- package/dist/cert/index.d.cts +4 -0
- package/dist/cert/index.d.ts +4 -0
- package/dist/cert/index.mjs +191 -0
- package/dist/cert/index.mjs.map +1 -0
- package/dist/cert-BmJGtYtb.d.cts +27 -0
- package/dist/cert-owkOFNW8.d.ts +27 -0
- package/dist/cli/index.cjs +7998 -0
- package/dist/cli/index.cjs.map +1 -0
- package/dist/cli/index.d.cts +9 -0
- package/dist/cli/index.d.ts +9 -0
- package/dist/cli/index.mjs +7972 -0
- package/dist/cli/index.mjs.map +1 -0
- package/dist/client/index.cjs +2592 -0
- package/dist/client/index.cjs.map +1 -0
- package/dist/client/index.d.cts +2 -0
- package/dist/client/index.d.ts +2 -0
- package/dist/client/index.mjs +2582 -0
- package/dist/client/index.mjs.map +1 -0
- package/dist/context-CymLkfrS.d.cts +13 -0
- package/dist/context-CymLkfrS.d.ts +13 -0
- package/dist/core/index.cjs +281 -0
- package/dist/core/index.cjs.map +1 -0
- package/dist/core/index.d.cts +1 -0
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.mjs +254 -0
- package/dist/core/index.mjs.map +1 -0
- package/dist/deliver/index.cjs +328 -0
- package/dist/deliver/index.cjs.map +1 -0
- package/dist/deliver/index.d.cts +3 -0
- package/dist/deliver/index.d.ts +3 -0
- package/dist/deliver/index.mjs +322 -0
- package/dist/deliver/index.mjs.map +1 -0
- package/dist/enums-B609j2rb.d.cts +20 -0
- package/dist/enums-B609j2rb.d.ts +20 -0
- package/dist/frameit/index.cjs +247 -0
- package/dist/frameit/index.cjs.map +1 -0
- package/dist/frameit/index.d.cts +1 -0
- package/dist/frameit/index.d.ts +1 -0
- package/dist/frameit/index.mjs +242 -0
- package/dist/frameit/index.mjs.map +1 -0
- package/dist/gym/index.cjs +356 -0
- package/dist/gym/index.cjs.map +1 -0
- package/dist/gym/index.d.cts +2 -0
- package/dist/gym/index.d.ts +2 -0
- package/dist/gym/index.mjs +346 -0
- package/dist/gym/index.mjs.map +1 -0
- package/dist/index-1Vu2cRQ2.d.ts +99 -0
- package/dist/index-A5MimeQk.d.ts +72 -0
- package/dist/index-B0yhu_LZ.d.ts +76 -0
- package/dist/index-B9yXicrQ.d.ts +62 -0
- package/dist/index-BFdNOmPJ.d.cts +53 -0
- package/dist/index-BLubSlgK.d.cts +1513 -0
- package/dist/index-BN0ubxjZ.d.ts +70 -0
- package/dist/index-BQJIJlK7.d.cts +70 -0
- package/dist/index-BYonklf3.d.cts +84 -0
- package/dist/index-BYonklf3.d.ts +84 -0
- package/dist/index-BimqCmY8.d.cts +78 -0
- package/dist/index-BimqCmY8.d.ts +78 -0
- package/dist/index-BoU8qt8r.d.cts +59 -0
- package/dist/index-BoU8qt8r.d.ts +59 -0
- package/dist/index-C2yG3wXA.d.cts +95 -0
- package/dist/index-C2yG3wXA.d.ts +95 -0
- package/dist/index-CR3BFPIz.d.cts +77 -0
- package/dist/index-CR3BFPIz.d.ts +77 -0
- package/dist/index-CWNLnSOL.d.cts +99 -0
- package/dist/index-Cp6cjtd-.d.cts +65 -0
- package/dist/index-Cp6cjtd-.d.ts +65 -0
- package/dist/index-D1Izm7qt.d.ts +1513 -0
- package/dist/index-D5eihzwM.d.cts +76 -0
- package/dist/index-DImN9PWc.d.ts +155 -0
- package/dist/index-DfCUVJX1.d.cts +62 -0
- package/dist/index-DfirmFbC.d.ts +32 -0
- package/dist/index-DkvinY7_.d.ts +54 -0
- package/dist/index-DrUpRXRG.d.cts +155 -0
- package/dist/index-EcVvViW8.d.cts +72 -0
- package/dist/index-HRiaaX-Q.d.cts +54 -0
- package/dist/index-TfXqwuac.d.ts +53 -0
- package/dist/index-lt819Jgj.d.cts +32 -0
- package/dist/index.cjs +8464 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +23 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.mjs +8410 -0
- package/dist/index.mjs.map +1 -0
- package/dist/lane/index.cjs +7641 -0
- package/dist/lane/index.cjs.map +1 -0
- package/dist/lane/index.d.cts +51 -0
- package/dist/lane/index.d.ts +51 -0
- package/dist/lane/index.mjs +7603 -0
- package/dist/lane/index.mjs.map +1 -0
- package/dist/match/index.cjs +942 -0
- package/dist/match/index.cjs.map +1 -0
- package/dist/match/index.d.cts +5 -0
- package/dist/match/index.d.ts +5 -0
- package/dist/match/index.mjs +913 -0
- package/dist/match/index.mjs.map +1 -0
- package/dist/pem/index.cjs +195 -0
- package/dist/pem/index.cjs.map +1 -0
- package/dist/pem/index.d.cts +3 -0
- package/dist/pem/index.d.ts +3 -0
- package/dist/pem/index.mjs +170 -0
- package/dist/pem/index.mjs.map +1 -0
- package/dist/pilot/index.cjs +206 -0
- package/dist/pilot/index.cjs.map +1 -0
- package/dist/pilot/index.d.cts +3 -0
- package/dist/pilot/index.d.ts +3 -0
- package/dist/pilot/index.mjs +196 -0
- package/dist/pilot/index.mjs.map +1 -0
- package/dist/precheck/index.cjs +277 -0
- package/dist/precheck/index.cjs.map +1 -0
- package/dist/precheck/index.d.cts +3 -0
- package/dist/precheck/index.d.ts +3 -0
- package/dist/precheck/index.mjs +274 -0
- package/dist/precheck/index.mjs.map +1 -0
- package/dist/produce/index.cjs +200 -0
- package/dist/produce/index.cjs.map +1 -0
- package/dist/produce/index.d.cts +3 -0
- package/dist/produce/index.d.ts +3 -0
- package/dist/produce/index.mjs +191 -0
- package/dist/produce/index.mjs.map +1 -0
- package/dist/scan/index.cjs +187 -0
- package/dist/scan/index.cjs.map +1 -0
- package/dist/scan/index.d.cts +1 -0
- package/dist/scan/index.d.ts +1 -0
- package/dist/scan/index.mjs +183 -0
- package/dist/scan/index.mjs.map +1 -0
- package/dist/sigh/index.cjs +203 -0
- package/dist/sigh/index.cjs.map +1 -0
- package/dist/sigh/index.d.cts +3 -0
- package/dist/sigh/index.d.ts +3 -0
- package/dist/sigh/index.mjs +198 -0
- package/dist/sigh/index.mjs.map +1 -0
- package/dist/snapshot/index.cjs +448 -0
- package/dist/snapshot/index.cjs.map +1 -0
- package/dist/snapshot/index.d.cts +1 -0
- package/dist/snapshot/index.d.ts +1 -0
- package/dist/snapshot/index.mjs +438 -0
- package/dist/snapshot/index.mjs.map +1 -0
- package/dist/trainer/index.cjs +395 -0
- package/dist/trainer/index.cjs.map +1 -0
- package/dist/trainer/index.d.cts +1 -0
- package/dist/trainer/index.d.ts +1 -0
- package/dist/trainer/index.mjs +372 -0
- package/dist/trainer/index.mjs.map +1 -0
- package/dist/xcode/index.cjs +188 -0
- package/dist/xcode/index.cjs.map +1 -0
- package/dist/xcode/index.d.cts +1 -0
- package/dist/xcode/index.d.ts +1 -0
- package/dist/xcode/index.mjs +176 -0
- package/dist/xcode/index.mjs.map +1 -0
- package/package.json +223 -0
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
import { spawn } from 'child_process';
|
|
2
|
+
import { mkdtemp, writeFile, unlink, readFile, stat, readdir } from 'fs/promises';
|
|
3
|
+
import { join, extname } from 'path';
|
|
4
|
+
import { tmpdir } from 'os';
|
|
5
|
+
import { existsSync } from 'fs';
|
|
6
|
+
import { createHash } from 'crypto';
|
|
7
|
+
|
|
8
|
+
var __defProp = Object.defineProperty;
|
|
9
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
10
|
+
var __esm = (fn, res) => function __init() {
|
|
11
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
12
|
+
};
|
|
13
|
+
var __export = (target, all) => {
|
|
14
|
+
for (var name in all)
|
|
15
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
// src/xcode/platform.ts
|
|
19
|
+
function requireMacOS(feature) {
|
|
20
|
+
if (process.platform !== "darwin") {
|
|
21
|
+
throw new Error(
|
|
22
|
+
`${feature} requires macOS. This operation uses Xcode command-line tools which are not available on ${process.platform}.`
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
var init_platform = __esm({
|
|
27
|
+
"src/xcode/platform.ts"() {
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
// src/xcode/upload.ts
|
|
32
|
+
var upload_exports = {};
|
|
33
|
+
__export(upload_exports, {
|
|
34
|
+
uploadWithAltool: () => uploadWithAltool
|
|
35
|
+
});
|
|
36
|
+
async function uploadWithAltool(options) {
|
|
37
|
+
requireMacOS("altool upload");
|
|
38
|
+
let keyDir;
|
|
39
|
+
if (options.apiPrivateKey && !options.apiKeyPath) {
|
|
40
|
+
keyDir = await mkdtemp(join(tmpdir(), "fastnode-altool-"));
|
|
41
|
+
const keyPath = join(keyDir, `AuthKey_${options.apiKeyId}.p8`);
|
|
42
|
+
await writeFile(keyPath, options.apiPrivateKey);
|
|
43
|
+
}
|
|
44
|
+
const args = [
|
|
45
|
+
"altool",
|
|
46
|
+
"--upload-app",
|
|
47
|
+
"-f",
|
|
48
|
+
options.filePath,
|
|
49
|
+
"-t",
|
|
50
|
+
options.platform ?? "ios",
|
|
51
|
+
"--apiKey",
|
|
52
|
+
options.apiKeyId,
|
|
53
|
+
"--apiIssuer",
|
|
54
|
+
options.apiIssuerId
|
|
55
|
+
];
|
|
56
|
+
const env = { ...process.env };
|
|
57
|
+
if (keyDir) {
|
|
58
|
+
env.API_PRIVATE_KEYS_DIR = keyDir;
|
|
59
|
+
}
|
|
60
|
+
return new Promise((resolve) => {
|
|
61
|
+
const child = spawn("xcrun", args, {
|
|
62
|
+
env,
|
|
63
|
+
stdio: ["ignore", "pipe", "pipe"]
|
|
64
|
+
});
|
|
65
|
+
let output = "";
|
|
66
|
+
child.stdout.on("data", (data) => {
|
|
67
|
+
const chunk = data.toString();
|
|
68
|
+
output += chunk;
|
|
69
|
+
options.onOutput?.(chunk);
|
|
70
|
+
});
|
|
71
|
+
child.stderr.on("data", (data) => {
|
|
72
|
+
const chunk = data.toString();
|
|
73
|
+
output += chunk;
|
|
74
|
+
options.onOutput?.(chunk);
|
|
75
|
+
});
|
|
76
|
+
child.on("close", async (code) => {
|
|
77
|
+
if (keyDir) {
|
|
78
|
+
const keyPath = join(keyDir, `AuthKey_${options.apiKeyId}.p8`);
|
|
79
|
+
await unlink(keyPath).catch(() => {
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
resolve({ success: code === 0, output });
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
var init_upload = __esm({
|
|
87
|
+
"src/xcode/upload.ts"() {
|
|
88
|
+
init_platform();
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
var REVIEW_FILENAME_TO_FIELD = {
|
|
92
|
+
// Modern (ASC-aligned) filenames
|
|
93
|
+
first_name: "firstName",
|
|
94
|
+
last_name: "lastName",
|
|
95
|
+
phone_number: "phoneNumber",
|
|
96
|
+
email_address: "emailAddress",
|
|
97
|
+
demo_user: "demoUser",
|
|
98
|
+
demo_password: "demoPassword",
|
|
99
|
+
notes: "notes",
|
|
100
|
+
// Legacy Fastlane filenames
|
|
101
|
+
review_first_name: "firstName",
|
|
102
|
+
review_last_name: "lastName",
|
|
103
|
+
review_phone_number: "phoneNumber",
|
|
104
|
+
review_email: "emailAddress",
|
|
105
|
+
review_demo_user: "demoUser",
|
|
106
|
+
review_demo_password: "demoPassword",
|
|
107
|
+
review_notes: "notes"
|
|
108
|
+
};
|
|
109
|
+
var LOCALE_FILES = {
|
|
110
|
+
"description.txt": "description",
|
|
111
|
+
"keywords.txt": "keywords",
|
|
112
|
+
"release_notes.txt": "releaseNotes",
|
|
113
|
+
"support_url.txt": "supportUrl",
|
|
114
|
+
"marketing_url.txt": "marketingUrl",
|
|
115
|
+
"promotional_text.txt": "promotionalText",
|
|
116
|
+
"name.txt": "name",
|
|
117
|
+
"subtitle.txt": "subtitle",
|
|
118
|
+
"privacy_url.txt": "privacyUrl"
|
|
119
|
+
};
|
|
120
|
+
async function loadMetadata(metadataPath) {
|
|
121
|
+
const localizations = [];
|
|
122
|
+
let copyright;
|
|
123
|
+
let reviewInfo;
|
|
124
|
+
let reviewInformation;
|
|
125
|
+
try {
|
|
126
|
+
copyright = (await readFile(join(metadataPath, "copyright.txt"), "utf-8")).trim();
|
|
127
|
+
} catch {
|
|
128
|
+
}
|
|
129
|
+
const reviewDir = join(metadataPath, "review_information");
|
|
130
|
+
try {
|
|
131
|
+
const reviewStat = await stat(reviewDir);
|
|
132
|
+
if (reviewStat.isDirectory()) {
|
|
133
|
+
reviewInfo = {};
|
|
134
|
+
reviewInformation = {};
|
|
135
|
+
const files = await readdir(reviewDir);
|
|
136
|
+
for (const file of files) {
|
|
137
|
+
if (!file.endsWith(".txt")) continue;
|
|
138
|
+
const key = file.replace(".txt", "");
|
|
139
|
+
const content = (await readFile(join(reviewDir, file), "utf-8")).trim();
|
|
140
|
+
reviewInfo[key] = content;
|
|
141
|
+
const field = REVIEW_FILENAME_TO_FIELD[key];
|
|
142
|
+
if (field && content) reviewInformation[field] = content;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
} catch {
|
|
146
|
+
}
|
|
147
|
+
const entries = await readdir(metadataPath, { withFileTypes: true });
|
|
148
|
+
for (const entry of entries) {
|
|
149
|
+
if (!entry.isDirectory()) continue;
|
|
150
|
+
if (entry.name === "review_information" || entry.name === "trade_representative_contact_information") continue;
|
|
151
|
+
const locale = entry.name;
|
|
152
|
+
const localeDir = join(metadataPath, locale);
|
|
153
|
+
const localization = { locale };
|
|
154
|
+
for (const [filename, key] of Object.entries(LOCALE_FILES)) {
|
|
155
|
+
try {
|
|
156
|
+
const content = (await readFile(join(localeDir, filename), "utf-8")).trim();
|
|
157
|
+
if (content) {
|
|
158
|
+
localization[key] = content;
|
|
159
|
+
}
|
|
160
|
+
} catch {
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
localizations.push(localization);
|
|
164
|
+
}
|
|
165
|
+
return { localizations, copyright, reviewInfo, reviewInformation };
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// src/deliver/index.ts
|
|
169
|
+
async function uploadToAppStore(options) {
|
|
170
|
+
const platform = options.platform ?? "IOS";
|
|
171
|
+
const app = await options.client.apps.findByBundleId(options.bundleIdentifier);
|
|
172
|
+
if (!app) throw new Error(`App not found: ${options.bundleIdentifier}`);
|
|
173
|
+
const versions = await options.client.appStoreVersions.listForApp(app.id, {
|
|
174
|
+
filter: { platform }
|
|
175
|
+
});
|
|
176
|
+
let version = versions.find(
|
|
177
|
+
(v) => v.attributes.appStoreState === "PREPARE_FOR_SUBMISSION" || v.attributes.appStoreState === "DEVELOPER_REJECTED"
|
|
178
|
+
);
|
|
179
|
+
if (!version && options.appVersion) {
|
|
180
|
+
version = await options.client.appStoreVersions.create({
|
|
181
|
+
appId: app.id,
|
|
182
|
+
versionString: options.appVersion,
|
|
183
|
+
platform,
|
|
184
|
+
releaseType: options.releaseType
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
if (!version) {
|
|
188
|
+
throw new Error("No editable app store version found. Pass appVersion to create one.");
|
|
189
|
+
}
|
|
190
|
+
if (!options.skipMetadata && options.metadataPath && existsSync(options.metadataPath)) {
|
|
191
|
+
await uploadMetadata({
|
|
192
|
+
client: options.client,
|
|
193
|
+
appId: app.id,
|
|
194
|
+
versionId: version.id,
|
|
195
|
+
metadataPath: options.metadataPath
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
if (options.copyright) {
|
|
199
|
+
await options.client.appStoreVersions.update(version.id, {
|
|
200
|
+
copyright: options.copyright
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
if (!options.skipScreenshots && options.screenshotsPath && existsSync(options.screenshotsPath)) {
|
|
204
|
+
await uploadScreenshots({
|
|
205
|
+
client: options.client,
|
|
206
|
+
versionId: version.id,
|
|
207
|
+
screenshotsPath: options.screenshotsPath
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
if (!options.skipBinaryUpload) {
|
|
211
|
+
const binaryPath = options.ipaPath ?? options.pkgPath;
|
|
212
|
+
if (binaryPath && options.apiKeyId && options.apiIssuerId) {
|
|
213
|
+
const { uploadWithAltool: uploadWithAltool2 } = await Promise.resolve().then(() => (init_upload(), upload_exports));
|
|
214
|
+
await uploadWithAltool2({
|
|
215
|
+
filePath: binaryPath,
|
|
216
|
+
apiKeyId: options.apiKeyId,
|
|
217
|
+
apiIssuerId: options.apiIssuerId,
|
|
218
|
+
apiPrivateKey: options.apiPrivateKey,
|
|
219
|
+
onOutput: options.onOutput
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
let submitted = false;
|
|
224
|
+
if (options.submitForReview) {
|
|
225
|
+
await submitForReview({
|
|
226
|
+
client: options.client,
|
|
227
|
+
appId: app.id,
|
|
228
|
+
versionId: version.id
|
|
229
|
+
});
|
|
230
|
+
submitted = true;
|
|
231
|
+
}
|
|
232
|
+
return { appId: app.id, versionId: version.id, submitted };
|
|
233
|
+
}
|
|
234
|
+
async function submitForReview(options) {
|
|
235
|
+
await options.client.reviewSubmissions.submitVersion(options.versionId);
|
|
236
|
+
}
|
|
237
|
+
async function uploadMetadata(options) {
|
|
238
|
+
const metadata = await loadMetadata(options.metadataPath);
|
|
239
|
+
const existingLocs = await options.client.appStoreVersions.getLocalizations(options.versionId);
|
|
240
|
+
for (const loc of metadata.localizations) {
|
|
241
|
+
const existing = existingLocs.find((e) => e.attributes.locale === loc.locale);
|
|
242
|
+
const attrs = {};
|
|
243
|
+
if (loc.description) attrs.description = loc.description;
|
|
244
|
+
if (loc.keywords) attrs.keywords = loc.keywords;
|
|
245
|
+
if (loc.releaseNotes) attrs.whatsNew = loc.releaseNotes;
|
|
246
|
+
if (loc.supportUrl) attrs.supportUrl = loc.supportUrl;
|
|
247
|
+
if (loc.marketingUrl) attrs.marketingUrl = loc.marketingUrl;
|
|
248
|
+
if (loc.promotionalText) attrs.promotionalText = loc.promotionalText;
|
|
249
|
+
if (existing) {
|
|
250
|
+
await options.client.appStoreVersions.updateLocalization(existing.id, attrs);
|
|
251
|
+
} else {
|
|
252
|
+
await options.client.appStoreVersions.createLocalization({
|
|
253
|
+
versionId: options.versionId,
|
|
254
|
+
locale: loc.locale,
|
|
255
|
+
...attrs
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
if (metadata.copyright) {
|
|
260
|
+
await options.client.appStoreVersions.update(options.versionId, {
|
|
261
|
+
copyright: metadata.copyright
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
async function uploadScreenshots(options) {
|
|
266
|
+
const localizations = await options.client.appStoreVersions.getLocalizations(options.versionId);
|
|
267
|
+
for (const loc of localizations) {
|
|
268
|
+
const localeDir = join(options.screenshotsPath, loc.attributes.locale);
|
|
269
|
+
if (!existsSync(localeDir)) continue;
|
|
270
|
+
const sets = await options.client.appScreenshots.listSetsForLocalization(loc.id);
|
|
271
|
+
const files = (await readdir(localeDir)).filter(
|
|
272
|
+
(f) => [".png", ".jpg", ".jpeg"].includes(extname(f).toLowerCase())
|
|
273
|
+
);
|
|
274
|
+
for (const file of files) {
|
|
275
|
+
const filePath = join(localeDir, file);
|
|
276
|
+
const fileData = await readFile(filePath);
|
|
277
|
+
const checksum = createHash("md5").update(fileData).digest("hex");
|
|
278
|
+
const displayType = detectDisplayType(file);
|
|
279
|
+
if (!displayType) continue;
|
|
280
|
+
let set = sets.find((s) => s.attributes.screenshotDisplayType === displayType);
|
|
281
|
+
if (!set) {
|
|
282
|
+
set = await options.client.appScreenshots.createSet({
|
|
283
|
+
localizationId: loc.id,
|
|
284
|
+
screenshotDisplayType: displayType
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
const reserved = await options.client.appScreenshots.reserveScreenshot({
|
|
288
|
+
setId: set.id,
|
|
289
|
+
fileName: file,
|
|
290
|
+
fileSize: fileData.length
|
|
291
|
+
});
|
|
292
|
+
const ops = reserved.attributes.uploadOperations;
|
|
293
|
+
if (ops) {
|
|
294
|
+
for (const op of ops) {
|
|
295
|
+
const chunk = fileData.subarray(op.offset, op.offset + op.length);
|
|
296
|
+
const headers = {};
|
|
297
|
+
for (const h of op.requestHeaders) {
|
|
298
|
+
headers[h.name] = h.value;
|
|
299
|
+
}
|
|
300
|
+
await fetch(op.url, { method: op.method, headers, body: chunk });
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
await options.client.appScreenshots.commitScreenshot(reserved.id, {
|
|
304
|
+
sourceFileChecksum: checksum,
|
|
305
|
+
uploaded: true
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
function detectDisplayType(filename) {
|
|
311
|
+
const lower = filename.toLowerCase();
|
|
312
|
+
if (lower.includes("6.7") || lower.includes("iphone_67")) return "APP_IPHONE_67";
|
|
313
|
+
if (lower.includes("6.5") || lower.includes("iphone_65")) return "APP_IPHONE_65";
|
|
314
|
+
if (lower.includes("5.5") || lower.includes("iphone_55")) return "APP_IPHONE_55";
|
|
315
|
+
if (lower.includes("ipad_pro_3gen") || lower.includes("12.9")) return "APP_IPAD_PRO_3GEN_129";
|
|
316
|
+
if (lower.includes("ipad_pro") || lower.includes("ipad")) return "APP_IPAD_PRO_129";
|
|
317
|
+
return null;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
export { loadMetadata, submitForReview, uploadMetadata, uploadScreenshots, uploadToAppStore };
|
|
321
|
+
//# sourceMappingURL=index.mjs.map
|
|
322
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/xcode/platform.ts","../../src/xcode/upload.ts","../../src/deliver/metadata.ts","../../src/deliver/index.ts"],"names":["join","uploadWithAltool","readdir","readFile"],"mappings":"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","file":"index.mjs","sourcesContent":["export function requireMacOS(feature: string): void {\n if (process.platform !== \"darwin\") {\n throw new Error(\n `${feature} requires macOS. This operation uses Xcode command-line tools ` +\n `which are not available on ${process.platform}.`\n );\n }\n}\n\nexport function isMacOS(): boolean {\n return process.platform === \"darwin\";\n}\n","import { spawn } from \"node:child_process\";\nimport { writeFile, unlink, mkdtemp } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { tmpdir } from \"node:os\";\nimport { requireMacOS } from \"./platform.js\";\n\nexport async function uploadWithAltool(options: {\n filePath: string;\n apiKeyId: string;\n apiIssuerId: string;\n apiPrivateKey?: string;\n apiKeyPath?: string;\n platform?: string;\n onOutput?: (chunk: string) => void;\n}): Promise<{ success: boolean; output: string }> {\n requireMacOS(\"altool upload\");\n\n // Write temp .p8 if private key content provided\n let keyDir: string | undefined;\n if (options.apiPrivateKey && !options.apiKeyPath) {\n keyDir = await mkdtemp(join(tmpdir(), \"fastnode-altool-\"));\n const keyPath = join(keyDir, `AuthKey_${options.apiKeyId}.p8`);\n await writeFile(keyPath, options.apiPrivateKey);\n }\n\n const args = [\n \"altool\",\n \"--upload-app\",\n \"-f\", options.filePath,\n \"-t\", options.platform ?? \"ios\",\n \"--apiKey\", options.apiKeyId,\n \"--apiIssuer\", options.apiIssuerId,\n ];\n\n const env = { ...process.env };\n if (keyDir) {\n env.API_PRIVATE_KEYS_DIR = keyDir;\n }\n\n return new Promise<{ success: boolean; output: string }>((resolve) => {\n const child = spawn(\"xcrun\", args, {\n env,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n\n let output = \"\";\n\n child.stdout.on(\"data\", (data: Buffer) => {\n const chunk = data.toString();\n output += chunk;\n options.onOutput?.(chunk);\n });\n\n child.stderr.on(\"data\", (data: Buffer) => {\n const chunk = data.toString();\n output += chunk;\n options.onOutput?.(chunk);\n });\n\n child.on(\"close\", async (code) => {\n if (keyDir) {\n const keyPath = join(keyDir, `AuthKey_${options.apiKeyId}.p8`);\n await unlink(keyPath).catch(() => {});\n }\n resolve({ success: code === 0, output });\n });\n });\n}\n","import { readFile, readdir, stat } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nexport interface LocalizedMetadata {\n locale: string;\n description?: string;\n keywords?: string;\n releaseNotes?: string;\n supportUrl?: string;\n marketingUrl?: string;\n promotionalText?: string;\n name?: string;\n subtitle?: string;\n privacyUrl?: string;\n}\n\n/**\n * Review information submitted to App Store Connect for App Review.\n * Mirrors Fastlane deliver's `review_first_name`, `review_last_name`,\n * etc. (upload_metadata.rb lines 45-51), mapping to ASC's\n * `appStoreReviewDetails` attribute names.\n */\nexport interface ReviewInformation {\n firstName?: string;\n lastName?: string;\n phoneNumber?: string;\n emailAddress?: string;\n demoUser?: string;\n demoPassword?: string;\n notes?: string;\n}\n\nexport interface MetadataSet {\n localizations: LocalizedMetadata[];\n copyright?: string;\n /** Typed review information extracted from `review_information/`. */\n reviewInformation?: ReviewInformation;\n /** Raw review information map, including any unrecognised filenames. */\n reviewInfo?: Record<string, string>;\n}\n\n/**\n * Map from a `metadata/review_information/` filename (without `.txt`) to\n * its `ReviewInformation` field. Supports both the modern ASC-aligned\n * names and Fastlane's legacy `review_*` names.\n */\nconst REVIEW_FILENAME_TO_FIELD: Record<string, keyof ReviewInformation> = {\n // Modern (ASC-aligned) filenames\n first_name: \"firstName\",\n last_name: \"lastName\",\n phone_number: \"phoneNumber\",\n email_address: \"emailAddress\",\n demo_user: \"demoUser\",\n demo_password: \"demoPassword\",\n notes: \"notes\",\n // Legacy Fastlane filenames\n review_first_name: \"firstName\",\n review_last_name: \"lastName\",\n review_phone_number: \"phoneNumber\",\n review_email: \"emailAddress\",\n review_demo_user: \"demoUser\",\n review_demo_password: \"demoPassword\",\n review_notes: \"notes\",\n};\n\nconst LOCALE_FILES: Record<string, string> = {\n \"description.txt\": \"description\",\n \"keywords.txt\": \"keywords\",\n \"release_notes.txt\": \"releaseNotes\",\n \"support_url.txt\": \"supportUrl\",\n \"marketing_url.txt\": \"marketingUrl\",\n \"promotional_text.txt\": \"promotionalText\",\n \"name.txt\": \"name\",\n \"subtitle.txt\": \"subtitle\",\n \"privacy_url.txt\": \"privacyUrl\",\n};\n\nexport async function loadMetadata(metadataPath: string): Promise<MetadataSet> {\n const localizations: LocalizedMetadata[] = [];\n let copyright: string | undefined;\n let reviewInfo: Record<string, string> | undefined;\n let reviewInformation: ReviewInformation | undefined;\n\n // Read copyright\n try {\n copyright = (await readFile(join(metadataPath, \"copyright.txt\"), \"utf-8\")).trim();\n } catch {\n // Optional\n }\n\n // Read review info\n const reviewDir = join(metadataPath, \"review_information\");\n try {\n const reviewStat = await stat(reviewDir);\n if (reviewStat.isDirectory()) {\n reviewInfo = {};\n reviewInformation = {};\n const files = await readdir(reviewDir);\n for (const file of files) {\n if (!file.endsWith(\".txt\")) continue;\n const key = file.replace(\".txt\", \"\");\n const content = (await readFile(join(reviewDir, file), \"utf-8\")).trim();\n reviewInfo[key] = content;\n const field = REVIEW_FILENAME_TO_FIELD[key];\n if (field && content) reviewInformation[field] = content;\n }\n }\n } catch {\n // Optional\n }\n\n // Read locale directories\n const entries = await readdir(metadataPath, { withFileTypes: true });\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n if (entry.name === \"review_information\" || entry.name === \"trade_representative_contact_information\") continue;\n\n const locale = entry.name;\n const localeDir = join(metadataPath, locale);\n const localization: LocalizedMetadata = { locale };\n\n for (const [filename, key] of Object.entries(LOCALE_FILES)) {\n try {\n const content = (await readFile(join(localeDir, filename), \"utf-8\")).trim();\n if (content) {\n (localization as any)[key] = content;\n }\n } catch {\n // File doesn't exist — optional\n }\n }\n\n localizations.push(localization);\n }\n\n return { localizations, copyright, reviewInfo, reviewInformation };\n}\n","import { existsSync } from \"node:fs\";\nimport { readFile, readdir, stat } from \"node:fs/promises\";\nimport { join, extname } from \"node:path\";\nimport { createHash } from \"node:crypto\";\nimport type { AppStoreConnectClient } from \"../client/index.js\";\nimport type { Platform, ReleaseType } from \"../types/index.js\";\nimport { loadMetadata } from \"./metadata.js\";\n\nexport { loadMetadata } from \"./metadata.js\";\nexport type { LocalizedMetadata, MetadataSet } from \"./metadata.js\";\n\nexport interface DeliverOptions {\n client: AppStoreConnectClient;\n bundleIdentifier: string;\n appVersion?: string;\n platform?: Platform;\n ipaPath?: string;\n pkgPath?: string;\n metadataPath?: string;\n screenshotsPath?: string;\n submitForReview?: boolean;\n automaticRelease?: boolean;\n releaseType?: ReleaseType;\n skipBinaryUpload?: boolean;\n skipMetadata?: boolean;\n skipScreenshots?: boolean;\n force?: boolean;\n apiKeyId?: string;\n apiIssuerId?: string;\n apiPrivateKey?: string;\n copyright?: string;\n onOutput?: (chunk: string) => void;\n}\n\nexport interface DeliverResult {\n appId: string;\n versionId: string;\n submitted: boolean;\n}\n\nexport async function uploadToAppStore(options: DeliverOptions): Promise<DeliverResult> {\n const platform = options.platform ?? \"IOS\";\n\n // Find app\n const app = await options.client.apps.findByBundleId(options.bundleIdentifier);\n if (!app) throw new Error(`App not found: ${options.bundleIdentifier}`);\n\n // Find or create version\n const versions = await options.client.appStoreVersions.listForApp(app.id, {\n filter: { platform },\n });\n\n let version = versions.find(\n (v) =>\n v.attributes.appStoreState === \"PREPARE_FOR_SUBMISSION\" ||\n v.attributes.appStoreState === \"DEVELOPER_REJECTED\"\n );\n\n if (!version && options.appVersion) {\n version = await options.client.appStoreVersions.create({\n appId: app.id,\n versionString: options.appVersion,\n platform,\n releaseType: options.releaseType,\n });\n }\n\n if (!version) {\n throw new Error(\"No editable app store version found. Pass appVersion to create one.\");\n }\n\n // Upload metadata\n if (!options.skipMetadata && options.metadataPath && existsSync(options.metadataPath)) {\n await uploadMetadata({\n client: options.client,\n appId: app.id,\n versionId: version.id,\n metadataPath: options.metadataPath,\n });\n }\n\n // Set copyright\n if (options.copyright) {\n await options.client.appStoreVersions.update(version.id, {\n copyright: options.copyright,\n });\n }\n\n // Upload screenshots\n if (!options.skipScreenshots && options.screenshotsPath && existsSync(options.screenshotsPath)) {\n await uploadScreenshots({\n client: options.client,\n versionId: version.id,\n screenshotsPath: options.screenshotsPath,\n });\n }\n\n // Upload binary\n if (!options.skipBinaryUpload) {\n const binaryPath = options.ipaPath ?? options.pkgPath;\n if (binaryPath && options.apiKeyId && options.apiIssuerId) {\n const { uploadWithAltool } = await import(\"../xcode/upload.js\");\n await uploadWithAltool({\n filePath: binaryPath,\n apiKeyId: options.apiKeyId,\n apiIssuerId: options.apiIssuerId,\n apiPrivateKey: options.apiPrivateKey,\n onOutput: options.onOutput,\n });\n }\n }\n\n // Submit for review\n let submitted = false;\n if (options.submitForReview) {\n await submitForReview({\n client: options.client,\n appId: app.id,\n versionId: version.id,\n });\n submitted = true;\n }\n\n return { appId: app.id, versionId: version.id, submitted };\n}\n\nexport async function submitForReview(options: {\n client: AppStoreConnectClient;\n appId: string;\n versionId: string;\n}): Promise<void> {\n await options.client.reviewSubmissions.submitVersion(options.versionId);\n}\n\nexport async function uploadMetadata(options: {\n client: AppStoreConnectClient;\n appId: string;\n versionId: string;\n metadataPath: string;\n}): Promise<void> {\n const metadata = await loadMetadata(options.metadataPath);\n\n // Get existing localizations\n const existingLocs = await options.client.appStoreVersions.getLocalizations(options.versionId);\n\n for (const loc of metadata.localizations) {\n const existing = existingLocs.find((e) => e.attributes.locale === loc.locale);\n const attrs: Record<string, string | undefined> = {};\n if (loc.description) attrs.description = loc.description;\n if (loc.keywords) attrs.keywords = loc.keywords;\n if (loc.releaseNotes) attrs.whatsNew = loc.releaseNotes;\n if (loc.supportUrl) attrs.supportUrl = loc.supportUrl;\n if (loc.marketingUrl) attrs.marketingUrl = loc.marketingUrl;\n if (loc.promotionalText) attrs.promotionalText = loc.promotionalText;\n\n if (existing) {\n await options.client.appStoreVersions.updateLocalization(existing.id, attrs);\n } else {\n await options.client.appStoreVersions.createLocalization({\n versionId: options.versionId,\n locale: loc.locale,\n ...attrs,\n });\n }\n }\n\n // Update copyright\n if (metadata.copyright) {\n await options.client.appStoreVersions.update(options.versionId, {\n copyright: metadata.copyright,\n });\n }\n}\n\nexport async function uploadScreenshots(options: {\n client: AppStoreConnectClient;\n versionId: string;\n screenshotsPath: string;\n}): Promise<void> {\n const localizations = await options.client.appStoreVersions.getLocalizations(options.versionId);\n\n for (const loc of localizations) {\n const localeDir = join(options.screenshotsPath, loc.attributes.locale);\n if (!existsSync(localeDir)) continue;\n\n const sets = await options.client.appScreenshots.listSetsForLocalization(loc.id);\n const files = (await readdir(localeDir)).filter((f) =>\n [\".png\", \".jpg\", \".jpeg\"].includes(extname(f).toLowerCase())\n );\n\n for (const file of files) {\n const filePath = join(localeDir, file);\n const fileData = await readFile(filePath);\n const checksum = createHash(\"md5\").update(fileData).digest(\"hex\");\n\n // Determine display type from filename convention\n const displayType = detectDisplayType(file);\n if (!displayType) continue;\n\n // Find or create screenshot set\n let set = sets.find((s) => s.attributes.screenshotDisplayType === displayType);\n if (!set) {\n set = await options.client.appScreenshots.createSet({\n localizationId: loc.id,\n screenshotDisplayType: displayType,\n });\n }\n\n // Reserve, upload, commit\n const reserved = await options.client.appScreenshots.reserveScreenshot({\n setId: set.id,\n fileName: file,\n fileSize: fileData.length,\n });\n\n // Upload chunks\n const ops = reserved.attributes.uploadOperations;\n if (ops) {\n for (const op of ops) {\n const chunk = fileData.subarray(op.offset, op.offset + op.length);\n const headers: Record<string, string> = {};\n for (const h of op.requestHeaders) {\n headers[h.name] = h.value;\n }\n await fetch(op.url, { method: op.method, headers, body: chunk });\n }\n }\n\n await options.client.appScreenshots.commitScreenshot(reserved.id, {\n sourceFileChecksum: checksum,\n uploaded: true,\n });\n }\n }\n}\n\nfunction detectDisplayType(filename: string): string | null {\n const lower = filename.toLowerCase();\n if (lower.includes(\"6.7\") || lower.includes(\"iphone_67\")) return \"APP_IPHONE_67\";\n if (lower.includes(\"6.5\") || lower.includes(\"iphone_65\")) return \"APP_IPHONE_65\";\n if (lower.includes(\"5.5\") || lower.includes(\"iphone_55\")) return \"APP_IPHONE_55\";\n if (lower.includes(\"ipad_pro_3gen\") || lower.includes(\"12.9\")) return \"APP_IPAD_PRO_3GEN_129\";\n if (lower.includes(\"ipad_pro\") || lower.includes(\"ipad\")) return \"APP_IPAD_PRO_129\";\n return null;\n}\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
type CertificateType = "DEVELOPMENT" | "DISTRIBUTION" | "IOS_DEVELOPMENT" | "IOS_DISTRIBUTION" | "MAC_APP_DISTRIBUTION" | "MAC_INSTALLER_DISTRIBUTION" | "MAC_APP_DEVELOPMENT" | "DEVELOPER_ID_KEXT" | "DEVELOPER_ID_APPLICATION" | "DEVELOPER_ID_APPLICATION_G2" | "DEVELOPER_ID_INSTALLER";
|
|
2
|
+
type ProfileType = "IOS_APP_DEVELOPMENT" | "IOS_APP_STORE" | "IOS_APP_ADHOC" | "IOS_APP_INHOUSE" | "MAC_APP_DEVELOPMENT" | "MAC_APP_STORE" | "MAC_APP_DIRECT" | "MAC_APP_INHOUSE" | "MAC_CATALYST_APP_DEVELOPMENT" | "MAC_CATALYST_APP_STORE" | "MAC_CATALYST_APP_DIRECT" | "MAC_CATALYST_APP_INHOUSE" | "TVOS_APP_DEVELOPMENT" | "TVOS_APP_STORE" | "TVOS_APP_ADHOC" | "TVOS_APP_INHOUSE";
|
|
3
|
+
type ProfileState = "ACTIVE" | "INVALID";
|
|
4
|
+
type Platform = "IOS" | "MAC_OS" | "TVOS" | "XROS";
|
|
5
|
+
type BundleIdPlatform = "IOS" | "MAC_OS" | "UNIVERSAL";
|
|
6
|
+
type DeviceClass = "APPLE_WATCH" | "IPAD" | "IPHONE" | "IPOD" | "APPLE_TV" | "MAC" | "APPLE_SILICON_MAC" | "INTEL_MAC" | "APPLE_VISION_PRO";
|
|
7
|
+
type DeviceStatus = "ENABLED" | "DISABLED";
|
|
8
|
+
type CapabilityType = "ICLOUD" | "IN_APP_PURCHASE" | "GAME_CENTER" | "PUSH_NOTIFICATIONS" | "WALLET" | "INTER_APP_AUDIO" | "MAPS" | "ASSOCIATED_DOMAINS" | "PERSONAL_VPN" | "APP_GROUPS" | "HEALTHKIT" | "HOMEKIT" | "WIRELESS_ACCESSORY_CONFIGURATION" | "APPLE_PAY" | "DATA_PROTECTION" | "SIRIKIT" | "NETWORK_EXTENSIONS" | "MULTIPATH" | "HOT_SPOT" | "NFC_TAG_READING" | "CLASSKIT" | "AUTOFILL_CREDENTIAL_PROVIDER" | "ACCESS_WIFI_INFORMATION" | "NETWORK_CUSTOM_PROTOCOL" | "COREMEDIA_HLS_LOW_LATENCY" | "SYSTEM_EXTENSION_INSTALL" | "USER_MANAGEMENT" | "APPLE_ID_AUTH" | "MARZIPAN" | "DRIVERKIT" | "USERNOTIFICATIONS_COMMUNICATION" | "GROUP_ACTIVITIES" | "HEALTHKIT_RECALIBRATE_ESTIMATES" | "CARPLAY_PLAYABLE_CONTENT" | "APP_ATTEST" | "EXTENDED_VIRTUAL_ADDRESSING" | "FAMILY_CONTROLS" | "FILEPROVIDER_TESTINGMODE" | "FONT_INSTALLATION" | "HLS_INTERSTITIAL_PREVIEW" | "MDM_MANAGED_ASSOCIATED_DOMAINS" | "MUSIC_KIT" | "SHAZAM_KIT" | "USERNOTIFICATIONS_TIMESENSITIVE" | "CARPLAY_MESSAGING" | "CARPLAY_NAVIGATION" | "CARPLAY_VOIP" | "CRITICAL_ALERTS" | "HOTSPOT_HELPER_MANAGED" | "DRIVERKIT_ENDPOINT_SECURITY" | "DRIVERKIT_HID_DEVICE" | "DRIVERKIT_NETWORKING" | "DRIVERKIT_SERIAL" | "DRIVERKIT_HID_EVENT_SERVICE" | "DRIVERKIT_HID" | "IPAD_CAMERA_MULTITASKING" | "SFUNIVERSALLINK_API" | "VP9_DECODER" | "DECLARED_AGE_RANGE";
|
|
9
|
+
/** Settings keys for capabilities that require extra configuration. */
|
|
10
|
+
type CapabilitySettingsKey = "ICLOUD_VERSION" | "DATA_PROTECTION_PERMISSION_LEVEL" | "APPLE_ID_AUTH_APP_CONSENT" | "GAME_CENTER_SETTING";
|
|
11
|
+
/** Option key values for capability settings. Mirrors BundleIdCapability::Options. */
|
|
12
|
+
type CapabilityOptionKey = "XCODE_5" | "XCODE_6" | "COMPLETE_PROTECTION" | "PROTECTED_UNLESS_OPEN" | "PROTECTED_UNTIL_FIRST_USER_AUTH" | "PRIMARY_APP_CONSENT" | "GAME_CENTER_MAC" | "GAME_CENTER_IOS";
|
|
13
|
+
type ContentRightsDeclaration = "DOES_NOT_USE_THIRD_PARTY_CONTENT" | "USES_THIRD_PARTY_CONTENT";
|
|
14
|
+
type BuildProcessingState = "PROCESSING" | "FAILED" | "INVALID" | "VALID";
|
|
15
|
+
type BetaReviewState = "WAITING_FOR_REVIEW" | "IN_REVIEW" | "REJECTED" | "APPROVED";
|
|
16
|
+
type ExportMethod = "app-store" | "ad-hoc" | "development" | "enterprise" | "validation" | "package" | "developer-id";
|
|
17
|
+
type AppStoreVersionState = "ACCEPTED" | "DEVELOPER_REJECTED" | "DEVELOPER_REMOVED_FROM_SALE" | "IN_REVIEW" | "INVALID_BINARY" | "METADATA_REJECTED" | "PENDING_APPLE_RELEASE" | "PENDING_CONTRACT" | "PENDING_DEVELOPER_RELEASE" | "PREPARE_FOR_SUBMISSION" | "PREORDER_READY_FOR_SALE" | "PROCESSING_FOR_APP_STORE" | "READY_FOR_REVIEW" | "READY_FOR_SALE" | "REJECTED" | "REMOVED_FROM_SALE" | "WAITING_FOR_EXPORT_COMPLIANCE" | "WAITING_FOR_REVIEW" | "REPLACED_WITH_NEW_VERSION" | "NOT_APPLICABLE";
|
|
18
|
+
type ReleaseType = "MANUAL" | "AFTER_APPROVAL" | "SCHEDULED";
|
|
19
|
+
|
|
20
|
+
export type { AppStoreVersionState as A, BundleIdPlatform as B, CertificateType as C, DeviceClass as D, ExportMethod as E, ProfileType as P, ReleaseType as R, ProfileState as a, Platform as b, DeviceStatus as c, CapabilityType as d, CapabilitySettingsKey as e, CapabilityOptionKey as f, ContentRightsDeclaration as g, BuildProcessingState as h, BetaReviewState as i };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
type CertificateType = "DEVELOPMENT" | "DISTRIBUTION" | "IOS_DEVELOPMENT" | "IOS_DISTRIBUTION" | "MAC_APP_DISTRIBUTION" | "MAC_INSTALLER_DISTRIBUTION" | "MAC_APP_DEVELOPMENT" | "DEVELOPER_ID_KEXT" | "DEVELOPER_ID_APPLICATION" | "DEVELOPER_ID_APPLICATION_G2" | "DEVELOPER_ID_INSTALLER";
|
|
2
|
+
type ProfileType = "IOS_APP_DEVELOPMENT" | "IOS_APP_STORE" | "IOS_APP_ADHOC" | "IOS_APP_INHOUSE" | "MAC_APP_DEVELOPMENT" | "MAC_APP_STORE" | "MAC_APP_DIRECT" | "MAC_APP_INHOUSE" | "MAC_CATALYST_APP_DEVELOPMENT" | "MAC_CATALYST_APP_STORE" | "MAC_CATALYST_APP_DIRECT" | "MAC_CATALYST_APP_INHOUSE" | "TVOS_APP_DEVELOPMENT" | "TVOS_APP_STORE" | "TVOS_APP_ADHOC" | "TVOS_APP_INHOUSE";
|
|
3
|
+
type ProfileState = "ACTIVE" | "INVALID";
|
|
4
|
+
type Platform = "IOS" | "MAC_OS" | "TVOS" | "XROS";
|
|
5
|
+
type BundleIdPlatform = "IOS" | "MAC_OS" | "UNIVERSAL";
|
|
6
|
+
type DeviceClass = "APPLE_WATCH" | "IPAD" | "IPHONE" | "IPOD" | "APPLE_TV" | "MAC" | "APPLE_SILICON_MAC" | "INTEL_MAC" | "APPLE_VISION_PRO";
|
|
7
|
+
type DeviceStatus = "ENABLED" | "DISABLED";
|
|
8
|
+
type CapabilityType = "ICLOUD" | "IN_APP_PURCHASE" | "GAME_CENTER" | "PUSH_NOTIFICATIONS" | "WALLET" | "INTER_APP_AUDIO" | "MAPS" | "ASSOCIATED_DOMAINS" | "PERSONAL_VPN" | "APP_GROUPS" | "HEALTHKIT" | "HOMEKIT" | "WIRELESS_ACCESSORY_CONFIGURATION" | "APPLE_PAY" | "DATA_PROTECTION" | "SIRIKIT" | "NETWORK_EXTENSIONS" | "MULTIPATH" | "HOT_SPOT" | "NFC_TAG_READING" | "CLASSKIT" | "AUTOFILL_CREDENTIAL_PROVIDER" | "ACCESS_WIFI_INFORMATION" | "NETWORK_CUSTOM_PROTOCOL" | "COREMEDIA_HLS_LOW_LATENCY" | "SYSTEM_EXTENSION_INSTALL" | "USER_MANAGEMENT" | "APPLE_ID_AUTH" | "MARZIPAN" | "DRIVERKIT" | "USERNOTIFICATIONS_COMMUNICATION" | "GROUP_ACTIVITIES" | "HEALTHKIT_RECALIBRATE_ESTIMATES" | "CARPLAY_PLAYABLE_CONTENT" | "APP_ATTEST" | "EXTENDED_VIRTUAL_ADDRESSING" | "FAMILY_CONTROLS" | "FILEPROVIDER_TESTINGMODE" | "FONT_INSTALLATION" | "HLS_INTERSTITIAL_PREVIEW" | "MDM_MANAGED_ASSOCIATED_DOMAINS" | "MUSIC_KIT" | "SHAZAM_KIT" | "USERNOTIFICATIONS_TIMESENSITIVE" | "CARPLAY_MESSAGING" | "CARPLAY_NAVIGATION" | "CARPLAY_VOIP" | "CRITICAL_ALERTS" | "HOTSPOT_HELPER_MANAGED" | "DRIVERKIT_ENDPOINT_SECURITY" | "DRIVERKIT_HID_DEVICE" | "DRIVERKIT_NETWORKING" | "DRIVERKIT_SERIAL" | "DRIVERKIT_HID_EVENT_SERVICE" | "DRIVERKIT_HID" | "IPAD_CAMERA_MULTITASKING" | "SFUNIVERSALLINK_API" | "VP9_DECODER" | "DECLARED_AGE_RANGE";
|
|
9
|
+
/** Settings keys for capabilities that require extra configuration. */
|
|
10
|
+
type CapabilitySettingsKey = "ICLOUD_VERSION" | "DATA_PROTECTION_PERMISSION_LEVEL" | "APPLE_ID_AUTH_APP_CONSENT" | "GAME_CENTER_SETTING";
|
|
11
|
+
/** Option key values for capability settings. Mirrors BundleIdCapability::Options. */
|
|
12
|
+
type CapabilityOptionKey = "XCODE_5" | "XCODE_6" | "COMPLETE_PROTECTION" | "PROTECTED_UNLESS_OPEN" | "PROTECTED_UNTIL_FIRST_USER_AUTH" | "PRIMARY_APP_CONSENT" | "GAME_CENTER_MAC" | "GAME_CENTER_IOS";
|
|
13
|
+
type ContentRightsDeclaration = "DOES_NOT_USE_THIRD_PARTY_CONTENT" | "USES_THIRD_PARTY_CONTENT";
|
|
14
|
+
type BuildProcessingState = "PROCESSING" | "FAILED" | "INVALID" | "VALID";
|
|
15
|
+
type BetaReviewState = "WAITING_FOR_REVIEW" | "IN_REVIEW" | "REJECTED" | "APPROVED";
|
|
16
|
+
type ExportMethod = "app-store" | "ad-hoc" | "development" | "enterprise" | "validation" | "package" | "developer-id";
|
|
17
|
+
type AppStoreVersionState = "ACCEPTED" | "DEVELOPER_REJECTED" | "DEVELOPER_REMOVED_FROM_SALE" | "IN_REVIEW" | "INVALID_BINARY" | "METADATA_REJECTED" | "PENDING_APPLE_RELEASE" | "PENDING_CONTRACT" | "PENDING_DEVELOPER_RELEASE" | "PREPARE_FOR_SUBMISSION" | "PREORDER_READY_FOR_SALE" | "PROCESSING_FOR_APP_STORE" | "READY_FOR_REVIEW" | "READY_FOR_SALE" | "REJECTED" | "REMOVED_FROM_SALE" | "WAITING_FOR_EXPORT_COMPLIANCE" | "WAITING_FOR_REVIEW" | "REPLACED_WITH_NEW_VERSION" | "NOT_APPLICABLE";
|
|
18
|
+
type ReleaseType = "MANUAL" | "AFTER_APPROVAL" | "SCHEDULED";
|
|
19
|
+
|
|
20
|
+
export type { AppStoreVersionState as A, BundleIdPlatform as B, CertificateType as C, DeviceClass as D, ExportMethod as E, ProfileType as P, ReleaseType as R, ProfileState as a, Platform as b, DeviceStatus as c, CapabilityType as d, CapabilitySettingsKey as e, CapabilityOptionKey as f, ContentRightsDeclaration as g, BuildProcessingState as h, BetaReviewState as i };
|