@sitepong/fastnode 0.3.0 → 0.3.2

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 (127) hide show
  1. package/README.md +6 -0
  2. package/dist/actions/index.cjs +81 -0
  3. package/dist/actions/index.cjs.map +1 -1
  4. package/dist/actions/index.mjs +82 -1
  5. package/dist/actions/index.mjs.map +1 -1
  6. package/dist/{apple-session-jUzBrql5.d.cts → apple-session-D6x7Jo3D.d.cts} +1 -1
  7. package/dist/{apple-session-jUzBrql5.d.ts → apple-session-D6x7Jo3D.d.ts} +1 -1
  8. package/dist/cert/index.cjs +92 -51
  9. package/dist/cert/index.cjs.map +1 -1
  10. package/dist/cert/index.d.cts +5 -5
  11. package/dist/cert/index.d.ts +5 -5
  12. package/dist/cert/index.mjs +92 -51
  13. package/dist/cert/index.mjs.map +1 -1
  14. package/dist/{cert-RvXmdMke.d.ts → cert-C-yRB-sO.d.ts} +2 -2
  15. package/dist/{cert-eOoxGMN1.d.cts → cert-C4hhKH1n.d.cts} +2 -2
  16. package/dist/cli/index.cjs +151 -47
  17. package/dist/cli/index.cjs.map +1 -1
  18. package/dist/cli/index.d.cts +3 -3
  19. package/dist/cli/index.d.ts +3 -3
  20. package/dist/cli/index.mjs +152 -48
  21. package/dist/cli/index.mjs.map +1 -1
  22. package/dist/client/index.cjs +77 -0
  23. package/dist/client/index.cjs.map +1 -1
  24. package/dist/client/index.d.cts +3 -3
  25. package/dist/client/index.d.ts +3 -3
  26. package/dist/client/index.mjs +72 -1
  27. package/dist/client/index.mjs.map +1 -1
  28. package/dist/core/index.d.cts +1 -1
  29. package/dist/core/index.d.ts +1 -1
  30. package/dist/deliver/index.d.cts +4 -4
  31. package/dist/deliver/index.d.ts +4 -4
  32. package/dist/{enums-yXNVh3UI.d.cts → enums-BlpayMTx.d.cts} +1 -1
  33. package/dist/{enums-yXNVh3UI.d.ts → enums-BlpayMTx.d.ts} +1 -1
  34. package/dist/frameit/index.d.cts +1 -1
  35. package/dist/frameit/index.d.ts +1 -1
  36. package/dist/gradle/index.d.cts +1 -1
  37. package/dist/gradle/index.d.ts +1 -1
  38. package/dist/gym/index.d.cts +2 -2
  39. package/dist/gym/index.d.ts +2 -2
  40. package/dist/{index-DnHQ2uT2.d.cts → index-258t9n7v.d.cts} +2 -2
  41. package/dist/{index-BvyZ4uiw.d.ts → index-6LKy36sE.d.ts} +4 -4
  42. package/dist/{index-icIH5e5V.d.cts → index-B74vgav6.d.cts} +4 -4
  43. package/dist/{index-BoU8qt8r.d.cts → index-B7ERdhh8.d.cts} +1 -1
  44. package/dist/{index-BoU8qt8r.d.ts → index-B7ERdhh8.d.ts} +1 -1
  45. package/dist/{index-laE3_wm9.d.cts → index-BIRpj0f2.d.cts} +2 -2
  46. package/dist/{index-CBf0-NUQ.d.ts → index-BJLHWMwL.d.ts} +3 -3
  47. package/dist/{index-mEEB7An6.d.ts → index-B_D_01oz.d.ts} +1 -1
  48. package/dist/{index-D1GHEM3c.d.ts → index-Ba1jHQYg.d.ts} +1 -1
  49. package/dist/{index-DGkgRnZp.d.cts → index-BawZaGqD.d.cts} +3 -3
  50. package/dist/{index-8djTPW8O.d.ts → index-BmrOdmNL.d.ts} +2 -2
  51. package/dist/{index-DjC_gmnL.d.ts → index-C8L03MBu.d.ts} +3 -3
  52. package/dist/{index-Cp6cjtd-.d.ts → index-CHLDQweM.d.cts} +1 -1
  53. package/dist/{index-Cp6cjtd-.d.cts → index-CHLDQweM.d.ts} +1 -1
  54. package/dist/{index-B6-MJpO4.d.cts → index-CRFfLsEG.d.cts} +1 -1
  55. package/dist/{index-CAEiXVWd.d.ts → index-CV6KnSy1.d.ts} +2 -2
  56. package/dist/index-CX2hUvvG.d.cts +287 -0
  57. package/dist/index-CX2hUvvG.d.ts +287 -0
  58. package/dist/{index-C9mHBJED.d.ts → index-ClhWjR7a.d.ts} +2 -2
  59. package/dist/{index-BGhV0gS-.d.ts → index-Cq-xo-9x.d.ts} +2 -2
  60. package/dist/{index-CR3BFPIz.d.ts → index-Cw7ojUY5.d.cts} +1 -1
  61. package/dist/{index-CR3BFPIz.d.cts → index-Cw7ojUY5.d.ts} +1 -1
  62. package/dist/{index-C2yG3wXA.d.cts → index-CwD7lG0y.d.cts} +1 -1
  63. package/dist/{index-C2yG3wXA.d.ts → index-CwD7lG0y.d.ts} +1 -1
  64. package/dist/{index-DLJso7Vs.d.cts → index-CxrqhkVF.d.cts} +1 -1
  65. package/dist/{index-BE7bwNff.d.cts → index-D3zyYCYs.d.cts} +2 -2
  66. package/dist/{index-BaNcf7jt.d.cts → index-DCrSWVMb.d.cts} +3 -3
  67. package/dist/{index-rTZOdMRE.d.ts → index-DP2f5ZsS.d.ts} +3 -3
  68. package/dist/{index-DfkIz7i0.d.cts → index-DRjXV9ej.d.cts} +3 -3
  69. package/dist/{index-Dv-Mek07.d.ts → index-DSXBQeur.d.cts} +1 -1
  70. package/dist/{index-Dv-Mek07.d.cts → index-DSXBQeur.d.ts} +1 -1
  71. package/dist/{index-BYonklf3.d.cts → index-Dvi-3DSM.d.cts} +1 -1
  72. package/dist/{index-BYonklf3.d.ts → index-Dvi-3DSM.d.ts} +1 -1
  73. package/dist/{index-C01Rkrir.d.ts → index-Dy8EWOnt.d.ts} +2 -2
  74. package/dist/{index-DrmS802s.d.cts → index-HWWl6HEL.d.cts} +34 -3
  75. package/dist/{index-DWOLZNlz.d.cts → index-QYgreJV3.d.cts} +2 -2
  76. package/dist/{index-lsuS2R1T.d.ts → index-SyCMBpNN.d.ts} +34 -3
  77. package/dist/{index-DFstwgGK.d.cts → index-yro2MWgt.d.cts} +2 -2
  78. package/dist/index.cjs +1543 -964
  79. package/dist/index.cjs.map +1 -1
  80. package/dist/index.d.cts +23 -23
  81. package/dist/index.d.ts +23 -23
  82. package/dist/index.mjs +1544 -965
  83. package/dist/index.mjs.map +1 -1
  84. package/dist/lane/index.cjs +81 -0
  85. package/dist/lane/index.cjs.map +1 -1
  86. package/dist/lane/index.mjs +82 -1
  87. package/dist/lane/index.mjs.map +1 -1
  88. package/dist/match/index.d.cts +6 -6
  89. package/dist/match/index.d.ts +6 -6
  90. package/dist/match/index.mjs +1 -1
  91. package/dist/pem/index.d.cts +4 -4
  92. package/dist/pem/index.d.ts +4 -4
  93. package/dist/pilot/index.d.cts +4 -4
  94. package/dist/pilot/index.d.ts +4 -4
  95. package/dist/playstore/index.cjs +18208 -1
  96. package/dist/playstore/index.cjs.map +1 -1
  97. package/dist/playstore/index.d.cts +1 -1
  98. package/dist/playstore/index.d.ts +1 -1
  99. package/dist/playstore/index.mjs +18196 -2
  100. package/dist/playstore/index.mjs.map +1 -1
  101. package/dist/precheck/index.d.cts +4 -4
  102. package/dist/precheck/index.d.ts +4 -4
  103. package/dist/privacy/index.cjs +32 -22
  104. package/dist/privacy/index.cjs.map +1 -1
  105. package/dist/privacy/index.d.cts +2 -2
  106. package/dist/privacy/index.d.ts +2 -2
  107. package/dist/privacy/index.mjs +32 -22
  108. package/dist/privacy/index.mjs.map +1 -1
  109. package/dist/produce/index.d.cts +4 -4
  110. package/dist/produce/index.d.ts +4 -4
  111. package/dist/review/index.cjs +32 -22
  112. package/dist/review/index.cjs.map +1 -1
  113. package/dist/review/index.d.cts +2 -2
  114. package/dist/review/index.d.ts +2 -2
  115. package/dist/review/index.mjs +32 -22
  116. package/dist/review/index.mjs.map +1 -1
  117. package/dist/sigh/index.d.cts +4 -4
  118. package/dist/sigh/index.d.ts +4 -4
  119. package/dist/snapshot/index.d.cts +1 -1
  120. package/dist/snapshot/index.d.ts +1 -1
  121. package/dist/trainer/index.d.cts +1 -1
  122. package/dist/trainer/index.d.ts +1 -1
  123. package/dist/xcode/index.d.cts +1 -1
  124. package/dist/xcode/index.d.ts +1 -1
  125. package/package.json +2 -2
  126. package/dist/index-CXJlvmB4.d.cts +0 -63
  127. package/dist/index-CXJlvmB4.d.ts +0 -63
