@sitepong/fastnode 0.2.2 → 0.3.1

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 (126) hide show
  1. package/README.md +64 -1
  2. package/dist/actions/index.cjs +928 -54
  3. package/dist/actions/index.cjs.map +1 -1
  4. package/dist/actions/index.mjs +930 -56
  5. package/dist/actions/index.mjs.map +1 -1
  6. package/dist/apple-session-jUzBrql5.d.cts +122 -0
  7. package/dist/apple-session-jUzBrql5.d.ts +122 -0
  8. package/dist/cert/index.cjs +782 -736
  9. package/dist/cert/index.cjs.map +1 -1
  10. package/dist/cert/index.d.cts +5 -4
  11. package/dist/cert/index.d.ts +5 -4
  12. package/dist/cert/index.mjs +782 -737
  13. package/dist/cert/index.mjs.map +1 -1
  14. package/dist/{cert-Ddl7FpFT.d.ts → cert-ClacRx9y.d.ts} +2 -2
  15. package/dist/{cert-FehieKeb.d.cts → cert-DffLKURp.d.cts} +2 -2
  16. package/dist/cli/index.cjs +1408 -60
  17. package/dist/cli/index.cjs.map +1 -1
  18. package/dist/cli/index.d.cts +3 -2
  19. package/dist/cli/index.d.ts +3 -2
  20. package/dist/cli/index.mjs +1410 -62
  21. package/dist/cli/index.mjs.map +1 -1
  22. package/dist/client/index.cjs +519 -31
  23. package/dist/client/index.cjs.map +1 -1
  24. package/dist/client/index.d.cts +3 -2
  25. package/dist/client/index.d.ts +3 -2
  26. package/dist/client/index.mjs +514 -32
  27. package/dist/client/index.mjs.map +1 -1
  28. package/dist/deliver/index.cjs +334 -13
  29. package/dist/deliver/index.cjs.map +1 -1
  30. package/dist/deliver/index.d.cts +4 -3
  31. package/dist/deliver/index.d.ts +4 -3
  32. package/dist/deliver/index.mjs +330 -15
  33. package/dist/deliver/index.mjs.map +1 -1
  34. package/dist/{enums-B609j2rb.d.cts → enums-yXNVh3UI.d.cts} +8 -1
  35. package/dist/{enums-B609j2rb.d.ts → enums-yXNVh3UI.d.ts} +8 -1
  36. package/dist/gradle/index.cjs +222 -0
  37. package/dist/gradle/index.cjs.map +1 -0
  38. package/dist/gradle/index.d.cts +1 -0
  39. package/dist/gradle/index.d.ts +1 -0
  40. package/dist/gradle/index.mjs +217 -0
  41. package/dist/gradle/index.mjs.map +1 -0
  42. package/dist/gym/index.d.cts +2 -2
  43. package/dist/gym/index.d.ts +2 -2
  44. package/dist/index-8djTPW8O.d.ts +104 -0
  45. package/dist/{index-Bk1Gd-qE.d.cts → index-925_Ov7X.d.cts} +2 -2
  46. package/dist/{index-DrUpRXRG.d.cts → index-B6-MJpO4.d.cts} +1 -1
  47. package/dist/index-BGhV0gS-.d.ts +65 -0
  48. package/dist/{index-OelCoOth.d.cts → index-BbVQzSV1.d.cts} +18 -4
  49. package/dist/index-BhGaVlK1.d.cts +201 -0
  50. package/dist/{index-CtPyeMLH.d.ts → index-C-EEYXSE.d.ts} +18 -4
  51. package/dist/{index-CNHf7I4v.d.cts → index-C18cijCd.d.ts} +32 -3
  52. package/dist/{index-DFni8oZt.d.ts → index-CBM5XZKC.d.ts} +2 -2
  53. package/dist/index-CXJlvmB4.d.cts +63 -0
  54. package/dist/index-CXJlvmB4.d.ts +63 -0
  55. package/dist/{index-BKUapQP2.d.cts → index-CemR3UI9.d.ts} +356 -124
  56. package/dist/{index-DI1ZHr-3.d.ts → index-CmcFPn_G.d.cts} +9 -1
  57. package/dist/{index-CCtYhPN9.d.ts → index-CpGV1f0L.d.cts} +356 -124
  58. package/dist/{index-B8FOfxOw.d.ts → index-D9YQQ3FM.d.ts} +2 -2
  59. package/dist/index-DFstwgGK.d.cts +65 -0
  60. package/dist/{index-YcKz4aRS.d.ts → index-Dkf5sH1E.d.ts} +1 -1
  61. package/dist/index-DnHQ2uT2.d.cts +104 -0
  62. package/dist/index-Dv-Mek07.d.cts +84 -0
  63. package/dist/index-Dv-Mek07.d.ts +84 -0
  64. package/dist/{index-BICa8odo.d.cts → index-N6eV5yym.d.ts} +9 -1
  65. package/dist/{index-oVyLLIEK.d.cts → index-O3EMrd5s.d.cts} +3 -3
  66. package/dist/{index-DZoPGCbE.d.ts → index-Ol0RtbQA.d.ts} +3 -3
  67. package/dist/{index-CplRWSUc.d.ts → index-_24DRp3a.d.cts} +32 -3
  68. package/dist/{index-BZWmOTWE.d.cts → index-isT08RuY.d.cts} +2 -2
  69. package/dist/{index-DImN9PWc.d.ts → index-mEEB7An6.d.ts} +1 -1
  70. package/dist/{index-D13sn8DO.d.cts → index-on573dnO.d.cts} +1 -1
  71. package/dist/index-s2PigtDM.d.ts +201 -0
  72. package/dist/index.cjs +3425 -955
  73. package/dist/index.cjs.map +1 -1
  74. package/dist/index.d.cts +237 -14
  75. package/dist/index.d.ts +237 -14
  76. package/dist/index.mjs +3417 -958
  77. package/dist/index.mjs.map +1 -1
  78. package/dist/lane/index.cjs +928 -54
  79. package/dist/lane/index.cjs.map +1 -1
  80. package/dist/lane/index.mjs +930 -56
  81. package/dist/lane/index.mjs.map +1 -1
  82. package/dist/match/index.d.cts +6 -5
  83. package/dist/match/index.d.ts +6 -5
  84. package/dist/pem/index.d.cts +4 -3
  85. package/dist/pem/index.d.ts +4 -3
  86. package/dist/pilot/index.cjs +8 -4
  87. package/dist/pilot/index.cjs.map +1 -1
  88. package/dist/pilot/index.d.cts +4 -3
  89. package/dist/pilot/index.d.ts +4 -3
  90. package/dist/pilot/index.mjs +10 -6
  91. package/dist/pilot/index.mjs.map +1 -1
  92. package/dist/playstore/index.cjs +207 -0
  93. package/dist/playstore/index.cjs.map +1 -0
  94. package/dist/playstore/index.d.cts +1 -0
  95. package/dist/playstore/index.d.ts +1 -0
  96. package/dist/playstore/index.mjs +203 -0
  97. package/dist/playstore/index.mjs.map +1 -0
  98. package/dist/precheck/index.d.cts +4 -3
  99. package/dist/precheck/index.d.ts +4 -3
  100. package/dist/privacy/index.cjs +207 -0
  101. package/dist/privacy/index.cjs.map +1 -0
  102. package/dist/privacy/index.d.cts +2 -0
  103. package/dist/privacy/index.d.ts +2 -0
  104. package/dist/privacy/index.mjs +195 -0
  105. package/dist/privacy/index.mjs.map +1 -0
  106. package/dist/produce/index.cjs +32 -0
  107. package/dist/produce/index.cjs.map +1 -1
  108. package/dist/produce/index.d.cts +4 -3
  109. package/dist/produce/index.d.ts +4 -3
  110. package/dist/produce/index.mjs +32 -1
  111. package/dist/produce/index.mjs.map +1 -1
  112. package/dist/review/index.cjs +141 -0
  113. package/dist/review/index.cjs.map +1 -0
  114. package/dist/review/index.d.cts +2 -0
  115. package/dist/review/index.d.ts +2 -0
  116. package/dist/review/index.mjs +137 -0
  117. package/dist/review/index.mjs.map +1 -0
  118. package/dist/sigh/index.d.cts +4 -3
  119. package/dist/sigh/index.d.ts +4 -3
  120. package/dist/xcode/index.cjs +1 -1
  121. package/dist/xcode/index.cjs.map +1 -1
  122. package/dist/xcode/index.mjs +1 -1
  123. package/dist/xcode/index.mjs.map +1 -1
  124. package/package.json +27 -1
  125. package/dist/index-B9QeTpQK.d.cts +0 -99
  126. package/dist/index-xykpq6Lz.d.ts +0 -99
