@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
@@ -0,0 +1,104 @@
1
+ import { A as AppleSession } from './apple-session-jUzBrql5.cjs';
2
+
3
+ /**
4
+ * App Privacy details ("nutrition labels") for an app in App Store Connect.
5
+ * 1:1 port of Fastlane's `upload_app_privacy_details_to_app_store` action and
6
+ * Spaceship's AppDataUsage / AppDataUsagesPublishState models.
7
+ *
8
+ * The public App Store Connect API has no endpoint for privacy details — an
9
+ * API key cannot set them. Fastlane goes through the iris API that App Store
10
+ * Connect's own web UI uses, authenticated with an Apple ID session, and so
11
+ * does this: pass the AppleSession from `loginWithAppleId` / the App Release
12
+ * sign-in.
13
+ *
14
+ * Usages use Fastlane's JSON format, so an existing `app_privacy_details.json`
15
+ * works unchanged:
16
+ *
17
+ * [
18
+ * { "category": "EMAIL_ADDRESS", "purposes": ["APP_FUNCTIONALITY"], "data_protections": ["DATA_LINKED_TO_YOU"] },
19
+ * { "data_protections": ["DATA_NOT_COLLECTED"] } // an app that collects nothing
20
+ * ]
21
+ *
22
+ * As in Fastlane, the upload REPLACES everything: existing usages are deleted
23
+ * first, then the new ones are created, then the answers are published.
24
+ */
25
+
26
+ /** Every category App Store Connect accepts. Anything else is refused before existing answers are deleted. */
27
+ declare const DATA_USAGE_CATEGORIES: readonly ["PAYMENT_INFORMATION", "CREDIT_AND_FRAUD", "OTHER_FINANCIAL_INFO", "PRECISE_LOCATION", "COARSE_LOCATION", "SENSITIVE_INFO", "PHYSICAL_ADDRESS", "EMAIL_ADDRESS", "NAME", "PHONE_NUMBER", "OTHER_CONTACT_INFO", "CONTACTS", "EMAILS_OR_TEXT_MESSAGES", "PHOTOS_OR_VIDEOS", "AUDIO", "GAMEPLAY_CONTENT", "CUSTOMER_SUPPORT", "OTHER_USER_CONTENT", "BROWSING_HISTORY", "SEARCH_HISTORY", "USER_ID", "DEVICE_ID", "PURCHASE_HISTORY", "PRODUCT_INTERACTION", "ADVERTISING_DATA", "OTHER_USAGE_DATA", "CRASH_DATA", "PERFORMANCE_DATA", "OTHER_DIAGNOSTIC_DATA", "OTHER_DATA", "HEALTH", "FITNESS"];
28
+ declare const DATA_USAGE_PURPOSES: readonly ["THIRD_PARTY_ADVERTISING", "DEVELOPERS_ADVERTISING", "ANALYTICS", "PRODUCT_PERSONALIZATION", "APP_FUNCTIONALITY", "OTHER_PURPOSES"];
29
+ declare const DATA_PROTECTIONS: readonly ["DATA_USED_TO_TRACK_YOU", "DATA_LINKED_TO_YOU", "DATA_NOT_LINKED_TO_YOU", "DATA_NOT_COLLECTED"];
30
+ type DataUsageCategory = "PAYMENT_INFORMATION" | "CREDIT_AND_FRAUD" | "OTHER_FINANCIAL_INFO" | "PRECISE_LOCATION" | "COARSE_LOCATION" | "SENSITIVE_INFO" | "PHYSICAL_ADDRESS" | "EMAIL_ADDRESS" | "NAME" | "PHONE_NUMBER" | "OTHER_CONTACT_INFO" | "CONTACTS" | "EMAILS_OR_TEXT_MESSAGES" | "PHOTOS_OR_VIDEOS" | "AUDIO" | "GAMEPLAY_CONTENT" | "CUSTOMER_SUPPORT" | "OTHER_USER_CONTENT" | "BROWSING_HISTORY" | "SEARCH_HISTORY" | "USER_ID" | "DEVICE_ID" | "PURCHASE_HISTORY" | "PRODUCT_INTERACTION" | "ADVERTISING_DATA" | "OTHER_USAGE_DATA" | "CRASH_DATA" | "PERFORMANCE_DATA" | "OTHER_DIAGNOSTIC_DATA" | "OTHER_DATA" | "HEALTH" | "FITNESS";
31
+ type DataUsagePurpose = "THIRD_PARTY_ADVERTISING" | "DEVELOPERS_ADVERTISING" | "ANALYTICS" | "PRODUCT_PERSONALIZATION" | "APP_FUNCTIONALITY" | "OTHER_PURPOSES";
32
+ type DataProtection = "DATA_USED_TO_TRACK_YOU" | "DATA_LINKED_TO_YOU" | "DATA_NOT_LINKED_TO_YOU" | "DATA_NOT_COLLECTED";
33
+ /** One entry of Fastlane's app_privacy_details.json. */
34
+ interface AppPrivacyUsage {
35
+ category?: DataUsageCategory;
36
+ purposes?: DataUsagePurpose[];
37
+ data_protections: DataProtection[];
38
+ }
39
+ interface UploadAppPrivacyOptions {
40
+ session: AppleSession;
41
+ /** App Store Connect app id (the numeric Apple ID). */
42
+ appId: string;
43
+ usages: AppPrivacyUsage[];
44
+ /** Leave the answers saved but unpublished (Fastlane's skip_publish). */
45
+ skipPublish?: boolean;
46
+ onLog?: (msg: string) => void;
47
+ }
48
+ interface UploadAppPrivacyResult {
49
+ deleted: number;
50
+ created: number;
51
+ published: boolean;
52
+ }
53
+ /**
54
+ * Point the session at the App Store Connect provider (team) that owns the app.
55
+ *
56
+ * An Apple ID in several teams signs in to whichever one it used last, and
57
+ * iris answers 404 for another team's app. Spaceship's `select_team` does the
58
+ * same switch: POST the provider id to the olympus session.
59
+ */
60
+ declare function selectProviderForApp(session: AppleSession, appId: string, onLog?: (m: string) => void): Promise<void>;
61
+ /** Existing privacy answers for an app. */
62
+ declare function listAppDataUsages(session: AppleSession, appId: string): Promise<Array<{
63
+ id: string;
64
+ }>>;
65
+ /** Spaceship AppDataUsage.create — relationships are sent only when given. */
66
+ declare function createAppDataUsage(session: AppleSession, input: {
67
+ appId: string;
68
+ category?: string | null;
69
+ purpose?: string | null;
70
+ dataProtection: string;
71
+ }): Promise<string>;
72
+ declare function deleteAppDataUsage(session: AppleSession, id: string): Promise<void>;
73
+ declare function getAppDataUsagesPublishState(session: AppleSession, appId: string): Promise<{
74
+ id: string;
75
+ published: boolean;
76
+ }>;
77
+ declare function publishAppDataUsages(session: AppleSession, publishStateId: string): Promise<void>;
78
+ /** Fastlane's `upload_app_privacy_details_to_app_store`. Replaces all answers, then publishes. */
79
+ declare function uploadAppPrivacyDetails(opts: UploadAppPrivacyOptions): Promise<UploadAppPrivacyResult>;
80
+ /** Catch the answers App Store Connect would refuse, before deleting what is there. */
81
+ declare function validateUsages(usages: AppPrivacyUsage[]): void;
82
+
83
+ type index_AppPrivacyUsage = AppPrivacyUsage;
84
+ declare const index_DATA_PROTECTIONS: typeof DATA_PROTECTIONS;
85
+ declare const index_DATA_USAGE_CATEGORIES: typeof DATA_USAGE_CATEGORIES;
86
+ declare const index_DATA_USAGE_PURPOSES: typeof DATA_USAGE_PURPOSES;
87
+ type index_DataProtection = DataProtection;
88
+ type index_DataUsageCategory = DataUsageCategory;
89
+ type index_DataUsagePurpose = DataUsagePurpose;
90
+ type index_UploadAppPrivacyOptions = UploadAppPrivacyOptions;
91
+ type index_UploadAppPrivacyResult = UploadAppPrivacyResult;
92
+ declare const index_createAppDataUsage: typeof createAppDataUsage;
93
+ declare const index_deleteAppDataUsage: typeof deleteAppDataUsage;
94
+ declare const index_getAppDataUsagesPublishState: typeof getAppDataUsagesPublishState;
95
+ declare const index_listAppDataUsages: typeof listAppDataUsages;
96
+ declare const index_publishAppDataUsages: typeof publishAppDataUsages;
97
+ declare const index_selectProviderForApp: typeof selectProviderForApp;
98
+ declare const index_uploadAppPrivacyDetails: typeof uploadAppPrivacyDetails;
99
+ declare const index_validateUsages: typeof validateUsages;
100
+ declare namespace index {
101
+ export { type index_AppPrivacyUsage as AppPrivacyUsage, index_DATA_PROTECTIONS as DATA_PROTECTIONS, index_DATA_USAGE_CATEGORIES as DATA_USAGE_CATEGORIES, index_DATA_USAGE_PURPOSES as DATA_USAGE_PURPOSES, type index_DataProtection as DataProtection, type index_DataUsageCategory as DataUsageCategory, type index_DataUsagePurpose as DataUsagePurpose, type index_UploadAppPrivacyOptions as UploadAppPrivacyOptions, type index_UploadAppPrivacyResult as UploadAppPrivacyResult, index_createAppDataUsage as createAppDataUsage, index_deleteAppDataUsage as deleteAppDataUsage, index_getAppDataUsagesPublishState as getAppDataUsagesPublishState, index_listAppDataUsages as listAppDataUsages, index_publishAppDataUsages as publishAppDataUsages, index_selectProviderForApp as selectProviderForApp, index_uploadAppPrivacyDetails as uploadAppPrivacyDetails, index_validateUsages as validateUsages };
102
+ }
103
+
104
+ export { type AppPrivacyUsage as A, DATA_USAGE_CATEGORIES as D, type UploadAppPrivacyOptions as U, DATA_USAGE_PURPOSES as a, DATA_PROTECTIONS as b, type DataUsageCategory as c, type DataUsagePurpose as d, type DataProtection as e, type UploadAppPrivacyResult as f, createAppDataUsage as g, deleteAppDataUsage as h, index as i, getAppDataUsagesPublishState as j, listAppDataUsages as l, publishAppDataUsages as p, selectProviderForApp as s, uploadAppPrivacyDetails as u, validateUsages as v };
@@ -0,0 +1,84 @@
1
+ type AndroidOutputType = "aab" | "apk" | "both";
2
+ interface GradleBuildOptions {
3
+ /** The android/ dir or app root containing `gradlew`. */
4
+ projectDir: string;
5
+ /** Which artifact(s) to produce. */
6
+ outputType: AndroidOutputType;
7
+ /** Product flavor (e.g. "prod") — capitalized into the Gradle task name. */
8
+ flavor?: string;
9
+ /** Build type, defaults to "Release". */
10
+ buildType?: string;
11
+ /**
12
+ * JVM args for the Gradle daemon. Defaults to a raised heap/metaspace
13
+ * (`-Xmx3072m -XX:MaxMetaspaceSize=1024m`) because Expo's generated
14
+ * `gradle.properties` caps metaspace at 512m, which OOMs on large RN
15
+ * module graphs (Kotlin/AGP class metadata). Set to `null` to leave the
16
+ * project's `gradle.properties` untouched.
17
+ */
18
+ jvmArgs?: string | null;
19
+ /** Absolute (or resolvable) path to the keystore file. */
20
+ keystorePath: string;
21
+ keystorePassword: string;
22
+ keyAlias: string;
23
+ keyPassword: string;
24
+ onOutput?: (chunk: string) => void;
25
+ /** When aborted, the gradlew process group is killed to stop the build. */
26
+ signal?: AbortSignal;
27
+ }
28
+ interface GradleBuildResult {
29
+ success: boolean;
30
+ exitCode: number;
31
+ aabPath?: string;
32
+ apkPath?: string;
33
+ logContent: string;
34
+ }
35
+ /**
36
+ * Rewrite `versionCode` (and `versionName`, when given) in an app module's
37
+ * Gradle file, Groovy (`versionCode 1`) or Kotlin DSL (`versionCode = 1`).
38
+ * Returns the new source and whether each value was found.
39
+ */
40
+ declare function stampAndroidVersion(source: string, versionCode: number, versionName?: string | null): {
41
+ source: string;
42
+ versionCode: boolean;
43
+ versionName: boolean;
44
+ };
45
+ /**
46
+ * Stamp the build's version into `android/app/build.gradle(.kts)`. Play refuses
47
+ * a versionCode it has seen, so each build must carry its own.
48
+ */
49
+ declare function setAndroidVersion(projectDir: string, versionCode: number, versionName?: string | null): Promise<{
50
+ file: string;
51
+ versionCode: boolean;
52
+ versionName: boolean;
53
+ }>;
54
+ /**
55
+ * Resolve the directory that contains `gradlew`. Accepts either the app root
56
+ * (which contains an `android/` subdirectory) or the `android/` dir itself.
57
+ */
58
+ declare function detectAndroidDir(rootDir: string): Promise<string>;
59
+ /**
60
+ * Build an Android app using Gradle (`./gradlew`).
61
+ * This is the Android-side equivalent of `gym` (iOS).
62
+ *
63
+ * Steps:
64
+ * 1. Resolve the gradlew directory.
65
+ * 2. chmod +x gradlew so it's executable on fresh checkouts.
66
+ * 3. Run the appropriate task(s) (bundle/assemble), injecting the signing
67
+ * config via standard AGP `-Pandroid.injected.signing.*` properties.
68
+ * 4. Locate produced AAB/APK artifacts by globbing standard output paths.
69
+ * 5. Return a GradleBuildResult.
70
+ */
71
+ declare function buildAndroid(options: GradleBuildOptions): Promise<GradleBuildResult>;
72
+
73
+ type index_AndroidOutputType = AndroidOutputType;
74
+ type index_GradleBuildOptions = GradleBuildOptions;
75
+ type index_GradleBuildResult = GradleBuildResult;
76
+ declare const index_buildAndroid: typeof buildAndroid;
77
+ declare const index_detectAndroidDir: typeof detectAndroidDir;
78
+ declare const index_setAndroidVersion: typeof setAndroidVersion;
79
+ declare const index_stampAndroidVersion: typeof stampAndroidVersion;
80
+ declare namespace index {
81
+ export { type index_AndroidOutputType as AndroidOutputType, type index_GradleBuildOptions as GradleBuildOptions, type index_GradleBuildResult as GradleBuildResult, index_buildAndroid as buildAndroid, index_detectAndroidDir as detectAndroidDir, index_setAndroidVersion as setAndroidVersion, index_stampAndroidVersion as stampAndroidVersion };
82
+ }
83
+
84
+ export { type AndroidOutputType as A, type GradleBuildOptions as G, type GradleBuildResult as a, setAndroidVersion as b, buildAndroid as c, detectAndroidDir as d, index as i, stampAndroidVersion as s };
@@ -0,0 +1,84 @@
1
+ type AndroidOutputType = "aab" | "apk" | "both";
2
+ interface GradleBuildOptions {
3
+ /** The android/ dir or app root containing `gradlew`. */
4
+ projectDir: string;
5
+ /** Which artifact(s) to produce. */
6
+ outputType: AndroidOutputType;
7
+ /** Product flavor (e.g. "prod") — capitalized into the Gradle task name. */
8
+ flavor?: string;
9
+ /** Build type, defaults to "Release". */
10
+ buildType?: string;
11
+ /**
12
+ * JVM args for the Gradle daemon. Defaults to a raised heap/metaspace
13
+ * (`-Xmx3072m -XX:MaxMetaspaceSize=1024m`) because Expo's generated
14
+ * `gradle.properties` caps metaspace at 512m, which OOMs on large RN
15
+ * module graphs (Kotlin/AGP class metadata). Set to `null` to leave the
16
+ * project's `gradle.properties` untouched.
17
+ */
18
+ jvmArgs?: string | null;
19
+ /** Absolute (or resolvable) path to the keystore file. */
20
+ keystorePath: string;
21
+ keystorePassword: string;
22
+ keyAlias: string;
23
+ keyPassword: string;
24
+ onOutput?: (chunk: string) => void;
25
+ /** When aborted, the gradlew process group is killed to stop the build. */
26
+ signal?: AbortSignal;
27
+ }
28
+ interface GradleBuildResult {
29
+ success: boolean;
30
+ exitCode: number;
31
+ aabPath?: string;
32
+ apkPath?: string;
33
+ logContent: string;
34
+ }
35
+ /**
36
+ * Rewrite `versionCode` (and `versionName`, when given) in an app module's
37
+ * Gradle file, Groovy (`versionCode 1`) or Kotlin DSL (`versionCode = 1`).
38
+ * Returns the new source and whether each value was found.
39
+ */
40
+ declare function stampAndroidVersion(source: string, versionCode: number, versionName?: string | null): {
41
+ source: string;
42
+ versionCode: boolean;
43
+ versionName: boolean;
44
+ };
45
+ /**
46
+ * Stamp the build's version into `android/app/build.gradle(.kts)`. Play refuses
47
+ * a versionCode it has seen, so each build must carry its own.
48
+ */
49
+ declare function setAndroidVersion(projectDir: string, versionCode: number, versionName?: string | null): Promise<{
50
+ file: string;
51
+ versionCode: boolean;
52
+ versionName: boolean;
53
+ }>;
54
+ /**
55
+ * Resolve the directory that contains `gradlew`. Accepts either the app root
56
+ * (which contains an `android/` subdirectory) or the `android/` dir itself.
57
+ */
58
+ declare function detectAndroidDir(rootDir: string): Promise<string>;
59
+ /**
60
+ * Build an Android app using Gradle (`./gradlew`).
61
+ * This is the Android-side equivalent of `gym` (iOS).
62
+ *
63
+ * Steps:
64
+ * 1. Resolve the gradlew directory.
65
+ * 2. chmod +x gradlew so it's executable on fresh checkouts.
66
+ * 3. Run the appropriate task(s) (bundle/assemble), injecting the signing
67
+ * config via standard AGP `-Pandroid.injected.signing.*` properties.
68
+ * 4. Locate produced AAB/APK artifacts by globbing standard output paths.
69
+ * 5. Return a GradleBuildResult.
70
+ */
71
+ declare function buildAndroid(options: GradleBuildOptions): Promise<GradleBuildResult>;
72
+
73
+ type index_AndroidOutputType = AndroidOutputType;
74
+ type index_GradleBuildOptions = GradleBuildOptions;
75
+ type index_GradleBuildResult = GradleBuildResult;
76
+ declare const index_buildAndroid: typeof buildAndroid;
77
+ declare const index_detectAndroidDir: typeof detectAndroidDir;
78
+ declare const index_setAndroidVersion: typeof setAndroidVersion;
79
+ declare const index_stampAndroidVersion: typeof stampAndroidVersion;
80
+ declare namespace index {
81
+ export { type index_AndroidOutputType as AndroidOutputType, type index_GradleBuildOptions as GradleBuildOptions, type index_GradleBuildResult as GradleBuildResult, index_buildAndroid as buildAndroid, index_detectAndroidDir as detectAndroidDir, index_setAndroidVersion as setAndroidVersion, index_stampAndroidVersion as stampAndroidVersion };
82
+ }
83
+
84
+ export { type AndroidOutputType as A, type GradleBuildOptions as G, type GradleBuildResult as a, setAndroidVersion as b, buildAndroid as c, detectAndroidDir as d, index as i, stampAndroidVersion as s };
@@ -1,4 +1,4 @@
1
- import { a as AppStoreConnectClient, k as Build } from './index-BKUapQP2.cjs';
1
+ import { A as AppStoreConnectClient, j as Build } from './index-CemR3UI9.js';
2
2
 
