UNPKG

@bs-plugins/jira

Version:

Bamboo Shell plugin for JIRA

1 lines 38 kB
{"version":3,"file":"plugin.mjs","sources":["../out/main.js"],"sourcesContent":["// imports here\nimport { bs, BSPlugin } from \"@bs-core/shell\";\n// Config consts here\n// Misc constants here\nexport const JiraResources = {\n session: \"/rest/auth/1/session\",\n field: \"/rest/api/2/field\",\n project: \"/rest/api/2/project\",\n issue: \"/rest/api/2/issue\",\n createmeta: \"/rest/api/2/issue/createmeta\",\n components: \"/rest/api/2/project\",\n search: \"/rest/api/2/search\",\n user: \"/rest/api/2/user\",\n group: \"/rest/api/2/group\",\n};\nconst SCRIPTRUNNER_DASHBOARDS_N_FILTERS_URL = \"rest/scriptrunner/latest/canned/com.onresolve.scriptrunner.canned.jira.admin.ChangeSharedEntityOwnership\";\n// Jira class here\nexport class Jira extends BSPlugin {\n // Properties here\n _server;\n _user;\n _password;\n _sessionId;\n _sessionRefreshPeriod;\n _timeout;\n _fieldDict;\n _sessionHeader; // Used if logged in\n _basicAuthHeader; // Used if not logged in\n constructor(name, jiraConfig) {\n super(name, \n // NOTE: PLUGIN_VERSION is replaced with package.json#version by a\n // rollup plugin at build time\n \"PLUGIN_VERSION\");\n let config = {\n sessionRefreshPeriod: 60,\n ...jiraConfig,\n };\n this._server = config.server;\n this._user = config.user;\n this._password = config.password;\n this._sessionId = null;\n this._fieldDict = null;\n this._sessionRefreshPeriod = config.sessionRefreshPeriod * 60 * 1000; // Convert to ms\n this._sessionHeader = {};\n let token = Buffer.from(`${this._user}:${this._password}`).toString(\"base64\");\n this._basicAuthHeader = { Authorization: `Basic ${token}` };\n }\n // Private methods here\n // Public methods here\n async login(auth) {\n let res = await bs.request(this._server, JiraResources.session, {\n method: \"POST\",\n body: {\n username: auth !== undefined ? auth.username : this._user,\n password: auth !== undefined ? auth.password : this._password,\n },\n });\n let session = res.body;\n this._sessionId = session.session.value;\n this._sessionHeader = { cookie: `JSESSIONID=${this._sessionId}` };\n // Start a timer to automatically renew the session ID\n this._timeout = setTimeout(() => {\n this.info(\"Refreshing session ID!\");\n this.login();\n }, this._sessionRefreshPeriod);\n }\n async logout() {\n if (this._sessionId === null) {\n return;\n }\n // Stop the timer first!\n clearInterval(this._timeout);\n await bs.request(this._server, JiraResources.session, {\n method: \"DELETE\",\n headers: {\n cookie: `JSESSIONID=${this._sessionId}`,\n },\n });\n // Reset the session ID so we know we are not logged in\n this._sessionId = null;\n this._sessionHeader = {};\n }\n async getFieldDict(useCurrent = true) {\n // Check to see if the field dict is populated AND the user\n // wants to use the current field dict\n if (this._fieldDict !== null && useCurrent) {\n return this._fieldDict;\n }\n let res = await bs.request(this._server, JiraResources.field, {\n method: \"GET\",\n headers: this._sessionId === null ? this._basicAuthHeader : this._sessionHeader,\n });\n this._fieldDict = { byId: {}, byName: {} };\n if (Array.isArray(res.body)) {\n for (let field of res.body) {\n this._fieldDict.byName[field.name] = {\n id: field.id,\n type: field.schema !== undefined ? field.schema.type : \"Unknown\",\n itemType: field.schema !== undefined ? field.schema.items : \"Unknown\",\n };\n this._fieldDict.byId[field.id] = {\n name: field.name,\n type: field.schema !== undefined ? field.schema.type : \"Unknown\",\n itemType: field.schema !== undefined ? field.schema.items : \"Unknown\",\n };\n }\n }\n return this._fieldDict;\n }\n async getAllowedFieldValues(projectKey, issueType, fieldName) {\n let searchParams = {\n expand: \"projects.issuetypes.fields\",\n projectKeys: projectKey,\n issuetypeNames: issueType,\n };\n let res = await bs.request(this._server, JiraResources.createmeta, {\n method: \"GET\",\n searchParams,\n headers: this._sessionId === null ? this._basicAuthHeader : this._sessionHeader,\n });\n // Convert field name to field ID\n let dict = await this.getFieldDict();\n let fieldInfo = dict.byName[fieldName];\n if (fieldInfo === undefined) {\n throw Error(`Unknown field ${fieldName}`);\n }\n let field = res.body.projects[0].issuetypes[0].fields[fieldInfo.id];\n if (field === undefined || field.allowedValues === undefined) {\n return [];\n }\n let allowed = [];\n for (let info of field.allowedValues) {\n allowed.push(info.value);\n }\n return allowed;\n }\n async getComponents(projectKey) {\n let res = await bs.request(this._server, `${JiraResources.components}/${projectKey}/components`, {\n method: \"GET\",\n headers: this._sessionId === null\n ? this._basicAuthHeader\n : this._sessionHeader,\n });\n let components = {};\n for (let component of res.body) {\n components[component.name] = component.id;\n }\n return components;\n }\n async getProjects(component) {\n let res = await bs.request(this._server, JiraResources.project, {\n method: \"GET\",\n headers: this._sessionId === null ? this._basicAuthHeader : this._sessionHeader,\n searchParams: { expand: \"lead\" },\n });\n let projects = res.body;\n if (component !== undefined) {\n return projects.filter((el) => el.projectCategory.name === component);\n }\n return projects;\n }\n // TODO: add getProject\n async updateProject(project, body) {\n await bs.request(this._server, `${JiraResources.project}/${project}`, {\n method: \"PUT\",\n headers: this._sessionId === null ? this._basicAuthHeader : this._sessionHeader,\n body,\n });\n }\n async updateProjectLead(project, lead) {\n await this.updateProject(project, { lead });\n }\n async createIssue(projectKey, issueType, component, fields) {\n let components = await this.getComponents(projectKey);\n let issue = {\n fields: {\n project: { key: projectKey },\n issuetype: { name: issueType },\n components: [{ id: components[component] }],\n },\n };\n // Convert any field names to field IDs\n let dict = await this.getFieldDict();\n for (let fname in fields) {\n let fid = dict.byName[fname]?.id;\n if (fid !== undefined) {\n issue.fields[fid] = fields[fname];\n }\n else {\n issue.fields[fname] = fields[fname];\n }\n }\n let res = await bs.request(this._server, JiraResources.issue, {\n method: \"POST\",\n body: issue,\n headers: this._sessionId === null ? this._basicAuthHeader : this._sessionHeader,\n });\n return res.body.key;\n }\n async updateIssue(key, fields, notifyUsers = true) {\n let issue = {\n fields: {},\n };\n // Convert any field names to field IDs\n let dict = await this.getFieldDict();\n for (let fname in fields) {\n let fid = dict.byName[fname]?.id;\n if (fid !== undefined) {\n issue.fields[fid] = fields[fname];\n }\n else {\n issue.fields[fname] = fields[fname];\n }\n }\n let res = await bs.request(this._server, `${JiraResources.issue}/${key}`, {\n method: \"PUT\",\n body: issue,\n searchParams: notifyUsers ? undefined : { notifyUsers: \"false\" },\n headers: this._sessionId === null ? this._basicAuthHeader : this._sessionHeader,\n });\n return res.body.key;\n }\n async getIssue(idOrKey) {\n let res = await bs.request(this._server, `${JiraResources.issue}/${idOrKey}`, {\n method: \"GET\",\n headers: this._sessionId === null\n ? this._basicAuthHeader\n : this._sessionHeader,\n });\n let issue = {};\n // Convert any field IDs to field name\n let dict = await this.getFieldDict();\n for (let fid in res.body.fields) {\n let fname = dict.byId[fid]?.name;\n if (fname !== undefined) {\n issue[fname] = res.body.fields[fid];\n }\n else {\n issue[fid] = res.body.fields[fid];\n }\n }\n // Add id to list of fields\n issue[\"id\"] = res.body.id;\n return issue;\n }\n async issueReporter(key, reporter, notifyUsers = true) {\n await this.updateIssue(key, { reporter: { name: reporter } }, notifyUsers);\n }\n async assignIssue(key, assignee, notifyUsers = true) {\n await this.updateIssue(key, {\n assignee: {\n name: assignee,\n },\n }, notifyUsers);\n }\n async updateLabels(key, action, labels, notifyUsers = true) {\n let issue = {\n update: {\n labels: [],\n },\n };\n issue.update.labels = [];\n for (let label of labels) {\n issue.update.labels.push({ [action]: label });\n }\n let res = await bs.request(this._server, `${JiraResources.issue}/${key}`, {\n method: \"PUT\",\n body: issue,\n searchParams: notifyUsers ? undefined : { notifyUsers: \"false\" },\n headers: this._sessionId === null ? this._basicAuthHeader : this._sessionHeader,\n });\n return res.body.key;\n }\n async addComment(idOrKey, comment) {\n await bs.request(this._server, `${JiraResources.issue}/${idOrKey}/comment`, {\n method: \"POST\",\n body: {\n body: comment,\n },\n headers: this._sessionId === null\n ? this._basicAuthHeader\n : this._sessionHeader,\n });\n }\n async addWatcher(idOrKey, watcher) {\n await bs.request(this._server, `${JiraResources.issue}/${idOrKey}/watchers`, {\n method: \"POST\",\n body: watcher,\n headers: this._sessionId === null\n ? this._basicAuthHeader\n : this._sessionHeader,\n });\n }\n async removeWatcher(idOrKey, watcher) {\n await bs.request(this._server, `${JiraResources.issue}/${idOrKey}/watchers`, {\n method: \"DELETE\",\n body: watcher,\n headers: this._sessionId === null\n ? this._basicAuthHeader\n : this._sessionHeader,\n searchParams: { username: watcher },\n });\n }\n async getTransitions(idOrKey) {\n let res = await bs.request(this._server, `${JiraResources.issue}/${idOrKey}/transitions`, {\n method: \"GET\",\n headers: this._sessionId === null\n ? this._basicAuthHeader\n : this._sessionHeader,\n });\n let transitions = {};\n for (let transition of res.body.transitions) {\n transitions[transition.name] = transition.id;\n }\n return transitions;\n }\n async doTransition(idOrKey, transitionIdOrName, fields, comment) {\n // transition may be the Transition ID or name so check\n let availableTransitions = await this.getTransitions(idOrKey);\n let transitionId = availableTransitions[transitionIdOrName];\n if (transitionId === undefined) {\n transitionId = transitionIdOrName;\n }\n let dfields = {};\n let dict = await this.getFieldDict();\n if (fields !== undefined) {\n // Convert any field names to field IDs\n await this.getFieldDict();\n for (let fname in fields) {\n let fid = dict.byName[fname]?.id;\n if (fid !== undefined) {\n dfields[fid] = { name: fields[fname] };\n }\n else {\n dfields[fname] = { name: fields[fname] };\n }\n }\n }\n let dcomment = { comment: [{ add: { body: comment } }] };\n let body = {\n update: comment === undefined ? undefined : dcomment,\n fields: fields === undefined || fields.length === 0 ? undefined : dfields,\n transition: { id: transitionId },\n };\n await bs.request(this._server, `${JiraResources.issue}/${idOrKey}/transitions`, {\n method: \"POST\",\n body,\n headers: this._sessionId === null\n ? this._basicAuthHeader\n : this._sessionHeader,\n });\n }\n async runJql(jql) {\n let issues = [];\n let startAt = 0;\n let maxResults = 1000; // 1000 is the max you can get\n while (true) {\n let res = await bs\n .request(this._server, JiraResources.search, {\n method: \"GET\",\n headers: this._sessionId === null\n ? this._basicAuthHeader\n : this._sessionHeader,\n searchParams: {\n jql,\n startAt: startAt.toString(),\n maxResults: maxResults.toString(),\n fields: \"key\",\n },\n })\n .catch((e) => {\n this.error(e);\n });\n if (res === undefined) {\n break;\n }\n // Append the results to what we already have\n let results = res.body;\n for (let issue of results.issues) {\n issues.push(issue.key);\n }\n // Increment by maxResults\n startAt += maxResults;\n // If we are beyond the total then we have everything so break,\n // otherwise go again\n if (startAt > results.total) {\n break;\n }\n }\n return issues;\n }\n async getUserDashboardIds(userId) {\n let res = await bs.request(this._server, `/${SCRIPTRUNNER_DASHBOARDS_N_FILTERS_URL}/params`, {\n method: \"POST\",\n body: {\n FIELD_FROM_USER_ID: userId,\n },\n headers: this._sessionId === null\n ? this._basicAuthHeader\n : this._sessionHeader,\n });\n let dashboardIds = [];\n let data = res.body;\n for (let obj of data) {\n if (obj.name === \"FIELD_DASHBOARD_IDS\") {\n for (let value of obj.values) {\n dashboardIds.push(value[0]);\n }\n }\n }\n return dashboardIds;\n }\n async getUserFilterIds(userId) {\n let res = await bs.request(this._server, `/${SCRIPTRUNNER_DASHBOARDS_N_FILTERS_URL}/params`, {\n method: \"POST\",\n body: {\n FIELD_FROM_USER_ID: userId,\n },\n headers: this._sessionId === null\n ? this._basicAuthHeader\n : this._sessionHeader,\n });\n let filterIds = [];\n let data = res.body;\n for (let obj of data) {\n if (obj.name === \"FIELD_FILTER_IDS\") {\n for (let value of obj.values) {\n filterIds.push(value[0].toString());\n }\n }\n }\n return filterIds;\n }\n async migrateDashboards(fromUserId, toUserId, dashboardIds) {\n await bs.request(this._server, `/${SCRIPTRUNNER_DASHBOARDS_N_FILTERS_URL}`, {\n method: \"POST\",\n body: {\n FIELD_FROM_USER_ID: fromUserId,\n FIELD_TO_USER_ID: toUserId,\n FIELD_DASHBOARD_IDS: dashboardIds,\n FIELD_FILTER_IDS: [],\n },\n headers: this._sessionId === null\n ? this._basicAuthHeader\n : this._sessionHeader,\n });\n }\n async migrateFilters(fromUserId, toUserId, filterIds) {\n await bs.request(this._server, `/${SCRIPTRUNNER_DASHBOARDS_N_FILTERS_URL}`, {\n method: \"POST\",\n body: {\n FIELD_FROM_USER_ID: fromUserId,\n FIELD_TO_USER_ID: toUserId,\n FIELD_DASHBOARD_IDS: [],\n FIELD_FILTER_IDS: filterIds,\n },\n headers: this._sessionId === null\n ? this._basicAuthHeader\n : this._sessionHeader,\n });\n }\n async getUser(user, byKey, includeGroups = false) {\n let searchParams = {};\n if (byKey) {\n searchParams[\"key\"] = user;\n }\n else {\n searchParams[\"username\"] = user;\n }\n if (includeGroups) {\n searchParams[\"expand\"] = \"groups\";\n }\n let res = await bs.request(this._server, JiraResources.user, {\n method: \"GET\",\n searchParams,\n headers: this._sessionId === null ? this._basicAuthHeader : this._sessionHeader,\n });\n return res.body;\n }\n async addUserToGroup(user, group) {\n let res = await bs.request(this._server, `${JiraResources.group}/user`, {\n method: \"POST\",\n searchParams: { groupname: group },\n headers: this._sessionId === null ? this._basicAuthHeader : this._sessionHeader,\n body: { name: user },\n });\n return res.body;\n }\n async getUserGroups(user) {\n let details = await this.getUser(user, false, true);\n let groups = [];\n let groupItems = details?.groups?.items;\n if (groups !== undefined) {\n for (let group of groupItems) {\n groups.push(group.name);\n }\n }\n return groups;\n }\n async addUserToApplication(user, applicationKey) {\n await bs\n .request(this._server, `${JiraResources.user}/application`, {\n method: \"POST\",\n searchParams: { username: user, applicationKey: applicationKey },\n headers: this._sessionId === null\n ? this._basicAuthHeader\n : this._sessionHeader,\n body: {},\n })\n .catch((e) => {\n this.error(\"Received errors (%j)\", e);\n });\n }\n async restApiCall(method, path, body) {\n let res = await bs.request(this._server, path, {\n method,\n headers: this._sessionId === null ? this._basicAuthHeader : this._sessionHeader,\n body,\n });\n return res;\n }\n}\n//# sourceMappingURL=main.js.map"],"names":[],"mappings":"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"}