package/README.md CHANGED
@@ -53,7 +53,8 @@ Each module can be imported separately:
53
53
  | `@sitepong/fastnode/match` | Sync certs + profiles across machines via git/S3/local storage |
54
54
  | `@sitepong/fastnode/produce` | Create App Store Connect apps and bundle IDs, manage capabilities |
55
55
  | `@sitepong/fastnode/pilot` | Upload builds to TestFlight, manage beta groups, set changelog |
56
- | `@sitepong/fastnode/deliver` | Upload metadata, screenshots, submit to App Review |
56
+ | `@sitepong/fastnode/deliver` | Upload metadata, screenshots, previews, product page headers and search results assets (App Asset Library), submit to App Review |
57
+ | `@sitepong/fastnode/review` | Read App Review's Resolution Center: rejection reasons and messages |
57
58
  | `@sitepong/fastnode/pem` | Create APNS push notification certificates |
58
59
  | `@sitepong/fastnode/gym` | Build and archive iOS apps via xcodebuild |
59
60
  | `@sitepong/fastnode/scan` | Run tests via xcodebuild, parse xcresult |
@@ -62,6 +63,68 @@ Each module can be imported separately:
62
63
  | `@sitepong/fastnode/precheck` | Static-analyze App Store metadata against review rules |
63
64
  | `@sitepong/fastnode/frameit` | Composite screenshots into device frames |
