Initial logic for release notes
This commit is contained in:
parent
34ef8dc2c8
commit
c5301688a1
13 changed files with 491 additions and 5 deletions
|
@ -657,6 +657,8 @@ const URL_CALLS = {
|
|||
callLinkCreateAuth: 'v1/call-link/create-auth',
|
||||
registration: 'v1/registration',
|
||||
registerCapabilities: 'v1/devices/capabilities',
|
||||
releaseNotesManifest: 'dynamic/release-notes/release-notes-v2.json',
|
||||
releaseNotes: 'static/release-notes',
|
||||
reportMessage: 'v1/messages/report',
|
||||
setBackupId: 'v1/archives/backupid',
|
||||
setBackupSignatureKey: 'v1/archives/keys',
|
||||
|
@ -1209,6 +1211,56 @@ export type GetBackupInfoResponseType = z.infer<
|
|||
typeof getBackupInfoResponseSchema
|
||||
>;
|
||||
|
||||
export type GetReleaseNoteOptionsType = Readonly<{
|
||||
uuid: string;
|
||||
}>;
|
||||
|
||||
export const releaseNoteSchema = z.object({
|
||||
uuid: z.string(),
|
||||
title: z.string(),
|
||||
body: z.string(),
|
||||
linkText: z.string().optional(),
|
||||
callToActionText: z.string().optional(),
|
||||
includeBoostMessage: z.boolean().optional().default(true),
|
||||
bodyRanges: z
|
||||
.array(
|
||||
z.object({
|
||||
style: z.string(),
|
||||
start: z.number(),
|
||||
length: z.number(),
|
||||
})
|
||||
)
|
||||
.optional(),
|
||||
media: z.string().optional(),
|
||||
mediaHeight: z.coerce
|
||||
.number()
|
||||
.optional()
|
||||
.transform(x => x || undefined),
|
||||
mediaWidth: z.coerce
|
||||
.number()
|
||||
.optional()
|
||||
.transform(x => x || undefined),
|
||||
mediaContentType: z.string().optional(),
|
||||
});
|
||||
|
||||
export type ReleaseNoteResponseType = z.infer<typeof releaseNoteSchema>;
|
||||
|
||||
export const releaseNotesManifestSchema = z.object({
|
||||
announcements: z
|
||||
.object({
|
||||
uuid: z.string(),
|
||||
countries: z.string().optional(),
|
||||
desktopMinVersion: z.string().optional(),
|
||||
link: z.string().optional(),
|
||||
ctaId: z.string().optional(),
|
||||
})
|
||||
.array(),
|
||||
});
|
||||
|
||||
export type ReleaseNotesManifestResponseType = z.infer<
|
||||
typeof releaseNotesManifestSchema
|
||||
>;
|
||||
|
||||
export type CallLinkCreateAuthResponseType = Readonly<{
|
||||
credential: string;
|
||||
}>;
|
||||
|
@ -1339,6 +1391,11 @@ export type WebAPIType = {
|
|||
getSenderCertificate: (
|
||||
withUuid?: boolean
|
||||
) => Promise<GetSenderCertificateResultType>;
|
||||
getReleaseNote: (
|
||||
options: GetReleaseNoteOptionsType
|
||||
) => Promise<ReleaseNoteResponseType>;
|
||||
getReleaseNotesManifest: () => Promise<ReleaseNotesManifestResponseType>;
|
||||
getReleaseNotesManifestHash: () => Promise<string | undefined>;
|
||||
getSticker: (packId: string, stickerId: number) => Promise<Uint8Array>;
|
||||
getStickerPackManifest: (packId: string) => Promise<StickerPackManifestType>;
|
||||
getStorageCredentials: MessageSender['getStorageCredentials'];
|
||||
|
@ -1807,6 +1864,9 @@ export function initialize({
|
|||
getProfile,
|
||||
getProfileUnauth,
|
||||
getProvisioningResource,
|
||||
getReleaseNote,
|
||||
getReleaseNotesManifest,
|
||||
getReleaseNotesManifestHash,
|
||||
getTransferArchive,
|
||||
getSenderCertificate,
|
||||
getSocketStatus,
|
||||
|
@ -2099,6 +2159,44 @@ export function initialize({
|
|||
languages: Record<string, Array<string>>;
|
||||
};
|
||||
}
|
||||
async function getReleaseNote({
|
||||
uuid,
|
||||
}: GetReleaseNoteOptionsType): Promise<ReleaseNoteResponseType> {
|
||||
const rawRes = await _ajax({
|
||||
call: 'releaseNotes',
|
||||
host: resourcesUrl,
|
||||
httpType: 'GET',
|
||||
responseType: 'json',
|
||||
urlParameters: `/${uuid}/en.json`,
|
||||
});
|
||||
return parseUnknown(releaseNoteSchema, rawRes);
|
||||
}
|
||||
|
||||
async function getReleaseNotesManifest(): Promise<ReleaseNotesManifestResponseType> {
|
||||
const rawRes = await _ajax({
|
||||
call: 'releaseNotesManifest',
|
||||
host: resourcesUrl,
|
||||
httpType: 'GET',
|
||||
responseType: 'json',
|
||||
});
|
||||
return parseUnknown(releaseNotesManifestSchema, rawRes);
|
||||
}
|
||||
|
||||
async function getReleaseNotesManifestHash(): Promise<string | undefined> {
|
||||
const { response } = await _ajax({
|
||||
call: 'releaseNotesManifest',
|
||||
host: resourcesUrl,
|
||||
httpType: 'HEAD',
|
||||
responseType: 'byteswithdetails',
|
||||
});
|
||||
|
||||
const etag = response.headers.get('etag');
|
||||
if (etag == null) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return etag;
|
||||
}
|
||||
|
||||
async function getStorageManifest(
|
||||
options: StorageServiceCallOptionsType = {}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue