summaryrefslogtreecommitdiff
path: root/includes/external/matrix/node_modules/matrix-js-sdk/lib/interactive-auth.d.ts
diff options
context:
space:
mode:
Diffstat (limited to 'includes/external/matrix/node_modules/matrix-js-sdk/lib/interactive-auth.d.ts')
-rw-r--r--includes/external/matrix/node_modules/matrix-js-sdk/lib/interactive-auth.d.ts270
1 files changed, 270 insertions, 0 deletions
diff --git a/includes/external/matrix/node_modules/matrix-js-sdk/lib/interactive-auth.d.ts b/includes/external/matrix/node_modules/matrix-js-sdk/lib/interactive-auth.d.ts
new file mode 100644
index 0000000..f50594e
--- /dev/null
+++ b/includes/external/matrix/node_modules/matrix-js-sdk/lib/interactive-auth.d.ts
@@ -0,0 +1,270 @@
+import { MatrixClient } from "./client";
+export interface UIAFlow {
+ stages: AuthType[];
+}
+export interface IInputs {
+ emailAddress?: string;
+ phoneCountry?: string;
+ phoneNumber?: string;
+ registrationToken?: string;
+}
+export interface IStageStatus {
+ emailSid?: string;
+ errcode?: string;
+ error?: string;
+}
+export interface IAuthData {
+ session?: string;
+ type?: string;
+ completed?: string[];
+ flows?: UIAFlow[];
+ available_flows?: UIAFlow[];
+ stages?: string[];
+ required_stages?: AuthType[];
+ params?: Record<string, Record<string, any>>;
+ data?: Record<string, string>;
+ errcode?: string;
+ error?: string;
+ user_id?: string;
+ device_id?: string;
+ access_token?: string;
+}
+export declare enum AuthType {
+ Password = "m.login.password",
+ Recaptcha = "m.login.recaptcha",
+ Terms = "m.login.terms",
+ Email = "m.login.email.identity",
+ Msisdn = "m.login.msisdn",
+ Sso = "m.login.sso",
+ SsoUnstable = "org.matrix.login.sso",
+ Dummy = "m.login.dummy",
+ RegistrationToken = "m.login.registration_token",
+ UnstableRegistrationToken = "org.matrix.msc3231.login.registration_token"
+}
+export interface IAuthDict {
+ type?: string;
+ session?: string;
+ user?: string;
+ identifier?: any;
+ password?: string;
+ response?: string;
+ threepid_creds?: any;
+ threepidCreds?: any;
+ token?: string;
+}
+interface IOpts {
+ /**
+ * A matrix client to use for the auth process
+ */
+ matrixClient: MatrixClient;
+ /**
+ * Error response from the last request. If null, a request will be made with no auth before starting.
+ */
+ authData?: IAuthData;
+ /**
+ * Inputs provided by the user and used by different stages of the auto process.
+ * The inputs provided will affect what flow is chosen.
+ */
+ inputs?: IInputs;
+ /**
+ * If resuming an existing interactive auth session, the sessionId of that session.
+ */
+ sessionId?: string;
+ /**
+ * If resuming an existing interactive auth session, the client secret for that session
+ */
+ clientSecret?: string;
+ /**
+ * If returning from having completed m.login.email.identity auth, the sid for the email verification session.
+ */
+ emailSid?: string;
+ /**
+ * Called with the new auth dict to submit the request.
+ * Also passes a second deprecated arg which is a flag set to true if this request is a background request.
+ * The busyChanged callback should be used instead of the background flag.
+ * Should return a promise which resolves to the successful response or rejects with a MatrixError.
+ */
+ doRequest(auth: IAuthData | null, background: boolean): Promise<IAuthData>;
+ /**
+ * Called when the status of the UI auth changes,
+ * ie. when the state of an auth stage changes of when the auth flow moves to a new stage.
+ * The arguments are: the login type (eg m.login.password); and an object which is either an error or an
+ * informational object specific to the login type.
+ * If the 'errcode' key is defined, the object is an error, and has keys:
+ * errcode: string, the textual error code, eg. M_UNKNOWN
+ * error: string, human readable string describing the error
+ *
+ * The login type specific objects are as follows:
+ * m.login.email.identity:
+ * * emailSid: string, the sid of the active email auth session
+ */
+ stateUpdated(nextStage: AuthType, status: IStageStatus): void;
+ /**
+ * A function that takes the email address (string), clientSecret (string), attempt number (int) and
+ * sessionId (string) and calls the relevant requestToken function and returns the promise returned by that
+ * function.
+ * If the resulting promise rejects, the rejection will propagate through to the attemptAuth promise.
+ */
+ requestEmailToken(email: string, secret: string, attempt: number, session: string): Promise<{
+ sid: string;
+ }>;
+ /**
+ * Called whenever the interactive auth logic becomes busy submitting information provided by the user or finishes.
+ * After this has been called with true the UI should indicate that a request is in progress
+ * until it is called again with false.
+ */
+ busyChanged?(busy: boolean): void;
+ startAuthStage?(nextStage: string): Promise<void>;
+}
+/**
+ * Abstracts the logic used to drive the interactive auth process.
+ *
+ * <p>Components implementing an interactive auth flow should instantiate one of
+ * these, passing in the necessary callbacks to the constructor. They should
+ * then call attemptAuth, which will return a promise which will resolve or
+ * reject when the interactive-auth process completes.
+ *
+ * <p>Meanwhile, calls will be made to the startAuthStage and doRequest
+ * callbacks, and information gathered from the user can be submitted with
+ * submitAuthDict.
+ *
+ * @param opts - options object
+ */
+export declare class InteractiveAuth {
+ private readonly matrixClient;
+ private readonly inputs;
+ private readonly clientSecret;
+ private readonly requestCallback;
+ private readonly busyChangedCallback?;
+ private readonly stateUpdatedCallback;
+ private readonly requestEmailTokenCallback;
+ private data;
+ private emailSid?;
+ private requestingEmailToken;
+ private attemptAuthDeferred;
+ private chosenFlow;
+ private currentStage;
+ private emailAttempt;
+ private submitPromise;
+ constructor(opts: IOpts);
+ /**
+ * begin the authentication process.
+ *
+ * @returns which resolves to the response on success,
+ * or rejects with the error on failure. Rejects with NoAuthFlowFoundError if
+ * no suitable authentication flow can be found
+ */
+ attemptAuth(): Promise<IAuthData>;
+ /**
+ * Poll to check if the auth session or current stage has been
+ * completed out-of-band. If so, the attemptAuth promise will
+ * be resolved.
+ */
+ poll(): Promise<void>;
+ /**
+ * get the auth session ID
+ *
+ * @returns session id
+ */
+ getSessionId(): string | undefined;
+ /**
+ * get the client secret used for validation sessions
+ * with the identity server.
+ *
+ * @returns client secret
+ */
+ getClientSecret(): string;
+ /**
+ * get the server params for a given stage
+ *
+ * @param loginType - login type for the stage
+ * @returns any parameters from the server for this stage
+ */
+ getStageParams(loginType: string): Record<string, any> | undefined;
+ getChosenFlow(): UIAFlow | null;
+ /**
+ * submit a new auth dict and fire off the request. This will either
+ * make attemptAuth resolve/reject, or cause the startAuthStage callback
+ * to be called for a new stage.
+ *
+ * @param authData - new auth dict to send to the server. Should
+ * include a `type` property denoting the login type, as well as any
+ * other params for that stage.
+ * @param background - If true, this request failing will not result
+ * in the attemptAuth promise being rejected. This can be set to true
+ * for requests that just poll to see if auth has been completed elsewhere.
+ */
+ submitAuthDict(authData: IAuthDict, background?: boolean): Promise<void>;
+ /**
+ * Gets the sid for the email validation session
+ * Specific to m.login.email.identity
+ *
+ * @returns The sid of the email auth session
+ */
+ getEmailSid(): string | undefined;
+ /**
+ * Sets the sid for the email validation session
+ * This must be set in order to successfully poll for completion
+ * of the email validation.
+ * Specific to m.login.email.identity
+ *
+ * @param sid - The sid for the email validation session
+ */
+ setEmailSid(sid: string): void;
+ /**
+ * Requests a new email token and sets the email sid for the validation session
+ */
+ requestEmailToken: () => Promise<void>;
+ /**
+ * Fire off a request, and either resolve the promise, or call
+ * startAuthStage.
+ *
+ * @internal
+ * @param auth - new auth dict, including session id
+ * @param background - If true, this request is a background poll, so it
+ * failing will not result in the attemptAuth promise being rejected.
+ * This can be set to true for requests that just poll to see if auth has
+ * been completed elsewhere.
+ */
+ private doRequest;
+ /**
+ * Pick the next stage and call the callback
+ *
+ * @internal
+ * @throws {@link NoAuthFlowFoundError} If no suitable authentication flow can be found
+ */
+ private startNextAuthStage;
+ /**
+ * Pick the next auth stage
+ *
+ * @internal
+ * @returns login type
+ * @throws {@link NoAuthFlowFoundError} If no suitable authentication flow can be found
+ */
+ private chooseStage;
+ /**
+ * Pick one of the flows from the returned list
+ * If a flow using all of the inputs is found, it will
+ * be returned, otherwise, null will be returned.
+ *
+ * Only flows using all given inputs are chosen because it
+ * is likely to be surprising if the user provides a
+ * credential and it is not used. For example, for registration,
+ * this could result in the email not being used which would leave
+ * the account with no means to reset a password.
+ *
+ * @internal
+ * @returns flow
+ * @throws {@link NoAuthFlowFoundError} If no suitable authentication flow can be found
+ */
+ private chooseFlow;
+ /**
+ * Get the first uncompleted stage in the given flow
+ *
+ * @internal
+ * @returns login type
+ */
+ private firstUncompletedStage;
+}
+export {};
+//# sourceMappingURL=interactive-auth.d.ts.map \ No newline at end of file