palbase 0.10.1 → 0.11.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.
Files changed (63) hide show
  1. package/dist/ai/index.js +2 -2
  2. package/dist/backend/engine.js +2 -2
  3. package/dist/backend/env.js +1 -1
  4. package/dist/backend/index.js +11 -11
  5. package/dist/backend/stack.js +1 -1
  6. package/dist/backend/test.js +2 -2
  7. package/dist/chunks/{PG7BO4MR.js → 2CQIOY2Z.js} +1 -1
  8. package/dist/chunks/{QC2SDBJD.js → 2MS22NJC.js} +2 -2
  9. package/dist/chunks/476DZPIV.js +2 -0
  10. package/dist/chunks/{NBI5LPMS.js → 52DZTUF7.js} +2 -2
  11. package/dist/chunks/{FHXGE2MX.js → 5D7BAVO5.js} +1 -1
  12. package/dist/chunks/{R4OLJRMH.js → 63TWL4SB.js} +2 -2
  13. package/dist/chunks/{RWGEPDRQ.js → 7JE4KOPN.js} +2 -2
  14. package/dist/chunks/{QW3V2NBT.js → AEAFASN2.js} +2 -2
  15. package/dist/chunks/{RO7ERCT3.js → BAOQMZPI.js} +2 -2
  16. package/dist/chunks/CQBT2Z2T.js +20 -0
  17. package/dist/chunks/{APTIATSC.js → D6RL5OCI.js} +2 -2
  18. package/dist/chunks/{MFMA46HN.js → DAYQLOBB.js} +2 -2
  19. package/dist/chunks/GCVVMTWI.js +2 -0
  20. package/dist/chunks/{Z4A62VQR.js → GUFHH4DP.js} +2 -2
  21. package/dist/chunks/KXY2SF4N.js +2 -0
  22. package/dist/chunks/{QD3SPM7D.js → LJ3VOTHH.js} +2 -2
  23. package/dist/chunks/{XYXBDSXW.js → NHNXW6EK.js} +1 -1
  24. package/dist/chunks/{NGS4ALOE.js → QX7E6TNL.js} +1 -1
  25. package/dist/chunks/{6N3E2XHZ.js → S4GBHZOR.js} +1 -1
  26. package/dist/chunks/WYUC5N2T.js +2 -0
  27. package/dist/chunks/{IVJCGBYG.js → XBT3QJRS.js} +2 -2
  28. package/dist/cli.js +172 -128
  29. package/dist/refuse/ai.js +1 -1
  30. package/dist/refuse/backend.js +1 -1
  31. package/dist/refuse/server.js +1 -1
  32. package/dist/server/index.js +2 -2
  33. package/dist/server/testing.js +2 -2
  34. package/dist/web/index.js +2 -2
  35. package/dist/web/message.js +2 -2
  36. package/dist/web/palbe.js +2 -2
  37. package/dist/web/paywall.js +2 -2
  38. package/dist/web/push-sw.js +1 -1
  39. package/dist/web/ssr.js +2 -2
  40. package/dist/web/vite.js +2 -2
  41. package/package.json +2 -2
  42. package/types/backend/src/container.d.ts +2 -0
  43. package/types/backend/src/database.d.ts +8 -1
  44. package/types/backend/src/decorators.d.ts +1 -0
  45. package/types/backend/src/engine-db.d.ts +3 -1
  46. package/types/backend/src/engine.d.ts +8 -1
  47. package/types/backend/src/idempotency.d.ts +136 -0
  48. package/types/backend/src/index.d.ts +1 -0
  49. package/types/backend/src/test-user-templates.d.ts +58 -0
  50. package/types/internal/src/modules/auth.d.ts +44 -13
  51. package/types/internal/src/modules/events.d.ts +2 -2
  52. package/types/internal/src/modules/machines.d.ts +74 -2
  53. package/types/internal/src/modules/purchases.d.ts +39 -3
  54. package/types/internal/src/modules/secrets.d.ts +138 -3
  55. package/types/internal/src/modules/stores.d.ts +714 -8
  56. package/types/server/src/fields.d.ts +62 -0
  57. package/types/server/src/index.d.ts +1 -0
  58. package/types/server/src/server.d.ts +8 -0
  59. package/types/server/src/testing.d.ts +8 -0
  60. package/dist/chunks/EUI3Y3LO.js +0 -20
  61. package/dist/chunks/INRWHOEW.js +0 -2
  62. package/dist/chunks/UDAWSJMT.js +0 -2
  63. package/dist/chunks/YQEM4H7U.js +0 -2
@@ -34,11 +34,11 @@ export type Action = {
34
34
  /**
35
35
  * What it does.
36
36
  */
37
- kind: "beta_review" | "export_compliance" | "expire_build";
37
+ kind: "beta_review" | "export_compliance" | "expire_build" | "apply_listing" | "submit_review" | "withdraw_review" | "release_version" | "phased_release";
38
38
  /**
39
- * Its package.
39
+ * Its package (a TestFlight action).
40
40
  */
41
- package_id: string;
41
+ package_id?: string;
42
42
  /**
43
43
  * What it does, exactly.
44
44
  */
@@ -56,13 +56,17 @@ export type Action = {
56
56
  [key: string]: unknown;
57
57
  };
58
58
  /**
59
- * Where it is.
59
+ * Where it is: running is a confirmed one still being written (a page's screenshots).
60
60
  */
61
- status: "planned" | "done" | "declined" | "failed";
61
+ status: "planned" | "running" | "done" | "declined" | "failed";
62
62
  /**
63
63
  * What it does, for the person who confirms it.
64
64
  */
65
65
  summary: string;
66
+ /**
67
+ * Its app (an App Store action).
68
+ */
69
+ app_id?: string;
66
70
  };
67
71
  /**
68
72
  * stores.action.changed: an action was planned, done, declined or failed.
@@ -79,7 +83,7 @@ export type ActionChangedEvent = {
79
83
  /**
80
84
  * Its package.
81
85
  */
82
- package_id: string;
86
+ package_id?: string;
83
87
  /**
84
88
  * Where it is.
85
89
  */
@@ -88,6 +92,10 @@ export type ActionChangedEvent = {
88
92
  * What it does.
89
93
  */
90
94
  summary: string;
95
+ /**
96
+ * Its app (an App Store action).
97
+ */
98
+ app_id?: string;
91
99
  };
92
100
  /**
93
101
  * A page of actions, newest first.
@@ -183,6 +191,192 @@ export type AppPage = {
183
191
  */
184
192
  apps: App[];
185
193
  };