3
3
  /**
4
4
  * Shared types for the pilot module's upload backends.
@@ -15,6 +15,14 @@ interface PilotUploadOptions {
15
15
  timeout?: number;
16
16
  /** Stream callback for upload progress / log lines. */
17
17
  onOutput?: (chunk: string) => void;
18
+ /**
19
+ * Absolute path to an AppStoreInfo.plist ("asset description"). iTMSTransporter
20
+ * cannot run its software-analysis phase on Linux, so the descriptor must be
21
+ * generated on macOS (via xcodebuild's generateAppStoreInformation export
22
+ * option) and passed here via -assetDescription. Ignored by the altool backend
23
+ * (macOS analyzes the binary natively).
24
+ */
25
+ assetDescriptionPath?: string;
18
26
  /**
19
27
  * Which backend to use. Defaults to "auto":
20
28
  * - altool on macOS (requires Xcode CLI)
@@ -1,6 +1,6 @@
1
- import { a as AppStoreConnectClient } from './index-BKUapQP2.cjs';
2
- import { a as CertResult } from './cert-FehieKeb.cjs';
3
- import { S as SighResult } from './index-BZWmOTWE.cjs';
1
+ import { A as AppStoreConnectClient } from './index-CpGV1f0L.cjs';
2
+ import { a as CertResult } from './cert-DffLKURp.cjs';
3
+ import { S as SighResult } from './index-isT08RuY.cjs';
4
4
 
5
5
  type StorageMode = "git" | "s3" | "local";
6
6
 
@@ -1,6 +1,6 @@
1
- import { a as AppStoreConnectClient } from './index-CCtYhPN9.js';
2
- import { a as CertResult } from './cert-Ddl7FpFT.js';
3
- import { S as SighResult } from './index-B8FOfxOw.js';
1
+ import { A as AppStoreConnectClient } from './index-CemR3UI9.js';
2
+ import { a as CertResult } from './cert-ClacRx9y.js';
3
+ import { S as SighResult } from './index-D9YQQ3FM.js';
4
4
 
5
5
  type StorageMode = "git" | "s3" | "local";
6
6
 
@@ -1,4 +1,4 @@
1
- import { C as CertOptions, a as CertResult, c as createCertificate, d as downloadCertificate, f as findValidCertificates, r as revokeCertificate, b as revokeExpiredCertificates } from './cert-Ddl7FpFT.js';
1
+ import { C as CertOptions, a as CertResult, c as createCertificate, d as downloadCertificate, f as findValidCertificates, r as revokeCertificate, b as revokeExpiredCertificates } from './cert-DffLKURp.cjs';
2
2
 
3
3
  /**
4
4
  * Generate EC P-256 CSR — used by App Store Connect API (JWT auth).
@@ -43,7 +43,35 @@ interface BundleP12Options {
43
43
  */
