-
-
Notifications
You must be signed in to change notification settings - Fork 642
/
dim-api.ts
120 lines (111 loc) · 3.03 KB
/
dim-api.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import {
DeleteAllResponse,
DestinyVersion,
ExportResponse,
GetSharedLoadoutRequest,
GetSharedLoadoutResponse,
ImportResponse,
Loadout,
LoadoutShareRequest,
LoadoutShareResponse,
PlatformInfoResponse,
ProfileResponse,
ProfileUpdate,
ProfileUpdateRequest,
ProfileUpdateResponse,
} from '@destinyitemmanager/dim-api-types';
import { DestinyAccount } from 'app/accounts/destiny-account';
import { authenticatedApi, unauthenticatedApi } from './dim-api-helper';
export async function getGlobalSettings() {
const response = await unauthenticatedApi<PlatformInfoResponse>(
{
// This uses "app" instead of "release" because I misremembered it when implementing the server
url: `/platform_info?flavor=${$DIM_FLAVOR === 'release' ? 'app' : $DIM_FLAVOR}`,
method: 'GET',
},
true,
);
return response.settings;
}
export async function getDimApiProfile(account?: DestinyAccount) {
return authenticatedApi<ProfileResponse>({
url: '/profile',
method: 'GET',
params: account
? {
platformMembershipId: account.membershipId,
destinyVersion: account.destinyVersion.toString(),
components: 'settings,loadouts,tags,hashtags,searches,triumphs',
}
: {
components: 'settings',
},
});
}
export async function importData(data: ExportResponse) {
return authenticatedApi<ImportResponse>({
url: '/import',
method: 'POST',
body: data,
});
}
export async function postUpdates(
platformMembershipId: string | undefined,
destinyVersion: DestinyVersion | undefined,
updates: ProfileUpdate[],
) {
// Strip properties
updates = updates.map((u) => ({ action: u.action, payload: u.payload })) as ProfileUpdate[];
const request: ProfileUpdateRequest =
platformMembershipId && destinyVersion
? {
platformMembershipId,
destinyVersion,
updates,
}
: {
updates,
};
const response = await authenticatedApi<ProfileUpdateResponse>({
url: '/profile',
method: 'POST',
body: request,
});
return response.results;
}
export async function createLoadoutShare(platformMembershipId: string, loadout: Loadout) {
const request: LoadoutShareRequest = {
platformMembershipId,
loadout,
};
const response = await authenticatedApi<LoadoutShareResponse>({
url: '/loadout_share',
method: 'POST',
body: request,
});
return response.shareUrl;
}
export async function getSharedLoadout(shareId: string) {
const params = {
shareId,
} satisfies GetSharedLoadoutRequest;
const response = await unauthenticatedApi<GetSharedLoadoutResponse>({
url: '/loadout_share',
method: 'GET',
params,
});
return response.loadout;
}
export async function deleteAllData() {
const response = await authenticatedApi<DeleteAllResponse>({
url: '/delete_all_data',
method: 'POST',
});
return response.deleted;
}
export async function exportDimApiData() {
return authenticatedApi<ExportResponse>({
url: '/export',
method: 'GET',
});
}