src/vs/platform/credentials/common/credentialsMainService.ts/BaseCredentialsMainService/getPassword
class BaseCredentialsMainService:	async getPassword(service: string, account: string): Promise<string | null> {
		this.logService.trace('Getting password from keytar:', service, account);
		let keytar: KeytarModule;
		try {
			keytar = await this.withKeytar();
		} catch (e) {
			// for get operations, we don't want to surface errors to the user
			return null;
		}

		const password = await retry(() => keytar.getPassword(service, account), 50, 3);
		if (!password) {
			this.logService.trace('Did not get a password from keytar for account:', account);
			return password;
		}

		let content: string | undefined;
		let hasNextChunk: boolean | undefined;
		try {
			const parsed: ChunkedPassword = JSON.parse(password);
			content = parsed.content;
			hasNextChunk = parsed.hasNextChunk;
		} catch {
			// Ignore this similar to how we ignore parse errors in the delete
			// because on non-windows this will not be a JSON string.
		}

		if (!content || !hasNextChunk) {
			this.logService.trace('Got password from keytar for account:', account);
			return password;
		}

		try {
			let index = 1;
			while (hasNextChunk) {
				const nextChunk = await retry(() => keytar.getPassword(service, `${account}-${index}`), 50, 3);
				const result: ChunkedPassword = JSON.parse(nextChunk!);
				content += result.content;
				hasNextChunk = result.hasNextChunk;
				index++;
			}

			this.logService.trace(`Got ${index}-chunked password from keytar for account:`, account);
			return content;
		} catch (e) {
			this.logService.error(e);
			return password;
		}
	}