44
44
  declare function bundleP12(options: BundleP12Options): Buffer;
45
45
 
46
+ /**
47
+ * Certificate expiry extraction — reads the notAfter date (and serial) out of
48
+ * an uploaded signing certificate WITHOUT any native tooling, so it runs the
49
+ * same on a Linux API host as on a macOS build runner.
50
+ *
51
+ * Accepts the three shapes users actually upload for a distribution identity:
52
+ * - a PKCS#12 (.p12) bundle (cert + key), which needs the export password
53
+ * - a DER-encoded X.509 certificate (.cer)
54
+ * - a PEM-encoded certificate
55
+ * plus the base64-of-any-of-those that the dashboard sends over the wire.
56
+ *
57
+ * Everything is best-effort: a parse failure returns null so a bad/omitted
58
+ * password never blocks saving a credential — we simply don't learn the date.
59
+ */
60
+ interface CertExpiryInfo {
61
+ /** ISO-8601 notAfter (expiry) instant. */
62
+ notAfter: string;
63
+ /** Uppercase hex serial number, or null when unavailable. */
64
+ serialHex: string | null;
65
+ }
66
+ /**
67
+ * Parse a certificate's expiry from base64 material. `password` is only used
68
+ * (and only needed) when the material is a .p12. Returns null when nothing
69
+ * parseable is found.
70
+ */
71
+ declare function parseCertificateExpiry(base64: string, password?: string | null): CertExpiryInfo | null;
72
+
46
73
  type index_BundleP12Options = BundleP12Options;
