Skip to content

Latest commit

 

History

History
281 lines (212 loc) · 15.2 KB

File metadata and controls

281 lines (212 loc) · 15.2 KB

image

Cek Status SPTJM & Surat Rekomendasi (SR) Kampus Merdeka Batch 5 Tahun 2023

Sebuah Userscript yang Ditulis Menggunakan Javascript

⚠️ Akurasi Status Data yang Ditampilkan Tidak Selalu Dapat Dijadikan Acuan ⚠️

Instal

Instal Melalui Console Browser Instal Melalui Usercript

✨ Fitur   |   ⚒️ Instalasi   |   📜 Riwayat Perubahan   |   ⭐ Star History

✨ Fitur

  • Menampilkan status data SPTJM & Surat Rekomendasi (SR) Kampus Merdeka yang telah anda upload di website kampusmerdeka.kemdikbud.go.id seperti:

    • Status KESALAHAN, SKRIP GAGAL MENGURAI DATA ANDA: Skrip tidak berjalan dengan sempurna, instal kembali skrip diatas
    • Status Data SPTJM atau SURAT REKOMENDASI tidak ditemukan: Data SPTJM & Surat Rekomendasi (SR) belum anda upload
    • (Hari, Tanggal Bulan Tahun pukul [Jam.Menit] Zona Waktu) Status SPTJM anda adalah (Status Data)
    • (Hari, Tanggal Bulan Tahun pukul [Jam.Menit] Zona Waktu) Status Surat Rekomendasi anda adalah (Status Data)
