{"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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"}