74
+ type index_CertExpiryInfo = CertExpiryInfo;
47
75
  declare const index_CertOptions: typeof CertOptions;
48
76
  declare const index_CertResult: typeof CertResult;
49
77
  declare const index_bundleP12: typeof bundleP12;
@@ -52,10 +80,11 @@ declare const index_downloadCertificate: typeof downloadCertificate;
52
80
  declare const index_findValidCertificates: typeof findValidCertificates;
53
81
  declare const index_generateCSR: typeof generateCSR;
54
82
  declare const index_generateRSACSR: typeof generateRSACSR;
83
+ declare const index_parseCertificateExpiry: typeof parseCertificateExpiry;
55
84
  declare const index_revokeCertificate: typeof revokeCertificate;
56
85
  declare const index_revokeExpiredCertificates: typeof revokeExpiredCertificates;
57
86
  declare namespace index {
58
- export { type index_BundleP12Options as BundleP12Options, index_CertOptions as CertOptions, index_CertResult as CertResult, index_bundleP12 as bundleP12, index_createCertificate as createCertificate, index_downloadCertificate as downloadCertificate, index_findValidCertificates as findValidCertificates, index_generateCSR as generateCSR, index_generateRSACSR as generateRSACSR, index_revokeCertificate as revokeCertificate, index_revokeExpiredCertificates as revokeExpiredCertificates };
87
+ export { type index_BundleP12Options as BundleP12Options, type index_CertExpiryInfo as CertExpiryInfo, index_CertOptions as CertOptions, index_CertResult as CertResult, index_bundleP12 as bundleP12, index_createCertificate as createCertificate, index_downloadCertificate as downloadCertificate, index_findValidCertificates as findValidCertificates, index_generateCSR as generateCSR, index_generateRSACSR as generateRSACSR, index_parseCertificateExpiry as parseCertificateExpiry, index_revokeCertificate as revokeCertificate, index_revokeExpiredCertificates as revokeExpiredCertificates };
59
88
  }
