VICE / Server / ConfluenceModule.js
ConfluenceModule.js
Raw
import fs from 'fs'
import http from 'http'
import path from 'path'
import fetch from 'node-fetch'
import { createRequire } from "module";
const require = createRequire(import.meta.url);
const jiraReq = require("./JiraInput.json");

export class ConfluenceTools{
    constructor(domain_name, board_id){
        this.domain_name = domain_name;
        this.board_id = board_id;
    }

    get_all_pages(){
        console.log("Getting all Pages\n\n");

        let pages = [];
        fetch(`https://${this.domain_name}.atlassian.net/wiki/rest/api/space/${this.board_id}/content/page?start=0&limit=1000`, {
            method: 'GET',
            authorization: jiraReq.authStr,
            headers: {
                'Authorization': jiraReq.authStr,
                'Accept': 'application/json',
                'Content-Type': 'application/json'
            }
        })
        .then(response => {
            console.log(`Response: ${response.status}`);
            return response.text();
        })
        .then(text => {
            const obj = JSON.parse(text);
            const num_pages = obj.size;
            for(let i = 0; i < num_pages; i++)
            {
                pages.push({"id":obj.results[i].id,
                "status":obj.results[i].status,
                "title":obj.results[i].title,
                "link":`https://${this.domain_name}.atlassian.net/wiki${obj.results[i]._links.tinyui}`});
            }
            console.log({"Pages":pages});

            return pages;
        })
        .catch(err => console.error(err));
    }

    get_content(contentID){
        console.log(`Getting Content: ${contentID}\n\n`);

        fetch(`https://${this.domain_name}.atlassian.net/wiki/rest/api/content/${contentID}`, {
            method: 'GET',
            authorization: jiraReq.authStr,
            headers: {
                'Authorization': jiraReq.authStr,
                'Accept': 'application/json',
                'Content-Type': 'application/json'
            }
        })
        .then(response => {
            console.log(`Response: ${response.status}`);
            return response.text();
        })
        .then(text => {
            const obj = JSON.parse(text);
            const data = {
                title: `${obj.title}`,
                type: `${obj.type}`,
                status: `${obj.status}`,
                space:
                {
                    name: `${obj.space.name}`,
                    key: `${obj.space.key}`
                },
                link: `https://${this.domain_name}.atlassian.net/wiki${obj._links.tinyui}`
            };
            console.log(data);
            return {data};
        })
        .catch(err => console.error(err));

    }

    create_content(content_type, content_title, content_body){
        const bodyData = `{
            "type":"${content_type}",
            "title":"${content_title}",
            "space":{"key":"${this.board_id}"},
            "body":{"storage":
            {"value":"<p>${content_body}</p>","representation":"storage"}}}`

        fetch(`https://${this.domain_name}.atlassian.net/wiki/rest/api/content/`, {
            method: 'POST',
            headers: {
                'Authorization': jiraReq.authStr,
                'Accept': 'application/json',
                'Content-Type': 'application/json'
            },
            body: bodyData
        })
        .then(response => {
            console.log(`Response: ${response.status} ${response.statusText}`);
            return response.text();
        })
        .then(text => {
            const obj = JSON.parse(text);
            const content_link = `https://${this.domain_name}.atlassian.net/wiki${obj._links.tinyui}`;
            console.log(content_link);
            return content_link
        })
        .catch(err => console.error(err));
    }
}

//testing stuff
//const test = new ConfluenceTools("wdcapstonetest","VG");
//test.get_all_pages();
//test.get_content('851969');
//test.create_content("page","Title Page API Test 6", "Hi Vova");