mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-12-28 19:30:30 +00:00
431 lines
12 KiB
JavaScript
431 lines
12 KiB
JavaScript
(function(global, factory) {
|
|
if (typeof define === "function" && define.amd) {
|
|
define(["exports"], factory);
|
|
} else if (typeof exports !== "undefined") {
|
|
factory(exports);
|
|
} else {
|
|
var mod = {
|
|
exports: {}
|
|
};
|
|
factory(mod.exports);
|
|
global.index = mod.exports;
|
|
}
|
|
})(this, function(exports) {
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
|
|
function _classCallCheck(instance, Constructor) {
|
|
if (!(instance instanceof Constructor)) {
|
|
throw new TypeError("Cannot call a class as a function");
|
|
}
|
|
}
|
|
|
|
var _createClass = (function() {
|
|
function defineProperties(target, props) {
|
|
for (var i = 0; i < props.length; i++) {
|
|
var descriptor = props[i];
|
|
descriptor.enumerable = descriptor.enumerable || false;
|
|
descriptor.configurable = true;
|
|
if ("value" in descriptor) descriptor.writable = true;
|
|
Object.defineProperty(target, descriptor.key, descriptor);
|
|
}
|
|
}
|
|
|
|
return function(Constructor, protoProps, staticProps) {
|
|
if (protoProps) defineProperties(Constructor.prototype, protoProps);
|
|
if (staticProps) defineProperties(Constructor, staticProps);
|
|
return Constructor;
|
|
};
|
|
})();
|
|
|
|
var DroneClient = (function() {
|
|
function DroneClient(server, token, csrf) {
|
|
_classCallCheck(this, DroneClient);
|
|
|
|
this.server = server || "";
|
|
this.token = token;
|
|
this.csrf = csrf;
|
|
}
|
|
|
|
_createClass(
|
|
DroneClient,
|
|
[
|
|
{
|
|
key: "getRepoList",
|
|
value: function getRepoList(opts) {
|
|
var query = encodeQueryString(opts);
|
|
return this._get("/api/user/repos?" + query);
|
|
}
|
|
},
|
|
{
|
|
key: "getRepo",
|
|
value: function getRepo(owner, repo) {
|
|
return this._get("/api/repos/" + owner + "/" + repo);
|
|
}
|
|
},
|
|
{
|
|
key: "activateRepo",
|
|
value: function activateRepo(owner, repo) {
|
|
return this._post("/api/repos/" + owner + "/" + repo);
|
|
}
|
|
},
|
|
{
|
|
key: "updateRepo",
|
|
value: function updateRepo(owner, repo, data) {
|
|
return this._patch("/api/repos/" + owner + "/" + repo, data);
|
|
}
|
|
},
|
|
{
|
|
key: "deleteRepo",
|
|
value: function deleteRepo(owner, repo) {
|
|
return this._delete("/api/repos/" + owner + "/" + repo);
|
|
}
|
|
},
|
|
{
|
|
key: "getBuildList",
|
|
value: function getBuildList(owner, repo, opts) {
|
|
var query = encodeQueryString(opts);
|
|
return this._get(
|
|
"/api/repos/" + owner + "/" + repo + "/builds?" + query
|
|
);
|
|
}
|
|
},
|
|
{
|
|
key: "getBuild",
|
|
value: function getBuild(owner, repo, number) {
|
|
return this._get(
|
|
"/api/repos/" + owner + "/" + repo + "/builds/" + number
|
|
);
|
|
}
|
|
},
|
|
{
|
|
key: "getBuildFeed",
|
|
value: function getBuildFeed(opts) {
|
|
var query = encodeQueryString(opts);
|
|
return this._get("/api/user/feed?" + query);
|
|
}
|
|
},
|
|
{
|
|
key: "cancelBuild",
|
|
value: function cancelBuild(owner, repo, number, ppid) {
|
|
return this._delete(
|
|
"/api/repos/" +
|
|
owner +
|
|
"/" +
|
|
repo +
|
|
"/builds/" +
|
|
number +
|
|
"/" +
|
|
ppid
|
|
);
|
|
}
|
|
},
|
|
{
|
|
key: "approveBuild",
|
|
value: function approveBuild(owner, repo, build) {
|
|
return this._post(
|
|
"/api/repos/" +
|
|
owner +
|
|
"/" +
|
|
repo +
|
|
"/builds/" +
|
|
build +
|
|
"/approve"
|
|
);
|
|
}
|
|
},
|
|
{
|
|
key: "declineBuild",
|
|
value: function declineBuild(owner, repo, build) {
|
|
return this._post(
|
|
"/api/repos/" +
|
|
owner +
|
|
"/" +
|
|
repo +
|
|
"/builds/" +
|
|
build +
|
|
"/decline"
|
|
);
|
|
}
|
|
},
|
|
{
|
|
key: "restartBuild",
|
|
value: function restartBuild(owner, repo, build, opts) {
|
|
var query = encodeQueryString(opts);
|
|
return this._post(
|
|
"/api/repos/" +
|
|
owner +
|
|
"/" +
|
|
repo +
|
|
"/builds/" +
|
|
build +
|
|
"?" +
|
|
query
|
|
);
|
|
}
|
|
},
|
|
{
|
|
key: "getLogs",
|
|
value: function getLogs(owner, repo, build, proc) {
|
|
return this._get(
|
|
"/api/repos/" + owner + "/" + repo + "/logs/" + build + "/" + proc
|
|
);
|
|
}
|
|
},
|
|
{
|
|
key: "getArtifact",
|
|
value: function getArtifact(owner, repo, build, proc, file) {
|
|
return this._get(
|
|
"/api/repos/" +
|
|
owner +
|
|
"/" +
|
|
repo +
|
|
"/files/" +
|
|
build +
|
|
"/" +
|
|
proc +
|
|
"/" +
|
|
file +
|
|
"?raw=true"
|
|
);
|
|
}
|
|
},
|
|
{
|
|
key: "getArtifactList",
|
|
value: function getArtifactList(owner, repo, build) {
|
|
return this._get(
|
|
"/api/repos/" + owner + "/" + repo + "/files/" + build
|
|
);
|
|
}
|
|
},
|
|
{
|
|
key: "getSecretList",
|
|
value: function getSecretList(owner, repo) {
|
|
return this._get("/api/repos/" + owner + "/" + repo + "/secrets");
|
|
}
|
|
},
|
|
{
|
|
key: "createSecret",
|
|
value: function createSecret(owner, repo, secret) {
|
|
return this._post(
|
|
"/api/repos/" + owner + "/" + repo + "/secrets",
|
|
secret
|
|
);
|
|
}
|
|
},
|
|
{
|
|
key: "deleteSecret",
|
|
value: function deleteSecret(owner, repo, secret) {
|
|
return this._delete(
|
|
"/api/repos/" + owner + "/" + repo + "/secrets/" + secret
|
|
);
|
|
}
|
|
},
|
|
{
|
|
key: "getRegistryList",
|
|
value: function getRegistryList(owner, repo) {
|
|
return this._get("/api/repos/" + owner + "/" + repo + "/registry");
|
|
}
|
|
},
|
|
{
|
|
key: "createRegistry",
|
|
value: function createRegistry(owner, repo, registry) {
|
|
return this._post(
|
|
"/api/repos/" + owner + "/" + repo + "/registry",
|
|
registry
|
|
);
|
|
}
|
|
},
|
|
{
|
|
key: "deleteRegistry",
|
|
value: function deleteRegistry(owner, repo, address) {
|
|
return this._delete(
|
|
"/api/repos/" + owner + "/" + repo + "/registry/" + address
|
|
);
|
|
}
|
|
},
|
|
{
|
|
key: "getSelf",
|
|
value: function getSelf() {
|
|
return this._get("/api/user");
|
|
}
|
|
},
|
|
{
|
|
key: "getToken",
|
|
value: function getToken() {
|
|
return this._post("/api/user/token");
|
|
}
|
|
},
|
|
{
|
|
key: "on",
|
|
value: function on(callback) {
|
|
return this._subscribe("/stream/events", callback, {
|
|
reconnect: true
|
|
});
|
|
}
|
|
},
|
|
{
|
|
key: "stream",
|
|
value: function stream(owner, repo, build, proc, callback) {
|
|
return this._subscribe(
|
|
"/stream/logs/" + owner + "/" + repo + "/" + build + "/" + proc,
|
|
callback,
|
|
{
|
|
reconnect: false
|
|
}
|
|
);
|
|
}
|
|
},
|
|
{
|
|
key: "_get",
|
|
value: function _get(path) {
|
|
return this._request("GET", path, null);
|
|
}
|
|
},
|
|
{
|
|
key: "_post",
|
|
value: function _post(path, data) {
|
|
return this._request("POST", path, data);
|
|
}
|
|
},
|
|
{
|
|
key: "_patch",
|
|
value: function _patch(path, data) {
|
|
return this._request("PATCH", path, data);
|
|
}
|
|
},
|
|
{
|
|
key: "_delete",
|
|
value: function _delete(path) {
|
|
return this._request("DELETE", path, null);
|
|
}
|
|
},
|
|
{
|
|
key: "_subscribe",
|
|
value: function _subscribe(path, callback, opts) {
|
|
var query = encodeQueryString({
|
|
access_token: this.token
|
|
});
|
|
path = this.server ? this.server + path : path;
|
|
path = this.token ? path + "?" + query : path;
|
|
|
|
var events = new EventSource(path);
|
|
events.onmessage = function(event) {
|
|
var data = JSON.parse(event.data);
|
|
callback(data);
|
|
};
|
|
if (!opts.reconnect) {
|
|
events.onerror = function(err) {
|
|
if (err.data === "eof") {
|
|
events.close();
|
|
}
|
|
};
|
|
}
|
|
return events;
|
|
}
|
|
},
|
|
{
|
|
key: "_request",
|
|
value: function _request(method, path, data) {
|
|
var endpoint = [this.server, path].join("");
|
|
var xhr = new XMLHttpRequest();
|
|
xhr.open(method, endpoint, true);
|
|
if (this.token) {
|
|
xhr.setRequestHeader("Authorization", "Bearer " + this.token);
|
|
}
|
|
if (method !== "GET" && this.csrf) {
|
|
xhr.setRequestHeader("X-CSRF-TOKEN", this.csrf);
|
|
}
|
|
return new Promise(
|
|
function(resolve, reject) {
|
|
xhr.onload = function() {
|
|
if (xhr.readyState === 4) {
|
|
if (xhr.status >= 300) {
|
|
var error = {
|
|
status: xhr.status,
|
|
message: xhr.response
|
|
};
|
|
if (this.onerror) {
|
|
this.onerror(error);
|
|
}
|
|
reject(error);
|
|
return;
|
|
}
|
|
var contentType = xhr.getResponseHeader("Content-Type");
|
|
if (
|
|
contentType &&
|
|
contentType.startsWith("application/json")
|
|
) {
|
|
resolve(JSON.parse(xhr.response));
|
|
} else {
|
|
resolve(xhr.response);
|
|
}
|
|
}
|
|
}.bind(this);
|
|
xhr.onerror = function(e) {
|
|
reject(e);
|
|
};
|
|
if (data) {
|
|
xhr.setRequestHeader("Content-Type", "application/json");
|
|
xhr.send(JSON.stringify(data));
|
|
} else {
|
|
xhr.send();
|
|
}
|
|
}.bind(this)
|
|
);
|
|
}
|
|
}
|
|
],
|
|
[
|
|
{
|
|
key: "fromEnviron",
|
|
value: function fromEnviron() {
|
|
return new DroneClient(
|
|
process && process.env && process.env.DRONE_SERVER,
|
|
process && process.env && process.env.DRONE_TOKEN,
|
|
process && process.env && process.env.DRONE_CSRF
|
|
);
|
|
}
|
|
},
|
|
{
|
|
key: "fromWindow",
|
|
value: function fromWindow() {
|
|
return new DroneClient(
|
|
window && window.DRONE_SERVER,
|
|
window && window.DRONE_TOKEN,
|
|
window && window.DRONE_CSRF
|
|
);
|
|
}
|
|
}
|
|
]
|
|
);
|
|
|
|
return DroneClient;
|
|
})();
|
|
|
|
exports.default = DroneClient;
|
|
|
|
/**
|
|
* Encodes the values into url encoded form sorted by key.
|
|
*
|
|
* @param {object} query parameters in key value object.
|
|
* @return {string} query parameter string
|
|
*/
|
|
var encodeQueryString = (exports.encodeQueryString = function encodeQueryString() {
|
|
var params =
|
|
arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
|
|
return params
|
|
? Object.keys(params)
|
|
.sort()
|
|
.map(function(key) {
|
|
var val = params[key];
|
|
return encodeURIComponent(key) + "=" + encodeURIComponent(val);
|
|
})
|
|
.join("&")
|
|
: "";
|
|
});
|
|
});
|