import "isomorphic-fetch"; import * as Logging from "~/common/logging"; import * as Events from "~/common/custom-events"; import * as Websockets from "~/common/browser-websockets"; import * as Strings from "~/common/strings"; import * as Credentials from "~/common/credentials"; import * as Environment from "~/common/environment"; //NOTE(martina): call Websockets.checkWebsocket() before any api call that uses websockets to return updates // to make sure that websockets are properly connected (and to reconnect them if they are not) // otherwise updates may not occur properly //NOTE(martina): if the server is the slate backend, you should set credentials: "include". If it is cross origin (aka a call to shovel or lens), you will not be able to use credentials // Instead, if a cross origin server requires authorization, pass an API key with Authorization: getCookie(Credentials.session.key) const getCookie = (name) => { var match = document.cookie.match(new RegExp("(^| )" + name + "=([^;]+)")); if (match) return match[2]; }; const REQUEST_HEADERS = { Accept: "application/json", "Content-Type": "application/json", }; //NOTE(martina): used for calls to the server const DEFAULT_OPTIONS = { method: "POST", headers: REQUEST_HEADERS, credentials: "include", }; //NOTE(martina): used for calls to other servers (where sending credentials isn't allowed b/c it's cross origin) which also don't require API keys const CORS_OPTIONS = { method: "POST", headers: REQUEST_HEADERS, credentials: "omit", }; const returnJSON = async (route, options) => { try { const response = await fetch(route, options); const json = await response.json(); return json; } catch (e) { if (e.name === "AbortError") return { aborted: true }; Logging.error(e); } }; export const createZipToken = async (files) => { return await returnJSON(`${Environment.URI_SHOVEL}/api/download/create-zip-token`, { ...CORS_OPTIONS, body: JSON.stringify({ files }), }); }; export const downloadZip = ({ token, name }) => `${Environment.URI_SHOVEL}/api/download/download-by-token?downloadId=${token}&name=${name}`; export const health = async (data = {}) => { await Websockets.checkWebsocket(); return await returnJSON(`/api/_`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data: { buckets: data.buckets } }), }); }; export const sendFilecoin = async (data) => { if (Strings.isEmpty(data.source)) { return null; } if (Strings.isEmpty(data.target)) { return null; } if (!data.amount) { return null; } await Websockets.checkWebsocket(); return await returnJSON(`/api/addresses/send`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; // export const mql = async (url) => { // try { // const res = await microlink(url, { screenshot: true }); // return res; // } catch (e) { // console.log(e); // if (e.description) { // Events.dispatchMessage({ message: e.description }); // } // } // }; export const search = async (data) => { return await returnJSON(`/api/search/search`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const checkUsername = async (data) => { return await returnJSON(`/api/users/check-username`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const checkEmail = async (data) => { return await returnJSON(`/api/users/check-email`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; //NOTE(toast): this functionality comes with the upgraded sg plan // export const validateEmail = async (data) => { // return await returnJSON("/api/emails/validate", { // ...DEFAULT_OPTIONS, // body: JSON.stringify({ data }), // }); // }; export const sendEmail = async (data) => { return await returnJSON("/api/emails/send-email", { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const sendTemplateEmail = async (data) => { return await returnJSON("/api/emails/send-template", { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const removeFromBucket = async (data) => { await Websockets.checkWebsocket(); return await returnJSON(`/api/data/bucket-remove`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const getSlateById = async (data) => { await Websockets.checkWebsocket(); return await returnJSON(`/api/slates/get`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const getSlatesByIds = async (data) => { return await returnJSON(`/api/slates/get`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const getSocial = async (data) => { return await returnJSON(`/api/users/get-social`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const deleteTrustRelationship = async (data) => { await Websockets.checkWebsocket(); return await returnJSON(`/api/users/trust-delete`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const updateTrustRelationship = async (data) => { await Websockets.checkWebsocket(); return await returnJSON(`/api/users/trust-update`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const createTrustRelationship = async (data) => { await Websockets.checkWebsocket(); return await returnJSON(`/api/users/trust`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const createSubscription = async (data) => { await Websockets.checkWebsocket(); return await returnJSON(`/api/subscribe`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; // export const search = async (data) => { // await Websockets.checkWebsocket(); // if (Strings.isEmpty(data.query)) { // return { decorator: "NO_SERVER_TRIP", data: { results: [] } }; // } // return await returnJSON(`${Environment.URI_LENS}/search`, { // ...CORS_OPTIONS, // body: JSON.stringify({ data }), // }); // }; export const createFile = async (data) => { await Websockets.checkWebsocket(); return await returnJSON(`/api/data/create`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const createLink = async (data, options) => { await Websockets.checkWebsocket(); return await returnJSON(`/api/data/create-link`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), ...options, }); }; export const addFileToSlate = async (data) => { await Websockets.checkWebsocket(); return await returnJSON(`/api/slates/add-file`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const requestTwitterToken = async () => { return await returnJSON(`/api/twitter/request-token`, { ...DEFAULT_OPTIONS, }); }; export const authenticateViaTwitter = async (data) => { return await returnJSON(`/api/twitter/authenticate`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const createUserViaTwitter = async (data) => { return await returnJSON(`/api/twitter/signup`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const createUserViaTwitterWithVerification = async (data) => { return await returnJSON(`/api/twitter/signup-with-verification`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const updateViewer = async (data) => { await Websockets.checkWebsocket(); return await returnJSON(`/api/users/update`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const signIn = async (data) => { return await returnJSON(`/api/sign-in`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const hydrateAuthenticatedUser = async () => { await Websockets.checkWebsocket(); return await returnJSON(`/api/hydrate`, { ...DEFAULT_OPTIONS, }); }; export const deleteViewer = async () => { return await returnJSON(`/api/users/delete`, { ...DEFAULT_OPTIONS, }); }; export const createUser = async (data) => { return await returnJSON(`/api/users/create`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; // export const checkCIDStatus = async (data) => { // return await returnJSON(`/api/data/cid-status`, { // ...DEFAULT_OPTIONS, // body: JSON.stringify({ data }), // }); // }; export const createSlate = async (data) => { await Websockets.checkWebsocket(); return await returnJSON(`/api/slates/create`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const updateSlate = async (data) => { await Websockets.checkWebsocket(); return await returnJSON(`/api/slates/update`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const deleteSlate = async (data) => { await Websockets.checkWebsocket(); return await returnJSON(`/api/slates/delete`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const removeFileFromSlate = async (data) => { await Websockets.checkWebsocket(); return await returnJSON(`/api/slates/remove-file`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const generateAPIKey = async () => { await Websockets.checkWebsocket(); return await returnJSON(`/api/keys/generate`, { ...DEFAULT_OPTIONS, }); }; export const deleteAPIKey = async (data) => { await Websockets.checkWebsocket(); return await returnJSON(`/api/keys/delete`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const saveCopy = async (data, options) => { await Websockets.checkWebsocket(); return await returnJSON(`/api/data/save-copy`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), ...options, }); }; export const updateFile = async (data) => { await Websockets.checkWebsocket(); return await returnJSON(`/api/data/update`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const deleteFiles = async (data) => { await Websockets.checkWebsocket(); return await returnJSON(`/api/data/delete`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const getSerializedSlate = async (data) => { return await returnJSON(`/api/slates/get-serialized`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const getSerializedProfile = async (data) => { return await returnJSON(`/api/users/get-serialized`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const createSupportMessage = async (data) => { return await returnJSON(`/api/support-message`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const createDownloadActivity = async (data) => { return await returnJSON(`/api/activity/create-download-activity`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const getActivity = async (data) => { return await returnJSON(`/api/activity/get-activity`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const getExplore = async (data) => { return await returnJSON(`/api/activity/get-explore`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const getZipFilePaths = async (data) => { return await returnJSON(`/api/zip/get-paths`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const cleanDatabase = async () => { return await returnJSON(`/api/clean-up/users`, { ...DEFAULT_OPTIONS, }); }; export const createTwitterEmailVerification = async (data) => { return await returnJSON(`/api/verifications/twitter/create`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const verifyTwitterEmail = async (data) => { return await returnJSON(`/api/verifications/twitter/verify`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const createPasswordResetVerification = async (data) => { return await returnJSON(`/api/verifications/password-reset/create`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const verifyPasswordResetEmail = async (data) => { return await returnJSON(`/api/verifications/password-reset/verify`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const resetPassword = async (data) => { return await returnJSON(`/api/users/reset-password`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const createLegacyVerification = async (data) => { return await returnJSON(`/api/verifications/legacy/create`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const migrateUser = async (data) => { return await returnJSON(`/api/users/migrate`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const createVerification = async (data) => { return await returnJSON(`/api/verifications/create`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const verifyEmail = async (data) => { return await returnJSON(`/api/verifications/verify`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const resendVerification = async (data) => { return await returnJSON(`/api/verifications/resend`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const getUserVersion = async (data) => { return await returnJSON(`/api/users/get-version`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const linkTwitterAccount = async (data) => { return await returnJSON(`/api/twitter/link`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const linkTwitterAccountWithVerification = async (data) => { return await returnJSON(`/api/twitter/link-with-verification`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const resendPasswordResetVerification = async (data) => { return await returnJSON(`/api/verifications/password-reset/resend`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); }; export const createSurvey = async (data) => { return await returnJSON(`/api/surveys/create`, { ...DEFAULT_OPTIONS, body: JSON.stringify({ data }), }); };