agc-api-cli 1.0.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/index.ts","../src/services/domain.ts","../src/services/sign.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { Command } from 'commander';\nimport * as fs from 'fs';\nimport { AuthManager } from '../core/auth-mgr';\nimport { PublishService } from '../services/publish';\nimport { ProvisionService } from '../services/provision';\nimport { UploadService } from '../services/upload';\nimport { DomainService } from '../services/domain';\nimport { SignService } from '../services/sign';\n\nconst program = new Command();\n\nprogram\n .name('agc-cli')\n .description('AppGallery Connect API CLI Tool')\n .version('1.0.0');\n\n// ==== Auth Commands ====\nconst authCmd = program.command('auth').description('Authentication management');\n\nauthCmd.command('login')\n .description('Login to AGC API and cache the access token')\n .action(async () => {\n try {\n const token = await AuthManager.getAccessToken();\n console.log('Successfully logged in. Token generated and cached.');\n // 避免输出完整的Token影响安全\n console.log(`Token snippet: ${token.substring(0, 10)}...`);\n } catch (e: any) {\n console.error('Login failed:', e.message);\n }\n });\n\nauthCmd.command('logout')\n .description('Logout and clear cached access token')\n .action(() => {\n const cleared = AuthManager.clearCache();\n if (cleared) {\n console.log('Successfully logged out. Token cache cleared.');\n } else {\n console.log('Already logged out. No token cache found.');\n }\n });\n\n// ==== Publish Commands ====\nconst publishCmd = program.command('publish').description('Publishing API commands');\n\npublishCmd.command('app-id')\n .description('Get App ID by package name')\n .requiredOption('-p, --package-name <packageName>', 'Package name')\n .action(async (options) => {\n try {\n const res = await PublishService.getAppIdList(options.packageName);\n console.log(JSON.stringify(res, null, 2));\n } catch (e: any) {\n console.error('Request failed:', e.message);\n }\n });\n\npublishCmd.command('app-info')\n .description('Get App Info by App ID')\n .requiredOption('-a, --app-id <appId>', 'App ID')\n .option('-l, --lang <lang>', 'Language, e.g. zh-CN')\n .action(async (options) => {\n try {\n const res = await PublishService.getAppInfo(options.appId, options.lang);\n console.log(JSON.stringify(res, null, 2));\n } catch (e: any) {\n console.error('Request failed:', e.message);\n }\n });\n\n// ==== Upload Commands ====\nconst uploadCmd = program.command('upload').description('Upload Management API commands');\n\nuploadCmd.command('file')\n .description('Upload a file (APP, APK, images, etc.)')\n .requiredOption('-a, --app-id <appId>', 'App ID')\n .requiredOption('-f, --file-path <filePath>', 'Path to the local file to upload')\n .option('-r, --release-type <releaseType>', 'Release type: 1 for Full, 6 for HarmonyOS Test')\n .option('-c, --chinese-mainland <flag>', 'Chinese mainland flag: 0 or 1')\n .action(async (options) => {\n try {\n console.log(`Uploading file ${options.filePath}...`);\n await UploadService.uploadFile({\n appId: options.appId,\n filePath: options.filePath,\n releaseType: options.releaseType ? Number(options.releaseType) : undefined,\n chineseMainlandFlag: options.chineseMainland ? Number(options.chineseMainland) : undefined\n });\n console.log('Upload successful.');\n } catch (e: any) {\n console.error('Upload failed:', e.message);\n }\n });\n\n// ==== Provision Commands ====\nconst provisionCmd = program.command('provision').description('Provisioning API commands');\n\n// -- Certificates --\nprovisionCmd.command('csr-generate')\n .description('Generate a new keypair and CSR file')\n .requiredOption('--alias <alias>', 'Key alias')\n .option('--pwd <pwd>', 'Key password (default: 123456)')\n .option('--out-dir <outDir>', 'Output directory (default: ./sign_keys)')\n .option('--filename <filename>', 'Base filename for generated files')\n .option('--sdk-path <sdkPath>', 'Path to HarmonyOS SDK (or set HARMONYOS_SDK_PATH env var)')\n .option('--java-path <javaPath>', 'Path to java executable (default: java)')\n .action(async (options) => {\n try {\n const res = await SignService.createSignP12AndCsr({\n alias: options.alias,\n pwd: options.pwd,\n outDir: options.outDir,\n filename: options.filename,\n sdkPath: options.sdkPath,\n javaPath: options.javaPath\n });\n console.log('CSR generation successful.');\n console.log(JSON.stringify(res, null, 2));\n } catch (e: any) {\n console.error('CSR generation failed:', e.message);\n }\n });\n\nprovisionCmd.command('encrypt-pwd')\n .description('加密 P12 密码,生成 build-profile.json5 所需的 keyPassword / storePassword')\n .requiredOption('--pwd <password>', 'P12 密码明文')\n .option('--config-dir <configDir>', 'DevEco Studio 配置目录 (默认 ~/.ohos/config)')\n .action(async (options) => {\n try {\n const res = SignService.encryptPassword(options.pwd, options.configDir);\n console.log(JSON.stringify(res, null, 2));\n } catch (e: any) {\n console.error('加密失败:', e.message);\n }\n });\n\nprovisionCmd.command('cert-create')\n .description('Create a certificate')\n .requiredOption('--csr <csrFile>', 'Path to CSR file')\n .requiredOption('--cert-name <certName>', 'Certificate name')\n .requiredOption('--cert-type <certType>', 'Certificate type (1: debug, 2: release, 3: in-house, 4: binary)')\n .action(async (options) => {\n try {\n const csrContent = fs.readFileSync(options.csr, 'utf8');\n const res = await ProvisionService.createCert({\n csr: csrContent,\n certName: options.certName,\n certType: Number(options.certType)\n });\n console.log(JSON.stringify(res, null, 2));\n } catch (e: any) {\n console.error('Request failed:', e.message);\n }\n });\n\nprovisionCmd.command('cert-list')\n .description('List certificates')\n .option('-t, --cert-type <certType>', 'Certificate type')\n .option('--cert-ids <certIds>', 'Comma separated certificate IDs')\n .action(async (options) => {\n try {\n const req: any = {};\n if (options.certType) req.certType = Number(options.certType);\n if (options.certIds) req.certIds = options.certIds.split(',');\n const res = await ProvisionService.getCertList(req);\n console.log(JSON.stringify(res, null, 2));\n } catch (e: any) {\n console.error('Request failed:', e.message);\n }\n });\n\nprovisionCmd.command('cert-delete')\n .description('Delete certificates')\n .requiredOption('--cert-ids <certIds>', 'Comma separated certificate IDs to delete')\n .action(async (options) => {\n try {\n const res = await ProvisionService.deleteCert({\n certIds: options.certIds.split(',')\n });\n console.log(JSON.stringify(res, null, 2));\n } catch (e: any) {\n console.error('Request failed:', e.message);\n }\n });\n\n// -- Devices --\nprovisionCmd.command('device-add')\n .description('Add new devices')\n .requiredOption('--devices <devicesFile>', 'Path to JSON file containing devices array [{\"deviceName\":\"name\",\"udid\":\"udid\",\"deviceType\":1}]')\n .action(async (options) => {\n try {\n const fileContent = fs.readFileSync(options.devices, 'utf8');\n const deviceList = JSON.parse(fileContent);\n const res = await ProvisionService.addDevice({ deviceList });\n console.log(JSON.stringify(res, null, 2));\n } catch (e: any) {\n console.error('Request failed:', e.message);\n }\n });\n\nprovisionCmd.command('device-list')\n .description('List devices')\n .option('--device-name <deviceName>', 'Device name to search')\n .option('--from <fromRecCount>', 'Starting page')\n .option('--max <maxReqCount>', 'Max items per page')\n .option('--order <order>', '1: create time desc, 2: name asc')\n .action(async (options) => {\n try {\n const req: any = {};\n if (options.deviceName) req.deviceName = options.deviceName;\n if (options.from) req.fromRecCount = Number(options.from);\n if (options.max) req.maxReqCount = Number(options.max);\n if (options.order) req.order = Number(options.order);\n const res = await ProvisionService.getDeviceList(req);\n console.log(JSON.stringify(res, null, 2));\n } catch (e: any) {\n console.error('Request failed:', e.message);\n }\n });\n\nprovisionCmd.command('device-delete')\n .description('Delete devices')\n .requiredOption('--device-ids <deviceIdList>', 'Comma separated device IDs to delete')\n .action(async (options) => {\n try {\n const res = await ProvisionService.deleteDevice({\n deviceIdList: options.deviceIds.split(',')\n });\n console.log(JSON.stringify(res, null, 2));\n } catch (e: any) {\n console.error('Request failed:', e.message);\n }\n });\n\n// -- Profile / Provision --\nprovisionCmd.command('profile-create')\n .description('Create a profile')\n .requiredOption('--name <provisionName>', 'Profile name')\n .requiredOption('--type <provisionType>', 'Profile type (1:debug, 2:release, 3:in-house, 6:specific device)')\n .requiredOption('--cert <certId>', 'Certificate ID')\n .requiredOption('-a, --app-id <appId>', 'App ID')\n .option('--device-ids <deviceIdList>', 'Comma separated device IDs')\n .option('--acls <aclPermissionList>', 'Comma separated ACL permissions')\n .action(async (options) => {\n try {\n const req: any = {\n provisionName: options.name,\n provisionType: Number(options.type),\n certId: options.cert,\n appId: options.appId\n };\n if (options.deviceIds) req.deviceIdList = options.deviceIds.split(',');\n if (options.acls) req.aclPermissionList = options.acls.split(',');\n const res = await ProvisionService.createProvision(req);\n console.log(JSON.stringify(res, null, 2));\n } catch (e: any) {\n console.error('Request failed:', e.message);\n }\n });\n\nprovisionCmd.command('profile-list')\n .description('List profiles')\n .requiredOption('-a, --app-id <appId>', 'App ID')\n .option('--profile-id <provisionId>', 'Profile ID')\n .option('--from <fromRecCount>', 'Starting page')\n .option('--max <maxReqCount>', 'Max items per page')\n .action(async (options) => {\n try {\n const req: any = { appId: options.appId };\n if (options.profileId) req.provisionId = options.profileId;\n if (options.from) req.fromRecCount = Number(options.from);\n if (options.max) req.maxReqCount = Number(options.max);\n const res = await ProvisionService.getProvisionList(req);\n console.log(JSON.stringify(res, null, 2));\n } catch (e: any) {\n console.error('Request failed:', e.message);\n }\n });\n\nprovisionCmd.command('profile-update')\n .description('Update profile devices')\n .requiredOption('--id <provisionId>', 'Profile ID')\n .requiredOption('--device-ids <deviceIdList>', 'Comma separated device IDs')\n .action(async (options) => {\n try {\n const res = await ProvisionService.updateProvision({\n provisionId: options.id,\n deviceIdList: options.deviceIds.split(',')\n });\n console.log(JSON.stringify(res, null, 2));\n } catch (e: any) {\n console.error('Request failed:', e.message);\n }\n });\n\nprovisionCmd.command('profile-delete')\n .description('Delete a profile')\n .requiredOption('--id <id>', 'Profile ID to delete')\n .action(async (options) => {\n try {\n const res = await ProvisionService.deleteProvision({ id: options.id });\n console.log(JSON.stringify(res, null, 2));\n } catch (e: any) {\n console.error('Request failed:', e.message);\n }\n });\n\n// -- Fingerprints --\nprovisionCmd.command('fp-add')\n .description('Add certificate fingerprints')\n .requiredOption('-a, --app-id <appId>', 'App ID')\n .requiredOption('--fps <fingerprintList>', 'Comma separated fingerprints')\n .action(async (options) => {\n try {\n const res = await ProvisionService.addFingerprint({\n appId: options.appId,\n fingerprintList: options.fps.split(',')\n });\n console.log(JSON.stringify(res, null, 2));\n } catch (e: any) {\n console.error('Request failed:', e.message);\n }\n });\n\nprovisionCmd.command('fp-list')\n .description('List certificate fingerprints')\n .requiredOption('-a, --app-id <appId>', 'App ID')\n .action(async (options) => {\n try {\n const res = await ProvisionService.getFingerprintList({ appId: options.appId });\n console.log(JSON.stringify(res, null, 2));\n } catch (e: any) {\n console.error('Request failed:', e.message);\n }\n });\n\nprovisionCmd.command('fp-delete')\n .description('Delete certificate fingerprints')\n .requiredOption('-a, --app-id <appId>', 'App ID')\n .requiredOption('--fps <fingerprintList>', 'Comma separated fingerprints to delete')\n .action(async (options) => {\n try {\n const res = await ProvisionService.deleteFingerprint({\n appId: options.appId,\n fingerprintList: options.fps.split(',')\n });\n console.log(JSON.stringify(res, null, 2));\n } catch (e: any) {\n console.error('Request failed:', e.message);\n }\n });\n\n// -- ACL Permissions --\nprovisionCmd.command('acl-apply')\n .description('Apply for restricted ACL permissions')\n .requiredOption('-a, --app-id <appId>', 'App ID')\n .requiredOption('--acls <aclsFile>', 'Path to JSON file containing ACL permissions [{\"name\":\"name\",\"reason\":\"reason\"}]')\n .option('--attachment <attachment>', 'Attachment object ID')\n .action(async (options) => {\n try {\n const fileContent = fs.readFileSync(options.acls, 'utf8');\n const aclPermissionList = JSON.parse(fileContent);\n const req: any = { appId: options.appId, aclPermissionList };\n if (options.attachment) req.attachment = options.attachment;\n const res = await ProvisionService.applyACL(req);\n console.log(JSON.stringify(res, null, 2));\n } catch (e: any) {\n console.error('Request failed:', e.message);\n }\n });\n\nprovisionCmd.command('acl-status')\n .description('Check ACL permission apply status')\n .requiredOption('-a, --app-id <appId>', 'App ID')\n .action(async (options) => {\n try {\n const res = await ProvisionService.getACLStatus({ appId: options.appId });\n console.log(JSON.stringify(res, null, 2));\n } catch (e: any) {\n console.error('Request failed:', e.message);\n }\n });\n\nprovisionCmd.command('acl-query')\n .description('Query granted ACL permissions')\n .requiredOption('-a, --app-id <appId>', 'App ID')\n .action(async (options) => {\n try {\n const res = await ProvisionService.getACLQuery({ appId: options.appId });\n console.log(JSON.stringify(res, null, 2));\n } catch (e: any) {\n console.error('Request failed:', e.message);\n }\n });\n\n// ==== Domain Commands ====\nconst domainCmd = program.command('domain').description('Domain Management API commands');\n\ndomainCmd.command('query')\n .description('Query domain configuration')\n .requiredOption('-a, --app-id <appId>', 'App ID')\n .requiredOption('-c, --category <category>', 'Category: server or business')\n .action(async (options) => {\n try {\n const res = await DomainService.queryDomain({\n appId: options.appId,\n category: options.category\n });\n console.log(JSON.stringify(res, null, 2));\n } catch (e: any) {\n console.error('Request failed:', e.message);\n }\n });\n\ndomainCmd.command('update')\n .description('Add or update domain configuration')\n .requiredOption('-a, --app-id <appId>', 'App ID')\n .requiredOption('-c, --category <category>', 'Category: server or business')\n .requiredOption('--domains <domainsFile>', 'Path to JSON file containing domains array [{\"type\":\"httpRequest\",\"value\":\"https://...\"}]')\n .action(async (options) => {\n try {\n const fileContent = fs.readFileSync(options.domains, 'utf8');\n const domains = JSON.parse(fileContent);\n const res = await DomainService.updateDomain({\n appId: options.appId,\n category: options.category,\n domains\n });\n console.log(JSON.stringify(res, null, 2));\n } catch (e: any) {\n console.error('Request failed:', e.message);\n }\n });\n\ndomainCmd.command('config')\n .description('Query domain modification counts and limits')\n .requiredOption('-a, --app-id <appId>', 'App ID')\n .action(async (options) => {\n try {\n const res = await DomainService.queryDomainConfig({\n appId: options.appId\n });\n console.log(JSON.stringify(res, null, 2));\n } catch (e: any) {\n console.error('Request failed:', e.message);\n }\n });\n\ndomainCmd.command('verify-file')\n .description('Download domain verify file')\n .requiredOption('-a, --app-id <appId>', 'App ID')\n .requiredOption('-o, --output <outputPath>', 'Output file path')\n .action(async (options) => {\n try {\n console.log(`Downloading verify file to ${options.output}...`);\n await DomainService.verifyFile({\n appId: options.appId\n }, options.output);\n console.log('Download successful.');\n } catch (e: any) {\n console.error('Download failed:', e.message);\n }\n });\n\ndomainCmd.command('pre-check')\n .description('Pre-check business domain configuration')\n .requiredOption('-a, --app-id <appId>', 'App ID')\n .requiredOption('--domain <domainFile>', 'Path to JSON file containing domain object {\"type\":\"webView\",\"value\":\"https://...\"}')\n .action(async (options) => {\n try {\n const fileContent = fs.readFileSync(options.domain, 'utf8');\n const domain = JSON.parse(fileContent);\n const res = await DomainService.preCheckDomain({\n appId: options.appId,\n domain\n });\n console.log(JSON.stringify(res, null, 2));\n } catch (e: any) {\n console.error('Request failed:', e.message);\n }\n });\n\nprogram.parse(process.argv);\n","import { agcClient } from '../core/http';\nimport {\n QueryDomainRequest,\n QueryDomainResponse,\n UpdateDomainRequest,\n UpdateDomainResponse,\n QueryDomainConfigRequest,\n QueryDomainConfigResponse,\n VerifyFileRequest,\n PreCheckDomainRequest,\n PreCheckDomainResponse\n} from '../types/domain';\nimport fs from 'fs';\n\nexport class DomainService {\n /**\n * 查询元服务的域名配置信息\n */\n static async queryDomain(req: QueryDomainRequest): Promise<QueryDomainResponse> {\n const response = await agcClient.get<QueryDomainResponse>(\n '/api/dms/domain-manage/v1/app/domain',\n {\n params: { category: req.category },\n headers: { appId: req.appId }\n }\n );\n return response.data;\n }\n\n /**\n * 新增/更新元服务的域名配置信息\n */\n static async updateDomain(req: UpdateDomainRequest): Promise<UpdateDomainResponse> {\n const response = await agcClient.post<UpdateDomainResponse>(\n '/api/dms/domain-manage/v1/app/domain',\n { domains: req.domains },\n {\n params: { category: req.category },\n headers: { appId: req.appId }\n }\n );\n return response.data;\n }\n\n /**\n * 查询域名修改次数/配置上限\n */\n static async queryDomainConfig(req: QueryDomainConfigRequest): Promise<QueryDomainConfigResponse> {\n const response = await agcClient.get<QueryDomainConfigResponse>(\n '/api/dms/domain-manage/v1/app/domain/config',\n {\n params: { appId: req.appId }\n }\n );\n return response.data;\n }\n\n /**\n * 下载域名配置文件\n */\n static async verifyFile(req: VerifyFileRequest, outputPath: string): Promise<void> {\n const response = await agcClient.get(\n '/api/dms/domain-manage/v1/app/domain/verify-file',\n {\n headers: { appId: req.appId },\n responseType: 'stream'\n }\n );\n \n return new Promise((resolve, reject) => {\n const writer = fs.createWriteStream(outputPath);\n response.data.pipe(writer);\n let error: Error | null = null;\n writer.on('error', err => {\n error = err;\n writer.close();\n reject(err);\n });\n writer.on('close', () => {\n if (!error) {\n resolve();\n }\n });\n });\n }\n\n /**\n * 预检查业务域名配置\n */\n static async preCheckDomain(req: PreCheckDomainRequest): Promise<PreCheckDomainResponse> {\n const response = await agcClient.post<PreCheckDomainResponse>(\n '/api/dms/domain-manage/v1/app/domain/pre-check',\n { domain: req.domain },\n {\n headers: { appId: req.appId }\n }\n );\n return response.data;\n }\n}\n","import fs from 'fs';\nimport path from 'path';\nimport { execFileSync } from 'child_process';\nimport crypto from 'crypto';\n\nexport interface SignKeyResult {\n alias: string;\n p12Path: string;\n csrPath: string;\n csrContent: string;\n storePath: string;\n cerPath: string;\n p7bPath: string;\n}\n\nexport interface CreateCsrOptions {\n outDir?: string;\n filename?: string;\n alias: string;\n pwd?: string;\n sdkPath?: string;\n javaPath?: string;\n}\n\nexport class SignService {\n public static async createSignP12AndCsr(options: CreateCsrOptions): Promise<SignKeyResult> {\n const outDir = options.outDir ? path.resolve(options.outDir) : path.join(process.cwd(), 'sign_keys');\n if (!fs.existsSync(outDir)) {\n fs.mkdirSync(outDir, { recursive: true });\n }\n\n const filename = options.filename || this.createSignDefaultFilename();\n const p12FilePath = path.join(outDir, `${filename}.p12`);\n const csrFilePath = path.join(outDir, `${filename}.csr`);\n \n const javaPath = options.javaPath || 'java';\n const sdkPath = options.sdkPath || process.env.HARMONYOS_SDK_PATH;\n if (!sdkPath) {\n throw new Error('sdkPath is required. Provide it via --sdk-path or HARMONYOS_SDK_PATH env var.');\n }\n\n const signToolPath = path.join(sdkPath, 'default', 'openharmony', 'toolchains', 'lib', 'hap-sign-tool.jar');\n\n if (!fs.existsSync(signToolPath)) {\n throw new Error(`hap-sign-tool.jar not found at ${signToolPath}`);\n }\n\n const alias = options.alias;\n const pwd = options.pwd || '123456'; // Default password if not provided\n\n // 1. Generate .p12 file\n this.doCreateSignFileP12(javaPath, signToolPath, alias, pwd, p12FilePath);\n\n // 2. Generate .csr file\n this.doCreateSignFileCsr(javaPath, signToolPath, alias, pwd, p12FilePath, csrFilePath);\n\n // 3. Read .csr file content\n const csrContent = fs.readFileSync(csrFilePath, 'utf8');\n\n const cerPath = path.join(outDir, `${filename}.cer`);\n const p7bPath = path.join(outDir, `${filename}.p7b`);\n\n return {\n alias,\n p12Path: p12FilePath,\n csrPath: csrFilePath,\n csrContent,\n storePath: outDir,\n cerPath,\n p7bPath\n };\n }\n\n private static createSignDefaultFilename(): string {\n const timestamp = Date.now().toString();\n const substring = timestamp.substring(timestamp.length - 5);\n const randomString = crypto.randomInt(100, 1000);\n return `agc-cli-${substring}-${randomString}`;\n }\n\n private static doCreateSignFileP12(javaPath: string, signToolPath: string, alias: string, pwd: string, outFilePath: string) {\n const args = [\n '-jar', signToolPath,\n 'generate-keypair',\n '-keyAlias', alias,\n '-keyPwd', pwd,\n '-keyAlg', 'ECC',\n '-keySize', 'NIST-P-256',\n '-keystoreFile', outFilePath,\n '-keystorePwd', pwd\n ];\n console.log(`Executing: ${javaPath} ${args.join(' ')}`);\n execFileSync(javaPath, args, { stdio: 'inherit' });\n }\n\n private static doCreateSignFileCsr(javaPath: string, signToolPath: string, alias: string, pwd: string, p12Path: string, outFilePath: string) {\n const args = [\n '-jar', signToolPath,\n 'generate-csr',\n '-keyAlias', alias,\n '-keyPwd', pwd,\n '-subject', 'C=CN,O=OpenHarmony,OU=OpenHarmony Community,CN=App Release',\n '-signAlg', 'SHA256withECDSA',\n '-keystoreFile', p12Path,\n '-keystorePwd', pwd,\n '-outFile', outFilePath\n ];\n console.log(`Executing: ${javaPath} ${args.join(' ')}`);\n execFileSync(javaPath, args, { stdio: 'inherit' });\n }\n\n private static readonly COMPONENT = new Int8Array([49,243,9,115,214,175,91,184,211,190,177,88,101,131,192,119]);\n\n private static readDirBytes(dirPath: string): Int8Array {\n const entries = fs.readdirSync(dirPath).filter(f => f !== '.DS_Store');\n return new Int8Array(fs.readFileSync(path.resolve(dirPath, entries[0])));\n }\n\n private static readFd(materialPath: string): Int8Array[] {\n const fdDir = path.resolve(materialPath, 'fd');\n return fs.readdirSync(fdDir)\n .filter(f => f !== '.DS_Store')\n .map(e => this.readDirBytes(path.resolve(fdDir, e)));\n }\n\n private static xorBuffers(a: Int8Array, b: Int8Array): Int8Array {\n const result = new Int8Array(a.byteLength);\n for (let i = 0; i < a.byteLength; i++) result[i] = a[i] ^ b[i];\n return result;\n }\n\n private static xorAll(components: Int8Array[]): Buffer {\n let result = this.xorBuffers(components[0], components[1]);\n for (let i = 2; i < components.length; i++) result = this.xorBuffers(result, components[i]);\n return Buffer.from(result);\n }\n\n private static aesDecrypt(key: Int8Array | Buffer, data: Int8Array | Buffer): Buffer {\n const d = Buffer.from(data);\n const tagLen = (255 & d[0]) << 24 | (255 & d[1]) << 16 | (255 & d[2]) << 8 | 255 & d[3];\n const ivLen = d.length - 4 - tagLen;\n const iv = d.subarray(4, 4 + ivLen);\n const decipher = crypto.createDecipheriv('aes-128-gcm', key, iv);\n decipher.setAuthTag(d.subarray(d.length - 16));\n return Buffer.concat([decipher.update(d.subarray(4 + ivLen, d.length - 16)), decipher.final()]);\n }\n\n private static aesEncrypt(key: Int8Array | Buffer, plaintext: string): string {\n const iv = crypto.randomBytes(12);\n const cipher = crypto.createCipheriv('aes-128-gcm', key, iv);\n const enc = Buffer.concat([cipher.update(plaintext, 'utf-8'), cipher.final()]);\n const tag = cipher.getAuthTag();\n const header = Buffer.alloc(4);\n header.writeUInt32BE(enc.length + 16, 0);\n return Buffer.concat([header, iv, enc, tag]).toString('hex').toUpperCase();\n }\n\n private static deriveEncryptionKey(configDir: string): Int8Array {\n const materialDir = path.resolve(configDir, 'material');\n const fd = this.readFd(materialDir);\n const salt = this.readDirBytes(path.resolve(materialDir, 'ac'));\n const rawKey = new Int8Array(\n crypto.pbkdf2Sync(this.xorAll(fd.concat(this.COMPONENT)).toString(), salt, 10000, 16, 'sha256')\n );\n return new Int8Array(this.aesDecrypt(rawKey, this.readDirBytes(path.resolve(materialDir, 'ce'))));\n }\n\n /**\n * 使用 DevEco Studio 的加密密钥对密码进行 AES-128-GCM 加密,\n * 生成 build-profile.json5 中 signingConfigs 所需的加密密码。\n */\n public static encryptPassword(password: string, configDir?: string): { keyPassword: string; storePassword: string } {\n const dir = configDir || path.join(process.env.HOME || '', '.ohos', 'config');\n if (!fs.existsSync(path.resolve(dir, 'material'))) {\n throw new Error(`未找到加密密钥目录: ${path.resolve(dir, 'material')}。请确认 DevEco Studio 已安装并生成过签名配置。`);\n }\n const key = this.deriveEncryptionKey(dir);\n return {\n keyPassword: this.aesEncrypt(key, password),\n storePassword: this.aesEncrypt(key, password),\n };\n }\n}\n"],"mappings":"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","names":["fs","fs"]}
@@ -0,0 +1,347 @@
1
+ import * as axios from 'axios';
2
+
3
+ interface ConnectRet {
4
+ code: number;
5
+ msg: string;
6
+ }
7
+
8
+ interface TokenResponse {
9
+ access_token?: string;
10
+ expires_in?: number;
11
+ ret?: ConnectRet;
12
+ }
13
+
14
+ declare class AuthService {
15
+ /**
16
+ * 获取访问API的Token
17
+ */
18
+ static getToken(): Promise<TokenResponse>;
19
+ }
20
+
21
+ interface AppIdPair {
22
+ key: string;
23
+ value: string;
24
+ }
25
+ interface AppIdListResponse {
26
+ ret: ConnectRet;
27
+ appids?: AppIdPair[];
28
+ }
29
+ interface AppInfoResponse {
30
+ ret: ConnectRet;
31
+ appInfo?: Record<string, any>;
32
+ auditInfo?: Record<string, any>;
33
+ languages?: Array<Record<string, any>>;
34
+ phasedReleaseInfo?: Record<string, any>;
35
+ }
36
+
37
+ declare class PublishService {
38
+ /**
39
+ * 查询应用包名对应的appid
40
+ * @param packageName 需要查询的应用包名,多个包名以逗号分隔,最多支持50个
41
+ */
42
+ static getAppIdList(packageName: string): Promise<AppIdListResponse>;
43
+ /**
44
+ * 查询应用信息
45
+ * @param appId 需要查询的应用ID
46
+ * @param lang 需要查询的语言 (例如: 'zh-CN'),不传则查询全部语言
47
+ */
48
+ static getAppInfo(appId: string, lang?: string): Promise<AppInfoResponse>;
49
+ }
50
+
51
+ interface CommonUrlInfo {
52
+ url: string;
53
+ method: string;
54
+ headers: Record<string, string>;
55
+ }
56
+ interface FilePartUploadInfo {
57
+ url: string;
58
+ method: string;
59
+ headers: Record<string, string>;
60
+ partObjectId?: string;
61
+ }
62
+ interface FilePartInfo {
63
+ length: number;
64
+ sha256?: string;
65
+ }
66
+ interface FilePartComposeInfo {
67
+ partObjectId: string;
68
+ etag: string;
69
+ }
70
+ interface UploadUrlRequest {
71
+ appId: string;
72
+ fileName: string;
73
+ contentLength: number;
74
+ sha256?: string;
75
+ releaseType?: number;
76
+ chineseMainlandFlag?: number;
77
+ }
78
+ interface UploadUrlResponse {
79
+ ret: ConnectRet;
80
+ urlInfo?: CommonUrlInfo;
81
+ }
82
+ interface MultipartInitRequest {
83
+ appId: string;
84
+ fileName: string;
85
+ releaseType?: number;
86
+ chineseMainlandFlag?: number;
87
+ }
88
+ interface MultipartInitResponse {
89
+ ret: ConnectRet;
90
+ objectId?: string;
91
+ nspUploadId?: string;
92
+ nspPartMinSize?: number | string;
93
+ nspPartMaxSize?: number | string;
94
+ }
95
+ interface MultipartPartsRequest {
96
+ objectId: string;
97
+ nspUploadId: string;
98
+ parts: Record<string, FilePartInfo>;
99
+ }
100
+ interface MultipartPartsResponse {
101
+ ret: ConnectRet;
102
+ uploadInfoMap?: Record<string, FilePartUploadInfo>;
103
+ }
104
+ interface MultipartComposeRequest {
105
+ objectId: string;
106
+ nspUploadId: string;
107
+ parts: Record<string, FilePartComposeInfo>;
108
+ }
109
+ interface MultipartComposeResponse {
110
+ ret: ConnectRet;
111
+ }
112
+ interface UploadFileOptions {
113
+ appId: string;
114
+ filePath: string;
115
+ releaseType?: number;
116
+ chineseMainlandFlag?: number;
117
+ }
118
+
119
+ declare class UploadService {
120
+ static getUploadUrl(req: UploadUrlRequest): Promise<UploadUrlResponse>;
121
+ static initMultipart(req: MultipartInitRequest): Promise<MultipartInitResponse>;
122
+ static getMultipartParts(req: MultipartPartsRequest): Promise<MultipartPartsResponse>;
123
+ static composeMultipart(req: MultipartComposeRequest): Promise<MultipartComposeResponse>;
124
+ /**
125
+ * 封装好的上传文件核心流程(支持根据文件大小自动单文件或分片上传)
126
+ * 文件大小 < 5MB 时使用单文件上传,否则使用分片上传
127
+ */
128
+ static uploadFile(options: UploadFileOptions): Promise<void>;
129
+ /**
130
+ * 单文件上传流程
131
+ */
132
+ private static uploadSingleFile;
133
+ /**
134
+ * 分片上传流程
135
+ */
136
+ private static uploadMultipartFile;
137
+ }
138
+
139
+ interface CertInfo {
140
+ id?: string;
141
+ certName?: string;
142
+ certType?: number;
143
+ createTime?: number;
144
+ expireTime?: number;
145
+ certDownloadUrl?: string;
146
+ }
147
+ interface CertCreateRequest {
148
+ csr: string;
149
+ certName: string;
150
+ certType: number;
151
+ }
152
+ interface CertCreateResponse {
153
+ ret: ConnectRet;
154
+ certInfo?: CertInfo;
155
+ }
156
+ interface CertListRequest {
157
+ certType?: number;
158
+ certIds?: string[];
159
+ }
160
+ interface CertListResponse {
161
+ ret: ConnectRet;
162
+ certList?: CertInfo[];
163
+ }
164
+ interface CertDeleteRequest {
165
+ certIds: string[];
166
+ }
167
+ interface CertDeleteResponse {
168
+ ret: ConnectRet;
169
+ }
170
+ interface AddDeviceInfo {
171
+ deviceName: string;
172
+ udid: string;
173
+ deviceType: number;
174
+ }
175
+ interface AddDeviceResult {
176
+ addDeviceInfo?: AddDeviceInfo;
177
+ result?: ConnectRet;
178
+ }
179
+ interface DeviceInfo {
180
+ id?: string;
181
+ deviceName?: string;
182
+ udid?: string;
183
+ deviceType?: number;
184
+ createTime?: string;
185
+ }
186
+ interface DeviceAddRequest {
187
+ deviceList: AddDeviceInfo[];
188
+ }
189
+ interface DeviceAddResponse {
190
+ ret: ConnectRet;
191
+ successedCount: number;
192
+ failedCount: number;
193
+ failedAddDeviceDetail?: AddDeviceResult[];
194
+ }
195
+ interface DeviceListRequest {
196
+ deviceName?: string;
197
+ fromRecCount?: number;
198
+ maxReqCount?: number;
199
+ order?: number;
200
+ }
201
+ interface DeviceListResponse {
202
+ ret: ConnectRet;
203
+ totalCount: number;
204
+ deviceList?: DeviceInfo[];
205
+ }
206
+ interface DeviceDeleteRequest {
207
+ deviceIdList: string[];
208
+ }
209
+ interface DeviceDeleteResponse {
210
+ ret: ConnectRet;
211
+ }
212
+ interface ProvisionInfo {
213
+ id?: string;
214
+ provisionName?: string;
215
+ provisionType?: number;
216
+ certName?: string;
217
+ deviceList?: DeviceInfo[];
218
+ aclPermissionList?: string[];
219
+ aclPermissionAuditState?: number;
220
+ provisionDownloadUrl?: string;
221
+ updateTime?: number;
222
+ expireTime?: number;
223
+ appId?: string;
224
+ tempFlag?: number;
225
+ }
226
+ interface ProvisionCreateRequest {
227
+ provisionName: string;
228
+ provisionType: number;
229
+ certId: string;
230
+ appId: string;
231
+ deviceIdList?: string[];
232
+ aclPermissionList?: string[];
233
+ }
234
+ interface ProvisionCreateResponse {
235
+ ret: ConnectRet;
236
+ provisionInfo?: ProvisionInfo;
237
+ }
238
+ interface ProvisionListRequest {
239
+ appId: string;
240
+ provisionId?: string;
241
+ fromRecCount?: number;
242
+ maxReqCount?: number;
243
+ }
244
+ interface ProvisionListResponse {
245
+ ret: ConnectRet;
246
+ totalCount?: number;
247
+ provisionList?: ProvisionInfo[];
248
+ }
249
+ interface ProvisionUpdateRequest {
250
+ provisionId: string;
251
+ deviceIdList: string[];
252
+ }
253
+ interface ProvisionUpdateResponse {
254
+ ret: ConnectRet;
255
+ provisionInfo?: ProvisionInfo;
256
+ }
257
+ interface ProvisionDeleteRequest {
258
+ id: string;
259
+ }
260
+ interface ProvisionDeleteResponse {
261
+ ret: ConnectRet;
262
+ }
263
+ interface FingerprintAddRequest {
264
+ appId: string;
265
+ fingerprintList: string[];
266
+ }
267
+ interface FingerprintAddResponse {
268
+ ret: ConnectRet;
269
+ }
270
+ interface FingerprintListRequest {
271
+ appId: string;
272
+ }
273
+ interface FingerprintListResponse {
274
+ ret: ConnectRet;
275
+ fingerprintList: string[];
276
+ }
277
+ interface FingerprintDeleteRequest {
278
+ appId: string;
279
+ fingerprintList: string[];
280
+ }
281
+ interface FingerprintDeleteResponse {
282
+ ret: ConnectRet;
283
+ }
284
+ interface OpenApplyPermissionInfo {
285
+ name: string;
286
+ reason: string;
287
+ }
288
+ interface OpenApplyPermissionStatusInfo {
289
+ name?: string;
290
+ status?: number;
291
+ }
292
+ interface UserPermission {
293
+ aclPermissionList?: string;
294
+ createTime?: number;
295
+ updateTime?: number;
296
+ }
297
+ interface ACLApplyRequest {
298
+ appId: string;
299
+ aclPermissionList: OpenApplyPermissionInfo[];
300
+ attachment?: string;
301
+ }
302
+ interface ACLApplyResponse {
303
+ ret: ConnectRet;
304
+ }
305
+ interface ACLStatusRequest {
306
+ appId: string;
307
+ }
308
+ interface ACLStatusResponse {
309
+ aclPermissionList?: OpenApplyPermissionStatusInfo[];
310
+ }
311
+ interface ACLQueryRequest {
312
+ appId: string;
313
+ }
314
+ interface ACLQueryResponse {
315
+ ret: ConnectRet;
316
+ userPermission?: UserPermission;
317
+ }
318
+
319
+ declare class ProvisionService {
320
+ static createCert(req: CertCreateRequest): Promise<CertCreateResponse>;
321
+ static getCertList(req: CertListRequest): Promise<CertListResponse>;
322
+ static deleteCert(req: CertDeleteRequest): Promise<CertDeleteResponse>;
323
+ static addDevice(req: DeviceAddRequest): Promise<DeviceAddResponse>;
324
+ static getDeviceList(req: DeviceListRequest): Promise<DeviceListResponse>;
325
+ static deleteDevice(req: DeviceDeleteRequest): Promise<DeviceDeleteResponse>;
326
+ static createProvision(req: ProvisionCreateRequest): Promise<ProvisionCreateResponse>;
327
+ static getProvisionList(req: ProvisionListRequest): Promise<ProvisionListResponse>;
328
+ static updateProvision(req: ProvisionUpdateRequest): Promise<ProvisionUpdateResponse>;
329
+ static deleteProvision(req: ProvisionDeleteRequest): Promise<ProvisionDeleteResponse>;
330
+ static addFingerprint(req: FingerprintAddRequest): Promise<FingerprintAddResponse>;
331
+ static getFingerprintList(req: FingerprintListRequest): Promise<FingerprintListResponse>;
332
+ static deleteFingerprint(req: FingerprintDeleteRequest): Promise<FingerprintDeleteResponse>;
333
+ static applyACL(req: ACLApplyRequest): Promise<ACLApplyResponse>;
334
+ static getACLStatus(req: ACLStatusRequest): Promise<ACLStatusResponse>;
335
+ static getACLQuery(req: ACLQueryRequest): Promise<ACLQueryResponse>;
336
+ }
337
+
338
+ declare const agcClient: axios.AxiosInstance;
339
+
340
+ interface AgcConfig {
341
+ clientId: string;
342
+ clientSecret: string;
343
+ domain: string;
344
+ }
345
+ declare function getConfig(): AgcConfig;
346
+
347
+ export { type AgcConfig, AuthService, ProvisionService, PublishService, UploadService, agcClient, getConfig };