package/README.md CHANGED
@@ -114,6 +114,12 @@ FASTNODE_USER=you@example.com npx @sitepong/fastnode rejections --app-id 1234567
114
114
  npx @sitepong/fastnode rejections --app-id 1234567890 --all --json
115
115
  ```
116
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
+
117
123
  It prints each submission waiting on you (`UNRESOLVED_ISSUES`), the guideline
118
124
  reasons App Review attached, and the message text. `--all` includes resolved
119
125
  submissions too. From code: `getReviewFeedback(session, appId)` in
@@ -6953,6 +6953,79 @@ var init_app_asset_library_placements = __esm({
6953
6953
  };
6954
6954
  }
6955
6955
  });
6956
+ function sessionDir() {
6957
+ return process.env.FASTNODE_SESSION_DIR || path.join(os.homedir(), ".fastnode", "sessions");
6958
+ }
6959
+ function fileFor(email) {
6960
+ const key = crypto.createHash("sha256").update(email.trim().toLowerCase()).digest("hex").slice(0, 16);
6961
+ return path.join(sessionDir(), `${key}.json`);
6962
+ }
6963
+ function ensureDir() {
6964
+ const dir = sessionDir();
6965
+ if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true, mode: 448 });
6966
+ fs.chmodSync(dir, 448);
6967
+ }
6968
+ function saveAppleSession(session) {
6969
+ ensureDir();
6970
+ const stored = { email: session.userEmail, savedAt: (/* @__PURE__ */ new Date()).toISOString(), session };
6971
+ const path$1 = fileFor(session.userEmail);
6972
+ fs.writeFileSync(path$1, JSON.stringify(stored), { mode: 384 });
6973
+ fs.chmodSync(path$1, 384);
6974
+ fs.writeFileSync(path.join(sessionDir(), "last-apple-id"), session.userEmail, { mode: 384 });
6975
+ }
6976
+ function clearAppleSession(email) {
6977
+ const path = fileFor(email);
6978
+ if (fs.existsSync(path)) fs.unlinkSync(path);
6979
+ }
6980
+ function lastAppleId() {
6981
+ try {
6982
+ return fs.readFileSync(path.join(sessionDir(), "last-apple-id"), "utf8").trim() || null;
6983
+ } catch {
6984
+ return null;
6985
+ }
6986
+ }
6987
+ async function loadAppleSession(email, fetchImpl = fetch) {
6988
+ const path = fileFor(email);
6989
+ if (!fs.existsSync(path)) return null;
6990
+ let stored;
6991
+ try {
6992
+ stored = JSON.parse(fs.readFileSync(path, "utf8"));
6993
+ } catch {
6994
+ return null;
6995
+ }
6996
+ const cookie = Object.entries(stored.session.cookies).map(([k, v]) => `${k}=${v}`).join("; ");
6997
+ try {
6998
+ const res = await fetchImpl(OLYMPUS_SESSION2, { headers: { Cookie: cookie, Accept: "application/json" } });
6999
+ if (!res.ok) {
7000
+ clearAppleSession(email);
7001
+ return null;
7002
+ }
7003
+ } catch {
7004
+ return null;
7005
+ }
7006
+ return stored.session;
7007
+ }
7008
+ async function signInWithAppleId(options) {
7009
+ const email = options.email || lastAppleId() || await options.askEmail();
7010
+ if (!options.fresh) {
7011
+ const saved = await loadAppleSession(email);
7012
+ if (saved) {
7013
+ options.onLog?.(`Using saved Apple ID session for ${email}`);
7014
+ return saved;
7015
+ }
7016
+ }
7017
+ const password = await options.askPassword(email);
7018
+ const session = await loginWithAppleId({ email, password, onLog: options.onLog });
7019
+ saveAppleSession(session);
7020
+ return session;
7021
+ }
7022
+ var OLYMPUS_SESSION2;
7023
+ var init_session_store = __esm({
7024
+ "src/client/session-store.ts"() {
7025
+ init_apple_session();
7026
+ OLYMPUS_SESSION2 = "https://appstoreconnect.apple.com/olympus/v1/session";
7027
+ }
7028
+ });
6956
7029
 
6957
7030
  // src/client/portal.ts
6958
7031
  function pickUniqueKeyName(base, taken) {
@@ -7721,6 +7794,7 @@ var init_iris = __esm({
7721
7794
  session;
7722
7795
  cookieStr;
7723
7796
  buildHeaders() {
7797
+ this.cookieStr = Object.entries(this.session.cookies).map(([k, v]) => `${k}=${v}`).join("; ");
7724
7798
  return {
7725
7799
  Cookie: this.cookieStr,
7726
7800
  Accept: "application/vnd.api+json, application/json, text/plain, */*",
@@ -8031,8 +8105,14 @@ __export(client_exports, {
8031
8105
  TokenManager: () => TokenManager,
8032
8106
  beginLogin: () => beginLogin,
8033
8107
  checkPortalResponse: () => checkPortalResponse,
8108
+ clearAppleSession: () => clearAppleSession,
8109
+ lastAppleId: () => lastAppleId,
8110
+ loadAppleSession: () => loadAppleSession,
8034
8111
  loginWithAppleId: () => loginWithAppleId,
8035
8112
  requestSmsCode: () => requestSmsCode,
8113
+ saveAppleSession: () => saveAppleSession,
8114
+ sessionDir: () => sessionDir,
8115
+ signInWithAppleId: () => signInWithAppleId,
8036
8116
  submitTwoFactorCode: () => submitTwoFactorCode
8037
8117
  });
8038
8118
  var AppStoreConnectClient;
@@ -8080,6 +8160,7 @@ var init_client = __esm({
8080
8160
  init_auth();
8081
8161
  init_request();
8082
8162
  init_apple_session();
8163
+ init_session_store();
8083
8164
  init_portal();
8084
8165
  init_iris();
8085
8166
  AppStoreConnectClient = class {