60
89
 
61
- export { type BundleP12Options as B, generateRSACSR as a, bundleP12 as b, generateCSR as g, index as i };
90
+ export { type BundleP12Options as B, type CertExpiryInfo as C, generateRSACSR as a, bundleP12 as b, generateCSR as g, index as i, parseCertificateExpiry as p };
@@ -1,5 +1,5 @@
1
- import { a as AppStoreConnectClient, P as Profile } from './index-BKUapQP2.cjs';
2
- import { P as ProfileType } from './enums-B609j2rb.cjs';
1
+ import { A as AppStoreConnectClient, P as Profile } from './index-CpGV1f0L.cjs';
2
+ import { P as ProfileType } from './enums-yXNVh3UI.cjs';
3
3
 
4
4
  interface SighOptions {
5
5
  client: AppStoreConnectClient;
@@ -1,4 +1,4 @@
1
- import { E as ExportMethod } from './enums-B609j2rb.js';
1
+ import { E as ExportMethod } from './enums-yXNVh3UI.js';
2
2
 
3
3
  interface DetectedValues {
4
4
  workspace: string | null;
@@ -1,4 +1,4 @@
1
- import { a as AppStoreConnectClient } from './index-BKUapQP2.cjs';
1
+ import { A as AppStoreConnectClient } from './index-CpGV1f0L.cjs';
2
2
 
3
3
  interface RuleResult {
4
4
  passed: boolean;
@@ -0,0 +1,201 @@
1
+ import { A as AppStoreConnectClient, W as AppAssetLibraryRefDatumAttributes, X as AppAssetLibraryImageSpec } from './index-CemR3UI9.js';
2
+ import { l as AppAssetLibraryPlacementType, j as AppAssetLibraryAssetCategory, m as AppAssetLibraryAssetState, o as AppAssetLibraryFeature, b as Platform, R as ReleaseType } from './enums-yXNVh3UI.js';
3
+
4
+ interface LocalizedMetadata {
5
+ locale: string;
6
+ description?: string;
7
+ keywords?: string;
8
+ releaseNotes?: string;
9
+ supportUrl?: string;
10
+ marketingUrl?: string;
11
+ promotionalText?: string;
12
+ name?: string;
13
+ subtitle?: string;
14
+ privacyUrl?: string;
15
+ }
16
+ /**
17
+ * Review information submitted to App Store Connect for App Review.
18
+ * Mirrors Fastlane deliver's `review_first_name`, `review_last_name`,
19
+ * etc. (upload_metadata.rb lines 45-51), mapping to ASC's
20
+ * `appStoreReviewDetails` attribute names.
21
+ */
22
+ interface ReviewInformation {
23
+ firstName?: string;
24
+ lastName?: string;
25
+ phoneNumber?: string;
26
+ emailAddress?: string;
27
+ demoUser?: string;
28
+ demoPassword?: string;
29
+ notes?: string;
30
+ }
31
+ interface MetadataSet {
32
+ localizations: LocalizedMetadata[];
33
+ copyright?: string;
34
+ /** Typed review information extracted from `review_information/`. */
35
+ reviewInformation?: ReviewInformation;
36
+ /** Raw review information map, including any unrecognised filenames. */
37
+ reviewInfo?: Record<string, string>;
38
+ }
39
+ declare function loadMetadata(metadataPath: string): Promise<MetadataSet>;
40
+
41
+ /**
42
+ * Folder name under `<assetsPath>/<locale>/` → what gets placed there.
43
+ *
44
+ * assets/en-US/screenshots/01-home.png APP_SCREENSHOT (group from image size)
45
+ * assets/en-US/screenshots/IPHONE_DUO/01.png APP_SCREENSHOT in an explicit group
46
+ * assets/en-US/previews/IPHONE_…_PROFILE/a.mp4 APP_PREVIEW (videos need the group folder
47
+ * unless the type has a single group)
48
+ * assets/en-US/header/hero.png PRODUCT_PAGE_HEADER_ASSET
49
+ * assets/en-US/search_results/card.png APP_STORE_SEARCH_RESULTS_ASSET
50
+ */
51
+ declare const ASSET_FOLDERS: Record<string, AppAssetLibraryPlacementType>;
52
+ declare function categoryFor(placementType: AppAssetLibraryPlacementType): AppAssetLibraryAssetCategory;
53
+ declare function readImageSize(data: Buffer): {
54
+ width: number;
55
+ height: number;
56
+ alpha?: boolean;
57
+ } | null;
58
+ /**
59
+ * Which placement groups an image of this size can go into, read from
60
+ * Apple's reference data (never hard-coded — new devices appear there first).
61
+ */
62
+ declare function resolveImageGroups(refData: AppAssetLibraryRefDatumAttributes, feature: AppAssetLibraryFeature, placementType: AppAssetLibraryPlacementType, size: {
63
+ width: number;
64
+ height: number;
65
+ }): {
66
+ groups: string[];
67
+ spec?: AppAssetLibraryImageSpec;
68
+ };
69
+ interface UploadedAsset {
70
+ kind: "image" | "video";
71
+ id: string;
72
+ state: AppAssetLibraryAssetState;
73
+ reused: boolean;
74
+ }
75
+ /**
76
+ * Upload one file into the app's asset library and wait until it can be
77
+ * placed. A file already in the library (same content hash in its reference
78
+ * name) is reused instead of uploaded again.
79
+ */
80
+ declare function uploadLibraryAsset(options: {
81
+ client: AppStoreConnectClient;
82
+ libraryId: string;
83
+ filePath: string;
84
+ category: AppAssetLibraryAssetCategory;
85
+ referenceName?: string;
86
+ previewFrameTimeCode?: string;
87
+ pollIntervalMs?: number;
88
+ timeoutMs?: number;
89
+ log?: (line: string) => void;
90
+ }): Promise<UploadedAsset>;
91
+ interface PlaceAssetsResult {
92
+ uploaded: number;
93
+ reused: number;
94
+ placed: number;
95
+ removed: number;
96
+ warnings: string[];
97
+ }
98
+ /**
99
+ * Upload a folder of screenshots, previews and creative assets (product page
100
+ * header, search results) into the app's asset library and place them on each
101
+ * App Store version localization. See ASSET_FOLDERS for the layout.
102
+ *
103
+ * With `overwrite`, existing placements of each (type, group) we upload into
104
+ * are removed first, so the folder becomes the source of truth. Without it,
105
+ * new placements are added and files already placed are left alone.
106
+ */
107
+ declare function uploadAssetLibrary(options: {
108
+ client: AppStoreConnectClient;
109
+ appId: string;
110
+ versionId: string;
111
+ assetsPath: string;
112
+ overwrite?: boolean;
113
+ /** Override the folder → placement type map (e.g. screenshots-only from a legacy screenshots path). */
114
+ folders?: Record<string, AppAssetLibraryPlacementType>;
115
+ /** Treat files directly under `<locale>/` as this placement type (legacy screenshots layout). */
116
+ rootPlacementType?: AppAssetLibraryPlacementType;
117
+ log?: (line: string) => void;
118
+ }): Promise<PlaceAssetsResult>;
119
+
120
+ interface DeliverOptions {
121
+ client: AppStoreConnectClient;
122
+ bundleIdentifier: string;
123
+ appVersion?: string;
124
+ platform?: Platform;
125
+ ipaPath?: string;
126
+ pkgPath?: string;
127
+ metadataPath?: string;
128
+ screenshotsPath?: string;
129
+ submitForReview?: boolean;
130
+ automaticRelease?: boolean;
131
+ releaseType?: ReleaseType;
132
+ skipBinaryUpload?: boolean;
133
+ skipMetadata?: boolean;
134
+ skipScreenshots?: boolean;
135
+ /**
136
+ * App Asset Library folder: `<locale>/{screenshots,previews,header,search_results}/…`.
137
+ * Places screenshots, previews and creative assets (product page header,
138
+ * search results) on the version. See ASSET_FOLDERS.
139
+ */
140
+ assetsPath?: string;
141
+ /** Route `screenshotsPath` through the asset library instead of the deprecated screenshot sets. */
142
+ useAssetLibrary?: boolean;
143
+ /** Replace existing placements in each slot we upload into (fastlane's overwrite_screenshots). */
144
+ overwriteAssets?: boolean;
145
+ skipAssets?: boolean;
146
+ force?: boolean;
147
+ apiKeyId?: string;
148
+ apiIssuerId?: string;
149
+ apiPrivateKey?: string;
150
+ copyright?: string;
151
+ onOutput?: (chunk: string) => void;
152
+ }
153
+ interface DeliverResult {
154
+ appId: string;
155
+ versionId: string;
156
+ submitted: boolean;
157
+ }
158
+ declare function uploadToAppStore(options: DeliverOptions): Promise<DeliverResult>;
159
+ declare function submitForReview(options: {
160
+ client: AppStoreConnectClient;
161
+ appId: string;
162
+ versionId: string;
163
+ }): Promise<void>;
164
+ declare function uploadMetadata(options: {
165
+ client: AppStoreConnectClient;
166
+ appId: string;
167
+ versionId: string;
168
+ metadataPath: string;
169
+ }): Promise<void>;
170
+ /**
171
+ * Legacy screenshot-set upload. Apple deprecated screenshot sets in ASC API
172
+ * 4.5.1 — prefer `uploadAssetLibrary` (or `useAssetLibrary: true`).
173
+ */
174
+ declare function uploadScreenshots(options: {
175
+ client: AppStoreConnectClient;
176
+ versionId: string;
177
+ screenshotsPath: string;
178
+ }): Promise<void>;
179
+
180
+ declare const index_ASSET_FOLDERS: typeof ASSET_FOLDERS;
181
+ type index_DeliverOptions = DeliverOptions;
182
+ type index_DeliverResult = DeliverResult;
183
+ type index_LocalizedMetadata = LocalizedMetadata;
184
+ type index_MetadataSet = MetadataSet;
185
+ type index_PlaceAssetsResult = PlaceAssetsResult;
186
+ type index_UploadedAsset = UploadedAsset;
187
+ declare const index_categoryFor: typeof categoryFor;
188
+ declare const index_loadMetadata: typeof loadMetadata;
189
+ declare const index_readImageSize: typeof readImageSize;
190
+ declare const index_resolveImageGroups: typeof resolveImageGroups;
191
+ declare const index_submitForReview: typeof submitForReview;
192
+ declare const index_uploadAssetLibrary: typeof uploadAssetLibrary;
193
+ declare const index_uploadLibraryAsset: typeof uploadLibraryAsset;
194
+ declare const index_uploadMetadata: typeof uploadMetadata;
195
+ declare const index_uploadScreenshots: typeof uploadScreenshots;
196
+ declare const index_uploadToAppStore: typeof uploadToAppStore;
197
+ declare namespace index {
198
+ export { index_ASSET_FOLDERS as ASSET_FOLDERS, type index_DeliverOptions as DeliverOptions, type index_DeliverResult as DeliverResult, type index_LocalizedMetadata as LocalizedMetadata, type index_MetadataSet as MetadataSet, type index_PlaceAssetsResult as PlaceAssetsResult, type index_UploadedAsset as UploadedAsset, index_categoryFor as categoryFor, index_loadMetadata as loadMetadata, index_readImageSize as readImageSize, index_resolveImageGroups as resolveImageGroups, index_submitForReview as submitForReview, index_uploadAssetLibrary as uploadAssetLibrary, index_uploadLibraryAsset as uploadLibraryAsset, index_uploadMetadata as uploadMetadata, index_uploadScreenshots as uploadScreenshots, index_uploadToAppStore as uploadToAppStore };
199
+ }
200
+
201
+ export { ASSET_FOLDERS as A, type DeliverOptions as D, type LocalizedMetadata as L, type MetadataSet as M, type PlaceAssetsResult as P, type UploadedAsset as U, type DeliverResult as a, uploadMetadata as b, uploadScreenshots as c, uploadAssetLibrary as d, uploadLibraryAsset as e, readImageSize as f, categoryFor as g, index as i, loadMetadata as l, resolveImageGroups as r, submitForReview as s, uploadToAppStore as u };