UNPKG

fm-odata-client

Version:

FileMaker OData client developed by Soliant Consulting

1 lines 6.95 kB
{"version":3,"sources":["../src/ClarisId.ts"],"sourcesContent":["import type { CognitoUserSession } from \"amazon-cognito-identity-js\";\nimport { AuthenticationDetails, CognitoUser, CognitoUserPool } from \"amazon-cognito-identity-js\";\nimport type { Authentication } from \"./Connection.js\";\n\nclass ClarisId implements Authentication {\n private readonly username: string;\n private readonly password: string;\n private authenticationDetails: AuthenticationDetails | undefined;\n private userPool: CognitoUserPool | null = null;\n private cognitoUser: CognitoUser | null = null;\n private userSession: CognitoUserSession | null = null;\n private idTokenPromise: Promise<string> | null = null;\n\n public constructor(username: string, password: string) {\n this.username = username;\n this.password = password;\n }\n\n public async getAuthorizationHeader(): Promise<string> {\n if (this.idTokenPromise) {\n return `FMID ${await this.idTokenPromise}`;\n }\n\n this.idTokenPromise = this.getIdToken();\n const idToken = await this.idTokenPromise;\n this.idTokenPromise = null;\n\n return `FMID ${idToken}`;\n }\n\n private getAuthenticationDetails(): AuthenticationDetails {\n if (!this.authenticationDetails) {\n this.authenticationDetails = new AuthenticationDetails({\n Username: this.username,\n Password: this.password,\n });\n }\n\n return this.authenticationDetails;\n }\n\n private async getIdToken(): Promise<string> {\n if (this.userSession) {\n return this.getStoredIdToken(this.userSession);\n }\n\n const userSession = await this.retrieveNewSession();\n return userSession.getIdToken().getJwtToken();\n }\n\n private async getStoredIdToken(userSession: CognitoUserSession): Promise<string> {\n const currentUserSession: CognitoUserSession = !userSession.isValid()\n ? await this.refreshSession(userSession)\n : userSession;\n\n return currentUserSession.getIdToken().getJwtToken();\n }\n\n private async refreshSession(userSession: CognitoUserSession): Promise<CognitoUserSession> {\n const cognitoUser = await this.getCognitoUser();\n this.userSession = await new Promise<CognitoUserSession>((resolve, reject) => {\n cognitoUser.refreshSession(userSession.getRefreshToken(), async (error, session) => {\n if (error) {\n // Refresh token might have been expired (unlikely, but could happen).\n try {\n resolve(await this.retrieveNewSession());\n return;\n } catch (e) {\n reject(e);\n }\n }\n\n resolve(session as CognitoUserSession);\n });\n });\n\n return this.userSession;\n }\n\n private async retrieveNewSession(): Promise<CognitoUserSession> {\n const cognitoUser = await this.getCognitoUser();\n const authenticationDetails = this.getAuthenticationDetails();\n this.userSession = await new Promise<CognitoUserSession>((resolve, reject) => {\n cognitoUser.authenticateUser(authenticationDetails, {\n onSuccess: (result) => {\n resolve(result);\n },\n onFailure: (error) => {\n reject(error);\n },\n });\n });\n\n return this.userSession;\n }\n\n private async getCognitoUser(): Promise<CognitoUser> {\n if (this.cognitoUser) {\n return this.cognitoUser;\n }\n\n this.cognitoUser = new CognitoUser({\n Username: this.getAuthenticationDetails().getUsername(),\n Pool: await this.getUserPool(),\n });\n\n return this.cognitoUser;\n }\n\n private async getUserPool(): Promise<CognitoUserPool> {\n if (this.userPool) {\n return this.userPool;\n }\n\n const response = await fetch(\n \"https://www.ifmcloud.com/endpoint/userpool/2.2.0.my.claris.com.json\",\n );\n\n if (!response.ok) {\n throw new Error(\"Could not fetch user pool config\");\n }\n\n const config = (await response.json()) as {\n data: {\n UserPool_ID: string;\n Client_ID: string;\n };\n };\n\n this.userPool = new CognitoUserPool({\n UserPoolId: config.data.UserPool_ID,\n ClientId: config.data.Client_ID,\n });\n\n return this.userPool;\n }\n}\n\nexport default ClarisId;\n"],"mappings":"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","names":[]}