194
+ /**
195
+ * What App Review is told of the version. The demo account's password is never read out.
196
+ */
197
+ export type AppStoreReview = {
198
+ /**
199
+ * Whom App Review reaches.
200
+ */
201
+ contact_first_name: string;
202
+ /**
203
+ * Their last name.
204
+ */
205
+ contact_last_name: string;
206
+ /**
207
+ * Their email.
208
+ */
209
+ contact_email: string;
210
+ /**
211
+ * Their phone, with its country code.
212
+ */
213
+ contact_phone: string;
214
+ /**
215
+ * App Review signs in to review the app.
216
+ */
217
+ demo_account_required: boolean;
218
+ /**
219
+ * The account's user name.
220
+ */
221
+ demo_account_name: string;
222
+ /**
223
+ * Anything else App Review needs.
224
+ */
225
+ notes: string;
226
+ /**
227
+ * Apple holds the demo account's password.
228
+ */
229
+ has_demo_password: boolean;
230
+ };
231
+ /**
232
+ * What App Review is told; the demo account's password goes to Apple and is never kept or read out.
233
+ */
234
+ export type AppStoreReviewRequest = {
235
+ /**
236
+ * Whom App Review reaches.
237
+ */
238
+ contact_first_name?: string;
239
+ /**
240
+ * Their last name.
241
+ */
242
+ contact_last_name?: string;
243
+ /**
244
+ * Their email.
245
+ */
246
+ contact_email?: string;
247
+ /**
248
+ * Their phone, with its country code.
249
+ */
250
+ contact_phone?: string;
251
+ /**
252
+ * App Review signs in to review the app.
253
+ */
254
+ demo_account_required?: boolean;
255
+ /**
256
+ * The account's user name.
257
+ */
258
+ demo_account_name?: string;
259
+ /**
260
+ * The account's password; left out, it stays as it is.
261
+ */
262
+ demo_account_password?: string | null;
263
+ /**
264
+ * Anything else App Review needs.
265
+ */
266
+ notes?: string;
267
+ };
268
+ /**
269
+ * The app's App Store version as App Review will see it, and what it would be refused for.
270
+ */
271
+ export type AppStoreVersion = {
272
+ /**
273
+ * The app.
274
+ */
275
+ app_id: string;
276
+ version?: AppStoreVersionInfo;
277
+ review: AppStoreReview;
278
+ phased?: PhasedRelease;
279
+ /**
280
+ * The app has a price (free or paid).
281
+ */
282
+ priced: boolean;
283
+ /**
284
+ * The content rights statement (empty: not given).
285
+ */
286
+ content_rights: string;
287
+ /**
288
+ * What App Review would refuse the version for, each a line a person acts on; empty when it can be sent. App Privacy is answered in App Store Connect.
289
+ */
290
+ missing: string[];
291
+ watched?: WatchedVersion;
292
+ /**
293
+ * When a person said the app's privacy details were published in App Store Connect (app_privacy: published).
294
+ */
295
+ app_privacy_published_at?: string;
296
+ };
297
+ /**
298
+ * The App Store version's own fields.
299
+ */
300
+ export type AppStoreVersionInfo = {
301
+ /**
302
+ * App Store Connect's id.
303
+ */
304
+ id: string;
305
+ /**
306
+ * The version (1.2.3).
307
+ */
308
+ version_string: string;
309
+ /**
310
+ * App Store Connect's state (PREPARE_FOR_SUBMISSION, WAITING_FOR_REVIEW, IN_REVIEW, PENDING_DEVELOPER_RELEASE, READY_FOR_DISTRIBUTION, REJECTED, DEVELOPER_REJECTED…).
311
+ */
312
+ state: string;
313
+ /**
314
+ * The version's copyright.
315
+ */
316
+ copyright: string;
317
+ /**
318
+ * When it goes out once approved: manual, after_approval or scheduled.
319
+ */
320
+ release: string;
321
+ /**
322
+ * A scheduled release's time.
323
+ */
324
+ release_at: string | null;
325
+ /**
326
+ * The attached build's number.
327
+ */
328
+ build_number: string;
329
+ /**
330
+ * The app's first version: it has no What's New.
331
+ */
332
+ first_version: boolean;
333
+ };
334
+ /**
335
+ * Prepares the version; a field left out stays as it is.
336
+ */
337
+ export type AppStoreVersionRequest = {
338
+ /**
339
+ * Makes the version when the app has no editable one, or renames it (1.2.3).
340
+ */
341
+ version_string?: string | null;
342
+ /**
343
+ * The TestFlight build App Review gets (its version is the App Store version's).
344
+ */
345
+ build_number?: number | null;
346
+ /**
347
+ * The version's copyright (2026 Your Company).
348
+ */
349
+ copyright?: string | null;
350
+ /**
351
+ * When it goes out once approved.
352
+ */
353
+ release?: ("manual" | "after_approval" | "scheduled") | null;
354
+ /**
355
+ * A scheduled release's time.
356
+ */
357
+ release_at?: string | null;
358
+ /**
359
+ * Release it in phases over seven days.
360
+ */
361
+ phased?: boolean | null;
362
+ /**
363
+ * The content rights statement: the app shows, contains or reaches third-party content.
364
+ */
365
+ uses_third_party_content?: boolean | null;
366
+ /**
367
+ * free makes an app with no price free everywhere.
368
+ */
369
+ price?: "free" | null;
370
+ review?: AppStoreReviewRequest;
371
+ /**
372
+ * all: an app sold in no country or region is sold in every one, and in those Apple opens later; one sold somewhere keeps its countries (they are set in App Store Connect).
373
+ */
374
+ territories?: "all";
375
+ /**
376
+ * App Privacy has no API: published says the app's privacy details were published in App Store Connect, and the missing list stops asking for them; unpublished takes it back. Apple refusing a submission for App Privacy takes it back too.
377
+ */
378
+ app_privacy?: "published" | "unpublished";
379
+ };
186
380
  /**
187
381
  * The project's Apple account (App Store Connect API key) as the API shows it: never the key itself.
188
382
  */
@@ -760,6 +954,179 @@ export type LinkAppRequest = {
760
954
  */
761
955
  name?: string;
762
956
  };
