2023-09-03 07:14:57 +02:00
|
|
|
import type { AccountThemePageId } from "keycloakify/bin/keycloakify/generateFtl";
|
2023-03-20 05:14:25 +01:00
|
|
|
import { assert } from "tsafe/assert";
|
|
|
|
import type { Equals } from "tsafe";
|
2023-09-03 07:14:57 +02:00
|
|
|
import { type ThemeType } from "keycloakify/bin/constants";
|
2023-03-20 05:14:25 +01:00
|
|
|
|
|
|
|
export type KcContext = KcContext.Password | KcContext.Account;
|
|
|
|
|
|
|
|
export declare namespace KcContext {
|
|
|
|
export type Common = {
|
2023-11-22 18:00:29 +01:00
|
|
|
themeVersion: string;
|
2023-04-04 01:40:55 +02:00
|
|
|
keycloakifyVersion: string;
|
2023-04-27 11:52:02 +02:00
|
|
|
themeType: "account";
|
2023-06-08 23:09:14 +02:00
|
|
|
themeName: string;
|
2023-03-20 05:14:25 +01:00
|
|
|
locale?: {
|
|
|
|
supported: {
|
|
|
|
url: string;
|
|
|
|
label: string;
|
|
|
|
languageTag: string;
|
|
|
|
}[];
|
|
|
|
currentLanguageTag: string;
|
|
|
|
};
|
|
|
|
url: {
|
|
|
|
accountUrl: string;
|
|
|
|
passwordUrl: string;
|
|
|
|
totpUrl: string;
|
|
|
|
socialUrl: string;
|
|
|
|
sessionsUrl: string;
|
|
|
|
applicationsUrl: string;
|
|
|
|
logUrl: string;
|
|
|
|
resourceUrl: string;
|
|
|
|
resourcesCommonPath: string;
|
|
|
|
resourcesPath: string;
|
2023-04-20 13:05:01 +02:00
|
|
|
/** @deprecated, not present in recent keycloak version apparently, use kcContext.referrer instead */
|
2023-04-20 03:37:11 +02:00
|
|
|
referrerURI?: string;
|
2023-03-20 05:14:25 +01:00
|
|
|
getLogoutUrl: () => string;
|
|
|
|
};
|
|
|
|
features: {
|
|
|
|
passwordUpdateSupported: boolean;
|
|
|
|
identityFederation: boolean;
|
|
|
|
log: boolean;
|
|
|
|
authorization: boolean;
|
|
|
|
};
|
|
|
|
realm: {
|
|
|
|
internationalizationEnabled: boolean;
|
|
|
|
userManagedAccessAllowed: boolean;
|
|
|
|
};
|
2023-04-20 13:10:33 +02:00
|
|
|
// Present only if redirected to account page with ?referrer=xxx&referrer_uri=http...
|
2023-03-20 05:14:25 +01:00
|
|
|
message?: {
|
|
|
|
type: "success" | "warning" | "error" | "info";
|
|
|
|
summary: string;
|
|
|
|
};
|
|
|
|
referrer?: {
|
2023-04-20 13:10:33 +02:00
|
|
|
url: string; // The url of the App
|
|
|
|
name: string; // Client id
|
2023-03-20 05:14:25 +01:00
|
|
|
};
|
|
|
|
messagesPerField: {
|
2023-06-15 17:10:15 +02:00
|
|
|
/**
|
|
|
|
* Return text if message for given field exists. Useful eg. to add css styles for fields with message.
|
|
|
|
*
|
|
|
|
* @param fieldName to check for
|
|
|
|
* @param text to return
|
|
|
|
* @return text if message exists for given field, else undefined
|
|
|
|
*/
|
|
|
|
printIfExists: <T extends string>(fieldName: string, text: T) => T | undefined;
|
|
|
|
/**
|
|
|
|
* Check if exists error message for given fields
|
|
|
|
*
|
|
|
|
* @param fields
|
|
|
|
* @return boolean
|
|
|
|
*/
|
2023-03-20 05:14:25 +01:00
|
|
|
existsError: (fieldName: string) => boolean;
|
2023-06-15 17:10:15 +02:00
|
|
|
/**
|
|
|
|
* Get message for given field.
|
|
|
|
*
|
|
|
|
* @param fieldName
|
|
|
|
* @return message text or empty string
|
|
|
|
*/
|
2023-03-20 05:14:25 +01:00
|
|
|
get: (fieldName: string) => string;
|
2023-06-15 17:10:15 +02:00
|
|
|
/**
|
|
|
|
* Check if message for given field exists
|
|
|
|
*
|
|
|
|
* @param field
|
|
|
|
* @return boolean
|
|
|
|
*/
|
2023-03-20 05:14:25 +01:00
|
|
|
exists: (fieldName: string) => boolean;
|
|
|
|
};
|
2023-03-21 05:27:31 +01:00
|
|
|
account: {
|
|
|
|
email?: string;
|
|
|
|
firstName: string;
|
|
|
|
lastName?: string;
|
|
|
|
username?: string;
|
|
|
|
};
|
2023-03-20 05:14:25 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
export type Password = Common & {
|
|
|
|
pageId: "password.ftl";
|
|
|
|
password: {
|
|
|
|
passwordSet: boolean;
|
|
|
|
};
|
2023-03-22 03:02:44 +01:00
|
|
|
stateChecker: string;
|
2023-03-20 05:14:25 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
export type Account = Common & {
|
|
|
|
pageId: "account.ftl";
|
|
|
|
url: {
|
|
|
|
accountUrl: string;
|
|
|
|
};
|
|
|
|
realm: {
|
|
|
|
registrationEmailAsUsername: boolean;
|
|
|
|
editUsernameAllowed: boolean;
|
|
|
|
};
|
|
|
|
stateChecker: string;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2023-04-27 11:52:02 +02:00
|
|
|
{
|
|
|
|
type Got = KcContext["pageId"];
|
|
|
|
type Expected = AccountThemePageId;
|
|
|
|
|
|
|
|
type OnlyInGot = Exclude<Got, Expected>;
|
|
|
|
type OnlyInExpected = Exclude<Expected, Got>;
|
|
|
|
|
|
|
|
assert<Equals<OnlyInGot, never>>();
|
|
|
|
assert<Equals<OnlyInExpected, never>>();
|
|
|
|
}
|
|
|
|
|
|
|
|
assert<KcContext["themeType"] extends ThemeType ? true : false>();
|