Grabbed dndbeyond's source code
``` ~/go/bin/sourcemapper -output ddb -jsurl https://media.dndbeyond.com/character-app/static/js/main.90aa78c5.js ```
This commit is contained in:
@@ -0,0 +1,189 @@
|
||||
import { CharacterData, UserPreferences } from "~/types";
|
||||
|
||||
import config, {
|
||||
characterServiceBaseUrl,
|
||||
ddbBaseUrl,
|
||||
userServiceBaseUrl,
|
||||
} from "../config";
|
||||
import { getId, getCampaignId } from "../state/selectors/characterUtils";
|
||||
import { applyQueriesClientSide, queryListToMap } from "./queryUtils";
|
||||
import { summon } from "./summon";
|
||||
import { getUserId } from "./userApi";
|
||||
|
||||
export const getCharacters = async () => {
|
||||
try {
|
||||
const userId = await getUserId();
|
||||
const req = await summon(
|
||||
`${characterServiceBaseUrl}/characters/list?userId=${userId}`
|
||||
);
|
||||
return req.json();
|
||||
} catch {
|
||||
throw new Error("Non-OK response from GET characters");
|
||||
}
|
||||
};
|
||||
|
||||
export const getItems = async ({ queries }) => {
|
||||
const characters = await getCharacters();
|
||||
applyQueriesClientSide(queryListToMap(queries));
|
||||
|
||||
return new Promise((resolve) =>
|
||||
resolve({
|
||||
json: () => new Promise((resolve2) => resolve2(characters)),
|
||||
})
|
||||
);
|
||||
};
|
||||
|
||||
export const copyCharacter = (character: CharacterData) => {
|
||||
try {
|
||||
const characterId = getId(character);
|
||||
|
||||
return summon(`${characterServiceBaseUrl}/character/copy`, {
|
||||
method: "POST",
|
||||
body: JSON.stringify({ characterId }),
|
||||
});
|
||||
} catch (err) {
|
||||
throw err;
|
||||
}
|
||||
};
|
||||
|
||||
export const claimCharacter = (characterId: number, isAssigned: boolean) => {
|
||||
try {
|
||||
return summon(`${characterServiceBaseUrl}/premade/claim`, {
|
||||
method: "POST",
|
||||
body: JSON.stringify({ characterId, isAssigned }),
|
||||
});
|
||||
} catch (err) {
|
||||
throw err;
|
||||
}
|
||||
};
|
||||
|
||||
export const getCharacterSlots = async () => {
|
||||
try {
|
||||
const req = await summon(`${config.userServiceBaseUrl}/slot-limit`);
|
||||
const res = await req.json();
|
||||
return res.data;
|
||||
} catch (err) {
|
||||
throw err;
|
||||
}
|
||||
};
|
||||
|
||||
export const deleteCharacter = (character: CharacterData) => {
|
||||
try {
|
||||
const characterId = getId(character);
|
||||
|
||||
return summon(`${characterServiceBaseUrl}/character`, {
|
||||
method: "DELETE",
|
||||
body: JSON.stringify({ characterId }),
|
||||
});
|
||||
} catch (err) {
|
||||
throw err;
|
||||
}
|
||||
};
|
||||
|
||||
export const leaveCampaign = (character: CharacterData) => {
|
||||
try {
|
||||
const campaignId = getCampaignId(character);
|
||||
const characterId = getId(character);
|
||||
|
||||
return summon(
|
||||
`${ddbBaseUrl}/api/campaign/${campaignId}/character/${characterId}`,
|
||||
{
|
||||
method: "DELETE",
|
||||
}
|
||||
);
|
||||
} catch (err) {
|
||||
throw err;
|
||||
}
|
||||
};
|
||||
|
||||
export const joinCampaign = (campaignJoinCode: string, characterId: number) => {
|
||||
try {
|
||||
return summon(`${ddbBaseUrl}/api/campaign/join/${campaignJoinCode}`, {
|
||||
method: "POST",
|
||||
body: JSON.stringify({ characterId }),
|
||||
});
|
||||
} catch (err) {
|
||||
throw err;
|
||||
}
|
||||
};
|
||||
|
||||
export const unlockCharacters = (characterIds: Array<number>) => {
|
||||
try {
|
||||
return summon(`${userServiceBaseUrl}/unlock`, {
|
||||
method: "POST",
|
||||
body: JSON.stringify({ characterIds }),
|
||||
});
|
||||
} catch (err) {
|
||||
throw err;
|
||||
}
|
||||
};
|
||||
|
||||
export const activateCharacter = (character: CharacterData) => {
|
||||
try {
|
||||
const characterId = getId(character);
|
||||
|
||||
return summon(
|
||||
`${characterServiceBaseUrl}/characters/${characterId}/status/activate`,
|
||||
{
|
||||
method: "PUT",
|
||||
}
|
||||
);
|
||||
} catch (err) {
|
||||
throw err;
|
||||
}
|
||||
};
|
||||
|
||||
export const getFeatureFlagsFromCharacterService = (flags: Array<string>) => {
|
||||
try {
|
||||
return summon(`${characterServiceBaseUrl}/featureflag`, {
|
||||
method: "POST",
|
||||
body: JSON.stringify({ flags }),
|
||||
});
|
||||
} catch (err) {
|
||||
throw err;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Get all sources that the user is able to use.
|
||||
*/
|
||||
export const getAllEntitledSources = (campaignId?: number) => {
|
||||
try {
|
||||
return summon(
|
||||
`${userServiceBaseUrl}/entitled-sources${
|
||||
campaignId ? `?campaignId=${campaignId}` : ""
|
||||
}`
|
||||
);
|
||||
} catch (err) {
|
||||
throw err;
|
||||
}
|
||||
};
|
||||
|
||||
export const getUserPreferences = () => {
|
||||
try {
|
||||
return summon(`${config.userServiceBaseUrl}/preferences`);
|
||||
} catch (err) {
|
||||
throw err;
|
||||
}
|
||||
};
|
||||
|
||||
export const updateUserPreferences = (preferences: UserPreferences) => {
|
||||
try {
|
||||
return summon(`${config.userServiceBaseUrl}/preferences`, {
|
||||
method: "POST",
|
||||
body: JSON.stringify(preferences),
|
||||
});
|
||||
} catch (err) {
|
||||
throw err;
|
||||
}
|
||||
};
|
||||
|
||||
export const getRulesData = () => {
|
||||
try {
|
||||
return summon(`${characterServiceBaseUrl}/rule-data`, {
|
||||
method: "GET",
|
||||
});
|
||||
} catch (err) {
|
||||
throw err;
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user