957
+ /**
958
+ * An app's draft App Store page.
959
+ */
960
+ export type Listing = {
961
+ /**
962
+ * The app.
963
+ */
964
+ app_id: string;
965
+ /**
966
+ * The draft's revision; 0 when there is none yet.
967
+ */
968
+ revision: number;
969
+ draft: ListingDraft;
970
+ /**
971
+ * Who wrote the revision.
972
+ */
973
+ updated_by: string | null;
974
+ /**
975
+ * When.
976
+ */
977
+ updated_at: string | null;
978
+ };
979
+ /**
980
+ * The app's App Store page as the project wants it.
981
+ */
982
+ export type ListingDraft = {
983
+ /**
984
+ * An App Store category: UTILITIES, PRODUCTIVITY, GAMES…
985
+ */
986
+ primary_category?: string;
987
+ /**
988
+ * Another App Store category, or none.
989
+ */
990
+ secondary_category?: string;
991
+ /**
992
+ * The age rating questionnaire, Apple's questions and answers (NONE | INFREQUENT_OR_MILD | FREQUENT_OR_INTENSE, or true/false), written whole.
993
+ */
994
+ age_rating?: {
995
+ [key: string]: unknown;
996
+ };
997
+ /**
998
+ * The page's languages, by App Store Connect's codes (en-US, tr, de-DE…).
999
+ */
1000
+ locales: {
1001
+ [key: string]: ListingLocale;
1002
+ };
1003
+ };
1004
+ /**
1005
+ * One language of the app's App Store page. A field left empty is not written.
1006
+ */
1007
+ export type ListingLocale = {
1008
+ /**
1009
+ * The app's name in this language (2 to 30 characters).
1010
+ */
1011
+ name: string;
1012
+ /**
1013
+ * Under the name (30 characters at most).
1014
+ */
1015
+ subtitle?: string;
1016
+ /**
1017
+ * The privacy policy's address.
1018
+ */
1019
+ privacy_policy_url?: string;
1020
+ /**
1021
+ * What the app does (4000 characters at most).
1022
+ */
1023
+ description?: string;
1024
+ /**
1025
+ * Search keywords, comma-separated (100 bytes at most).
1026
+ */
1027
+ keywords?: string;
1028
+ /**
1029
+ * Above the description; changes without a new version (170 characters at most).
1030
+ */
1031
+ promotional_text?: string;
1032
+ /**
1033
+ * What's new in this version: an update's, never the first version's (4000 characters at most).
1034
+ */
1035
+ whats_new?: string;
1036
+ /**
1037
+ * The app's marketing page.
1038
+ */
1039
+ marketing_url?: string;
1040
+ /**
1041
+ * Where users get help.
1042
+ */
1043
+ support_url?: string;
1044
+ /**
1045
+ * Each display's screenshots, in order, by their SHA-256 (PUT /stores/apps/{app_id}/screenshots): iphone_6_9, iphone_6_5, ipad_13. 10 per display at most.
1046
+ */
1047
+ screenshots?: {
1048
+ [key: string]: string[];
1049
+ };
1050
+ };
1051
+ /**
1052
+ * A page's plan: the steps, and the action that writes them once confirmed (none when nothing changes).
1053
+ */
1054
+ export type ListingPlan = {
1055
+ /**
1056
+ * The draft's revision planned.
1057
+ */
1058
+ revision: number;
1059
+ /**
1060
+ * The App Store version the page belongs to.
1061
+ */
1062
+ version: string;
1063
+ /**
1064
+ * What changes, in the order written.
1065
+ */
1066
+ steps: ListingStep[];
1067
+ action?: Action;
1068
+ };
1069
+ /**
1070
+ * A draft saved over the revision it was edited from.
1071
+ */
1072
+ export type ListingRequest = {
1073
+ /**
1074
+ * The revision it was edited from (0: the first).
1075
+ */
1076
+ revision: number;
1077
+ draft: ListingDraft;
1078
+ };
1079
+ /**
1080
+ * One change a page's plan makes at App Store Connect, with what it writes.
1081
+ */
1082
+ export type ListingStep = {
1083
+ /**
1084
+ * What it changes.
1085
+ */
1086
+ kind: "categories" | "age_rating" | "app_info" | "version_text" | "screenshots";
1087
+ /**
1088
+ * Its language.
1089
+ */
1090
+ locale?: string;
1091
+ /**
1092
+ * Its screenshots' display.
1093
+ */
1094
+ display?: string;
1095
+ /**
1096
+ * The change, for the person who confirms it.
1097
+ */
1098
+ says: string;
1099
+ /**
1100
+ * The primary category written.
1101
+ */
1102
+ primary?: string;
1103
+ /**
1104
+ * The secondary category written.
1105
+ */
1106
+ secondary?: string;
1107
+ /**
1108
+ * The answers written.
1109
+ */
1110
+ age_rating?: {
1111
+ [key: string]: unknown;
1112
+ };
1113
+ /**
1114
+ * The name, subtitle and privacy policy written.
1115
+ */
1116
+ info?: {
1117
+ [key: string]: unknown;
1118
+ };
1119
+ /**
1120
+ * The version text written.
1121
+ */
1122
+ text?: {
1123
+ [key: string]: unknown;
1124
+ };
1125
+ /**
1126
+ * The display's screenshots, in order.
1127
+ */
1128
+ shots?: PlannedShot[];
1129
+ };
763
1130
  /**
764
1131
  * A build handed to the stores.
765
1132
  */
