import { cookie, getCSRFToken } from "jsr:@cosense/std@0.29/rest"; import { isErr, unwrapOk } from "npm:option-t@50/plain_result"; import { assert } from "jsr:@core/unknownutil@4/assert"; import { isString } from "jsr:@core/unknownutil@4/is/string"; import data from "./data_en_diff.json" with { type: "json" }; const sid = Deno.env.get("SID"); assert(sid, isString); const importingProjectName = "nishio-en"; if (data.pages.length === 0) { console.log("No page to be imported found."); } else { console.log( `Importing ${data.pages.length} pages to "/${importingProjectName}"...` ); // workaround: 生のResponseのstatusを見る機能が@cosense/std@0.29に無いので、直接REST APIを叩く // TODO: エラー処理を握りつぶさずもうちょっとちゃんとする const csrf = unwrapOk(await getCSRFToken({ sid })); const formData = new FormData(); formData.append( "import-file", new Blob([JSON.stringify(data)], { type: "application/octet-stream", }), ); formData.append("name", "undefined"); const res = await fetch( `https://scrapbox.io/api/page-data/import/${importingProjectName}.json`, { method: "POST", headers: { Cookie: cookie(sid), Accept: "application/json, text/plain, */*", "X-CSRF-TOKEN": csrf, }, body: formData, }, ); // 最近のimport pages APIの応答をちゃんと調べてないので、 // 本当にimportに失敗したときのresponseを判別する方法がわからない。 // とりあえずResponseが返ってきさえすれば成功したことにする。 if (!res.ok) { console.warn(`Importing may be failed. Please check "/${importingProjectName}".`); console.warn(`Status code: ${res.status} ${res.statusText}`); } console.log(`Import result: ${await res.text()}`); }