(Hari, Tanggal Bulan Tahun pukul [Jam & Menit] (Status Data)
Hari: Numeric, contoh: Rabu ON_REVIEW: Data SPTJM & Surat Rekomendasi (SR) anda sedang dalam proses review
Tanggal: Numeric, contoh: 5 VERIFIED: Data SPTJM & Surat Rekomendasi (SR) anda telah terverifikasi
Bulan: Long, contoh: Juli REJECTED: Data SPTJM & Surat Rekomendasi (SR) anda ditolak
Tahun: Numerik, contoh: 2023
Jam.Menit: Numerik, 04.49
Zona Waktu: Indonesia/Asia/Jakarta (WIB)

⚒️ Instalasi

Console Browser

TEKAN UNTUK MELIHAT
  1. Buka website kampusmerdeka.kemdikbud.go.id melalui browser Desktop PC / Laptop berikut:
  • Windows: Chrome / Firefox / Microsoft Edge / Opera / Brave / Vivaldi

  • macOS: Safari

  1. Pastikan anda telah login
  2. Buka devtools pada browser anda dengan cara:
  • Windows: Gunakan shortcut keyboard CTRL + SHIFT + J / Klik Kanan > Inspect > Console

  • macOS: Gunakan shortcut keyboard CMD + OPTION + J

  1. Copy & paste kode yang dilampirkan dibawah, kemudian tekan Enter

Screenshot 2023-07-05 043823

TEKAN UNTUK MELIHAT KODE
  const printErrorShouldLoginBefore = () => {
    console.log(
      '%cKESALAHAN, SKRIP GAGAL MENGURAI DATA ANDA',
      'font-size: 18px; color: #f00; background: #000;'
    );
    throw new Error('NOT_LOGGED_IN');
  };

  const printGenericError = (err) => {
    console.log(
      `%cError: ${err}`,
      'font-size: 18px; color: #f00; background: #000;'
    );
    throw err;
  };

  const currentCycle = 5;

  const userLocalKey = `@mkbm/manager/user`;
  const storageData = localStorage.getItem(userLocalKey);
  if (!storageData) {
    printErrorShouldLoginBefore();
  }
  const storageDataParsed = JSON.parse(storageData);
  if (!storageDataParsed) {
    printErrorShouldLoginBefore();
  }
  const token = storageDataParsed?.value?.token;
  if (!token) {
    printErrorShouldLoginBefore();
  }

  const abortController = new AbortController();

  const getActiveDocuments = async () => {
    const resp = await fetch(
      'https://api.kampusmerdeka.kemdikbud.go.id/v1alpha1/documents?type=SPTJM,SURAT_REKOMENDASI&programs=Magang',
      {
        signal: abortController.signal,
        headers: {
          Authorization: `Bearer ${token}`,
        },
      }
    ).then((resp) => resp.json());
    const docs = resp.data;
    const mapDocumentByType = {};
    docs.forEach((doc) => {
      if (!(doc.type in mapDocumentByType)) {
        mapDocumentByType[doc.type] = [];
      }

      doc.cycle_int = Number.parseInt(doc.cycle);
      mapDocumentByType[doc.type].push(doc);
    });

    return mapDocumentByType;
  };

  const getDocumentLatestCycle = (currentCycle, data) => {
    const sortedData = [...data].sort(
      (docA, docB) => docB.cycle_int - docA.cycle_int
    );
    return sortedData.find((doc) => doc.cycle_int <= currentCycle);
  };

  const getUserDocumentStatus = async (docId, docType) => {
    const resp = await fetch(
      `https://api.kampusmerdeka.kemdikbud.go.id/v1alpha1/documents/${docId}/users`,
      {
        headers: {
          Authorization: `Bearer ${token}`,
        },
      }
    ).then((resp) => resp.json());

    const status = resp?.data?.status;
    if (!status) {
      return `DATA ${docType} TIDAK DAPAT DITEMUKAN`;
    }

    return status;
  };

  const getCurrentDateTimeWIB = () => {
    const date = new Date();
    const options = {
      weekday: 'long',
      year: 'numeric',
      month: 'long',
      day: 'numeric',
      hour: 'numeric',
      minute: 'numeric',
      timeZone: 'Asia/Jakarta',
    };
    return date.toLocaleString('id-ID', options);
  };

  const main = async () => {
    try {
      const documentMapped = await getActiveDocuments();
      const docsSPTJM = documentMapped['SPTJM'];
      const docsSR = documentMapped['SURAT_REKOMENDASI'];

      if (!docsSPTJM || !docsSR) {
        throw 'Data SPTJM atau SURAT REKOMENDASI tidak ditemukan';
      }

      const validDocSPTJM = getDocumentLatestCycle(currentCycle, docsSPTJM);
      const validDocsSR = getDocumentLatestCycle(currentCycle, docsSR);

      if (!validDocSPTJM || !validDocsSR) {
        throw 'Data SPTJM atau SURAT REKOMENDASI tidak ditemukan';
      }

      const sptjmId = validDocSPTJM.id;
      const srId = validDocsSR.id;
      const statusUserSptjm = await getUserDocumentStatus(sptjmId, 'SPTJM');
      const statusUserSr = await getUserDocumentStatus(srId, 'SURAT REKOMENDASI');

      const dateTimeWIB = getCurrentDateTimeWIB();

      console.log(
        `%c[${dateTimeWIB} WIB] Status SPTJM anda adalah %c${statusUserSptjm}`,
        'font-size: 24px; color: black; background: white;',
        `font-size: 30px; background: ${
          statusUserSptjm === 'VERIFIED'
            ? 'green'
            : statusUserSptjm === 'REJECTED'
            ? 'red'
            : 'blue'
        }; color: white;`
      );
      console.log(
        `%c[${dateTimeWIB} WIB] Status SURAT REKOMENDASI anda adalah %c${statusUserSr}`,
        'font-size: 24px; color: black; background: white;',
        `font-size: 30px; background: ${
          statusUserSr === 'VERIFIED'
            ? 'green'
            : statusUserSr === 'REJECTED'
            ? 'red'
            : 'blue'
        }; color: white;`
      );
    } catch (err) {
      printGenericError(err);
    }
  };

main();
  1. Silahkan tunggu sebentar, dan baca status data yang ditampilkan pada console tersebut

Contoh ketika status data SPTJM & Surat Rekomendasi (SR) anda sedang dalam proses review

image

Userscript

TEKAN UNTUK MELIHAT
  1. Instal ekstensi Tampermonkey
  2. Instal userscript Cek Status Data SPTJM & SR | Kampus Merdeka Batch 5 2023 (akan dimuat secara otomatis di pengelola skrip pengguna)
  3. Buka website kampusmerdeka.kemdikbud.go.id melalui browser Desktop PC / Laptop berikut:
  • Windows: Chrome / Firefox / Microsoft Edge / Opera / Brave / Vivaldi

  • macOS: Safari

  1. Pastikan anda telah login
  2. Buka devtools pada browser anda dengan cara:
  • Windows: Gunakan shortcut keyboard CTRL + SHIFT + J / Klik Kanan > Inspect > Console

  • macOS: Gunakan shortcut keyboard CMD + OPTION + J

  1. Silahkan tunggu sebentar, dan terlihat status data yang ditampilkan secara otomatis pada console tersebut

Contoh ketika status data SPTJM & Surat Rekomendasi (SR) anda sedang dalam proses review

image

📜 Riwayat Perubahan

  • v1.0 - Menambahkan dukungan untuk Kampus Merdeka Batch 5 Tahun 2023

⭐ Star History

Star History Chart