@@ -842,6 +1209,10 @@ export type PackageBundle = {
842
1209
  * Its path in the app (empty for the app itself).
843
1210
  */
844
1211
  path: string;
1212
+ /**
1213
+ * The app's UIDeviceFamily: 1 the iPhone, 2 the iPad (App Review then asks for iPad screenshots).
1214
+ */
1215
+ device_families?: number[];
845
1216
  };
846
1217
  /**
847
1218
  * stores.package.changed: a package was made, or its build arrived.
@@ -902,6 +1273,53 @@ export type PackageUpload = {
902
1273
  */
903
1274
  url: string;
904
1275
  };
1276
+ /**
1277
+ * A phased release: Apple's seven days (1, 2, 5, 10, 20, 50, 100%), started by the release, paused, resumed or completed.
1278
+ */
1279
+ export type PhasedRelease = {
1280
+ /**
1281
+ * Where it is.
1282
+ */
1283
+ state: "INACTIVE" | "ACTIVE" | "PAUSED" | "COMPLETE";
1284
+ /**
1285
+ * When it started.
1286
+ */
1287
+ start_date?: string;
1288
+ /**
1289
+ * Its day (1 to 7).
1290
+ */
1291
+ day: number;
1292
+ /**
1293
+ * Days it has been paused (30 at most).
1294
+ */
1295
+ paused_days: number;
1296
+ };
1297
+ /**
1298
+ * A phased release's next state.
1299
+ */
1300
+ export type PhasedReleaseRequest = {
1301
+ /**
1302
+ * paused, active (resume) or complete (everyone gets it now).
1303
+ */
1304
+ state: "paused" | "active" | "complete";
1305
+ };
1306
+ /**
1307
+ * A screenshot a step puts in a display, in its order.
1308
+ */
1309
+ export type PlannedShot = {
1310
+ /**
1311
+ * The module's copy.
1312
+ */
1313
+ sha256: string;
1314
+ /**
1315
+ * How App Store Connect knows it.
1316
+ */
1317
+ md5: string;
1318
+ /**
1319
+ * What it is.
1320
+ */
1321
+ format: "png" | "jpeg";
1322
+ };
905
1323
  /**
906
1324
  * One thing the sandbox needs.
907
1325
  */
@@ -1114,6 +1532,52 @@ export type SandboxTesterPage = {
1114
1532
  */
1115
1533
  testers: SandboxTester[];
1116
1534
  };
