cloudkit-js
Version:
A JS library for managing a CloudKit container
85 lines (84 loc) • 3.42 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.RequestService = void 0;
const https_1 = __importDefault(require("https"));
const zlib_1 = __importDefault(require("zlib"));
class RequestService {
constructor(signService) {
this.signService = signService;
this.hostname = "api.apple-cloudkit.com";
this.port = 443;
}
makeRequest(requestPath, payload) {
const { dateString, signature } = this.signService.signRequest(payload, requestPath);
const requestOptions = {
hostname: this.hostname,
port: this.port,
path: requestPath,
method: "POST",
headers: {
"X-Apple-CloudKit-Request-KeyID": this.signService.getKeyId(),
"X-Apple-CloudKit-Request-ISO8601Date": dateString,
"X-Apple-CloudKit-Request-SignatureV1": signature
}
};
return new Promise((resolve, reject) => {
const request = https_1.default.request(requestOptions, function (response) {
const responseBody = [];
response.on("data", function (chunk) {
responseBody.push(chunk);
});
response.on("end", function () {
let buffer = Buffer.concat(responseBody);
const encoding = response.headers['content-encoding'];
let responseObject = {};
if (encoding === 'gzip') {
zlib_1.default.gunzip(buffer, (err, decoded) => {
if (err) {
return reject(err);
}
try {
responseObject = JSON.parse(decoded.toString('utf8'));
}
catch (e) {
return reject(e);
}
resolve(responseObject);
});
}
else if (encoding === 'deflate') {
zlib_1.default.inflate(buffer, (err, decoded) => {
if (err) {
return reject(err);
}
try {
responseObject = JSON.parse(decoded.toString('utf8'));
}
catch (e) {
return reject(e);
}
resolve(responseObject);
});
}
else {
try {
responseObject = JSON.parse(buffer.toString('utf8'));
}
catch (e) {
return reject(e);
}
resolve(responseObject);
}
});
});
request.on("error", function (err) {
reject(err);
});
request.end(payload);
});
}
}
exports.RequestService = RequestService;