64
65
 
66
+ ## App Store assets (App Asset Library)
67
+
68
+ App Store Connect API 4.5.1 replaced screenshot and preview sets with one
69
+ asset library per app. Images and videos are uploaded once, then *placed* on
70
+ App Store version localizations. The same library carries the iOS 27 creative
71
+ assets: the product page header and the search results asset.
72
+
73
+ ```
74
+ assets/
75
+ en-US/
76
+ screenshots/01-home.png APP_SCREENSHOT, group picked from the image size
77
+ screenshots/IPHONE_DUO/01-home.png APP_SCREENSHOT in an explicit placement group
78
+ previews/<PLACEMENT_GROUP>/demo.mp4 APP_PREVIEW (videos go in a group folder)
79
+ header/hero.png PRODUCT_PAGE_HEADER_ASSET (21:9 3840×1646, or 16:9 5244×2950)
80
+ search_results/card.png APP_STORE_SEARCH_RESULTS_ASSET (3:2 or 16:9)
81
+ ```
82
+
83
+ ```bash
84
+ npx @sitepong/fastnode assets specs # placement groups + accepted sizes, from Apple
85
+ npx @sitepong/fastnode deliver -a com.example.app --assets-path ./assets --skip-binary-upload
86
+ npx @sitepong/fastnode deliver -a com.example.app --screenshots-path ./screenshots --asset-library --overwrite-assets
87
+ npx @sitepong/fastnode assets list -a com.example.app
88
+ ```
89
+
90
+ - Placement groups and sizes come from `/v1/appAssetLibraryRefData`, never a
91
+ hard-coded table, so new devices (e.g. `IPHONE_DUO`) work without a release.
92
+ - A file is uploaded once per content hash and reused across locales and
93
+ later runs. `--overwrite-assets` makes the folder the source of truth for
94
+ each slot it fills; without it, new placements are added beside existing ones.
95
+ - Apple's per-group limits are enforced before upload (10 screenshots,
96
+ 3 previews, 1 header per group for versions).
97
+ - `--screenshots-path` without `--asset-library` still uses the deprecated
98
+ screenshot sets.
99
+ - Assets can be submitted for review on their own:
100
+ `client.reviewSubmissionItems.create({ reviewSubmissionId, appAssetLibraryImageId })`.
101
+
102
+ As a library: `uploadAssetLibrary({ client, appId, versionId, assetsPath })`
103
+ from `@sitepong/fastnode/deliver`, or the raw resources
104
+ `client.appAssetLibraries`, `appAssetLibraryImages`, `appAssetLibraryVideos`
105
+ and `appAssetLibraryPlacements`.
106
+
107
+ ## App Review feedback
108
+
109
+ The public API has no Resolution Center, so `fastnode rejections` reads it
110
+ through an Apple ID session, the way Spaceship does:
111
+
112
+ ```bash
113
+ FASTNODE_USER=you@example.com npx @sitepong/fastnode rejections --app-id 1234567890
114
+ npx @sitepong/fastnode rejections --app-id 1234567890 --all --json
115
+ ```
116
+
117
+ You sign in once: the Apple ID session (never the password) is saved to
118
+ `~/.fastnode/sessions` (0600; override with `FASTNODE_SESSION_DIR`), and later
119
+ `rejections` and `privacy` runs on the same Apple ID reuse it until Apple
120
+ expires it, with no password or 2FA prompt. `--fresh-login` forces a new
121
+ sign-in.
122
+
123
+ It prints each submission waiting on you (`UNRESOLVED_ISSUES`), the guideline
124
+ reasons App Review attached, and the message text. `--all` includes resolved
125
+ submissions too. From code: `getReviewFeedback(session, appId)` in
126
+ `@sitepong/fastnode/review`.
127
+
65
128
  ## Apple sign-in & one-click setup
66
129
 
67
130
  `fastnode` ships a complete "sign in with your Apple Developer Apple ID