1535
+ /**
1536
+ * A screenshot the module holds for an app's page.
1537
+ */
1538
+ export type Screenshot = {
1539
+ /**
1540
+ * Its SHA-256: what the draft names it by.
1541
+ */
1542
+ sha256: string;
1543
+ /**
1544
+ * Bytes.
1545
+ */
1546
+ size: number;
1547
+ /**
1548
+ * Pixels.
1549
+ */
1550
+ width: number;
1551
+ /**
1552
+ * Pixels.
1553
+ */
1554
+ height: number;
1555
+ /**
1556
+ * png or jpeg.
1557
+ */
1558
+ format: "png" | "jpeg";
1559
+ /**
1560
+ * The displays it fits.
1561
+ */
1562
+ displays: string[];
1563
+ /**
1564
+ * When it was first sent.
1565
+ */
1566
+ created_at: string;
1567
+ };
1568
+ /**
1569
+ * The PNG or JPEG image, 10 MB at most.
1570
+ */
1571
+ export type ScreenshotFile = Blob;
1572
+ /**
1573
+ * What goes to App Review with the version: its in-app purchases, by product id — a product's first review goes with an app version, as Apple requires. Each is READY_TO_SUBMIT at Apple, or the plan is refused (in_app_purchase_not_ready).
1574
+ */
1575
+ export type SubmitRequest = {
1576
+ /**
1577
+ * The product ids of the subscriptions and in-app purchases sent with the version (50 at most).
1578
+ */
1579
+ in_app_purchases?: string[];
1580
+ };
1117
1581
  /**
1118
1582
  * A person to have in a group.
1119
1583
  */
@@ -1166,6 +1630,97 @@ export type UploadKey = {
1166
1630
  */
1167
1631
  fingerprint: string;
1168
1632
  };
1633
+ /**
1634
+ * stores.version.changed: an app's App Store version came to a new state (sent to App Review, in review, approved, rejected, withdrawn, released).
1635
+ */
1636
+ export type VersionChangedEvent = {
1637
+ /**
1638
+ * The app.
1639
+ */
1640
+ app_id: string;
1641
+ /**
1642
+ * Its bundle id.
1643
+ */
1644
+ bundle_id: string;
1645
+ /**
1646
+ * Its name.
1647
+ */
1648
+ name: string;
1649
+ /**
1650
+ * The version.
1651
+ */
1652
+ version: string;
1653
+ /**
1654
+ * App Store Connect's id of it.
1655
+ */
1656
+ asc_version_id: string;
1657
+ /**
1658
+ * What it was; null when first seen.
1659
+ */
1660
+ previous_state: string | null;
1661
+ /**
1662
+ * What it is now.
1663
+ */
1664
+ state: string;
1665
+ /**
1666
+ * App Review's answer: approved, rejected; null when the state is none.
1667
+ */
1668
+ result: ("approved" | "rejected" | null) | null;
1669
+ };
1670
+ /**
1671
+ * stores.version.reviewed: App Review approved or rejected a project's version. Sent to Palbase's own project, whose Studio tells the organization's owners.
1672
+ */
1673
+ export type VersionReviewedEvent = {
1674
+ /**
1675
+ * The project (environment) the app is in.
1676
+ */
1677
+ project_id: string;
1678
+ /**
1679
+ * The app.
1680
+ */
1681
+ app_id: string;
1682
+ /**
1683
+ * Its name.
1684
+ */
1685
+ name: string;
1686
+ /**
1687
+ * Its bundle id.
1688
+ */
1689
+ bundle_id: string;
1690
+ /**
1691
+ * The version.
1692
+ */
1693
+ version: string;
1694
+ /**
1695
+ * App Store Connect's state.
1696
+ */
1697
+ state: string;
1698
+ /**
1699
+ * App Review's answer.
1700
+ */
1701
+ result: "approved" | "rejected";
1702
+ };
1703
+ /**
1704
+ * The state the module last saw of the app's newest submitted version.
1705
+ */
1706
+ export type WatchedVersion = {
1707
+ /**
1708
+ * The version.
1709
+ */
1710
+ version_string: string;
1711
+ /**
1712
+ * Its state.
1713
+ */
1714
+ state: string;
1715
+ /**
1716
+ * When it came to it.
1717
+ */
1718
+ state_at: string;
1719
+ /**
1720
+ * When it was last read.
1721
+ */
1722
+ checked_at: string;
1723
+ };
1169
1724
  /**
1170
1725
  * A build's note to testers.
1171
1726
  */
