redeemKey(key, callback) {
		return StdLib.Promises.timeoutCallbackPromise(90000, ['purchaseResultDetails', 'packageList'], callback, (resolve, reject) => {
			this._send(EMsg.ClientRegisterKey, {key: key}, (body) => {
				let packageList = {};

				let receiptDetails = BinaryKVParser.parse(body.purchase_receipt_info).MessageObject;
				if (receiptDetails.LineItemCount > 0) {
					receiptDetails.lineitems.forEach((pkg) => {
						let packageID = pkg.PackageID || pkg.packageID || pkg.packageid;
						packageList[packageID] = pkg.ItemDescription;
					});
				}

				let err = Helpers.eresultError(body.eresult);
				if (err) {
					err.purchaseResultDetails = body.purchase_result_details;
					err.packageList = packageList;
					reject(err);
				} else {
					resolve({
						purchaseResultDetails: body.purchase_result_details,
						packageList
					});
				}
			});
		});
	}
Redeem a product code on this account.
@param {string} key
@param {function} [callback] - Args (eresult value, SteamUser.EPurchaseResult value, object of (packageid => package names)
@returns {Promise<{purchaseResultDetails: EPurchaseResult, packageList: Object<string, string>}>}