@ankhorage/deploy 0.4.0 → 0.5.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/CHANGELOG.md +6 -0
- package/README.md +1 -1
- package/dist/domain/AndroidDeploymentIntent.d.ts +10 -0
- package/dist/domain/AndroidDeploymentIntent.d.ts.map +1 -0
- package/dist/domain/AndroidDeploymentIntent.js +3 -0
- package/dist/domain/AndroidDeploymentIntent.js.map +1 -0
- package/dist/domain/AndroidDeploymentPublication.d.ts +12 -0
- package/dist/domain/AndroidDeploymentPublication.d.ts.map +1 -0
- package/dist/domain/AndroidDeploymentPublication.js +2 -0
- package/dist/domain/AndroidDeploymentPublication.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/project/android/ProjectAndroidDeploymentAccess.d.ts +7 -0
- package/dist/project/android/ProjectAndroidDeploymentAccess.d.ts.map +1 -0
- package/dist/project/android/ProjectAndroidDeploymentAccess.js +2 -0
- package/dist/project/android/ProjectAndroidDeploymentAccess.js.map +1 -0
- package/dist/project/android/ProjectAndroidDeploymentExecution.d.ts +12 -0
- package/dist/project/android/ProjectAndroidDeploymentExecution.d.ts.map +1 -0
- package/dist/project/android/ProjectAndroidDeploymentExecution.js +2 -0
- package/dist/project/android/ProjectAndroidDeploymentExecution.js.map +1 -0
- package/dist/project/android/ProjectAndroidDeploymentInspection.d.ts +21 -0
- package/dist/project/android/ProjectAndroidDeploymentInspection.d.ts.map +1 -0
- package/dist/project/android/ProjectAndroidDeploymentInspection.js +2 -0
- package/dist/project/android/ProjectAndroidDeploymentInspection.js.map +1 -0
- package/dist/project/android/ProjectAndroidDeploymentRuntime.d.ts +13 -0
- package/dist/project/android/ProjectAndroidDeploymentRuntime.d.ts.map +1 -0
- package/dist/project/android/ProjectAndroidDeploymentRuntime.js +12 -0
- package/dist/project/android/ProjectAndroidDeploymentRuntime.js.map +1 -0
- package/dist/project/android/ProjectAndroidExecutionState.d.ts +10 -0
- package/dist/project/android/ProjectAndroidExecutionState.d.ts.map +1 -0
- package/dist/project/android/ProjectAndroidExecutionState.js +2 -0
- package/dist/project/android/ProjectAndroidExecutionState.js.map +1 -0
- package/dist/project/android/createProjectAndroidDeploymentPlan.d.ts +4 -0
- package/dist/project/android/createProjectAndroidDeploymentPlan.d.ts.map +1 -0
- package/dist/project/android/createProjectAndroidDeploymentPlan.js +13 -0
- package/dist/project/android/createProjectAndroidDeploymentPlan.js.map +1 -0
- package/dist/project/android/executeProjectAndroidDeployment.d.ts +12 -0
- package/dist/project/android/executeProjectAndroidDeployment.d.ts.map +1 -0
- package/dist/project/android/executeProjectAndroidDeployment.js +164 -0
- package/dist/project/android/executeProjectAndroidDeployment.js.map +1 -0
- package/dist/project/android/executeProjectAndroidStep.d.ts +15 -0
- package/dist/project/android/executeProjectAndroidStep.d.ts.map +1 -0
- package/dist/project/android/executeProjectAndroidStep.js +124 -0
- package/dist/project/android/executeProjectAndroidStep.js.map +1 -0
- package/dist/project/android/inspectProjectAndroidDeployment.d.ts +11 -0
- package/dist/project/android/inspectProjectAndroidDeployment.d.ts.map +1 -0
- package/dist/project/android/inspectProjectAndroidDeployment.js +90 -0
- package/dist/project/android/inspectProjectAndroidDeployment.js.map +1 -0
- package/dist/project/android/inspectProjectAndroidEasSetup.d.ts +5 -0
- package/dist/project/android/inspectProjectAndroidEasSetup.d.ts.map +1 -0
- package/dist/project/android/inspectProjectAndroidEasSetup.js +18 -0
- package/dist/project/android/inspectProjectAndroidEasSetup.js.map +1 -0
- package/dist/project/android/inspectProjectAndroidGooglePlay.d.ts +16 -0
- package/dist/project/android/inspectProjectAndroidGooglePlay.d.ts.map +1 -0
- package/dist/project/android/inspectProjectAndroidGooglePlay.js +52 -0
- package/dist/project/android/inspectProjectAndroidGooglePlay.js.map +1 -0
- package/dist/project/android/normalizeProjectAndroidDesired.d.ts +13 -0
- package/dist/project/android/normalizeProjectAndroidDesired.d.ts.map +1 -0
- package/dist/project/android/normalizeProjectAndroidDesired.js +25 -0
- package/dist/project/android/normalizeProjectAndroidDesired.js.map +1 -0
- package/dist/project/android/readCurrentProjectAndroidDeployment.d.ts +8 -0
- package/dist/project/android/readCurrentProjectAndroidDeployment.d.ts.map +1 -0
- package/dist/project/android/readCurrentProjectAndroidDeployment.js +44 -0
- package/dist/project/android/readCurrentProjectAndroidDeployment.js.map +1 -0
- package/dist/project/android/recordProjectAndroidDeployment.d.ts +21 -0
- package/dist/project/android/recordProjectAndroidDeployment.d.ts.map +1 -0
- package/dist/project/android/recordProjectAndroidDeployment.js +36 -0
- package/dist/project/android/recordProjectAndroidDeployment.js.map +1 -0
- package/dist/project/android/resolveProjectAndroidDeploymentAccess.d.ts +9 -0
- package/dist/project/android/resolveProjectAndroidDeploymentAccess.d.ts.map +1 -0
- package/dist/project/android/resolveProjectAndroidDeploymentAccess.js +7 -0
- package/dist/project/android/resolveProjectAndroidDeploymentAccess.js.map +1 -0
- package/dist/project/android/scopeProjectAndroidDeploymentAccess.d.ts +3 -0
- package/dist/project/android/scopeProjectAndroidDeploymentAccess.d.ts.map +1 -0
- package/dist/project/android/scopeProjectAndroidDeploymentAccess.js +7 -0
- package/dist/project/android/scopeProjectAndroidDeploymentAccess.js.map +1 -0
- package/dist/project/areDeploymentPlansEqual.d.ts +3 -0
- package/dist/project/areDeploymentPlansEqual.d.ts.map +1 -0
- package/dist/project/areDeploymentPlansEqual.js +4 -0
- package/dist/project/areDeploymentPlansEqual.js.map +1 -0
- package/dist/project/index.d.ts +6 -0
- package/dist/project/index.d.ts.map +1 -1
- package/dist/project/index.js +3 -0
- package/dist/project/index.js.map +1 -1
- package/dist/project/setupBlockingOutcome.d.ts +14 -0
- package/dist/project/setupBlockingOutcome.d.ts.map +1 -0
- package/dist/project/setupBlockingOutcome.js +38 -0
- package/dist/project/setupBlockingOutcome.js.map +1 -0
- package/dist/project/web/areDeploymentPlansEqual.d.ts +1 -2
- package/dist/project/web/areDeploymentPlansEqual.d.ts.map +1 -1
- package/dist/project/web/areDeploymentPlansEqual.js +1 -3
- package/dist/project/web/areDeploymentPlansEqual.js.map +1 -1
- package/dist/project/web/inspectProjectWebSetup.d.ts.map +1 -1
- package/dist/project/web/inspectProjectWebSetup.js +7 -2
- package/dist/project/web/inspectProjectWebSetup.js.map +1 -1
- package/dist/project/web/setupBlockingOutcome.d.ts.map +1 -1
- package/dist/project/web/setupBlockingOutcome.js +9 -31
- package/dist/project/web/setupBlockingOutcome.js.map +1 -1
- package/dist/providers/eas/android/EasAndroidBuildArtifact.d.ts +8 -0
- package/dist/providers/eas/android/EasAndroidBuildArtifact.d.ts.map +1 -0
- package/dist/providers/eas/android/EasAndroidBuildArtifact.js +2 -0
- package/dist/providers/eas/android/EasAndroidBuildArtifact.js.map +1 -0
- package/dist/providers/eas/android/buildAndroidWithEas.d.ts +25 -0
- package/dist/providers/eas/android/buildAndroidWithEas.d.ts.map +1 -0
- package/dist/providers/eas/android/buildAndroidWithEas.js +58 -0
- package/dist/providers/eas/android/buildAndroidWithEas.js.map +1 -0
- package/dist/providers/eas/android/generateLocalAndroidFingerprint.d.ts +15 -0
- package/dist/providers/eas/android/generateLocalAndroidFingerprint.d.ts.map +1 -0
- package/dist/providers/eas/android/generateLocalAndroidFingerprint.js +51 -0
- package/dist/providers/eas/android/generateLocalAndroidFingerprint.js.map +1 -0
- package/dist/providers/eas/android/inspectEasAndroidConfig.d.ts +28 -0
- package/dist/providers/eas/android/inspectEasAndroidConfig.d.ts.map +1 -0
- package/dist/providers/eas/android/inspectEasAndroidConfig.js +40 -0
- package/dist/providers/eas/android/inspectEasAndroidConfig.js.map +1 -0
- package/dist/providers/eas/android/parseEasAndroidBuild.d.ts +3 -0
- package/dist/providers/eas/android/parseEasAndroidBuild.d.ts.map +1 -0
- package/dist/providers/eas/android/parseEasAndroidBuild.js +45 -0
- package/dist/providers/eas/android/parseEasAndroidBuild.js.map +1 -0
- package/dist/providers/eas/android/parseEasAndroidConfig.d.ts +3 -0
- package/dist/providers/eas/android/parseEasAndroidConfig.d.ts.map +1 -0
- package/dist/providers/eas/android/parseEasAndroidConfig.js +59 -0
- package/dist/providers/eas/android/parseEasAndroidConfig.js.map +1 -0
- package/dist/providers/eas/createEasSetupAdapter.d.ts +13 -0
- package/dist/providers/eas/createEasSetupAdapter.d.ts.map +1 -0
- package/dist/providers/eas/createEasSetupAdapter.js +72 -0
- package/dist/providers/eas/createEasSetupAdapter.js.map +1 -0
- package/dist/providers/eas/publishWebToEas.js +1 -1
- package/dist/providers/eas/publishWebToEas.js.map +1 -1
- package/dist/providers/eas/resolveEasProcessEnvironment.d.ts +2 -0
- package/dist/providers/eas/resolveEasProcessEnvironment.d.ts.map +1 -1
- package/dist/providers/eas/resolveEasProcessEnvironment.js +15 -14
- package/dist/providers/eas/resolveEasProcessEnvironment.js.map +1 -1
- package/dist/providers/googlePlay/GooglePlayTokenFactory.d.ts +7 -0
- package/dist/providers/googlePlay/GooglePlayTokenFactory.d.ts.map +1 -0
- package/dist/providers/googlePlay/GooglePlayTokenFactory.js +14 -0
- package/dist/providers/googlePlay/GooglePlayTokenFactory.js.map +1 -0
- package/dist/providers/googlePlay/GooglePlayTrackState.d.ts +12 -0
- package/dist/providers/googlePlay/GooglePlayTrackState.d.ts.map +1 -0
- package/dist/providers/googlePlay/GooglePlayTrackState.js +35 -0
- package/dist/providers/googlePlay/GooglePlayTrackState.js.map +1 -0
- package/dist/providers/googlePlay/GooglePlayTransport.d.ts +15 -0
- package/dist/providers/googlePlay/GooglePlayTransport.d.ts.map +1 -0
- package/dist/providers/googlePlay/GooglePlayTransport.js +12 -0
- package/dist/providers/googlePlay/GooglePlayTransport.js.map +1 -0
- package/dist/providers/googlePlay/commitGooglePlayEdit.d.ts +8 -0
- package/dist/providers/googlePlay/commitGooglePlayEdit.d.ts.map +1 -0
- package/dist/providers/googlePlay/commitGooglePlayEdit.js +17 -0
- package/dist/providers/googlePlay/commitGooglePlayEdit.js.map +1 -0
- package/dist/providers/googlePlay/createGooglePlaySetupAdapter.d.ts +6 -0
- package/dist/providers/googlePlay/createGooglePlaySetupAdapter.d.ts.map +1 -0
- package/dist/providers/googlePlay/createGooglePlaySetupAdapter.js +32 -0
- package/dist/providers/googlePlay/createGooglePlaySetupAdapter.js.map +1 -0
- package/dist/providers/googlePlay/downloadAndroidArchive.d.ts +9 -0
- package/dist/providers/googlePlay/downloadAndroidArchive.d.ts.map +1 -0
- package/dist/providers/googlePlay/downloadAndroidArchive.js +28 -0
- package/dist/providers/googlePlay/downloadAndroidArchive.js.map +1 -0
- package/dist/providers/googlePlay/googlePlayUrls.d.ts +6 -0
- package/dist/providers/googlePlay/googlePlayUrls.d.ts.map +1 -0
- package/dist/providers/googlePlay/googlePlayUrls.js +18 -0
- package/dist/providers/googlePlay/googlePlayUrls.js.map +1 -0
- package/dist/providers/googlePlay/insertGooglePlayEdit.d.ts +7 -0
- package/dist/providers/googlePlay/insertGooglePlayEdit.d.ts.map +1 -0
- package/dist/providers/googlePlay/insertGooglePlayEdit.js +32 -0
- package/dist/providers/googlePlay/insertGooglePlayEdit.js.map +1 -0
- package/dist/providers/googlePlay/inspectGooglePlayTrack.d.ts +27 -0
- package/dist/providers/googlePlay/inspectGooglePlayTrack.d.ts.map +1 -0
- package/dist/providers/googlePlay/inspectGooglePlayTrack.js +80 -0
- package/dist/providers/googlePlay/inspectGooglePlayTrack.js.map +1 -0
- package/dist/providers/googlePlay/publishAndroidToGooglePlay.d.ts +32 -0
- package/dist/providers/googlePlay/publishAndroidToGooglePlay.d.ts.map +1 -0
- package/dist/providers/googlePlay/publishAndroidToGooglePlay.js +74 -0
- package/dist/providers/googlePlay/publishAndroidToGooglePlay.js.map +1 -0
- package/dist/providers/googlePlay/resolveGooglePlayAccessToken.d.ts +17 -0
- package/dist/providers/googlePlay/resolveGooglePlayAccessToken.d.ts.map +1 -0
- package/dist/providers/googlePlay/resolveGooglePlayAccessToken.js +62 -0
- package/dist/providers/googlePlay/resolveGooglePlayAccessToken.js.map +1 -0
- package/dist/providers/googlePlay/updateGooglePlayTrack.d.ts +12 -0
- package/dist/providers/googlePlay/updateGooglePlayTrack.d.ts.map +1 -0
- package/dist/providers/googlePlay/updateGooglePlayTrack.js +26 -0
- package/dist/providers/googlePlay/updateGooglePlayTrack.js.map +1 -0
- package/dist/providers/googlePlay/uploadGooglePlayBundle.d.ts +9 -0
- package/dist/providers/googlePlay/uploadGooglePlayBundle.d.ts.map +1 -0
- package/dist/providers/googlePlay/uploadGooglePlayBundle.js +34 -0
- package/dist/providers/googlePlay/uploadGooglePlayBundle.js.map +1 -0
- package/dist/providers/googlePlay/verifyGooglePlayPublication.d.ts +23 -0
- package/dist/providers/googlePlay/verifyGooglePlayPublication.d.ts.map +1 -0
- package/dist/providers/googlePlay/verifyGooglePlayPublication.js +31 -0
- package/dist/providers/googlePlay/verifyGooglePlayPublication.js.map +1 -0
- package/dist/targets/android/createAndroidDeploymentRevision.d.ts +3 -0
- package/dist/targets/android/createAndroidDeploymentRevision.d.ts.map +1 -0
- package/dist/targets/android/createAndroidDeploymentRevision.js +11 -0
- package/dist/targets/android/createAndroidDeploymentRevision.js.map +1 -0
- package/dist/targets/android/createAndroidTargetPlanContributor.d.ts +3 -0
- package/dist/targets/android/createAndroidTargetPlanContributor.d.ts.map +1 -0
- package/dist/targets/android/createAndroidTargetPlanContributor.js +26 -0
- package/dist/targets/android/createAndroidTargetPlanContributor.js.map +1 -0
- package/dist/targets/android/isAndroidDeploymentIntentValid.d.ts +3 -0
- package/dist/targets/android/isAndroidDeploymentIntentValid.d.ts.map +1 -0
- package/dist/targets/android/isAndroidDeploymentIntentValid.js +7 -0
- package/dist/targets/android/isAndroidDeploymentIntentValid.js.map +1 -0
- package/dist/targets/android/normalizeAndroidProviders.d.ts +16 -0
- package/dist/targets/android/normalizeAndroidProviders.d.ts.map +1 -0
- package/dist/targets/android/normalizeAndroidProviders.js +16 -0
- package/dist/targets/android/normalizeAndroidProviders.js.map +1 -0
- package/package.json +3 -2
- package/dist/providers/eas/createEasHostingSetupAdapter.d.ts +0 -7
- package/dist/providers/eas/createEasHostingSetupAdapter.d.ts.map +0 -1
- package/dist/providers/eas/createEasHostingSetupAdapter.js +0 -76
- package/dist/providers/eas/createEasHostingSetupAdapter.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createGooglePlaySetupAdapter.js","sourceRoot":"","sources":["../../../src/providers/googlePlay/createGooglePlaySetupAdapter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAE9E,MAAM,UAAU,4BAA4B,CAAC,OAE5C;IACC,OAAO;QACL,QAAQ,EAAE,aAAa;QACvB,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YAC9B,MAAM,MAAM,GAAG,MAAM,4BAA4B,CAAC;gBAChD,GAAG,OAAO;gBACV,WAAW,EAAE,OAAO,CAAC,WAAW;aACjC,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvD,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,KAAK;IACZ,OAAO;QACL,QAAQ,EAAE,aAAa;QACvB,cAAc,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE;QAC3C,YAAY,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QAC9D,YAAY,EAAE,EAAE;KACjB,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CACf,MAGW;IAEX,OAAO;QACL,QAAQ,EAAE,aAAa;QACvB,cAAc,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE;QAC9C,YAAY,EAAE;YACZ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,0BAA0B,EAAE;SACrF;QACD,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC;KACnD,CAAC;AACJ,CAAC","sourcesContent":["import type { DeploymentProviderSetupAdapter } from '../../domain/DeploymentProviderSetupAdapter';\nimport type { DeploymentProviderSetupInspection } from '../../domain/DeploymentProviderSetupInspection';\nimport type { GooglePlayTokenFactory } from './GooglePlayTokenFactory';\nimport { resolveGooglePlayAccessToken } from './resolveGooglePlayAccessToken';\n\nexport function createGooglePlaySetupAdapter(options: {\n readonly createToken: GooglePlayTokenFactory;\n}): DeploymentProviderSetupAdapter {\n return {\n provider: 'google-play',\n inspectSetup: async (context) => {\n const access = await resolveGooglePlayAccessToken({\n ...context,\n createToken: options.createToken,\n });\n return access.ok ? ready() : required(access.action);\n },\n };\n}\n\nfunction ready(): DeploymentProviderSetupInspection {\n return {\n provider: 'google-play',\n authentication: { status: 'authenticated' },\n capabilities: [{ capability: 'publish', status: 'available' }],\n provisioning: [],\n };\n}\n\nfunction required(\n action: Extract<\n Awaited<ReturnType<typeof resolveGooglePlayAccessToken>>,\n { readonly ok: false }\n >['action'],\n): DeploymentProviderSetupInspection {\n return {\n provider: 'google-play',\n authentication: { status: 'required', action },\n capabilities: [\n { capability: 'publish', status: 'unavailable', reason: 'Authentication required.' },\n ],\n provisioning: [{ type: 'authentication', action }],\n };\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
interface DownloadedAndroidArchive {
|
|
2
|
+
readonly directory: string;
|
|
3
|
+
readonly filePath: string;
|
|
4
|
+
}
|
|
5
|
+
export type AndroidArchiveDownloader = (url: string) => Promise<DownloadedAndroidArchive | null>;
|
|
6
|
+
export declare const downloadAndroidArchive: AndroidArchiveDownloader;
|
|
7
|
+
export declare function cleanupAndroidArchive(directory: string): Promise<void>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=downloadAndroidArchive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"downloadAndroidArchive.d.ts","sourceRoot":"","sources":["../../../src/providers/googlePlay/downloadAndroidArchive.ts"],"names":[],"mappings":"AAIA,UAAU,wBAAwB;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,MAAM,wBAAwB,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC,CAAC;AAEjG,eAAO,MAAM,sBAAsB,EAAE,wBAiBpC,CAAC;AAEF,wBAAsB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5E"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { promises as fs } from 'node:fs';
|
|
2
|
+
import { tmpdir } from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
export const downloadAndroidArchive = async (url) => {
|
|
5
|
+
let response;
|
|
6
|
+
try {
|
|
7
|
+
response = await fetch(url);
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
if (!response.ok)
|
|
13
|
+
return null;
|
|
14
|
+
const directory = await fs.mkdtemp(path.join(tmpdir(), 'ankh-android-'));
|
|
15
|
+
const filePath = path.join(directory, 'application.aab');
|
|
16
|
+
try {
|
|
17
|
+
await Bun.write(filePath, response);
|
|
18
|
+
return { directory, filePath };
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
await fs.rm(directory, { recursive: true, force: true });
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
export async function cleanupAndroidArchive(directory) {
|
|
26
|
+
await fs.rm(directory, { recursive: true, force: true });
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=downloadAndroidArchive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"downloadAndroidArchive.js","sourceRoot":"","sources":["../../../src/providers/googlePlay/downloadAndroidArchive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAS7B,MAAM,CAAC,MAAM,sBAAsB,GAA6B,KAAK,EAAE,GAAG,EAAE,EAAE;IAC5E,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC;IACzE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;IACzD,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACpC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,SAAiB;IAC3D,MAAM,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3D,CAAC","sourcesContent":["import { promises as fs } from 'node:fs';\nimport { tmpdir } from 'node:os';\nimport path from 'node:path';\n\ninterface DownloadedAndroidArchive {\n readonly directory: string;\n readonly filePath: string;\n}\n\nexport type AndroidArchiveDownloader = (url: string) => Promise<DownloadedAndroidArchive | null>;\n\nexport const downloadAndroidArchive: AndroidArchiveDownloader = async (url) => {\n let response: Response;\n try {\n response = await fetch(url);\n } catch {\n return null;\n }\n if (!response.ok) return null;\n const directory = await fs.mkdtemp(path.join(tmpdir(), 'ankh-android-'));\n const filePath = path.join(directory, 'application.aab');\n try {\n await Bun.write(filePath, response);\n return { directory, filePath };\n } catch {\n await fs.rm(directory, { recursive: true, force: true });\n return null;\n }\n};\n\nexport async function cleanupAndroidArchive(directory: string): Promise<void> {\n await fs.rm(directory, { recursive: true, force: true });\n}\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AndroidDeploymentTrack } from '../../domain/AndroidDeploymentIntent';
|
|
2
|
+
export declare function googlePlayInsertEditUrl(packageName: string): string;
|
|
3
|
+
export declare function googlePlayBundleUploadUrl(packageName: string, editId: string): string;
|
|
4
|
+
export declare function googlePlayTrackEditUrl(packageName: string, editId: string, track: AndroidDeploymentTrack): string;
|
|
5
|
+
export declare function googlePlayCommitEditUrl(packageName: string, editId: string): string;
|
|
6
|
+
//# sourceMappingURL=googlePlayUrls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"googlePlayUrls.d.ts","sourceRoot":"","sources":["../../../src/providers/googlePlay/googlePlayUrls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAKnF,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAErF;AAED,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,sBAAsB,GAC5B,MAAM,CAER;AAED,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEnF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const API = 'https://androidpublisher.googleapis.com/androidpublisher/v3';
|
|
2
|
+
const UPLOAD = 'https://androidpublisher.googleapis.com/upload/androidpublisher/v3';
|
|
3
|
+
export function googlePlayInsertEditUrl(packageName) {
|
|
4
|
+
return `${API}/applications/${segment(packageName)}/edits`;
|
|
5
|
+
}
|
|
6
|
+
export function googlePlayBundleUploadUrl(packageName, editId) {
|
|
7
|
+
return `${UPLOAD}/applications/${segment(packageName)}/edits/${segment(editId)}/bundles`;
|
|
8
|
+
}
|
|
9
|
+
export function googlePlayTrackEditUrl(packageName, editId, track) {
|
|
10
|
+
return `${API}/applications/${segment(packageName)}/edits/${segment(editId)}/tracks/${segment(track)}`;
|
|
11
|
+
}
|
|
12
|
+
export function googlePlayCommitEditUrl(packageName, editId) {
|
|
13
|
+
return `${API}/applications/${segment(packageName)}/edits/${segment(editId)}:commit`;
|
|
14
|
+
}
|
|
15
|
+
function segment(value) {
|
|
16
|
+
return encodeURIComponent(value);
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=googlePlayUrls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"googlePlayUrls.js","sourceRoot":"","sources":["../../../src/providers/googlePlay/googlePlayUrls.ts"],"names":[],"mappings":"AAEA,MAAM,GAAG,GAAG,6DAA6D,CAAC;AAC1E,MAAM,MAAM,GAAG,oEAAoE,CAAC;AAEpF,MAAM,UAAU,uBAAuB,CAAC,WAAmB;IACzD,OAAO,GAAG,GAAG,iBAAiB,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,WAAmB,EAAE,MAAc;IAC3E,OAAO,GAAG,MAAM,iBAAiB,OAAO,CAAC,WAAW,CAAC,UAAU,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;AAC3F,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,WAAmB,EACnB,MAAc,EACd,KAA6B;IAE7B,OAAO,GAAG,GAAG,iBAAiB,OAAO,CAAC,WAAW,CAAC,UAAU,OAAO,CAAC,MAAM,CAAC,WAAW,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;AACzG,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,WAAmB,EAAE,MAAc;IACzE,OAAO,GAAG,GAAG,iBAAiB,OAAO,CAAC,WAAW,CAAC,UAAU,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;AACvF,CAAC;AAED,SAAS,OAAO,CAAC,KAAa;IAC5B,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC","sourcesContent":["import type { AndroidDeploymentTrack } from '../../domain/AndroidDeploymentIntent';\n\nconst API = 'https://androidpublisher.googleapis.com/androidpublisher/v3';\nconst UPLOAD = 'https://androidpublisher.googleapis.com/upload/androidpublisher/v3';\n\nexport function googlePlayInsertEditUrl(packageName: string): string {\n return `${API}/applications/${segment(packageName)}/edits`;\n}\n\nexport function googlePlayBundleUploadUrl(packageName: string, editId: string): string {\n return `${UPLOAD}/applications/${segment(packageName)}/edits/${segment(editId)}/bundles`;\n}\n\nexport function googlePlayTrackEditUrl(\n packageName: string,\n editId: string,\n track: AndroidDeploymentTrack,\n): string {\n return `${API}/applications/${segment(packageName)}/edits/${segment(editId)}/tracks/${segment(track)}`;\n}\n\nexport function googlePlayCommitEditUrl(packageName: string, editId: string): string {\n return `${API}/applications/${segment(packageName)}/edits/${segment(editId)}:commit`;\n}\n\nfunction segment(value: string): string {\n return encodeURIComponent(value);\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { GooglePlayTransport } from './GooglePlayTransport';
|
|
2
|
+
export declare function insertGooglePlayEdit(options: {
|
|
3
|
+
readonly packageName: string;
|
|
4
|
+
readonly token: string;
|
|
5
|
+
readonly request: GooglePlayTransport;
|
|
6
|
+
}): Promise<string | null>;
|
|
7
|
+
//# sourceMappingURL=insertGooglePlayEdit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insertGooglePlayEdit.d.ts","sourceRoot":"","sources":["../../../src/providers/googlePlay/insertGooglePlayEdit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAGjE,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAClD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;CACvC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAoBzB"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { googlePlayInsertEditUrl } from './googlePlayUrls';
|
|
2
|
+
export async function insertGooglePlayEdit(options) {
|
|
3
|
+
let response;
|
|
4
|
+
try {
|
|
5
|
+
response = await options.request({
|
|
6
|
+
method: 'POST',
|
|
7
|
+
url: googlePlayInsertEditUrl(options.packageName),
|
|
8
|
+
token: options.token,
|
|
9
|
+
contentType: 'application/json',
|
|
10
|
+
body: '{}',
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
if (response.status < 200 || response.status >= 300)
|
|
17
|
+
return null;
|
|
18
|
+
try {
|
|
19
|
+
const parsed = JSON.parse(response.body);
|
|
20
|
+
return isRecord(parsed) && isNonEmptyString(parsed.id) ? parsed.id : null;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function isRecord(value) {
|
|
27
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
28
|
+
}
|
|
29
|
+
function isNonEmptyString(value) {
|
|
30
|
+
return typeof value === 'string' && value.trim().length > 0;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=insertGooglePlayEdit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insertGooglePlayEdit.js","sourceRoot":"","sources":["../../../src/providers/googlePlay/insertGooglePlayEdit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAI1C;IACC,IAAI,QAAQ,CAAC;IACb,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC;YAC/B,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,uBAAuB,CAAC,OAAO,CAAC,WAAW,CAAC;YACjD,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,WAAW,EAAE,kBAAkB;YAC/B,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,IAAI,CAAC;IACjE,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAClD,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9D,CAAC","sourcesContent":["import type { GooglePlayTransport } from './GooglePlayTransport';\nimport { googlePlayInsertEditUrl } from './googlePlayUrls';\n\nexport async function insertGooglePlayEdit(options: {\n readonly packageName: string;\n readonly token: string;\n readonly request: GooglePlayTransport;\n}): Promise<string | null> {\n let response;\n try {\n response = await options.request({\n method: 'POST',\n url: googlePlayInsertEditUrl(options.packageName),\n token: options.token,\n contentType: 'application/json',\n body: '{}',\n });\n } catch {\n return null;\n }\n if (response.status < 200 || response.status >= 300) return null;\n try {\n const parsed: unknown = JSON.parse(response.body);\n return isRecord(parsed) && isNonEmptyString(parsed.id) ? parsed.id : null;\n } catch {\n return null;\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === 'string' && value.trim().length > 0;\n}\n"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { AndroidDeploymentTrack } from '../../domain/AndroidDeploymentIntent';
|
|
2
|
+
import type { DeploymentCredentialReference } from '../../domain/DeploymentCredentialReference';
|
|
3
|
+
import type { DeploymentFailure } from '../../domain/DeploymentFailure';
|
|
4
|
+
import type { DeploymentRequiredAction } from '../../domain/DeploymentRequiredAction';
|
|
5
|
+
import type { DeploymentSecretResolver } from '../../domain/DeploymentSecretResolver';
|
|
6
|
+
import type { GooglePlayTokenFactory } from './GooglePlayTokenFactory';
|
|
7
|
+
import type { GooglePlayTrackState } from './GooglePlayTrackState';
|
|
8
|
+
import type { GooglePlayTransport } from './GooglePlayTransport';
|
|
9
|
+
export type GooglePlayTrackInspectionResult = {
|
|
10
|
+
readonly status: 'completed';
|
|
11
|
+
readonly state: GooglePlayTrackState;
|
|
12
|
+
} | {
|
|
13
|
+
readonly status: 'action-required';
|
|
14
|
+
readonly action: DeploymentRequiredAction;
|
|
15
|
+
} | {
|
|
16
|
+
readonly status: 'failed';
|
|
17
|
+
readonly failure: DeploymentFailure;
|
|
18
|
+
};
|
|
19
|
+
export declare function inspectGooglePlayTrack(options: {
|
|
20
|
+
readonly packageName: string;
|
|
21
|
+
readonly track: AndroidDeploymentTrack;
|
|
22
|
+
readonly credentials: readonly DeploymentCredentialReference[];
|
|
23
|
+
readonly resolveSecret: DeploymentSecretResolver;
|
|
24
|
+
readonly createToken: GooglePlayTokenFactory;
|
|
25
|
+
readonly request: GooglePlayTransport;
|
|
26
|
+
}): Promise<GooglePlayTrackInspectionResult>;
|
|
27
|
+
//# sourceMappingURL=inspectGooglePlayTrack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspectGooglePlayTrack.d.ts","sourceRoot":"","sources":["../../../src/providers/googlePlay/inspectGooglePlayTrack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AACnF,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,4CAA4C,CAAC;AAChG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACtF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACtF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAEnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAGjE,MAAM,MAAM,+BAA+B,GACvC;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAA;CAAE,GACtE;IAAE,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAA;CAAE,GACjF;IAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAEvE,wBAAsB,sBAAsB,CAAC,OAAO,EAAE;IACpD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,sBAAsB,CAAC;IACvC,QAAQ,CAAC,WAAW,EAAE,SAAS,6BAA6B,EAAE,CAAC;IAC/D,QAAQ,CAAC,aAAa,EAAE,wBAAwB,CAAC;IACjD,QAAQ,CAAC,WAAW,EAAE,sBAAsB,CAAC;IAC7C,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;CACvC,GAAG,OAAO,CAAC,+BAA+B,CAAC,CAY3C"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { parseGooglePlayTrackState } from './GooglePlayTrackState';
|
|
2
|
+
import { resolveGooglePlayAccessToken } from './resolveGooglePlayAccessToken';
|
|
3
|
+
export async function inspectGooglePlayTrack(options) {
|
|
4
|
+
const access = await resolveGooglePlayAccessToken(options);
|
|
5
|
+
if (!access.ok)
|
|
6
|
+
return { status: 'action-required', action: access.action };
|
|
7
|
+
const response = await safelyRequest(options, access.token);
|
|
8
|
+
if (response === null)
|
|
9
|
+
return failure('GOOGLE_PLAY_INSPECTION_FAILED');
|
|
10
|
+
if (response.status === 401)
|
|
11
|
+
return { status: 'action-required', action: authenticationAction() };
|
|
12
|
+
if (response.status === 403)
|
|
13
|
+
return { status: 'action-required', action: permissionAction() };
|
|
14
|
+
if (response.status === 404)
|
|
15
|
+
return { status: 'action-required', action: bootstrapAction() };
|
|
16
|
+
if (response.status < 200 || response.status >= 300)
|
|
17
|
+
return failure('GOOGLE_PLAY_INSPECTION_FAILED');
|
|
18
|
+
const state = parseResponse(response.body, options.track);
|
|
19
|
+
return state === null ? failure('GOOGLE_PLAY_INVALID_RESULT') : { status: 'completed', state };
|
|
20
|
+
}
|
|
21
|
+
async function safelyRequest(options, token) {
|
|
22
|
+
try {
|
|
23
|
+
return await options.request({ method: 'GET', url: trackUrl(options), token });
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function trackUrl(options) {
|
|
30
|
+
const app = encodeURIComponent(options.packageName);
|
|
31
|
+
const track = encodeURIComponent(options.track);
|
|
32
|
+
return `https://androidpublisher.googleapis.com/androidpublisher/v3/applications/${app}/tracks/${track}/releases`;
|
|
33
|
+
}
|
|
34
|
+
function parseResponse(body, track) {
|
|
35
|
+
try {
|
|
36
|
+
return parseGooglePlayTrackState(JSON.parse(body), track);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function authenticationAction() {
|
|
43
|
+
return {
|
|
44
|
+
type: 'authentication',
|
|
45
|
+
provider: 'google-play',
|
|
46
|
+
target: 'android',
|
|
47
|
+
code: 'GOOGLE_PLAY_AUTHENTICATION_REQUIRED',
|
|
48
|
+
message: 'Google Play authentication is required for Android deployment.',
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function permissionAction() {
|
|
52
|
+
return {
|
|
53
|
+
type: 'manual-action',
|
|
54
|
+
provider: 'google-play',
|
|
55
|
+
target: 'android',
|
|
56
|
+
code: 'GOOGLE_PLAY_PERMISSION_REQUIRED',
|
|
57
|
+
message: 'Grant the service account permission to manage this application in Google Play Console.',
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function bootstrapAction() {
|
|
61
|
+
return {
|
|
62
|
+
type: 'manual-action',
|
|
63
|
+
provider: 'google-play',
|
|
64
|
+
target: 'android',
|
|
65
|
+
code: 'GOOGLE_PLAY_APP_BOOTSTRAP_REQUIRED',
|
|
66
|
+
message: 'Create and bootstrap the Android application in Google Play Console before API delivery.',
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function failure(code) {
|
|
70
|
+
return {
|
|
71
|
+
status: 'failed',
|
|
72
|
+
failure: {
|
|
73
|
+
code,
|
|
74
|
+
message: 'Google Play release state could not be inspected.',
|
|
75
|
+
target: 'android',
|
|
76
|
+
provider: 'google-play',
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=inspectGooglePlayTrack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspectGooglePlayTrack.js","sourceRoot":"","sources":["../../../src/providers/googlePlay/inspectGooglePlayTrack.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AndroidDeploymentTrack } from '../../domain/AndroidDeploymentIntent';\nimport type { DeploymentCredentialReference } from '../../domain/DeploymentCredentialReference';\nimport type { DeploymentFailure } from '../../domain/DeploymentFailure';\nimport type { DeploymentRequiredAction } from '../../domain/DeploymentRequiredAction';\nimport type { DeploymentSecretResolver } from '../../domain/DeploymentSecretResolver';\nimport type { GooglePlayTokenFactory } from './GooglePlayTokenFactory';\nimport type { GooglePlayTrackState } from './GooglePlayTrackState';\nimport { parseGooglePlayTrackState } from './GooglePlayTrackState';\nimport type { GooglePlayTransport } from './GooglePlayTransport';\nimport { resolveGooglePlayAccessToken } from './resolveGooglePlayAccessToken';\n\nexport type GooglePlayTrackInspectionResult =\n | { readonly status: 'completed'; readonly state: GooglePlayTrackState }\n | { readonly status: 'action-required'; readonly action: DeploymentRequiredAction }\n | { readonly status: 'failed'; readonly failure: DeploymentFailure };\n\nexport async function inspectGooglePlayTrack(options: {\n readonly packageName: string;\n readonly track: AndroidDeploymentTrack;\n readonly credentials: readonly DeploymentCredentialReference[];\n readonly resolveSecret: DeploymentSecretResolver;\n readonly createToken: GooglePlayTokenFactory;\n readonly request: GooglePlayTransport;\n}): Promise<GooglePlayTrackInspectionResult> {\n const access = await resolveGooglePlayAccessToken(options);\n if (!access.ok) return { status: 'action-required', action: access.action };\n const response = await safelyRequest(options, access.token);\n if (response === null) return failure('GOOGLE_PLAY_INSPECTION_FAILED');\n if (response.status === 401) return { status: 'action-required', action: authenticationAction() };\n if (response.status === 403) return { status: 'action-required', action: permissionAction() };\n if (response.status === 404) return { status: 'action-required', action: bootstrapAction() };\n if (response.status < 200 || response.status >= 300)\n return failure('GOOGLE_PLAY_INSPECTION_FAILED');\n const state = parseResponse(response.body, options.track);\n return state === null ? failure('GOOGLE_PLAY_INVALID_RESULT') : { status: 'completed', state };\n}\n\nasync function safelyRequest(options: Parameters<typeof inspectGooglePlayTrack>[0], token: string) {\n try {\n return await options.request({ method: 'GET', url: trackUrl(options), token });\n } catch {\n return null;\n }\n}\n\nfunction trackUrl(options: {\n readonly packageName: string;\n readonly track: AndroidDeploymentTrack;\n}) {\n const app = encodeURIComponent(options.packageName);\n const track = encodeURIComponent(options.track);\n return `https://androidpublisher.googleapis.com/androidpublisher/v3/applications/${app}/tracks/${track}/releases`;\n}\n\nfunction parseResponse(body: string, track: AndroidDeploymentTrack): GooglePlayTrackState | null {\n try {\n return parseGooglePlayTrackState(JSON.parse(body), track);\n } catch {\n return null;\n }\n}\n\nfunction authenticationAction(): DeploymentRequiredAction {\n return {\n type: 'authentication',\n provider: 'google-play',\n target: 'android',\n code: 'GOOGLE_PLAY_AUTHENTICATION_REQUIRED',\n message: 'Google Play authentication is required for Android deployment.',\n };\n}\n\nfunction permissionAction(): DeploymentRequiredAction {\n return {\n type: 'manual-action',\n provider: 'google-play',\n target: 'android',\n code: 'GOOGLE_PLAY_PERMISSION_REQUIRED',\n message:\n 'Grant the service account permission to manage this application in Google Play Console.',\n };\n}\n\nfunction bootstrapAction(): DeploymentRequiredAction {\n return {\n type: 'manual-action',\n provider: 'google-play',\n target: 'android',\n code: 'GOOGLE_PLAY_APP_BOOTSTRAP_REQUIRED',\n message:\n 'Create and bootstrap the Android application in Google Play Console before API delivery.',\n };\n}\n\nfunction failure(code: string): GooglePlayTrackInspectionResult {\n return {\n status: 'failed',\n failure: {\n code,\n message: 'Google Play release state could not be inspected.',\n target: 'android',\n provider: 'google-play',\n },\n };\n}\n"]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { AndroidDeploymentIntent } from '../../domain/AndroidDeploymentIntent';
|
|
2
|
+
import type { AndroidDeploymentPublication } from '../../domain/AndroidDeploymentPublication';
|
|
3
|
+
import type { DeploymentCredentialReference } from '../../domain/DeploymentCredentialReference';
|
|
4
|
+
import type { DeploymentFailure } from '../../domain/DeploymentFailure';
|
|
5
|
+
import type { DeploymentRequiredAction } from '../../domain/DeploymentRequiredAction';
|
|
6
|
+
import type { DeploymentSecretResolver } from '../../domain/DeploymentSecretResolver';
|
|
7
|
+
import type { EasAndroidBuildArtifact } from '../eas/android/EasAndroidBuildArtifact';
|
|
8
|
+
import type { AndroidArchiveDownloader } from './downloadAndroidArchive';
|
|
9
|
+
import type { GooglePlayTokenFactory } from './GooglePlayTokenFactory';
|
|
10
|
+
import type { GooglePlayTransport } from './GooglePlayTransport';
|
|
11
|
+
export type GooglePlayPublishResult = {
|
|
12
|
+
readonly status: 'completed';
|
|
13
|
+
readonly publication: AndroidDeploymentPublication;
|
|
14
|
+
} | {
|
|
15
|
+
readonly status: 'action-required';
|
|
16
|
+
readonly action: DeploymentRequiredAction;
|
|
17
|
+
} | {
|
|
18
|
+
readonly status: 'failed';
|
|
19
|
+
readonly failure: DeploymentFailure;
|
|
20
|
+
};
|
|
21
|
+
export declare function publishAndroidToGooglePlay(options: {
|
|
22
|
+
readonly packageName: string;
|
|
23
|
+
readonly revision: string;
|
|
24
|
+
readonly intent: AndroidDeploymentIntent;
|
|
25
|
+
readonly build: EasAndroidBuildArtifact;
|
|
26
|
+
readonly credentials: readonly DeploymentCredentialReference[];
|
|
27
|
+
readonly resolveSecret: DeploymentSecretResolver;
|
|
28
|
+
readonly createToken: GooglePlayTokenFactory;
|
|
29
|
+
readonly request: GooglePlayTransport;
|
|
30
|
+
readonly downloadArchive: AndroidArchiveDownloader;
|
|
31
|
+
}): Promise<GooglePlayPublishResult>;
|
|
32
|
+
//# sourceMappingURL=publishAndroidToGooglePlay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publishAndroidToGooglePlay.d.ts","sourceRoot":"","sources":["../../../src/providers/googlePlay/publishAndroidToGooglePlay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AACpF,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,2CAA2C,CAAC;AAC9F,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,4CAA4C,CAAC;AAChG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACtF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACtF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AAEtF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEzE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAMjE,MAAM,MAAM,uBAAuB,GAC/B;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,4BAA4B,CAAA;CAAE,GACpF;IAAE,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAA;CAAE,GACjF;IAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAEvE,wBAAsB,0BAA0B,CAAC,OAAO,EAAE;IACxD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,SAAS,6BAA6B,EAAE,CAAC;IAC/D,QAAQ,CAAC,aAAa,EAAE,wBAAwB,CAAC;IACjD,QAAQ,CAAC,WAAW,EAAE,sBAAsB,CAAC;IAC7C,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;IACtC,QAAQ,CAAC,eAAe,EAAE,wBAAwB,CAAC;CACpD,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAUnC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { commitGooglePlayEdit } from './commitGooglePlayEdit';
|
|
2
|
+
import { cleanupAndroidArchive } from './downloadAndroidArchive';
|
|
3
|
+
import { insertGooglePlayEdit } from './insertGooglePlayEdit';
|
|
4
|
+
import { resolveGooglePlayAccessToken } from './resolveGooglePlayAccessToken';
|
|
5
|
+
import { updateGooglePlayTrack } from './updateGooglePlayTrack';
|
|
6
|
+
import { uploadGooglePlayBundle } from './uploadGooglePlayBundle';
|
|
7
|
+
export async function publishAndroidToGooglePlay(options) {
|
|
8
|
+
const access = await resolveGooglePlayAccessToken(options);
|
|
9
|
+
if (!access.ok)
|
|
10
|
+
return { status: 'action-required', action: access.action };
|
|
11
|
+
const archive = await safeDownload(options.downloadArchive, options.build.archiveUrl);
|
|
12
|
+
if (archive === null)
|
|
13
|
+
return failure('ANDROID_ARCHIVE_DOWNLOAD_FAILED');
|
|
14
|
+
try {
|
|
15
|
+
return await publishArchive(options, access.token, archive.filePath);
|
|
16
|
+
}
|
|
17
|
+
finally {
|
|
18
|
+
await cleanupAndroidArchive(archive.directory);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
async function publishArchive(options, token, filePath) {
|
|
22
|
+
const shared = { packageName: options.packageName, token, request: options.request };
|
|
23
|
+
const editId = await insertGooglePlayEdit(shared);
|
|
24
|
+
if (editId === null)
|
|
25
|
+
return failure('GOOGLE_PLAY_EDIT_CREATE_FAILED');
|
|
26
|
+
const versionCode = await uploadGooglePlayBundle({ ...shared, editId, filePath });
|
|
27
|
+
if (versionCode !== options.build.versionCode)
|
|
28
|
+
return failure('GOOGLE_PLAY_VERSION_MISMATCH');
|
|
29
|
+
const updated = await updateGooglePlayTrack({
|
|
30
|
+
...shared,
|
|
31
|
+
editId,
|
|
32
|
+
...options.intent,
|
|
33
|
+
versionCode,
|
|
34
|
+
});
|
|
35
|
+
if (!updated)
|
|
36
|
+
return failure('GOOGLE_PLAY_TRACK_UPDATE_FAILED');
|
|
37
|
+
const committed = await commitGooglePlayEdit({ ...shared, editId });
|
|
38
|
+
return committed ? completed(options) : failure('GOOGLE_PLAY_EDIT_COMMIT_FAILED');
|
|
39
|
+
}
|
|
40
|
+
function completed(options) {
|
|
41
|
+
return {
|
|
42
|
+
status: 'completed',
|
|
43
|
+
publication: {
|
|
44
|
+
target: 'android',
|
|
45
|
+
revision: options.revision,
|
|
46
|
+
buildProvider: 'eas',
|
|
47
|
+
publishProvider: 'google-play',
|
|
48
|
+
buildId: options.build.buildId,
|
|
49
|
+
versionCode: options.build.versionCode,
|
|
50
|
+
track: options.intent.track,
|
|
51
|
+
releaseStatus: options.intent.releaseStatus,
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
async function safeDownload(download, url) {
|
|
56
|
+
try {
|
|
57
|
+
return await download(url);
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function failure(code) {
|
|
64
|
+
return {
|
|
65
|
+
status: 'failed',
|
|
66
|
+
failure: {
|
|
67
|
+
code,
|
|
68
|
+
message: 'Google Play Android publication failed.',
|
|
69
|
+
target: 'android',
|
|
70
|
+
provider: 'google-play',
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=publishAndroidToGooglePlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publishAndroidToGooglePlay.js","sourceRoot":"","sources":["../../../src/providers/googlePlay/publishAndroidToGooglePlay.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAGjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAOlE,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,OAUhD;IACC,MAAM,MAAM,GAAG,MAAM,4BAA4B,CAAC,OAAO,CAAC,CAAC;IAC3D,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IAC5E,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACtF,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,OAAO,CAAC,iCAAiC,CAAC,CAAC;IACxE,IAAI,CAAC;QACH,OAAO,MAAM,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvE,CAAC;YAAS,CAAC;QACT,MAAM,qBAAqB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,OAAyD,EACzD,KAAa,EACb,QAAgB;IAEhB,MAAM,MAAM,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;IACrF,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAClD,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,OAAO,CAAC,gCAAgC,CAAC,CAAC;IACtE,MAAM,WAAW,GAAG,MAAM,sBAAsB,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAClF,IAAI,WAAW,KAAK,OAAO,CAAC,KAAK,CAAC,WAAW;QAAE,OAAO,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC9F,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC;QAC1C,GAAG,MAAM;QACT,MAAM;QACN,GAAG,OAAO,CAAC,MAAM;QACjB,WAAW;KACZ,CAAC,CAAC;IACH,IAAI,CAAC,OAAO;QAAE,OAAO,OAAO,CAAC,iCAAiC,CAAC,CAAC;IAChE,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACpE,OAAO,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;AACpF,CAAC;AAED,SAAS,SAAS,CAChB,OAAyD;IAEzD,OAAO;QACL,MAAM,EAAE,WAAW;QACnB,WAAW,EAAE;YACX,MAAM,EAAE,SAAS;YACjB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,aAAa,EAAE,KAAK;YACpB,eAAe,EAAE,aAAa;YAC9B,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO;YAC9B,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,WAAW;YACtC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK;YAC3B,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa;SAC5C;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,QAAkC,EAClC,GAAW;IAEX,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO;QACL,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE;YACP,IAAI;YACJ,OAAO,EAAE,yCAAyC;YAClD,MAAM,EAAE,SAAS;YACjB,QAAQ,EAAE,aAAa;SACxB;KACF,CAAC;AACJ,CAAC","sourcesContent":["import type { AndroidDeploymentIntent } from '../../domain/AndroidDeploymentIntent';\nimport type { AndroidDeploymentPublication } from '../../domain/AndroidDeploymentPublication';\nimport type { DeploymentCredentialReference } from '../../domain/DeploymentCredentialReference';\nimport type { DeploymentFailure } from '../../domain/DeploymentFailure';\nimport type { DeploymentRequiredAction } from '../../domain/DeploymentRequiredAction';\nimport type { DeploymentSecretResolver } from '../../domain/DeploymentSecretResolver';\nimport type { EasAndroidBuildArtifact } from '../eas/android/EasAndroidBuildArtifact';\nimport { commitGooglePlayEdit } from './commitGooglePlayEdit';\nimport type { AndroidArchiveDownloader } from './downloadAndroidArchive';\nimport { cleanupAndroidArchive } from './downloadAndroidArchive';\nimport type { GooglePlayTokenFactory } from './GooglePlayTokenFactory';\nimport type { GooglePlayTransport } from './GooglePlayTransport';\nimport { insertGooglePlayEdit } from './insertGooglePlayEdit';\nimport { resolveGooglePlayAccessToken } from './resolveGooglePlayAccessToken';\nimport { updateGooglePlayTrack } from './updateGooglePlayTrack';\nimport { uploadGooglePlayBundle } from './uploadGooglePlayBundle';\n\nexport type GooglePlayPublishResult =\n | { readonly status: 'completed'; readonly publication: AndroidDeploymentPublication }\n | { readonly status: 'action-required'; readonly action: DeploymentRequiredAction }\n | { readonly status: 'failed'; readonly failure: DeploymentFailure };\n\nexport async function publishAndroidToGooglePlay(options: {\n readonly packageName: string;\n readonly revision: string;\n readonly intent: AndroidDeploymentIntent;\n readonly build: EasAndroidBuildArtifact;\n readonly credentials: readonly DeploymentCredentialReference[];\n readonly resolveSecret: DeploymentSecretResolver;\n readonly createToken: GooglePlayTokenFactory;\n readonly request: GooglePlayTransport;\n readonly downloadArchive: AndroidArchiveDownloader;\n}): Promise<GooglePlayPublishResult> {\n const access = await resolveGooglePlayAccessToken(options);\n if (!access.ok) return { status: 'action-required', action: access.action };\n const archive = await safeDownload(options.downloadArchive, options.build.archiveUrl);\n if (archive === null) return failure('ANDROID_ARCHIVE_DOWNLOAD_FAILED');\n try {\n return await publishArchive(options, access.token, archive.filePath);\n } finally {\n await cleanupAndroidArchive(archive.directory);\n }\n}\n\nasync function publishArchive(\n options: Parameters<typeof publishAndroidToGooglePlay>[0],\n token: string,\n filePath: string,\n): Promise<GooglePlayPublishResult> {\n const shared = { packageName: options.packageName, token, request: options.request };\n const editId = await insertGooglePlayEdit(shared);\n if (editId === null) return failure('GOOGLE_PLAY_EDIT_CREATE_FAILED');\n const versionCode = await uploadGooglePlayBundle({ ...shared, editId, filePath });\n if (versionCode !== options.build.versionCode) return failure('GOOGLE_PLAY_VERSION_MISMATCH');\n const updated = await updateGooglePlayTrack({\n ...shared,\n editId,\n ...options.intent,\n versionCode,\n });\n if (!updated) return failure('GOOGLE_PLAY_TRACK_UPDATE_FAILED');\n const committed = await commitGooglePlayEdit({ ...shared, editId });\n return committed ? completed(options) : failure('GOOGLE_PLAY_EDIT_COMMIT_FAILED');\n}\n\nfunction completed(\n options: Parameters<typeof publishAndroidToGooglePlay>[0],\n): GooglePlayPublishResult {\n return {\n status: 'completed',\n publication: {\n target: 'android',\n revision: options.revision,\n buildProvider: 'eas',\n publishProvider: 'google-play',\n buildId: options.build.buildId,\n versionCode: options.build.versionCode,\n track: options.intent.track,\n releaseStatus: options.intent.releaseStatus,\n },\n };\n}\n\nasync function safeDownload(\n download: AndroidArchiveDownloader,\n url: string,\n): ReturnType<AndroidArchiveDownloader> {\n try {\n return await download(url);\n } catch {\n return null;\n }\n}\n\nfunction failure(code: string): GooglePlayPublishResult {\n return {\n status: 'failed',\n failure: {\n code,\n message: 'Google Play Android publication failed.',\n target: 'android',\n provider: 'google-play',\n },\n };\n}\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { DeploymentCredentialReference } from '../../domain/DeploymentCredentialReference';
|
|
2
|
+
import type { DeploymentAuthenticationRequiredAction } from '../../domain/DeploymentRequiredAction';
|
|
3
|
+
import type { DeploymentSecretResolver } from '../../domain/DeploymentSecretResolver';
|
|
4
|
+
import type { GooglePlayTokenFactory } from './GooglePlayTokenFactory';
|
|
5
|
+
export type GooglePlayAccessTokenResult = {
|
|
6
|
+
readonly ok: true;
|
|
7
|
+
readonly token: string;
|
|
8
|
+
} | {
|
|
9
|
+
readonly ok: false;
|
|
10
|
+
readonly action: DeploymentAuthenticationRequiredAction;
|
|
11
|
+
};
|
|
12
|
+
export declare function resolveGooglePlayAccessToken(options: {
|
|
13
|
+
readonly credentials: readonly DeploymentCredentialReference[];
|
|
14
|
+
readonly resolveSecret: DeploymentSecretResolver;
|
|
15
|
+
readonly createToken: GooglePlayTokenFactory;
|
|
16
|
+
}): Promise<GooglePlayAccessTokenResult>;
|
|
17
|
+
//# sourceMappingURL=resolveGooglePlayAccessToken.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveGooglePlayAccessToken.d.ts","sourceRoot":"","sources":["../../../src/providers/googlePlay/resolveGooglePlayAccessToken.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,4CAA4C,CAAC;AAChG,OAAO,KAAK,EAAE,sCAAsC,EAAE,MAAM,uCAAuC,CAAC;AACpG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACtF,OAAO,KAAK,EAEV,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AAElC,MAAM,MAAM,2BAA2B,GACnC;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,sCAAsC,CAAA;CAAE,CAAC;AAEpF,wBAAsB,4BAA4B,CAAC,OAAO,EAAE;IAC1D,QAAQ,CAAC,WAAW,EAAE,SAAS,6BAA6B,EAAE,CAAC;IAC/D,QAAQ,CAAC,aAAa,EAAE,wBAAwB,CAAC;IACjD,QAAQ,CAAC,WAAW,EAAE,sBAAsB,CAAC;CAC9C,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAUvC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
export async function resolveGooglePlayAccessToken(options) {
|
|
2
|
+
const reference = options.credentials.find((credential) => credential.provider === 'google-play' && credential.kind === 'service-account');
|
|
3
|
+
if (reference === undefined)
|
|
4
|
+
return requiredAction();
|
|
5
|
+
const secret = await safelyResolve(options.resolveSecret, reference);
|
|
6
|
+
const parsed = parseServiceAccount(secret);
|
|
7
|
+
if (parsed === null)
|
|
8
|
+
return requiredAction();
|
|
9
|
+
const token = await safelyCreateToken(options.createToken, parsed);
|
|
10
|
+
return token === null ? requiredAction() : { ok: true, token };
|
|
11
|
+
}
|
|
12
|
+
function parseServiceAccount(value) {
|
|
13
|
+
if (value === null)
|
|
14
|
+
return null;
|
|
15
|
+
let parsed;
|
|
16
|
+
try {
|
|
17
|
+
parsed = JSON.parse(value);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
if (!isRecord(parsed) || parsed.type !== 'service_account')
|
|
23
|
+
return null;
|
|
24
|
+
if (!isNonEmptyString(parsed.client_email) || !isNonEmptyString(parsed.private_key))
|
|
25
|
+
return null;
|
|
26
|
+
return { clientEmail: parsed.client_email, privateKey: parsed.private_key };
|
|
27
|
+
}
|
|
28
|
+
async function safelyResolve(resolveSecret, reference) {
|
|
29
|
+
try {
|
|
30
|
+
return await resolveSecret(reference);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
async function safelyCreateToken(createToken, credentials) {
|
|
37
|
+
try {
|
|
38
|
+
return await createToken(credentials);
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function requiredAction() {
|
|
45
|
+
return {
|
|
46
|
+
ok: false,
|
|
47
|
+
action: {
|
|
48
|
+
type: 'authentication',
|
|
49
|
+
provider: 'google-play',
|
|
50
|
+
target: 'android',
|
|
51
|
+
code: 'GOOGLE_PLAY_AUTHENTICATION_REQUIRED',
|
|
52
|
+
message: 'Google Play service-account authentication is required for Android deployment.',
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
function isRecord(value) {
|
|
57
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
58
|
+
}
|
|
59
|
+
function isNonEmptyString(value) {
|
|
60
|
+
return typeof value === 'string' && value.trim().length > 0;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=resolveGooglePlayAccessToken.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveGooglePlayAccessToken.js","sourceRoot":"","sources":["../../../src/providers/googlePlay/resolveGooglePlayAccessToken.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,OAIlD;IACC,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CACxC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,KAAK,aAAa,IAAI,UAAU,CAAC,IAAI,KAAK,iBAAiB,CAC/F,CAAC;IACF,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,cAAc,EAAE,CAAC;IACrD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,cAAc,EAAE,CAAC;IAC7C,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACnE,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACjE,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAoB;IAC/C,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,iBAAiB;QAAE,OAAO,IAAI,CAAC;IACxE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IACjG,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,YAAY,EAAE,UAAU,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC;AAC9E,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,aAAuC,EACvC,SAAwC;IAExC,IAAI,CAAC;QACH,OAAO,MAAM,aAAa,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,WAAmC,EACnC,WAAgD;IAEhD,IAAI,CAAC;QACH,OAAO,MAAM,WAAW,CAAC,WAAW,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,cAAc;IACrB,OAAO;QACL,EAAE,EAAE,KAAK;QACT,MAAM,EAAE;YACN,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,aAAa;YACvB,MAAM,EAAE,SAAS;YACjB,IAAI,EAAE,qCAAqC;YAC3C,OAAO,EAAE,gFAAgF;SAC1F;KACF,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9D,CAAC","sourcesContent":["import type { DeploymentCredentialReference } from '../../domain/DeploymentCredentialReference';\nimport type { DeploymentAuthenticationRequiredAction } from '../../domain/DeploymentRequiredAction';\nimport type { DeploymentSecretResolver } from '../../domain/DeploymentSecretResolver';\nimport type {\n GooglePlayServiceAccountCredentials,\n GooglePlayTokenFactory,\n} from './GooglePlayTokenFactory';\n\nexport type GooglePlayAccessTokenResult =\n | { readonly ok: true; readonly token: string }\n | { readonly ok: false; readonly action: DeploymentAuthenticationRequiredAction };\n\nexport async function resolveGooglePlayAccessToken(options: {\n readonly credentials: readonly DeploymentCredentialReference[];\n readonly resolveSecret: DeploymentSecretResolver;\n readonly createToken: GooglePlayTokenFactory;\n}): Promise<GooglePlayAccessTokenResult> {\n const reference = options.credentials.find(\n (credential) => credential.provider === 'google-play' && credential.kind === 'service-account',\n );\n if (reference === undefined) return requiredAction();\n const secret = await safelyResolve(options.resolveSecret, reference);\n const parsed = parseServiceAccount(secret);\n if (parsed === null) return requiredAction();\n const token = await safelyCreateToken(options.createToken, parsed);\n return token === null ? requiredAction() : { ok: true, token };\n}\n\nfunction parseServiceAccount(value: string | null): GooglePlayServiceAccountCredentials | null {\n if (value === null) return null;\n let parsed: unknown;\n try {\n parsed = JSON.parse(value);\n } catch {\n return null;\n }\n if (!isRecord(parsed) || parsed.type !== 'service_account') return null;\n if (!isNonEmptyString(parsed.client_email) || !isNonEmptyString(parsed.private_key)) return null;\n return { clientEmail: parsed.client_email, privateKey: parsed.private_key };\n}\n\nasync function safelyResolve(\n resolveSecret: DeploymentSecretResolver,\n reference: DeploymentCredentialReference,\n): Promise<string | null> {\n try {\n return await resolveSecret(reference);\n } catch {\n return null;\n }\n}\n\nasync function safelyCreateToken(\n createToken: GooglePlayTokenFactory,\n credentials: GooglePlayServiceAccountCredentials,\n): Promise<string | null> {\n try {\n return await createToken(credentials);\n } catch {\n return null;\n }\n}\n\nfunction requiredAction(): GooglePlayAccessTokenResult {\n return {\n ok: false,\n action: {\n type: 'authentication',\n provider: 'google-play',\n target: 'android',\n code: 'GOOGLE_PLAY_AUTHENTICATION_REQUIRED',\n message: 'Google Play service-account authentication is required for Android deployment.',\n },\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === 'string' && value.trim().length > 0;\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { AndroidDeploymentTrack, AndroidReleaseStatus } from '../../domain/AndroidDeploymentIntent';
|
|
2
|
+
import type { GooglePlayTransport } from './GooglePlayTransport';
|
|
3
|
+
export declare function updateGooglePlayTrack(options: {
|
|
4
|
+
readonly packageName: string;
|
|
5
|
+
readonly editId: string;
|
|
6
|
+
readonly track: AndroidDeploymentTrack;
|
|
7
|
+
readonly releaseStatus: AndroidReleaseStatus;
|
|
8
|
+
readonly versionCode: number;
|
|
9
|
+
readonly token: string;
|
|
10
|
+
readonly request: GooglePlayTransport;
|
|
11
|
+
}): Promise<boolean>;
|
|
12
|
+
//# sourceMappingURL=updateGooglePlayTrack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updateGooglePlayTrack.d.ts","sourceRoot":"","sources":["../../../src/providers/googlePlay/updateGooglePlayTrack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAGjE,wBAAsB,qBAAqB,CAAC,OAAO,EAAE;IACnD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,sBAAsB,CAAC;IACvC,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAC;IAC7C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;CACvC,GAAG,OAAO,CAAC,OAAO,CAAC,CAsBnB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { googlePlayTrackEditUrl } from './googlePlayUrls';
|
|
2
|
+
export async function updateGooglePlayTrack(options) {
|
|
3
|
+
const body = JSON.stringify({
|
|
4
|
+
track: options.track,
|
|
5
|
+
releases: [
|
|
6
|
+
{
|
|
7
|
+
versionCodes: [String(options.versionCode)],
|
|
8
|
+
status: options.releaseStatus,
|
|
9
|
+
},
|
|
10
|
+
],
|
|
11
|
+
});
|
|
12
|
+
try {
|
|
13
|
+
const response = await options.request({
|
|
14
|
+
method: 'PUT',
|
|
15
|
+
url: googlePlayTrackEditUrl(options.packageName, options.editId, options.track),
|
|
16
|
+
token: options.token,
|
|
17
|
+
contentType: 'application/json',
|
|
18
|
+
body,
|
|
19
|
+
});
|
|
20
|
+
return response.status >= 200 && response.status < 300;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=updateGooglePlayTrack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updateGooglePlayTrack.js","sourceRoot":"","sources":["../../../src/providers/googlePlay/updateGooglePlayTrack.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAQ3C;IACC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;QAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,QAAQ,EAAE;YACR;gBACE,YAAY,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;gBAC3C,MAAM,EAAE,OAAO,CAAC,aAAa;aAC9B;SACF;KACF,CAAC,CAAC;IACH,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC;YACrC,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,sBAAsB,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC;YAC/E,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,WAAW,EAAE,kBAAkB;YAC/B,IAAI;SACL,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC","sourcesContent":["import type {\n AndroidDeploymentTrack,\n AndroidReleaseStatus,\n} from '../../domain/AndroidDeploymentIntent';\nimport type { GooglePlayTransport } from './GooglePlayTransport';\nimport { googlePlayTrackEditUrl } from './googlePlayUrls';\n\nexport async function updateGooglePlayTrack(options: {\n readonly packageName: string;\n readonly editId: string;\n readonly track: AndroidDeploymentTrack;\n readonly releaseStatus: AndroidReleaseStatus;\n readonly versionCode: number;\n readonly token: string;\n readonly request: GooglePlayTransport;\n}): Promise<boolean> {\n const body = JSON.stringify({\n track: options.track,\n releases: [\n {\n versionCodes: [String(options.versionCode)],\n status: options.releaseStatus,\n },\n ],\n });\n try {\n const response = await options.request({\n method: 'PUT',\n url: googlePlayTrackEditUrl(options.packageName, options.editId, options.track),\n token: options.token,\n contentType: 'application/json',\n body,\n });\n return response.status >= 200 && response.status < 300;\n } catch {\n return false;\n }\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { GooglePlayTransport } from './GooglePlayTransport';
|
|
2
|
+
export declare function uploadGooglePlayBundle(options: {
|
|
3
|
+
readonly packageName: string;
|
|
4
|
+
readonly editId: string;
|
|
5
|
+
readonly token: string;
|
|
6
|
+
readonly filePath: string;
|
|
7
|
+
readonly request: GooglePlayTransport;
|
|
8
|
+
}): Promise<number | null>;
|
|
9
|
+
//# sourceMappingURL=uploadGooglePlayBundle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uploadGooglePlayBundle.d.ts","sourceRoot":"","sources":["../../../src/providers/googlePlay/uploadGooglePlayBundle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAGjE,wBAAsB,sBAAsB,CAAC,OAAO,EAAE;IACpD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;CACvC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAqBzB"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { googlePlayBundleUploadUrl } from './googlePlayUrls';
|
|
2
|
+
export async function uploadGooglePlayBundle(options) {
|
|
3
|
+
let response;
|
|
4
|
+
try {
|
|
5
|
+
response = await options.request({
|
|
6
|
+
method: 'POST',
|
|
7
|
+
url: googlePlayBundleUploadUrl(options.packageName, options.editId),
|
|
8
|
+
token: options.token,
|
|
9
|
+
contentType: 'application/octet-stream',
|
|
10
|
+
body: Bun.file(options.filePath),
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
if (response.status < 200 || response.status >= 300)
|
|
17
|
+
return null;
|
|
18
|
+
try {
|
|
19
|
+
const parsed = JSON.parse(response.body);
|
|
20
|
+
if (!isRecord(parsed) || !isVersionCode(parsed.versionCode))
|
|
21
|
+
return null;
|
|
22
|
+
return parsed.versionCode;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function isVersionCode(value) {
|
|
29
|
+
return typeof value === 'number' && Number.isSafeInteger(value) && value > 0;
|
|
30
|
+
}
|
|
31
|
+
function isRecord(value) {
|
|
32
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=uploadGooglePlayBundle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uploadGooglePlayBundle.js","sourceRoot":"","sources":["../../../src/providers/googlePlay/uploadGooglePlayBundle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,OAM5C;IACC,IAAI,QAAQ,CAAC;IACb,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC;YAC/B,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,yBAAyB,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC;YACnE,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,WAAW,EAAE,0BAA0B;YACvC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;SACjC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,IAAI,CAAC;IACjE,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC;YAAE,OAAO,IAAI,CAAC;QACzE,OAAO,MAAM,CAAC,WAAW,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC","sourcesContent":["import type { GooglePlayTransport } from './GooglePlayTransport';\nimport { googlePlayBundleUploadUrl } from './googlePlayUrls';\n\nexport async function uploadGooglePlayBundle(options: {\n readonly packageName: string;\n readonly editId: string;\n readonly token: string;\n readonly filePath: string;\n readonly request: GooglePlayTransport;\n}): Promise<number | null> {\n let response;\n try {\n response = await options.request({\n method: 'POST',\n url: googlePlayBundleUploadUrl(options.packageName, options.editId),\n token: options.token,\n contentType: 'application/octet-stream',\n body: Bun.file(options.filePath),\n });\n } catch {\n return null;\n }\n if (response.status < 200 || response.status >= 300) return null;\n try {\n const parsed: unknown = JSON.parse(response.body);\n if (!isRecord(parsed) || !isVersionCode(parsed.versionCode)) return null;\n return parsed.versionCode;\n } catch {\n return null;\n }\n}\n\nfunction isVersionCode(value: unknown): value is number {\n return typeof value === 'number' && Number.isSafeInteger(value) && value > 0;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n"]}
|