palbase 0.0.0-stage → 0.2.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/LICENSE +27 -0
- package/README.md +2 -2
- package/dist/ai/index.js +17 -0
- package/dist/backend/engine.js +2 -0
- package/dist/backend/env.js +1 -0
- package/dist/backend/index.js +12 -0
- package/dist/backend/stack.js +1 -0
- package/dist/backend/test.js +2 -0
- package/dist/chunks/5W6XJM46.js +13 -0
- package/dist/chunks/6OPBXB7Z.js +2 -0
- package/dist/chunks/7LOMYBLN.js +20 -0
- package/dist/chunks/AN5LCF5K.js +55 -0
- package/dist/chunks/ECUYQ73P.js +2 -0
- package/dist/chunks/HDX6YUAB.js +2 -0
- package/dist/chunks/HVC2C35F.js +2 -0
- package/dist/chunks/I3JNX6MZ.js +4 -0
- package/dist/chunks/JEJ5CFTK.js +2 -0
- package/dist/chunks/K3C2IEDS.js +2 -0
- package/dist/chunks/KRBVYYME.js +2 -0
- package/dist/chunks/NIJHTHNF.js +2 -0
- package/dist/chunks/TL4H6V3P.js +2 -0
- package/dist/chunks/UTRQWCMD.js +6 -0
- package/dist/chunks/ZFPDYRRY.js +2 -0
- package/dist/cli.js +815 -0
- package/dist/refuse/ai.js +2 -0
- package/dist/refuse/backend.js +2 -0
- package/dist/refuse/server.js +2 -0
- package/dist/server/index.js +2 -0
- package/dist/server/testing.js +2 -0
- package/dist/web/index.js +2 -0
- package/dist/web/palbe.js +2 -0
- package/dist/web/paywall.js +2 -0
- package/dist/web/vite.js +3 -0
- package/package.json +111 -4
- package/types/ai/src/ai.d.ts +178 -0
- package/types/ai/src/index.d.ts +5 -0
- package/types/ai/src/partial.d.ts +1 -0
- package/types/ai/src/schema.d.ts +47 -0
- package/types/backend/src/bootstrap.d.ts +72 -0
- package/types/backend/src/cache.d.ts +32 -0
- package/types/backend/src/container.d.ts +49 -0
- package/types/backend/src/database.d.ts +148 -0
- package/types/backend/src/db-env.d.ts +4 -0
- package/types/backend/src/decorators.d.ts +293 -0
- package/types/backend/src/engine-db.d.ts +24 -0
- package/types/backend/src/engine-exports.d.ts +3 -0
- package/types/backend/src/engine.d.ts +124 -0
- package/types/backend/src/env.d.ts +27 -0
- package/types/backend/src/errors.d.ts +70 -0
- package/types/backend/src/i18n.d.ts +21 -0
- package/types/backend/src/index.d.ts +23 -0
- package/types/backend/src/openapi.d.ts +73 -0
- package/types/backend/src/platform-calls.d.ts +41 -0
- package/types/backend/src/requests.d.ts +81 -0
- package/types/backend/src/rooms.d.ts +168 -0
- package/types/backend/src/router.d.ts +22 -0
- package/types/backend/src/runtime.d.ts +56 -0
- package/types/backend/src/services.d.ts +262 -0
- package/types/backend/src/stack.d.ts +20 -0
- package/types/backend/src/strings-files.d.ts +3 -0
- package/types/backend/src/testing/index.d.ts +3 -0
- package/types/backend/src/testing/unit.d.ts +66 -0
- package/types/backend/src/upload.d.ts +125 -0
- package/types/backend/src/webhooks.d.ts +113 -0
- package/types/internal/src/event.d.ts +9 -0
- package/types/internal/src/modules/ai.d.ts +678 -0
- package/types/internal/src/modules/analytics.d.ts +1414 -0
- package/types/internal/src/modules/auth.d.ts +5660 -0
- package/types/internal/src/modules/cache.d.ts +158 -0
- package/types/internal/src/modules/events.d.ts +19 -0
- package/types/internal/src/modules/flags.d.ts +957 -0
- package/types/internal/src/modules/index.d.ts +13 -0
- package/types/internal/src/modules/machines.d.ts +1584 -0
- package/types/internal/src/modules/notify.d.ts +1450 -0
- package/types/internal/src/modules/purchases.d.ts +4113 -0
- package/types/internal/src/modules/realtime.d.ts +326 -0
- package/types/internal/src/modules/secrets.d.ts +275 -0
- package/types/internal/src/modules/storage.d.ts +691 -0
- package/types/internal/src/modules/stores.d.ts +1516 -0
- package/types/internal/src/retry.d.ts +14 -0
- package/types/internal/src/transport.d.ts +106 -0
- package/types/server/src/auth/dpop.d.ts +47 -0
- package/types/server/src/auth/jwt.d.ts +115 -0
- package/types/server/src/index.d.ts +9 -0
- package/types/server/src/pages.d.ts +4 -0
- package/types/server/src/purchases.d.ts +51 -0
- package/types/server/src/secrets-env.d.ts +22 -0
- package/types/server/src/server.d.ts +40 -0
- package/types/server/src/testing.d.ts +91 -0
- package/types/server/src/webhooks.d.ts +72 -0
- package/types/web/src/analytics.d.ts +87 -0
- package/types/web/src/auth.d.ts +155 -0
- package/types/web/src/backend-error.d.ts +38 -0
- package/types/web/src/backend-names.d.ts +25 -0
- package/types/web/src/backends.d.ts +84 -0
- package/types/web/src/client.d.ts +51 -0
- package/types/web/src/index.d.ts +13 -0
- package/types/web/src/palbe.d.ts +2 -0
- package/types/web/src/paywall/icons.d.ts +5 -0
- package/types/web/src/paywall/index.d.ts +5 -0
- package/types/web/src/paywall/placement.d.ts +85 -0
- package/types/web/src/paywall/prices.d.ts +40 -0
- package/types/web/src/paywall/render.d.ts +54 -0
- package/types/web/src/paywall/resolve.d.ts +149 -0
- package/types/web/src/purchases.d.ts +86 -0
- package/types/web/src/rooms.d.ts +61 -0
- package/types/web/src/session.d.ts +91 -0
- package/types/web/src/socket.d.ts +87 -0
- package/types/web/src/vite.d.ts +49 -0
|
@@ -0,0 +1,1516 @@
|
|
|
1
|
+
import { type Reply, type Transport } from '../transport.js';
|
|
2
|
+
/**
|
|
3
|
+
* A step that changes something at Apple for good: planned, then run only when a person confirms it with its hash, within a day.
|
|
4
|
+
*/
|
|
5
|
+
export type Action = {
|
|
6
|
+
/**
|
|
7
|
+
* When it was planned.
|
|
8
|
+
*/
|
|
9
|
+
created_at: string;
|
|
10
|
+
/**
|
|
11
|
+
* When it was confirmed or declined.
|
|
12
|
+
*/
|
|
13
|
+
decided_at: string | null;
|
|
14
|
+
/**
|
|
15
|
+
* Who confirmed or declined it.
|
|
16
|
+
*/
|
|
17
|
+
decided_by: string | null;
|
|
18
|
+
/**
|
|
19
|
+
* When it can no longer be confirmed.
|
|
20
|
+
*/
|
|
21
|
+
expires_at: string;
|
|
22
|
+
/**
|
|
23
|
+
* The plan's hash: a confirmation names it.
|
|
24
|
+
*/
|
|
25
|
+
hash: string;
|
|
26
|
+
/**
|
|
27
|
+
* The action's id.
|
|
28
|
+
*/
|
|
29
|
+
id: string;
|
|
30
|
+
/**
|
|
31
|
+
* What it does.
|
|
32
|
+
*/
|
|
33
|
+
kind: "beta_review" | "export_compliance" | "expire_build";
|
|
34
|
+
/**
|
|
35
|
+
* Its package.
|
|
36
|
+
*/
|
|
37
|
+
package_id: string;
|
|
38
|
+
/**
|
|
39
|
+
* What it does, exactly.
|
|
40
|
+
*/
|
|
41
|
+
payload: {
|
|
42
|
+
[key: string]: unknown;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Who planned it.
|
|
46
|
+
*/
|
|
47
|
+
planned_by: string;
|
|
48
|
+
/**
|
|
49
|
+
* What Apple answered.
|
|
50
|
+
*/
|
|
51
|
+
result?: {
|
|
52
|
+
[key: string]: unknown;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Where it is.
|
|
56
|
+
*/
|
|
57
|
+
status: "planned" | "done" | "declined" | "failed";
|
|
58
|
+
/**
|
|
59
|
+
* What it does, for the person who confirms it.
|
|
60
|
+
*/
|
|
61
|
+
summary: string;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* stores.action.changed: an action was planned, done, declined or failed.
|
|
65
|
+
*/
|
|
66
|
+
export type ActionChangedEvent = {
|
|
67
|
+
/**
|
|
68
|
+
* The action.
|
|
69
|
+
*/
|
|
70
|
+
action_id: string;
|
|
71
|
+
/**
|
|
72
|
+
* What it does.
|
|
73
|
+
*/
|
|
74
|
+
kind: string;
|
|
75
|
+
/**
|
|
76
|
+
* Its package.
|
|
77
|
+
*/
|
|
78
|
+
package_id: string;
|
|
79
|
+
/**
|
|
80
|
+
* Where it is.
|
|
81
|
+
*/
|
|
82
|
+
status: string;
|
|
83
|
+
/**
|
|
84
|
+
* What it does.
|
|
85
|
+
*/
|
|
86
|
+
summary: string;
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* A page of actions, newest first.
|
|
90
|
+
*/
|
|
91
|
+
export type ActionPage = {
|
|
92
|
+
/**
|
|
93
|
+
* The actions.
|
|
94
|
+
*/
|
|
95
|
+
actions: Action[];
|
|
96
|
+
/**
|
|
97
|
+
* The next page's cursor; absent on the last.
|
|
98
|
+
*/
|
|
99
|
+
next_cursor?: string;
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* An app of the project linked to its store.
|
|
103
|
+
*/
|
|
104
|
+
export type App = {
|
|
105
|
+
/**
|
|
106
|
+
* The app's id (the registry's).
|
|
107
|
+
*/
|
|
108
|
+
app_id: string;
|
|
109
|
+
/**
|
|
110
|
+
* Its App Store Connect record's id; null until a person made the record on the website.
|
|
111
|
+
*/
|
|
112
|
+
asc_app_id: string | null;
|
|
113
|
+
/**
|
|
114
|
+
* Its bundle id.
|
|
115
|
+
*/
|
|
116
|
+
bundle_id: string;
|
|
117
|
+
/**
|
|
118
|
+
* Apple's id of the bundle id.
|
|
119
|
+
*/
|
|
120
|
+
bundle_resource_id: string;
|
|
121
|
+
/**
|
|
122
|
+
* When it was first linked.
|
|
123
|
+
*/
|
|
124
|
+
linked_at: string;
|
|
125
|
+
/**
|
|
126
|
+
* Its name at Apple.
|
|
127
|
+
*/
|
|
128
|
+
name: string;
|
|
129
|
+
/**
|
|
130
|
+
* The platform.
|
|
131
|
+
*/
|
|
132
|
+
platform: "ios";
|
|
133
|
+
/**
|
|
134
|
+
* Its Apple team.
|
|
135
|
+
*/
|
|
136
|
+
team_id: string;
|
|
137
|
+
/**
|
|
138
|
+
* When it was last linked.
|
|
139
|
+
*/
|
|
140
|
+
updated_at: string;
|
|
141
|
+
};
|
|
142
|
+
/**
|
|
143
|
+
* stores.app.changed: an app was linked to its store.
|
|
144
|
+
*/
|
|
145
|
+
export type AppChangedEvent = {
|
|
146
|
+
/**
|
|
147
|
+
* The app.
|
|
148
|
+
*/
|
|
149
|
+
app_id: string;
|
|
150
|
+
/**
|
|
151
|
+
* Its App Store Connect record.
|
|
152
|
+
*/
|
|
153
|
+
asc_app_id?: string | null;
|
|
154
|
+
/**
|
|
155
|
+
* Its bundle id.
|
|
156
|
+
*/
|
|
157
|
+
bundle_id: string;
|
|
158
|
+
/**
|
|
159
|
+
* What happened.
|
|
160
|
+
*/
|
|
161
|
+
change: "linked";
|
|
162
|
+
};
|
|
163
|
+
/**
|
|
164
|
+
* The project's linked apps.
|
|
165
|
+
*/
|
|
166
|
+
export type AppPage = {
|
|
167
|
+
/**
|
|
168
|
+
* The apps.
|
|
169
|
+
*/
|
|
170
|
+
apps: App[];
|
|
171
|
+
};
|
|
172
|
+
/**
|
|
173
|
+
* The project's Apple account (App Store Connect API key) as the API shows it: never the key itself.
|
|
174
|
+
*/
|
|
175
|
+
export type AppleAccount = {
|
|
176
|
+
/**
|
|
177
|
+
* What the person has to do, when Apple waits on them.
|
|
178
|
+
*/
|
|
179
|
+
action?: string;
|
|
180
|
+
/**
|
|
181
|
+
* What the key reached when it was last checked: apps, certificates, testflight, users. A role that lacks one is refused it by Apple.
|
|
182
|
+
*/
|
|
183
|
+
capabilities?: ("apps" | "certificates" | "testflight" | "users")[];
|
|
184
|
+
/**
|
|
185
|
+
* When Apple was last asked.
|
|
186
|
+
*/
|
|
187
|
+
checked_at?: string;
|
|
188
|
+
/**
|
|
189
|
+
* Whether the project has an Apple account connected.
|
|
190
|
+
*/
|
|
191
|
+
connected: boolean;
|
|
192
|
+
/**
|
|
193
|
+
* When the key was connected.
|
|
194
|
+
*/
|
|
195
|
+
connected_at?: string;
|
|
196
|
+
/**
|
|
197
|
+
* Who asked for the grant the key was connected with (the API key that asked).
|
|
198
|
+
*/
|
|
199
|
+
connected_by?: string;
|
|
200
|
+
/**
|
|
201
|
+
* The account's issuer id (team-wide, a UUID).
|
|
202
|
+
*/
|
|
203
|
+
issuer_id?: string;
|
|
204
|
+
/**
|
|
205
|
+
* The connected key's id (10 characters).
|
|
206
|
+
*/
|
|
207
|
+
key_id?: string;
|
|
208
|
+
/**
|
|
209
|
+
* What Apple last said of the key: active (answers it), agreement (refuses every call until the account holder accepts the account's agreements in App Store Connect), refused (does not accept the key).
|
|
210
|
+
*/
|
|
211
|
+
status?: "active" | "agreement" | "refused";
|
|
212
|
+
};
|
|
213
|
+
/**
|
|
214
|
+
* stores.apple.changed: the project's Apple account was connected, checked (and Apple's answer changed) or disconnected. Never the key.
|
|
215
|
+
*/
|
|
216
|
+
export type AppleChangedEvent = {
|
|
217
|
+
/**
|
|
218
|
+
* What the key reaches (connected, checked).
|
|
219
|
+
*/
|
|
220
|
+
capabilities?: string[];
|
|
221
|
+
/**
|
|
222
|
+
* What happened.
|
|
223
|
+
*/
|
|
224
|
+
change: "connected" | "checked" | "disconnected";
|
|
225
|
+
/**
|
|
226
|
+
* The account's issuer id.
|
|
227
|
+
*/
|
|
228
|
+
issuer_id: string;
|
|
229
|
+
/**
|
|
230
|
+
* The key's id.
|
|
231
|
+
*/
|
|
232
|
+
key_id: string;
|
|
233
|
+
/**
|
|
234
|
+
* What Apple said of the key (connected, checked).
|
|
235
|
+
*/
|
|
236
|
+
status?: "active" | "agreement" | "refused";
|
|
237
|
+
};
|
|
238
|
+
/**
|
|
239
|
+
* A one-time grant to connect an Apple key: the key goes from the person's browser (connect_url) or terminal (POST /stores/connect with the grant) straight to the module.
|
|
240
|
+
*/
|
|
241
|
+
export type AppleGrant = {
|
|
242
|
+
/**
|
|
243
|
+
* The page that takes the key from a browser. The grant rides in the URL's fragment, which a browser never sends to a server.
|
|
244
|
+
*/
|
|
245
|
+
connect_url: string;
|
|
246
|
+
/**
|
|
247
|
+
* When the grant stops working.
|
|
248
|
+
*/
|
|
249
|
+
expires_at: string;
|
|
250
|
+
/**
|
|
251
|
+
* The grant: spent by the first key Apple accepts, or after 30 minutes.
|
|
252
|
+
*/
|
|
253
|
+
grant: string;
|
|
254
|
+
};
|
|
255
|
+
/**
|
|
256
|
+
* The sandbox testers whose purchases Apple forgets.
|
|
257
|
+
*/
|
|
258
|
+
export type ClearPurchaseHistoryRequest = {
|
|
259
|
+
/**
|
|
260
|
+
* Their ids (1-100).
|
|
261
|
+
*/
|
|
262
|
+
tester_ids: string[];
|
|
263
|
+
};
|
|
264
|
+
/**
|
|
265
|
+
* The person's export compliance answer.
|
|
266
|
+
*/
|
|
267
|
+
export type ComplianceRequest = {
|
|
268
|
+
/**
|
|
269
|
+
* Whether the app uses encryption beyond HTTPS and what iOS provides.
|
|
270
|
+
*/
|
|
271
|
+
uses_non_exempt_encryption: boolean;
|
|
272
|
+
};
|
|
273
|
+
/**
|
|
274
|
+
* A confirmation, with the hash of the plan shown.
|
|
275
|
+
*/
|
|
276
|
+
export type ConfirmRequest = {
|
|
277
|
+
/**
|
|
278
|
+
* The plan's hash.
|
|
279
|
+
*/
|
|
280
|
+
hash: string;
|
|
281
|
+
};
|
|
282
|
+
/**
|
|
283
|
+
* An App Store Connect API key handed over with a grant.
|
|
284
|
+
*/
|
|
285
|
+
export type ConnectAppleKeyRequest = {
|
|
286
|
+
/**
|
|
287
|
+
* The .p8's file name, when a file was picked: Apple names it after the key (AuthKey_<KEYID>.p8), so a mismatch is caught.
|
|
288
|
+
*/
|
|
289
|
+
file_name?: string;
|
|
290
|
+
/**
|
|
291
|
+
* The grant a connect link carries.
|
|
292
|
+
*/
|
|
293
|
+
grant: string;
|
|
294
|
+
/**
|
|
295
|
+
* The account's issuer id (App Store Connect → Users and Access → Integrations).
|
|
296
|
+
*/
|
|
297
|
+
issuer_id: string;
|
|
298
|
+
/**
|
|
299
|
+
* The key's id: 10 capital letters and digits.
|
|
300
|
+
*/
|
|
301
|
+
key_id: string;
|
|
302
|
+
/**
|
|
303
|
+
* The .p8 file's text (PEM, a P-256 private key).
|
|
304
|
+
*/
|
|
305
|
+
private_key: string;
|
|
306
|
+
};
|
|
307
|
+
/**
|
|
308
|
+
* A package of an app.
|
|
309
|
+
*/
|
|
310
|
+
export type CreatePackageRequest = {
|
|
311
|
+
/**
|
|
312
|
+
* Names the request: sent again, the same package (and a new upload token while it waits for its build).
|
|
313
|
+
*/
|
|
314
|
+
command_id: string;
|
|
315
|
+
/**
|
|
316
|
+
* What each bundle asked for, by bundle id, as the build machine read it from the target (an unsigned build carries none): the build is signed with them, bounded by what Apple grants.
|
|
317
|
+
*/
|
|
318
|
+
entitlements?: {
|
|
319
|
+
[key: string]: {
|
|
320
|
+
[key: string]: unknown;
|
|
321
|
+
};
|
|
322
|
+
};
|
|
323
|
+
/**
|
|
324
|
+
* Notes (a commit, a branch).
|
|
325
|
+
*/
|
|
326
|
+
notes?: string;
|
|
327
|
+
};
|
|
328
|
+
/**
|
|
329
|
+
* A package sent to a channel.
|
|
330
|
+
*/
|
|
331
|
+
export type DeliverRequest = {
|
|
332
|
+
/**
|
|
333
|
+
* The channel.
|
|
334
|
+
*/
|
|
335
|
+
channel: "testflight";
|
|
336
|
+
/**
|
|
337
|
+
* The groups it goes to once ready.
|
|
338
|
+
*/
|
|
339
|
+
groups?: string[];
|
|
340
|
+
what_to_test?: WhatToTest;
|
|
341
|
+
};
|
|
342
|
+
/**
|
|
343
|
+
* A package's way to a channel's testers.
|
|
344
|
+
*/
|
|
345
|
+
export type Delivery = {
|
|
346
|
+
/**
|
|
347
|
+
* Apple's build id, once Apple has it.
|
|
348
|
+
*/
|
|
349
|
+
asc_build_id: string | null;
|
|
350
|
+
/**
|
|
351
|
+
* The channel.
|
|
352
|
+
*/
|
|
353
|
+
channel: "testflight";
|
|
354
|
+
/**
|
|
355
|
+
* When it was first sent.
|
|
356
|
+
*/
|
|
357
|
+
created_at: string;
|
|
358
|
+
/**
|
|
359
|
+
* What to do about it.
|
|
360
|
+
*/
|
|
361
|
+
error: string | null;
|
|
362
|
+
/**
|
|
363
|
+
* Why it failed: apple_agreement, apple_key_refused, certificate_limit, app_record_missing, manual_step, capability_missing, not_an_ipa, apple_refused, upload_failed, processing_failed, build_changed (the kept build is not the one uploaded), build_gone (no longer kept: builds are kept 90 days), step_timed_out (signing or handing it over took more than 45 minutes), worker_stopped (it stopped the module's worker three times), gave_up.
|
|
364
|
+
*/
|
|
365
|
+
error_code: string | null;
|
|
366
|
+
/**
|
|
367
|
+
* The groups it goes to once ready.
|
|
368
|
+
*/
|
|
369
|
+
groups: string[];
|
|
370
|
+
/**
|
|
371
|
+
* The package.
|
|
372
|
+
*/
|
|
373
|
+
package_id: string;
|
|
374
|
+
/**
|
|
375
|
+
* Apple's processing state.
|
|
376
|
+
*/
|
|
377
|
+
processing_state: string | null;
|
|
378
|
+
/**
|
|
379
|
+
* Who sent it.
|
|
380
|
+
*/
|
|
381
|
+
requested_by: string;
|
|
382
|
+
/**
|
|
383
|
+
* queued, signing, uploading, processing (Apple processes it), compliance (waits on the export compliance answer: POST /stores/packages/{id}/export-compliance), ready, failed.
|
|
384
|
+
*/
|
|
385
|
+
status: "queued" | "signing" | "uploading" | "processing" | "compliance" | "ready" | "failed";
|
|
386
|
+
/**
|
|
387
|
+
* When it last moved.
|
|
388
|
+
*/
|
|
389
|
+
updated_at: string;
|
|
390
|
+
/**
|
|
391
|
+
* The note testers read.
|
|
392
|
+
*/
|
|
393
|
+
what_to_test: string | null;
|
|
394
|
+
};
|
|
395
|
+
/**
|
|
396
|
+
* stores.delivery.changed: a delivery moved: queued, signing, uploading, processing, compliance, ready or failed.
|
|
397
|
+
*/
|
|
398
|
+
export type DeliveryChangedEvent = {
|
|
399
|
+
/**
|
|
400
|
+
* Apple's build id, once known.
|
|
401
|
+
*/
|
|
402
|
+
asc_build_id?: string;
|
|
403
|
+
/**
|
|
404
|
+
* The channel.
|
|
405
|
+
*/
|
|
406
|
+
channel: string;
|
|
407
|
+
/**
|
|
408
|
+
* What to do about it.
|
|
409
|
+
*/
|
|
410
|
+
error?: string;
|
|
411
|
+
/**
|
|
412
|
+
* Why it failed.
|
|
413
|
+
*/
|
|
414
|
+
error_code?: string;
|
|
415
|
+
/**
|
|
416
|
+
* The package.
|
|
417
|
+
*/
|
|
418
|
+
package_id: string;
|
|
419
|
+
/**
|
|
420
|
+
* Where it is now.
|
|
421
|
+
*/
|
|
422
|
+
status: "queued" | "signing" | "uploading" | "processing" | "compliance" | "ready" | "failed";
|
|
423
|
+
};
|
|
424
|
+
/**
|
|
425
|
+
* A package's deliveries.
|
|
426
|
+
*/
|
|
427
|
+
export type DeliveryPage = {
|
|
428
|
+
/**
|
|
429
|
+
* The deliveries.
|
|
430
|
+
*/
|
|
431
|
+
deliveries: Delivery[];
|
|
432
|
+
};
|
|
433
|
+
/**
|
|
434
|
+
* stores.delivery.requested: a delivery was sent (or sent again); the stores module runs it.
|
|
435
|
+
*/
|
|
436
|
+
export type DeliveryRequestedEvent = {
|
|
437
|
+
/**
|
|
438
|
+
* The channel.
|
|
439
|
+
*/
|
|
440
|
+
channel: "testflight";
|
|
441
|
+
/**
|
|
442
|
+
* The package.
|
|
443
|
+
*/
|
|
444
|
+
package_id: string;
|
|
445
|
+
};
|
|
446
|
+
export type ErrorResponse = {
|
|
447
|
+
/**
|
|
448
|
+
* Machine-readable error code (snake_case)
|
|
449
|
+
*/
|
|
450
|
+
error: string;
|
|
451
|
+
/**
|
|
452
|
+
* Human-readable explanation
|
|
453
|
+
*/
|
|
454
|
+
error_description: string;
|
|
455
|
+
/**
|
|
456
|
+
* Correlation ID for log/audit lookup
|
|
457
|
+
*/
|
|
458
|
+
request_id: string;
|
|
459
|
+
/**
|
|
460
|
+
* Seconds to wait before retrying; present on a refusal that ends with time.
|
|
461
|
+
*/
|
|
462
|
+
retry_after?: number;
|
|
463
|
+
/**
|
|
464
|
+
* HTTP status code (mirrors the response status)
|
|
465
|
+
*/
|
|
466
|
+
status: number;
|
|
467
|
+
};
|
|
468
|
+
/**
|
|
469
|
+
* A tester's TestFlight feedback.
|
|
470
|
+
*/
|
|
471
|
+
export type Feedback = {
|
|
472
|
+
/**
|
|
473
|
+
* What the tester wrote.
|
|
474
|
+
*/
|
|
475
|
+
comment?: string;
|
|
476
|
+
/**
|
|
477
|
+
* When it was sent.
|
|
478
|
+
*/
|
|
479
|
+
created_at: string;
|
|
480
|
+
/**
|
|
481
|
+
* The tester's address.
|
|
482
|
+
*/
|
|
483
|
+
email?: string;
|
|
484
|
+
/**
|
|
485
|
+
* Apple's id.
|
|
486
|
+
*/
|
|
487
|
+
id: string;
|
|
488
|
+
/**
|
|
489
|
+
* What it is.
|
|
490
|
+
*/
|
|
491
|
+
kind: "screenshot" | "crash";
|
|
492
|
+
};
|
|
493
|
+
/**
|
|
494
|
+
* An app's newest tester feedback.
|
|
495
|
+
*/
|
|
496
|
+
export type FeedbackPage = {
|
|
497
|
+
/**
|
|
498
|
+
* The feedback, newest first.
|
|
499
|
+
*/
|
|
500
|
+
feedback: Feedback[];
|
|
501
|
+
};
|
|
502
|
+
/**
|
|
503
|
+
* A group of people who test an app: in TestFlight an internal group (the account's App Store Connect users, who get a build at once) and an external one (everyone else, after Beta App Review).
|
|
504
|
+
*/
|
|
505
|
+
export type Group = {
|
|
506
|
+
/**
|
|
507
|
+
* Its app.
|
|
508
|
+
*/
|
|
509
|
+
app_id: string;
|
|
510
|
+
/**
|
|
511
|
+
* Its external TestFlight group.
|
|
512
|
+
*/
|
|
513
|
+
asc_external_group_id: string | null;
|
|
514
|
+
/**
|
|
515
|
+
* Its internal TestFlight group.
|
|
516
|
+
*/
|
|
517
|
+
asc_internal_group_id: string | null;
|
|
518
|
+
/**
|
|
519
|
+
* When it was made.
|
|
520
|
+
*/
|
|
521
|
+
created_at: string;
|
|
522
|
+
/**
|
|
523
|
+
* The group's id.
|
|
524
|
+
*/
|
|
525
|
+
id: string;
|
|
526
|
+
/**
|
|
527
|
+
* Its name.
|
|
528
|
+
*/
|
|
529
|
+
name: string;
|
|
530
|
+
/**
|
|
531
|
+
* How many testers it holds.
|
|
532
|
+
*/
|
|
533
|
+
testers: number;
|
|
534
|
+
/**
|
|
535
|
+
* When it last changed.
|
|
536
|
+
*/
|
|
537
|
+
updated_at: string;
|
|
538
|
+
};
|
|
539
|
+
/**
|
|
540
|
+
* A package to give a group.
|
|
541
|
+
*/
|
|
542
|
+
export type GroupBuildRequest = {
|
|
543
|
+
/**
|
|
544
|
+
* A package of the group's app that TestFlight has.
|
|
545
|
+
*/
|
|
546
|
+
package_id: string;
|
|
547
|
+
};
|
|
548
|
+
/**
|
|
549
|
+
* stores.group.changed: a group was made, renamed, deleted, its testers set, or a build given to it.
|
|
550
|
+
*/
|
|
551
|
+
export type GroupChangedEvent = {
|
|
552
|
+
/**
|
|
553
|
+
* Its app.
|
|
554
|
+
*/
|
|
555
|
+
app_id: string;
|
|
556
|
+
/**
|
|
557
|
+
* What happened.
|
|
558
|
+
*/
|
|
559
|
+
change: "created" | "renamed" | "deleted" | "testers" | "build";
|
|
560
|
+
/**
|
|
561
|
+
* The group.
|
|
562
|
+
*/
|
|
563
|
+
group_id: string;
|
|
564
|
+
/**
|
|
565
|
+
* Its name.
|
|
566
|
+
*/
|
|
567
|
+
name: string;
|
|
568
|
+
/**
|
|
569
|
+
* The package given (build).
|
|
570
|
+
*/
|
|
571
|
+
package_id?: string;
|
|
572
|
+
/**
|
|
573
|
+
* How many testers it holds.
|
|
574
|
+
*/
|
|
575
|
+
testers?: number;
|
|
576
|
+
};
|
|
577
|
+
/**
|
|
578
|
+
* An app's groups.
|
|
579
|
+
*/
|
|
580
|
+
export type GroupPage = {
|
|
581
|
+
/**
|
|
582
|
+
* The groups.
|
|
583
|
+
*/
|
|
584
|
+
groups: Group[];
|
|
585
|
+
};
|
|
586
|
+
/**
|
|
587
|
+
* A group's name.
|
|
588
|
+
*/
|
|
589
|
+
export type GroupRequest = {
|
|
590
|
+
/**
|
|
591
|
+
* 1 to 40 characters on one line.
|
|
592
|
+
*/
|
|
593
|
+
name: string;
|
|
594
|
+
};
|
|
595
|
+
/**
|
|
596
|
+
* A person in a group.
|
|
597
|
+
*/
|
|
598
|
+
export type GroupTester = {
|
|
599
|
+
/**
|
|
600
|
+
* When they were added.
|
|
601
|
+
*/
|
|
602
|
+
added_at: string;
|
|
603
|
+
/**
|
|
604
|
+
* Their address (lowercase).
|
|
605
|
+
*/
|
|
606
|
+
email: string;
|
|
607
|
+
/**
|
|
608
|
+
* First name.
|
|
609
|
+
*/
|
|
610
|
+
first_name: string | null;
|
|
611
|
+
/**
|
|
612
|
+
* Last name.
|
|
613
|
+
*/
|
|
614
|
+
last_name: string | null;
|
|
615
|
+
/**
|
|
616
|
+
* Which TestFlight group serves them: internal for the account's App Store Connect users.
|
|
617
|
+
*/
|
|
618
|
+
side: "internal" | "external";
|
|
619
|
+
};
|
|
620
|
+
/**
|
|
621
|
+
* The unsigned .ipa, as the build machine made it.
|
|
622
|
+
*/
|
|
623
|
+
export type IPAFile = Blob;
|
|
624
|
+
/**
|
|
625
|
+
* How the app is called at Apple.
|
|
626
|
+
*/
|
|
627
|
+
export type LinkAppRequest = {
|
|
628
|
+
/**
|
|
629
|
+
* Its name at Apple (folded to letters, digits and spaces); the bundle id when absent.
|
|
630
|
+
*/
|
|
631
|
+
name?: string;
|
|
632
|
+
};
|
|
633
|
+
/**
|
|
634
|
+
* A build handed to the stores.
|
|
635
|
+
*/
|
|
636
|
+
export type Package = {
|
|
637
|
+
/**
|
|
638
|
+
* Its app.
|
|
639
|
+
*/
|
|
640
|
+
app_id: string;
|
|
641
|
+
/**
|
|
642
|
+
* Its build number: above every number Apple and the stores have seen for the app. The build is made with it (CFBundleVersion).
|
|
643
|
+
*/
|
|
644
|
+
build_number: number;
|
|
645
|
+
/**
|
|
646
|
+
* The bundles in the build.
|
|
647
|
+
*/
|
|
648
|
+
bundles: PackageBundle[];
|
|
649
|
+
/**
|
|
650
|
+
* The request that made it.
|
|
651
|
+
*/
|
|
652
|
+
command_id: string;
|
|
653
|
+
/**
|
|
654
|
+
* When it was made.
|
|
655
|
+
*/
|
|
656
|
+
created_at: string;
|
|
657
|
+
/**
|
|
658
|
+
* Who asked for it.
|
|
659
|
+
*/
|
|
660
|
+
created_by: string;
|
|
661
|
+
/**
|
|
662
|
+
* Its deliveries.
|
|
663
|
+
*/
|
|
664
|
+
deliveries: Delivery[];
|
|
665
|
+
/**
|
|
666
|
+
* The package's id.
|
|
667
|
+
*/
|
|
668
|
+
id: string;
|
|
669
|
+
/**
|
|
670
|
+
* The caller's notes.
|
|
671
|
+
*/
|
|
672
|
+
notes: string | null;
|
|
673
|
+
/**
|
|
674
|
+
* The .ipa's SHA-256.
|
|
675
|
+
*/
|
|
676
|
+
sha256: string | null;
|
|
677
|
+
/**
|
|
678
|
+
* The .ipa's size in bytes.
|
|
679
|
+
*/
|
|
680
|
+
size: number | null;
|
|
681
|
+
/**
|
|
682
|
+
* awaiting_upload until the build machine hands the build over.
|
|
683
|
+
*/
|
|
684
|
+
status: "awaiting_upload" | "uploaded";
|
|
685
|
+
upload?: PackageUpload;
|
|
686
|
+
/**
|
|
687
|
+
* When its build arrived.
|
|
688
|
+
*/
|
|
689
|
+
uploaded_at: string | null;
|
|
690
|
+
/**
|
|
691
|
+
* What the build says it is (CFBundleShortVersionString), once uploaded.
|
|
692
|
+
*/
|
|
693
|
+
version: string | null;
|
|
694
|
+
};
|
|
695
|
+
/**
|
|
696
|
+
* One bundle of a build.
|
|
697
|
+
*/
|
|
698
|
+
export type PackageBundle = {
|
|
699
|
+
/**
|
|
700
|
+
* Its bundle id.
|
|
701
|
+
*/
|
|
702
|
+
bundle_id: string;
|
|
703
|
+
/**
|
|
704
|
+
* Its CFBundleName: the name its bundle id is registered with at Apple.
|
|
705
|
+
*/
|
|
706
|
+
name?: string;
|
|
707
|
+
/**
|
|
708
|
+
* Its path in the app (empty for the app itself).
|
|
709
|
+
*/
|
|
710
|
+
path: string;
|
|
711
|
+
};
|
|
712
|
+
/**
|
|
713
|
+
* stores.package.changed: a package was made, or its build arrived.
|
|
714
|
+
*/
|
|
715
|
+
export type PackageChangedEvent = {
|
|
716
|
+
/**
|
|
717
|
+
* Its app.
|
|
718
|
+
*/
|
|
719
|
+
app_id: string;
|
|
720
|
+
/**
|
|
721
|
+
* Its build number.
|
|
722
|
+
*/
|
|
723
|
+
build_number: number;
|
|
724
|
+
/**
|
|
725
|
+
* What happened.
|
|
726
|
+
*/
|
|
727
|
+
change: "created" | "uploaded";
|
|
728
|
+
/**
|
|
729
|
+
* The package.
|
|
730
|
+
*/
|
|
731
|
+
package_id: string;
|
|
732
|
+
/**
|
|
733
|
+
* Its version (uploaded).
|
|
734
|
+
*/
|
|
735
|
+
version?: string;
|
|
736
|
+
};
|
|
737
|
+
/**
|
|
738
|
+
* A page of packages, newest first.
|
|
739
|
+
*/
|
|
740
|
+
export type PackagePage = {
|
|
741
|
+
/**
|
|
742
|
+
* The next page's cursor; absent on the last.
|
|
743
|
+
*/
|
|
744
|
+
next_cursor?: string;
|
|
745
|
+
/**
|
|
746
|
+
* The packages.
|
|
747
|
+
*/
|
|
748
|
+
packages: Package[];
|
|
749
|
+
};
|
|
750
|
+
/**
|
|
751
|
+
* Where and how a build machine hands the build over: a PUT of the .ipa to url, the token in the Palbase-Upload-Token header.
|
|
752
|
+
*/
|
|
753
|
+
export type PackageUpload = {
|
|
754
|
+
/**
|
|
755
|
+
* When the token stops working.
|
|
756
|
+
*/
|
|
757
|
+
expires_at: string;
|
|
758
|
+
/**
|
|
759
|
+
* The upload token: shown once, the last one handed out works.
|
|
760
|
+
*/
|
|
761
|
+
token: string;
|
|
762
|
+
/**
|
|
763
|
+
* Where the .ipa is PUT.
|
|
764
|
+
*/
|
|
765
|
+
url: string;
|
|
766
|
+
};
|
|
767
|
+
/**
|
|
768
|
+
* One thing the sandbox needs.
|
|
769
|
+
*/
|
|
770
|
+
export type ReadinessCheck = {
|
|
771
|
+
/**
|
|
772
|
+
* What to do: a palbase command, or the place in App Store Connect where only a person can do it; empty when the check holds.
|
|
773
|
+
*/
|
|
774
|
+
fix: string;
|
|
775
|
+
/**
|
|
776
|
+
* The check's stable id: apple_account, apple_agreements, app_linked, server_notifications, sandbox_testers, products, or product:<product id>.
|
|
777
|
+
*/
|
|
778
|
+
id: string;
|
|
779
|
+
/**
|
|
780
|
+
* What holds or does not, in a sentence.
|
|
781
|
+
*/
|
|
782
|
+
message: string;
|
|
783
|
+
/**
|
|
784
|
+
* Whether it holds.
|
|
785
|
+
*/
|
|
786
|
+
ok: boolean;
|
|
787
|
+
};
|
|
788
|
+
/**
|
|
789
|
+
* What Beta App Review needs to know about an app; only the fields given are written.
|
|
790
|
+
*/
|
|
791
|
+
export type ReviewInfo = {
|
|
792
|
+
/**
|
|
793
|
+
* Email.
|
|
794
|
+
*/
|
|
795
|
+
contact_email?: string;
|
|
796
|
+
/**
|
|
797
|
+
* Whom Apple calls: first name.
|
|
798
|
+
*/
|
|
799
|
+
contact_first_name?: string;
|
|
800
|
+
/**
|
|
801
|
+
* Last name.
|
|
802
|
+
*/
|
|
803
|
+
contact_last_name?: string;
|
|
804
|
+
/**
|
|
805
|
+
* Phone.
|
|
806
|
+
*/
|
|
807
|
+
contact_phone?: string;
|
|
808
|
+
/**
|
|
809
|
+
* A sign-in for the reviewer, when the app needs one.
|
|
810
|
+
*/
|
|
811
|
+
demo_account_name?: string;
|
|
812
|
+
/**
|
|
813
|
+
* Its password.
|
|
814
|
+
*/
|
|
815
|
+
demo_account_password?: string;
|
|
816
|
+
/**
|
|
817
|
+
* What testers should test.
|
|
818
|
+
*/
|
|
819
|
+
description?: string;
|
|
820
|
+
/**
|
|
821
|
+
* Where testers send feedback.
|
|
822
|
+
*/
|
|
823
|
+
feedback_email?: string;
|
|
824
|
+
/**
|
|
825
|
+
* The locale of the description and feedback address; the app's primary one when absent.
|
|
826
|
+
*/
|
|
827
|
+
locale?: string;
|
|
828
|
+
/**
|
|
829
|
+
* Notes to the reviewer.
|
|
830
|
+
*/
|
|
831
|
+
notes?: string;
|
|
832
|
+
};
|
|
833
|
+
/**
|
|
834
|
+
* What Beta App Review still lacks.
|
|
835
|
+
*/
|
|
836
|
+
export type ReviewInfoAnswer = {
|
|
837
|
+
/**
|
|
838
|
+
* beta_description, feedback_email, contact_first_name, contact_last_name, contact_phone, contact_email, demo_account.
|
|
839
|
+
*/
|
|
840
|
+
missing: string[];
|
|
841
|
+
};
|
|
842
|
+
/**
|
|
843
|
+
* The app's TestFlight test information as Apple holds it, in one locale, and what Beta App Review still lacks. The demo account's password is never read out: only whether one is set.
|
|
844
|
+
*/
|
|
845
|
+
export type ReviewInfoState = {
|
|
846
|
+
/**
|
|
847
|
+
* Beta App Review's contact.
|
|
848
|
+
*/
|
|
849
|
+
contact_email: string;
|
|
850
|
+
/**
|
|
851
|
+
* Beta App Review's contact.
|
|
852
|
+
*/
|
|
853
|
+
contact_first_name: string;
|
|
854
|
+
/**
|
|
855
|
+
* Beta App Review's contact.
|
|
856
|
+
*/
|
|
857
|
+
contact_last_name: string;
|
|
858
|
+
/**
|
|
859
|
+
* Beta App Review's contact.
|
|
860
|
+
*/
|
|
861
|
+
contact_phone: string;
|
|
862
|
+
/**
|
|
863
|
+
* The demo account's name.
|
|
864
|
+
*/
|
|
865
|
+
demo_account_name: string;
|
|
866
|
+
/**
|
|
867
|
+
* Whether the demo account's password is set (it is never read out).
|
|
868
|
+
*/
|
|
869
|
+
demo_account_password_set: boolean;
|
|
870
|
+
/**
|
|
871
|
+
* Whether Beta App Review signs in with a demo account.
|
|
872
|
+
*/
|
|
873
|
+
demo_account_required: boolean;
|
|
874
|
+
/**
|
|
875
|
+
* What testers should test, in that locale.
|
|
876
|
+
*/
|
|
877
|
+
description: string;
|
|
878
|
+
/**
|
|
879
|
+
* Where testers send feedback, in that locale.
|
|
880
|
+
*/
|
|
881
|
+
feedback_email: string;
|
|
882
|
+
/**
|
|
883
|
+
* The locale read (the app's primary one unless asked).
|
|
884
|
+
*/
|
|
885
|
+
locale: string;
|
|
886
|
+
/**
|
|
887
|
+
* The locales the app has test information in.
|
|
888
|
+
*/
|
|
889
|
+
locales: string[];
|
|
890
|
+
/**
|
|
891
|
+
* What Beta App Review still lacks: beta_description, feedback_email, contact_first_name, contact_last_name, contact_phone, contact_email, demo_account.
|
|
892
|
+
*/
|
|
893
|
+
missing: string[];
|
|
894
|
+
/**
|
|
895
|
+
* Notes for Beta App Review.
|
|
896
|
+
*/
|
|
897
|
+
notes: string;
|
|
898
|
+
};
|
|
899
|
+
/**
|
|
900
|
+
* Whether an app can buy in the App Store's sandbox now, check by check.
|
|
901
|
+
*/
|
|
902
|
+
export type SandboxReadiness = {
|
|
903
|
+
/**
|
|
904
|
+
* The app checked (the registry's id); null when the environment links none.
|
|
905
|
+
*/
|
|
906
|
+
app_id: string | null;
|
|
907
|
+
/**
|
|
908
|
+
* The checks, in a stable order: the account's, the app's, then each product's.
|
|
909
|
+
*/
|
|
910
|
+
checks: ReadinessCheck[];
|
|
911
|
+
/**
|
|
912
|
+
* Every check holds.
|
|
913
|
+
*/
|
|
914
|
+
ready: boolean;
|
|
915
|
+
};
|
|
916
|
+
/**
|
|
917
|
+
* One of the Apple team's sandbox testers.
|
|
918
|
+
*/
|
|
919
|
+
export type SandboxTester = {
|
|
920
|
+
/**
|
|
921
|
+
* The sandbox Apple Account it signs in with.
|
|
922
|
+
*/
|
|
923
|
+
email: string;
|
|
924
|
+
/**
|
|
925
|
+
* As made in App Store Connect.
|
|
926
|
+
*/
|
|
927
|
+
first_name: string;
|
|
928
|
+
/**
|
|
929
|
+
* Apple's id for it.
|
|
930
|
+
*/
|
|
931
|
+
id: string;
|
|
932
|
+
/**
|
|
933
|
+
* Whether its purchases stop for an action of the buyer's (a purchase that needs it).
|
|
934
|
+
*/
|
|
935
|
+
interrupt_purchases: boolean;
|
|
936
|
+
/**
|
|
937
|
+
* As made in App Store Connect.
|
|
938
|
+
*/
|
|
939
|
+
last_name: string;
|
|
940
|
+
/**
|
|
941
|
+
* How fast its monthly subscriptions renew.
|
|
942
|
+
*/
|
|
943
|
+
subscription_renewal_rate: string;
|
|
944
|
+
/**
|
|
945
|
+
* The storefront it buys in (three letters: TUR, USA …).
|
|
946
|
+
*/
|
|
947
|
+
territory: string;
|
|
948
|
+
};
|
|
949
|
+
/**
|
|
950
|
+
* What changes of a sandbox tester: what is left out stays; at least one.
|
|
951
|
+
*/
|
|
952
|
+
export type SandboxTesterChange = {
|
|
953
|
+
/**
|
|
954
|
+
* Whether its purchases stop for an action of the buyer's.
|
|
955
|
+
*/
|
|
956
|
+
interrupt_purchases?: boolean;
|
|
957
|
+
/**
|
|
958
|
+
* How fast its monthly subscriptions renew.
|
|
959
|
+
*/
|
|
960
|
+
subscription_renewal_rate?: "MONTHLY_RENEWAL_EVERY_ONE_HOUR" | "MONTHLY_RENEWAL_EVERY_THIRTY_MINUTES" | "MONTHLY_RENEWAL_EVERY_FIFTEEN_MINUTES" | "MONTHLY_RENEWAL_EVERY_FIVE_MINUTES" | "MONTHLY_RENEWAL_EVERY_THREE_MINUTES";
|
|
961
|
+
/**
|
|
962
|
+
* The storefront it buys in: three letters (TUR, USA, DEU …).
|
|
963
|
+
*/
|
|
964
|
+
territory?: string;
|
|
965
|
+
};
|
|
966
|
+
/**
|
|
967
|
+
* The team's sandbox testers.
|
|
968
|
+
*/
|
|
969
|
+
export type SandboxTesterPage = {
|
|
970
|
+
/**
|
|
971
|
+
* Where a person makes another: Apple's API makes none.
|
|
972
|
+
*/
|
|
973
|
+
create_in: string;
|
|
974
|
+
/**
|
|
975
|
+
* The testers.
|
|
976
|
+
*/
|
|
977
|
+
testers: SandboxTester[];
|
|
978
|
+
};
|
|
979
|
+
/**
|
|
980
|
+
* A person to have in a group.
|
|
981
|
+
*/
|
|
982
|
+
export type TesterInput = {
|
|
983
|
+
/**
|
|
984
|
+
* Their address.
|
|
985
|
+
*/
|
|
986
|
+
email: string;
|
|
987
|
+
/**
|
|
988
|
+
* First name.
|
|
989
|
+
*/
|
|
990
|
+
first_name?: string;
|
|
991
|
+
/**
|
|
992
|
+
* Last name.
|
|
993
|
+
*/
|
|
994
|
+
last_name?: string;
|
|
995
|
+
};
|
|
996
|
+
/**
|
|
997
|
+
* A group's testers.
|
|
998
|
+
*/
|
|
999
|
+
export type TesterPage = {
|
|
1000
|
+
/**
|
|
1001
|
+
* The testers.
|
|
1002
|
+
*/
|
|
1003
|
+
testers: GroupTester[];
|
|
1004
|
+
};
|
|
1005
|
+
/**
|
|
1006
|
+
* Who a group holds, whole: those not named leave it.
|
|
1007
|
+
*/
|
|
1008
|
+
export type TestersRequest = {
|
|
1009
|
+
/**
|
|
1010
|
+
* The testers (100 at most).
|
|
1011
|
+
*/
|
|
1012
|
+
testers: TesterInput[];
|
|
1013
|
+
};
|
|
1014
|
+
/**
|
|
1015
|
+
* A build's note to testers.
|
|
1016
|
+
*/
|
|
1017
|
+
export type WhatToTest = {
|
|
1018
|
+
/**
|
|
1019
|
+
* Its locale; the app's primary one when absent.
|
|
1020
|
+
*/
|
|
1021
|
+
locale?: string;
|
|
1022
|
+
/**
|
|
1023
|
+
* The note.
|
|
1024
|
+
*/
|
|
1025
|
+
text: string;
|
|
1026
|
+
};
|
|
1027
|
+
/** The events this module sends the project's webhooks (x-palbase-events), by type: each one's payload, the event's data. */
|
|
1028
|
+
export interface Events {
|
|
1029
|
+
/**
|
|
1030
|
+
* stores.action.changed: an action was planned, done, declined or failed.
|
|
1031
|
+
*/
|
|
1032
|
+
"stores.action.changed": ActionChangedEvent;
|
|
1033
|
+
/**
|
|
1034
|
+
* stores.app.changed: an app was linked to its store.
|
|
1035
|
+
*/
|
|
1036
|
+
"stores.app.changed": AppChangedEvent;
|
|
1037
|
+
/**
|
|
1038
|
+
* stores.apple.changed: the project's Apple account was connected, checked (and Apple's answer changed) or disconnected. Never the key.
|
|
1039
|
+
*/
|
|
1040
|
+
"stores.apple.changed": AppleChangedEvent;
|
|
1041
|
+
/**
|
|
1042
|
+
* stores.delivery.changed: a delivery moved: queued, signing, uploading, processing, compliance, ready or failed.
|
|
1043
|
+
*/
|
|
1044
|
+
"stores.delivery.changed": DeliveryChangedEvent;
|
|
1045
|
+
/**
|
|
1046
|
+
* stores.delivery.requested: a delivery was sent (or sent again); the stores module runs it.
|
|
1047
|
+
*/
|
|
1048
|
+
"stores.delivery.requested": DeliveryRequestedEvent;
|
|
1049
|
+
/**
|
|
1050
|
+
* stores.group.changed: a group was made, renamed, deleted, its testers set, or a build given to it.
|
|
1051
|
+
*/
|
|
1052
|
+
"stores.group.changed": GroupChangedEvent;
|
|
1053
|
+
/**
|
|
1054
|
+
* stores.package.changed: a package was made, or its build arrived.
|
|
1055
|
+
*/
|
|
1056
|
+
"stores.package.changed": PackageChangedEvent;
|
|
1057
|
+
}
|
|
1058
|
+
/** Palbase Stores */
|
|
1059
|
+
export declare function client(t: Transport): {
|
|
1060
|
+
/**
|
|
1061
|
+
* List actions
|
|
1062
|
+
*
|
|
1063
|
+
* The project's planned and decided actions, newest first.
|
|
1064
|
+
*/
|
|
1065
|
+
listActions(input?: {
|
|
1066
|
+
query?: {
|
|
1067
|
+
status?: "planned" | "done" | "declined" | "failed"; /** How many to answer (1-200, default 50). */
|
|
1068
|
+
limit?: number; /** The next_cursor of the previous page. */
|
|
1069
|
+
cursor?: string;
|
|
1070
|
+
}; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
|
|
1071
|
+
signal?: AbortSignal;
|
|
1072
|
+
}): Promise<Reply<200, ActionPage>>;
|
|
1073
|
+
/**
|
|
1074
|
+
* Read an action
|
|
1075
|
+
*
|
|
1076
|
+
* An action, its summary and hash.
|
|
1077
|
+
*/
|
|
1078
|
+
getAction(input: {
|
|
1079
|
+
path: {
|
|
1080
|
+
action_id: string;
|
|
1081
|
+
}; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
|
|
1082
|
+
signal?: AbortSignal;
|
|
1083
|
+
}): Promise<Reply<200, Action>>;
|
|
1084
|
+
/**
|
|
1085
|
+
* Confirm an action
|
|
1086
|
+
*
|
|
1087
|
+
* Runs a planned action: only with its hash, only once, only before it expires. Emits `stores.action.changed`.
|
|
1088
|
+
*/
|
|
1089
|
+
confirmAction(input: {
|
|
1090
|
+
path: {
|
|
1091
|
+
action_id: string;
|
|
1092
|
+
};
|
|
1093
|
+
headers?: {
|
|
1094
|
+
"Idempotency-Key"?: string;
|
|
1095
|
+
};
|
|
1096
|
+
body: ConfirmRequest; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
|
|
1097
|
+
signal?: AbortSignal;
|
|
1098
|
+
}): Promise<Reply<200, Action>>;
|
|
1099
|
+
/**
|
|
1100
|
+
* Decline an action
|
|
1101
|
+
*
|
|
1102
|
+
* Declines a planned action: it will not run. Emits `stores.action.changed`.
|
|
1103
|
+
*/
|
|
1104
|
+
declineAction(input: {
|
|
1105
|
+
path: {
|
|
1106
|
+
action_id: string;
|
|
1107
|
+
};
|
|
1108
|
+
headers?: {
|
|
1109
|
+
"Idempotency-Key"?: string;
|
|
1110
|
+
}; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
|
|
1111
|
+
signal?: AbortSignal;
|
|
1112
|
+
}): Promise<Reply<200, Action>>;
|
|
1113
|
+
/**
|
|
1114
|
+
* Read the project's Apple account
|
|
1115
|
+
*
|
|
1116
|
+
* The connected App Store Connect API key's account, its status and what it reaches — never the key.
|
|
1117
|
+
*/
|
|
1118
|
+
getAppleAccount(input?: {
|
|
1119
|
+
signal?: AbortSignal;
|
|
1120
|
+
}): Promise<Reply<200, AppleAccount>>;
|
|
1121
|
+
/**
|
|
1122
|
+
* Disconnect the Apple account
|
|
1123
|
+
*
|
|
1124
|
+
* Forgets the key for good: nothing of it is kept. Emits `stores.apple.changed` (disconnected).
|
|
1125
|
+
*/
|
|
1126
|
+
disconnectApple(input?: {
|
|
1127
|
+
headers?: {
|
|
1128
|
+
"Idempotency-Key"?: string;
|
|
1129
|
+
}; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
|
|
1130
|
+
signal?: AbortSignal;
|
|
1131
|
+
}): Promise<Reply<204, undefined>>;
|
|
1132
|
+
/**
|
|
1133
|
+
* Check the Apple account again
|
|
1134
|
+
*
|
|
1135
|
+
* Asks Apple again what the connected key can do: after the account holder accepted Apple's agreements, or a key's role changed. Emits `stores.apple.changed` (checked) when Apple's answer changed.
|
|
1136
|
+
*/
|
|
1137
|
+
checkAppleAccount(input?: {
|
|
1138
|
+
headers?: {
|
|
1139
|
+
"Idempotency-Key"?: string;
|
|
1140
|
+
}; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
|
|
1141
|
+
signal?: AbortSignal;
|
|
1142
|
+
}): Promise<Reply<200, AppleAccount>>;
|
|
1143
|
+
/**
|
|
1144
|
+
* Grant a key's connection
|
|
1145
|
+
*
|
|
1146
|
+
* A one-time grant, good for 30 minutes, to hand the project an App Store Connect API key. Whoever asks for it never holds the key: the person opens `connect_url` in a browser, or a terminal posts the key to `POST /stores/connect` with the grant. A project holds 10 open grants at most (429 `too_many_grants`).
|
|
1147
|
+
*/
|
|
1148
|
+
createAppleGrant(input?: {
|
|
1149
|
+
headers?: {
|
|
1150
|
+
"Idempotency-Key"?: string;
|
|
1151
|
+
}; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
|
|
1152
|
+
signal?: AbortSignal;
|
|
1153
|
+
}): Promise<Reply<201, AppleGrant>>;
|
|
1154
|
+
/**
|
|
1155
|
+
* Check whether an app can buy in the sandbox
|
|
1156
|
+
*
|
|
1157
|
+
* Reads Apple live and answers whether the app can buy in the App Store's sandbox now, check by check, each with what to do when it does not hold: the connected key (`apple_account`), Apple's agreements (`apple_agreements` — the Account Holder accepts them in App Store Connect › Business), the app's link to its App Store Connect record (`app_linked`), where its App Store Server Notifications go (`server_notifications`), the team's sandbox testers (`sandbox_testers` — only a person makes one, in App Store Connect › Users and Access › Sandbox), whether the app has products at Apple (`products`) and each product's state (`product:<product id>`: READY_TO_SUBMIT and later sell in the sandbox; MISSING_METADATA names what is missing). A check that could not run says why. Nothing is written.
|
|
1158
|
+
*/
|
|
1159
|
+
getSandboxReadiness(input?: {
|
|
1160
|
+
query?: {
|
|
1161
|
+
app?: string;
|
|
1162
|
+
}; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
|
|
1163
|
+
signal?: AbortSignal;
|
|
1164
|
+
}): Promise<Reply<200, SandboxReadiness>>;
|
|
1165
|
+
/**
|
|
1166
|
+
* List the sandbox testers
|
|
1167
|
+
*
|
|
1168
|
+
* The Apple team's sandbox testers — the accounts that buy in the App Store's sandbox, every environment on the team alike — and where a person makes another (Apple's API makes none).
|
|
1169
|
+
*/
|
|
1170
|
+
listSandboxTesters(input?: {
|
|
1171
|
+
signal?: AbortSignal;
|
|
1172
|
+
}): Promise<Reply<200, SandboxTesterPage>>;
|
|
1173
|
+
/**
|
|
1174
|
+
* Clear sandbox testers' purchases
|
|
1175
|
+
*
|
|
1176
|
+
* Asks Apple to forget what the sandbox testers bought: each buys again as for the first time, a subscription's introductory offer among it. Apple clears them after it answers.
|
|
1177
|
+
*/
|
|
1178
|
+
clearSandboxPurchaseHistory(input: {
|
|
1179
|
+
headers?: {
|
|
1180
|
+
"Idempotency-Key"?: string;
|
|
1181
|
+
};
|
|
1182
|
+
body: ClearPurchaseHistoryRequest; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
|
|
1183
|
+
signal?: AbortSignal;
|
|
1184
|
+
}): Promise<Reply<202, ClearPurchaseHistoryRequest>>;
|
|
1185
|
+
/**
|
|
1186
|
+
* Change how a sandbox tester buys
|
|
1187
|
+
*
|
|
1188
|
+
* Changes a sandbox tester at Apple: how fast its monthly subscriptions renew, whether its purchases are interrupted (to test a purchase that needs the buyer's action), its storefront. What the request leaves out stays.
|
|
1189
|
+
*/
|
|
1190
|
+
updateSandboxTester(input: {
|
|
1191
|
+
path: {
|
|
1192
|
+
tester_id: string;
|
|
1193
|
+
};
|
|
1194
|
+
headers?: {
|
|
1195
|
+
"Idempotency-Key"?: string;
|
|
1196
|
+
};
|
|
1197
|
+
body: SandboxTesterChange; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
|
|
1198
|
+
signal?: AbortSignal;
|
|
1199
|
+
}): Promise<Reply<200, SandboxTester>>;
|
|
1200
|
+
/**
|
|
1201
|
+
* List linked apps
|
|
1202
|
+
*
|
|
1203
|
+
* The project's apps linked to their store.
|
|
1204
|
+
*/
|
|
1205
|
+
listApps(input?: {
|
|
1206
|
+
signal?: AbortSignal;
|
|
1207
|
+
}): Promise<Reply<200, AppPage>>;
|
|
1208
|
+
/**
|
|
1209
|
+
* Read tester feedback
|
|
1210
|
+
*
|
|
1211
|
+
* The app's newest TestFlight feedback (screenshots with comments, crashes), as Apple keeps it.
|
|
1212
|
+
*/
|
|
1213
|
+
listFeedback(input: {
|
|
1214
|
+
path: {
|
|
1215
|
+
app_id: string;
|
|
1216
|
+
}; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
|
|
1217
|
+
signal?: AbortSignal;
|
|
1218
|
+
}): Promise<Reply<200, FeedbackPage>>;
|
|
1219
|
+
/**
|
|
1220
|
+
* List an app's groups
|
|
1221
|
+
*
|
|
1222
|
+
* The app's groups of testers.
|
|
1223
|
+
*/
|
|
1224
|
+
listGroups(input: {
|
|
1225
|
+
path: {
|
|
1226
|
+
app_id: string;
|
|
1227
|
+
}; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
|
|
1228
|
+
signal?: AbortSignal;
|
|
1229
|
+
}): Promise<Reply<200, GroupPage>>;
|
|
1230
|
+
/**
|
|
1231
|
+
* Make a group
|
|
1232
|
+
*
|
|
1233
|
+
* Makes a group of testers and its two TestFlight groups. Emits `stores.group.changed` (created).
|
|
1234
|
+
*/
|
|
1235
|
+
createGroup(input: {
|
|
1236
|
+
path: {
|
|
1237
|
+
app_id: string;
|
|
1238
|
+
};
|
|
1239
|
+
headers?: {
|
|
1240
|
+
"Idempotency-Key"?: string;
|
|
1241
|
+
};
|
|
1242
|
+
body: GroupRequest; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
|
|
1243
|
+
signal?: AbortSignal;
|
|
1244
|
+
}): Promise<Reply<201, Group>>;
|
|
1245
|
+
/**
|
|
1246
|
+
* Link an app to its store
|
|
1247
|
+
*
|
|
1248
|
+
* Links one of the project's registered iOS apps (this environment's bundle and team) to the App Store: its bundle id is registered on the Apple account when it is not, and its App Store Connect record is looked up — Apple lets only a person make that, once, on the website. Linking again refreshes both. Emits `stores.app.changed`.
|
|
1249
|
+
*/
|
|
1250
|
+
linkApp(input: {
|
|
1251
|
+
path: {
|
|
1252
|
+
app_id: string;
|
|
1253
|
+
};
|
|
1254
|
+
headers?: {
|
|
1255
|
+
"Idempotency-Key"?: string;
|
|
1256
|
+
};
|
|
1257
|
+
body: LinkAppRequest; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
|
|
1258
|
+
signal?: AbortSignal;
|
|
1259
|
+
}): Promise<Reply<200, App>>;
|
|
1260
|
+
/**
|
|
1261
|
+
* Make a package
|
|
1262
|
+
*
|
|
1263
|
+
* Hands out a build number — above every number Apple and the stores have seen for the app — and a token to upload the build made with it. The same command_id answers the same package (200) with a new token while it waits for its build. Emits `stores.package.changed` (created).
|
|
1264
|
+
*/
|
|
1265
|
+
createPackage(input: {
|
|
1266
|
+
path: {
|
|
1267
|
+
app_id: string;
|
|
1268
|
+
};
|
|
1269
|
+
headers?: {
|
|
1270
|
+
"Idempotency-Key"?: string;
|
|
1271
|
+
};
|
|
1272
|
+
body: CreatePackageRequest; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
|
|
1273
|
+
signal?: AbortSignal;
|
|
1274
|
+
}): Promise<Reply<200, Package> | Reply<201, Package>>;
|
|
1275
|
+
/**
|
|
1276
|
+
* Read the app's test information
|
|
1277
|
+
*
|
|
1278
|
+
* What Beta App Review and testers are told about the app, as App Store Connect holds it — in the locale asked, or the app's primary one — and what is still missing. The demo account's password is never read out.
|
|
1279
|
+
*/
|
|
1280
|
+
getReviewInfo(input: {
|
|
1281
|
+
path: {
|
|
1282
|
+
app_id: string;
|
|
1283
|
+
};
|
|
1284
|
+
query?: {
|
|
1285
|
+
locale?: string;
|
|
1286
|
+
}; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
|
|
1287
|
+
signal?: AbortSignal;
|
|
1288
|
+
}): Promise<Reply<200, ReviewInfoState>>;
|
|
1289
|
+
/**
|
|
1290
|
+
* Write the app's test information
|
|
1291
|
+
*
|
|
1292
|
+
* Writes what Beta App Review needs (test description, feedback address, contact, demo account); only the fields given. Answers what is still missing.
|
|
1293
|
+
*/
|
|
1294
|
+
setReviewInfo(input: {
|
|
1295
|
+
path: {
|
|
1296
|
+
app_id: string;
|
|
1297
|
+
};
|
|
1298
|
+
headers?: {
|
|
1299
|
+
"Idempotency-Key"?: string;
|
|
1300
|
+
};
|
|
1301
|
+
body: ReviewInfo; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
|
|
1302
|
+
signal?: AbortSignal;
|
|
1303
|
+
}): Promise<Reply<200, ReviewInfoAnswer>>;
|
|
1304
|
+
/**
|
|
1305
|
+
* The connect page
|
|
1306
|
+
*
|
|
1307
|
+
* The page a connect link opens: it names the project the key goes to, reads the grant from the link's fragment and posts the key with it. No credential: the grant is the authorization.
|
|
1308
|
+
*/
|
|
1309
|
+
getConnectPage(input?: {
|
|
1310
|
+
signal?: AbortSignal;
|
|
1311
|
+
}): Promise<Reply<200, Response>>;
|
|
1312
|
+
/**
|
|
1313
|
+
* Hand over an Apple key with a grant
|
|
1314
|
+
*
|
|
1315
|
+
* Takes an App Store Connect API key with a grant, checks it with Apple, keeps it sealed with the project's own key and spends the grant. A key Apple does not accept, or a file that is not a key, leaves the grant for the right file. An account whose agreements wait is connected with status `agreement`. Emits `stores.apple.changed` (connected).
|
|
1316
|
+
*/
|
|
1317
|
+
connectAppleKey(input: {
|
|
1318
|
+
body: ConnectAppleKeyRequest; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
|
|
1319
|
+
signal?: AbortSignal;
|
|
1320
|
+
}): Promise<Reply<200, AppleAccount>>;
|
|
1321
|
+
/**
|
|
1322
|
+
* Delete a group
|
|
1323
|
+
*
|
|
1324
|
+
* Deletes a group and its TestFlight groups; its testers keep what other groups gave them. Emits `stores.group.changed` (deleted).
|
|
1325
|
+
*/
|
|
1326
|
+
deleteGroup(input: {
|
|
1327
|
+
path: {
|
|
1328
|
+
group_id: string;
|
|
1329
|
+
};
|
|
1330
|
+
headers?: {
|
|
1331
|
+
"Idempotency-Key"?: string;
|
|
1332
|
+
}; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
|
|
1333
|
+
signal?: AbortSignal;
|
|
1334
|
+
}): Promise<Reply<204, undefined>>;
|
|
1335
|
+
/**
|
|
1336
|
+
* Rename a group
|
|
1337
|
+
*
|
|
1338
|
+
* Renames a group and its TestFlight groups. Emits `stores.group.changed` (renamed).
|
|
1339
|
+
*/
|
|
1340
|
+
renameGroup(input: {
|
|
1341
|
+
path: {
|
|
1342
|
+
group_id: string;
|
|
1343
|
+
};
|
|
1344
|
+
headers?: {
|
|
1345
|
+
"Idempotency-Key"?: string;
|
|
1346
|
+
};
|
|
1347
|
+
body: GroupRequest; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
|
|
1348
|
+
signal?: AbortSignal;
|
|
1349
|
+
}): Promise<Reply<200, Group>>;
|
|
1350
|
+
/**
|
|
1351
|
+
* Give a group a build
|
|
1352
|
+
*
|
|
1353
|
+
* Gives the group a package of its app that TestFlight has (its delivery is ready). Emits `stores.group.changed` (build).
|
|
1354
|
+
*/
|
|
1355
|
+
addGroupBuild(input: {
|
|
1356
|
+
path: {
|
|
1357
|
+
group_id: string;
|
|
1358
|
+
};
|
|
1359
|
+
headers?: {
|
|
1360
|
+
"Idempotency-Key"?: string;
|
|
1361
|
+
};
|
|
1362
|
+
body: GroupBuildRequest; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
|
|
1363
|
+
signal?: AbortSignal;
|
|
1364
|
+
}): Promise<Reply<204, undefined>>;
|
|
1365
|
+
/**
|
|
1366
|
+
* List a group's testers
|
|
1367
|
+
*
|
|
1368
|
+
* The group's testers, and which TestFlight group serves each.
|
|
1369
|
+
*/
|
|
1370
|
+
listTesters(input: {
|
|
1371
|
+
path: {
|
|
1372
|
+
group_id: string;
|
|
1373
|
+
}; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
|
|
1374
|
+
signal?: AbortSignal;
|
|
1375
|
+
}): Promise<Reply<200, TesterPage>>;
|
|
1376
|
+
/**
|
|
1377
|
+
* Set a group's testers
|
|
1378
|
+
*
|
|
1379
|
+
* Makes the group hold exactly the testers named: the account's App Store Connect users go to its internal TestFlight group (a build reaches them at once), everyone else to its external one (after Beta App Review). Apple mails each new tester. Emits `stores.group.changed` (testers).
|
|
1380
|
+
*/
|
|
1381
|
+
setTesters(input: {
|
|
1382
|
+
path: {
|
|
1383
|
+
group_id: string;
|
|
1384
|
+
};
|
|
1385
|
+
headers?: {
|
|
1386
|
+
"Idempotency-Key"?: string;
|
|
1387
|
+
};
|
|
1388
|
+
body: TestersRequest; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
|
|
1389
|
+
signal?: AbortSignal;
|
|
1390
|
+
}): Promise<Reply<200, TesterPage>>;
|
|
1391
|
+
/**
|
|
1392
|
+
* List packages
|
|
1393
|
+
*
|
|
1394
|
+
* The project's packages, newest first.
|
|
1395
|
+
*/
|
|
1396
|
+
listPackages(input?: {
|
|
1397
|
+
query?: {
|
|
1398
|
+
app_id?: string; /** How many to answer (1-200, default 50). */
|
|
1399
|
+
limit?: number; /** The next_cursor of the previous page. */
|
|
1400
|
+
cursor?: string;
|
|
1401
|
+
}; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
|
|
1402
|
+
signal?: AbortSignal;
|
|
1403
|
+
}): Promise<Reply<200, PackagePage>>;
|
|
1404
|
+
/**
|
|
1405
|
+
* Read a package
|
|
1406
|
+
*
|
|
1407
|
+
* A package and its deliveries.
|
|
1408
|
+
*/
|
|
1409
|
+
getPackage(input: {
|
|
1410
|
+
path: {
|
|
1411
|
+
package_id: string;
|
|
1412
|
+
}; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
|
|
1413
|
+
signal?: AbortSignal;
|
|
1414
|
+
}): Promise<Reply<200, Package>>;
|
|
1415
|
+
/**
|
|
1416
|
+
* Hand over a package's build
|
|
1417
|
+
*
|
|
1418
|
+
* A build machine hands over the unsigned .ipa with the package's upload token (Palbase-Upload-Token header) and its Content-Length. It must be the app's — its bundle id, and the build number the package was given — or it is refused and the package keeps waiting for the right file. One upload of a package at a time, two of a project's at once (409 `upload_in_progress`); an upload ends within an hour and waits a minute at most for its next bytes. Sent again after it arrived, the same token answers 409 `package_uploaded`. Emits `stores.package.changed` (uploaded).
|
|
1419
|
+
*/
|
|
1420
|
+
uploadArtifact(input: {
|
|
1421
|
+
path: {
|
|
1422
|
+
package_id: string;
|
|
1423
|
+
};
|
|
1424
|
+
headers: {
|
|
1425
|
+
"Palbase-Upload-Token": string;
|
|
1426
|
+
};
|
|
1427
|
+
body: BodyInit;
|
|
1428
|
+
contentType?: string; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
|
|
1429
|
+
signal?: AbortSignal;
|
|
1430
|
+
}): Promise<Reply<200, Package>>;
|
|
1431
|
+
/**
|
|
1432
|
+
* Plan a Beta App Review
|
|
1433
|
+
*
|
|
1434
|
+
* Plans sending the package's TestFlight build to Beta App Review, which external testers need first. Nothing is sent until the plan is confirmed (POST /stores/actions/{id}/confirm with its hash). Refused with what is missing when the app's test information is incomplete.
|
|
1435
|
+
*/
|
|
1436
|
+
planBetaReview(input: {
|
|
1437
|
+
path: {
|
|
1438
|
+
package_id: string;
|
|
1439
|
+
};
|
|
1440
|
+
headers?: {
|
|
1441
|
+
"Idempotency-Key"?: string;
|
|
1442
|
+
}; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
|
|
1443
|
+
signal?: AbortSignal;
|
|
1444
|
+
}): Promise<Reply<201, Action>>;
|
|
1445
|
+
/**
|
|
1446
|
+
* List a package's deliveries
|
|
1447
|
+
*
|
|
1448
|
+
* Where the package is on its way to testers.
|
|
1449
|
+
*/
|
|
1450
|
+
listDeliveries(input: {
|
|
1451
|
+
path: {
|
|
1452
|
+
package_id: string;
|
|
1453
|
+
}; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
|
|
1454
|
+
signal?: AbortSignal;
|
|
1455
|
+
}): Promise<Reply<200, DeliveryPage>>;
|
|
1456
|
+
/**
|
|
1457
|
+
* Send a package to TestFlight
|
|
1458
|
+
*
|
|
1459
|
+
* Signs the build with the Apple account's certificate (bundle by bundle), hands it to App Store Connect, follows Apple's processing and gives it to the groups named. Answers 202 at once; `stores.delivery.changed` says where it is. A project's builds are signed and handed over one at a time, and it has 10 deliveries under way at most (429 `too_many_deliveries`). Sending it again restarts one that failed, and changes nothing about one under way (200).
|
|
1460
|
+
*/
|
|
1461
|
+
deliver(input: {
|
|
1462
|
+
path: {
|
|
1463
|
+
package_id: string;
|
|
1464
|
+
};
|
|
1465
|
+
headers?: {
|
|
1466
|
+
"Idempotency-Key"?: string;
|
|
1467
|
+
};
|
|
1468
|
+
body: DeliverRequest; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
|
|
1469
|
+
signal?: AbortSignal;
|
|
1470
|
+
}): Promise<Reply<200, Delivery> | Reply<202, Delivery>>;
|
|
1471
|
+
/**
|
|
1472
|
+
* Plan expiring a build
|
|
1473
|
+
*
|
|
1474
|
+
* Plans expiring the package's TestFlight build: no tester can install it after. Runs only when confirmed.
|
|
1475
|
+
*/
|
|
1476
|
+
planExpire(input: {
|
|
1477
|
+
path: {
|
|
1478
|
+
package_id: string;
|
|
1479
|
+
};
|
|
1480
|
+
headers?: {
|
|
1481
|
+
"Idempotency-Key"?: string;
|
|
1482
|
+
}; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
|
|
1483
|
+
signal?: AbortSignal;
|
|
1484
|
+
}): Promise<Reply<201, Action>>;
|
|
1485
|
+
/**
|
|
1486
|
+
* Plan the export compliance answer
|
|
1487
|
+
*
|
|
1488
|
+
* Plans the build's export compliance answer — the person's legal statement, which Apple needs before anyone tests it. Runs only when confirmed; the delivery waiting on it then goes on.
|
|
1489
|
+
*/
|
|
1490
|
+
planExportCompliance(input: {
|
|
1491
|
+
path: {
|
|
1492
|
+
package_id: string;
|
|
1493
|
+
};
|
|
1494
|
+
headers?: {
|
|
1495
|
+
"Idempotency-Key"?: string;
|
|
1496
|
+
};
|
|
1497
|
+
body: ComplianceRequest; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
|
|
1498
|
+
signal?: AbortSignal;
|
|
1499
|
+
}): Promise<Reply<201, Action>>;
|
|
1500
|
+
/**
|
|
1501
|
+
* Change a build's note to testers
|
|
1502
|
+
*
|
|
1503
|
+
* Changes what testers read with the package's TestFlight build, once Apple holds the build (409 `build_not_at_apple` before): the build's note in App Store Connect, in the locale given or the app's primary one, and the delivery's own.
|
|
1504
|
+
*/
|
|
1505
|
+
setWhatToTest(input: {
|
|
1506
|
+
path: {
|
|
1507
|
+
package_id: string;
|
|
1508
|
+
};
|
|
1509
|
+
headers?: {
|
|
1510
|
+
"Idempotency-Key"?: string;
|
|
1511
|
+
};
|
|
1512
|
+
body: WhatToTest; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
|
|
1513
|
+
signal?: AbortSignal;
|
|
1514
|
+
}): Promise<Reply<200, Delivery>>;
|
|
1515
|
+
};
|
|
1516
|
+
export type Client = ReturnType<typeof client>;
|