@@ -1213,6 +1768,14 @@ export interface Events {
1213
1768
  * stores.package.changed: a package was made, or its build arrived.
1214
1769
  */
1215
1770
  "stores.package.changed": PackageChangedEvent;
1771
+ /**
1772
+ * stores.version.changed: an app's App Store version came to a new state (sent to App Review, in review, approved, rejected, withdrawn, released).
1773
+ */
1774
+ "stores.version.changed": VersionChangedEvent;
1775
+ /**
1776
+ * stores.version.reviewed: App Review approved or rejected a project's version. Sent to Palbase's own project, whose Studio tells the organization's owners.
1777
+ */
1778
+ "stores.version.reviewed": VersionReviewedEvent;
1216
1779
  }
1217
1780
  /** Palbase Stores */
1218
1781
  export declare function client(t: Transport): {
@@ -1243,7 +1806,7 @@ export declare function client(t: Transport): {
1243
1806
  /**
1244
1807
  * Confirm an action
1245
1808
  *
1246
- * Runs a planned action: only a person's confirmation — Studio's call for its developer, signed in (it carries Studio's word for them, X-Palbase-Person) — only with its hash, only once, only before it expires. The project's secret key alone, an organization's access token or a CI job is refused (403 `person_required`), before the action is looked up. Emits `stores.action.changed`.
1809
+ * Runs a planned action: only a person's confirmation — the developer's own call from Studio in their browser, with their Studio sign-in, which the edge verifies — only with its hash, only once, only before it expires. The project's secret key alone, an organization's access token or a CI job is refused (403 `person_required`), before the action is looked up. Emits `stores.action.changed`.
1247
1810
  */
1248
1811
  confirmAction(input: {
1249
1812
  path: {
@@ -1254,7 +1817,7 @@ export declare function client(t: Transport): {
1254
1817
  };
1255
1818
  body: ConfirmRequest; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
1256
1819
  signal?: AbortSignal;
1257
- }): Promise<Reply<200, Action>>;
1820
+ }): Promise<Reply<200, Action> | Reply<202, Action>>;
1258
1821
  /**
1259
1822
  * Decline an action
1260
1823
  *
@@ -1416,6 +1979,46 @@ export declare function client(t: Transport): {
1416
1979
  body: LinkAppRequest; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
1417
1980
  signal?: AbortSignal;
1418
1981
  }): Promise<Reply<200, App>>;
1982
+ /**
1983
+ * Read the draft App Store page
1984
+ *
1985
+ * The app's draft App Store page: what a plan compares with App Store Connect.
1986
+ */
1987
+ getListing(input: {
1988
+ path: {
1989
+ app_id: string;
1990
+ }; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
1991
+ signal?: AbortSignal;
1992
+ }): Promise<Reply<200, Listing>>;
1993
+ /**
1994
+ * Save the draft App Store page
1995
+ *
1996
+ * Saves the draft over the revision it was edited from; a draft that moved since is refused (409). Nothing is written to Apple: a plan is (POST …/listing/plan).
1997
+ */
1998
+ setListing(input: {
1999
+ path: {
2000
+ app_id: string;
2001
+ };
2002
+ headers?: {
2003
+ "Idempotency-Key"?: string;
2004
+ };
2005
+ body: ListingRequest; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
2006
+ signal?: AbortSignal;
2007
+ }): Promise<Reply<200, Listing>>;
2008
+ /**
2009
+ * Plan the App Store page
2010
+ *
2011
+ * Compares the draft with what App Store Connect holds and plans the changes, language by language. Nothing is written until the plan is confirmed (POST /stores/actions/{id}/confirm with its hash); a confirmed plan runs after the answer (running, then done or failed).
2012
+ */
2013
+ planListing(input: {
2014
+ path: {
2015
+ app_id: string;
2016
+ };
2017
+ headers?: {
2018
+ "Idempotency-Key"?: string;
2019
+ }; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
2020
+ signal?: AbortSignal;
2021
+ }): Promise<Reply<201, ListingPlan>>;
1419
2022
  /**
1420
2023
  * Make a package
1421
2024
  *
@@ -1431,6 +2034,25 @@ export declare function client(t: Transport): {
1431
2034
  body: CreatePackageRequest; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
1432
2035
  signal?: AbortSignal;
1433
2036
  }): Promise<Reply<200, Package> | Reply<201, Package>>;
2037
+ /**
2038
+ * Upload a screenshot
2039
+ *
2040
+ * Takes one screenshot for the app's page (PNG or JPEG, 10 MB at most, an App Store size): kept by its SHA-256, which the draft names it by. The same image sent again is the one kept.
2041
+ */
2042
+ uploadScreenshot(input: {
2043
+ path: {
2044
+ app_id: string;
2045
+ };
2046
+ query?: {
2047
+ for?: "page" | "review";
2048
+ };
2049
+ headers?: {
2050
+ "Idempotency-Key"?: string;
2051
+ };
2052
+ body: BodyInit;
2053
+ contentType?: string; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
2054
+ signal?: AbortSignal;
2055
+ }): Promise<Reply<201, Screenshot>>;
1434
2056
  /**
1435
2057
  * Read the app's test information
1436
2058
  *
@@ -1471,6 +2093,90 @@ export declare function client(t: Transport): {
1471
2093
  }; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
1472
2094
  signal?: AbortSignal;
1473
2095
  }): Promise<Reply<200, UploadKey>>;
2096
+ /**
2097
+ * Read the App Store version
2098
+ *
2099
+ * The app's App Store version, its build, review details, phased release and price, and what App Review would refuse it for.
2100
+ */
2101
+ getAppStoreVersion(input: {
2102
+ path: {
2103
+ app_id: string;
2104
+ }; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
2105
+ signal?: AbortSignal;
2106
+ }): Promise<Reply<200, AppStoreVersion>>;
2107
+ /**
2108
+ * Prepare the App Store version
2109
+ *
2110
+ * Writes the version's fields, its build, how it is released, the review's details, the content rights statement and a free price — what can change until it is sent. Makes the version when the app has none that can change.
2111
+ */
2112
+ prepareAppStoreVersion(input: {
2113
+ path: {
2114
+ app_id: string;
2115
+ };
2116
+ headers?: {
2117
+ "Idempotency-Key"?: string;
2118
+ };
2119
+ body: AppStoreVersionRequest; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
2120
+ signal?: AbortSignal;
2121
+ }): Promise<Reply<200, AppStoreVersion>>;
2122
+ /**
2123
+ * Plan a phased release's next state
2124
+ *
2125
+ * Plans pausing, resuming or completing the version's phased release.
2126
+ */
2127
+ planPhasedRelease(input: {
2128
+ path: {
2129
+ app_id: string;
2130
+ };
2131
+ headers?: {
2132
+ "Idempotency-Key"?: string;
2133
+ };
2134
+ body: PhasedReleaseRequest; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
2135
+ signal?: AbortSignal;
2136
+ }): Promise<Reply<201, Action>>;
2137
+ /**
2138
+ * Plan releasing the approved version
2139
+ *
2140
+ * Plans releasing an approved version that waits for its developer. It cannot be taken back.
2141
+ */
2142
+ planReleaseVersion(input: {
2143
+ path: {
2144
+ app_id: string;
2145
+ };
2146
+ headers?: {
2147
+ "Idempotency-Key"?: string;
2148
+ }; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
2149
+ signal?: AbortSignal;
2150
+ }): Promise<Reply<201, Action>>;
2151
+ /**
2152
+ * Plan sending the version to App Review
2153
+ *
2154
+ * Plans sending the version to App Review; refused (409 version_incomplete) with what is missing. Nothing is sent until the plan is confirmed.
2155
+ */
2156
+ planSubmitReview(input: {
2157
+ path: {
2158
+ app_id: string;
2159
+ };
2160
+ headers?: {
2161
+ "Idempotency-Key"?: string;
2162
+ };
2163
+ body?: SubmitRequest; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
2164
+ signal?: AbortSignal;
2165
+ }): Promise<Reply<201, Action>>;
2166
+ /**
2167
+ * Plan withdrawing the version from App Review
2168
+ *
2169
+ * Plans taking the version out of App Review: it is edited again, and sent again from the start.
2170
+ */
2171
+ planWithdrawReview(input: {
2172
+ path: {
2173
+ app_id: string;
2174
+ };
2175
+ headers?: {
2176
+ "Idempotency-Key"?: string;
2177
+ }; /** Stops the call: the request in flight, a wait before a retry, a proof-of-work being solved. */
2178
+ signal?: AbortSignal;
2179
+ }): Promise<Reply<201, Action>>;
1474
2180
  /**
1475
2181
  * Download a signed bundle with its link
1476
2182
  *