Skip to content

Instantly share code, notes, and snippets.

@idkjs

idkjs/Amplify.re Secret

Last active February 19, 2019 09:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save idkjs/f35688b730a8e16012766a3b8a1292bd to your computer and use it in GitHub Desktop.
Save idkjs/f35688b730a8e16012766a3b8a1292bd to your computer and use it in GitHub Desktop.
type t;
[@bs.module "aws-amplify"] external amplify: t = "default";
module Configure = {
let config = Config.ampconfig;
[@bs.send] external configure: (t, Config.c) => unit = "configure";
let configure = configure(amplify, config);
};
let configure = () => Configure.configure;
module CognitoUserSession = {
type t = {
.
"accessToken": string, /* I'm guessing these are all strings */
"idToken": idToken,
"refreshToken": token,
}
and idToken = {. "jwtToken": string}
and token = {. "token": string};
};
module Auth = {
[@bs.module "aws-amplify"] [@bs.scope "Auth"]
// external currentSession: unit => Js.Promise.t(CognitoUserSession.t) = "";
external currentSession: unit => Js.Promise.t(Js.Json.t) = "";
external currentCredentials: unit => Js.Promise.t(Js.Json.t) = "";
};
module Decode = {
let decodeJwt = json =>
Json.Decode.{"jwtToken": json |> field("jwtToken", string)};
let decodeToken = json =>
Json.Decode.{"token": json |> field("token", string)};
let decodeSession = json =>
Json.Decode.{
"idToken": json |> field("idToken", decodeJwt),
"accessToken": json |> field("accessToken", decodeJwt),
"refreshToken": json |> field("refreshToken", decodeToken),
};
};
[@genType]
let getJwtToken = () => {
PromiseMonad.(
Auth.currentSession()
>>= (
json => {
Js.log2("RESPONSE_VALUE_TOKEN_AMPLIFY", json);
let session = Decode.decodeSession(json);
let jwtToken = session##idToken##jwtToken;
// Js.log2("RESPONSE_VALUE_jwtToken_AMPLIFY", jwtToken);
return(jwtToken);
}
)
);
};
type t;
type jwtToken;
type auth = {
.
"region": string,
"url": string,
"auth" : {.
"type_": string,
"jwtToken": string,
}
};
[@bs.module "aws-appsync"] [@bs.new] external makeAWSAppSyncClient: auth => t = "AWSAppSyncClient";
external toString: 'a => string = "%identity";
let config = Config.authconfig;
let client = () => {
// Js.log(Amplify.getJwtToken);
let token = Amplify.getJwtToken()
|> Js.Promise.then_(data =>
data |> Js.log |> Js.Promise.resolve)
|> Js.Promise.catch(error =>
error |> Js.log |> Js.Promise.resolve);
let clientOptions = {
"url":config##url,
"region":config##region,
"auth": {
"type_":config##authType,
"jwtToken":toString(token)
},
};
makeAWSAppSyncClient(clientOptions);
};
// We've found a bug for you!
// /Users/prisc_000/working/CHATAPPS/chat-js-to-re/packages/aws-appsync-chat-re/src/aws/aws/Amplify.re 55:9-25
// 53 ┆ // Js.log2("RESPONSE_VALUE_jwtToken_AMPLIFY", jwtToken);
// 54 ┆
// 55 ┆ return(jwtToken);
// 56 ┆ }
// 57 ┆ )
// This has type:
// Js.Promise.t(CognitoUserSession.t) (defined as
// Js.Promise.t(CognitoUserSession.t))
// But somewhere wanted:
// CognitoUserSession.t (defined as
// {. "accessToken": string, "idToken": CognitoUserSession.idToken,
// "refreshToken": CognitoUserSession.token})
let getJwtToken = () => {
PromiseMonad.(
Auth.currentSession()
>>= (
session:CognitoUserSession.t => {
Js.log2("RESPONSE_VALUE_TOKEN_AMPLIFY", session);
// let jwtToken:CognitoUserSession.t = session##idToken##jwtToken;
let jwtToken = session##idToken##jwtToken;
// Js.log2("RESPONSE_VALUE_jwtToken_AMPLIFY", jwtToken);
return(jwtToken);
}
)
);
};
{
"idToken": {
"jwtToken": "eyJraWQiOiJ4YTMxdUlLMnpoSU1cL09XdW9VajdsUHFCZUhlRWZoYStaVXJHOUtFaW94ST0iLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiI1NTYyZGE2Zi0zNDU5LTQxZmItYmUxYy04ZjY1M2U3OGJlZjkiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaXNzIjoiaHR0cHM6XC9cL2NvZ25pdG8taWRwLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tXC9ldS13ZXN0LTFfdTdzT0o1QWxJIiwicGhvbmVfbnVtYmVyX3ZlcmlmaWVkIjpmYWxzZSwiY29nbml0bzp1c2VybmFtZSI6Imlka2pzIiwiYXVkIjoiMWNtYmE2NjJ2ZGExaWw1Nm9qaDdqcXZqNGwiLCJldmVudF9pZCI6IjgwNjVkMzhiLTMzODMtMTFlOS04NmMwLTM5ODQ3NzhjNDUyMSIsInRva2VuX3VzZSI6ImlkIiwiYXV0aF90aW1lIjoxNTUwNDk3NTUwLCJwaG9uZV9udW1iZXIiOiIrMTU1NTU1NTU1NTUiLCJleHAiOjE1NTA1NjgwODAsImlhdCI6MTU1MDU2NDQ4MCwiZW1haWwiOiJhYXJtYW5kLmluYm94QGdtYWlsLmNvbSJ9.O7ld0ssoqxOrGjAxW9a1vE62f5Pm79GbLMYgEaghVFVCuDKDPdNj3PaCAD1agZGfYr9kctqzKnXZVQl8ZIrMjwTO1UDIe5elRgz8R_Uz1AtJHxUPDu5lxzi7CWARpUCgpCuCFSU5gjEDS-bq5KHhaBX70lMwMwptrSXalubYYSTlAy8FvUkqWdne0_2x5GhqXdp8yIPWeWm0Oqw0xXOGx0CkHi8cu5PcwJSfau6Xs5Q31-UXPUd34FkB4_i0WzpyECFuCnPT0rHwztdtO1-0jNsTTkr6T73hSkzdv8x8b2keYl8ExIB6r8PnprNx8eZw-i-Q--JBvZogQxG2Vy1NTA",
"payload": {
"sub": "5562da6f-3459-41fb-be1c-8f653e78bef9",
"email_verified": true,
"iss": "https://cognito-idp.eu-west-1.amazonaws.com/eu-west-1_u7sOJ5AlI",
"phone_number_verified": false,
"cognito:username": "idkjs",
"aud": "1cmba662vda1il56ojh7jqvj4l",
"event_id": "8065d38b-3383-11e9-86c0-3984778c4521",
"token_use": "id",
"auth_time": 1550497550,
"phone_number": "+15555555555",
"exp": 1550568080,
"iat": 1550564480,
"email": "aarmand.inbox@gmail.com"
}
},
"refreshToken": {
"token": "eyJjdHkiOiJKV1QiLCJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAifQ.VirOYYYoADcsO0S1F4ER9IDK9sbw-3EFdSuolShmJ4C-lwJCfrlS6-slCC58gKjiN-GXkZBH_a9iexF_SPVYgyIY_JA4YcQkKVMDPSLFlJ_HKVBJJpmdnShpiX9L64K_kwKlSDhDoyK0gLJt5-KNxfRenn11OilyslVXOJ-fCIGOgia2e1Uss_96LXaoWAfpe0EJK8L7rvwOt3LwOtKNM-OLuf3T9BCth3sxgHZP19j8pxfaDJKe1mLD3y_5DL5uzbHt2kYhrbrLqrpxQtc87OpeeVmQ9YJndVZu4sXU6xNa48f2kkUvDeztAEGFINvtq9_sivQ3s-5dSeoYh8Kj5Q.4q9UIAuuqp7bMrYq.MirPVRzC8-Lk_Q3E3tJW4M9heBH0FF96S3NXN95MpdnfVG2sOwR2qNElYhe5AB5zQwqdlmoQCpk6H4jm3cmfQgxO7oC6OIIReLstnxkVZl07x7-8iIT9AtM_sDBoRcxZaGzjDoTec_3ZRCQq9BkbEFo8DqvXTDWaUpnOEX3KTyRKp2QXgTDGV0l4aLJHefGkPnlGam1zBQErY84jMGAs5Uigkzst0_Nw_GtwQGkVQiiifsTKMPtePkbPjTkBNWj1uutlNzDgbVzeeeM6BTrFQMRyWDOlaj9JLlHbN2B2pK4GFQ0a9e5JybwDFrE7-Zn4YnOyx5_Ppp2oWwyQkQma073AnCyP4qRqAoyr9gVPbkLq-2f4D9wwKSh5s4x5Xi8hr4SZ-bSEMrmVzlgB4zu7_GRxKZNcUgbnY3f25eolF0Tx_EE7O_ciKO5MuJs8wtZfpXNUeR1_HCTmbAnRP9ZDK7WIgPCmh99Pmp0_GZamIQPnBR5cgqoBVyIdES2nSCjAPOOLlzLLOLtiQ-Dq1kTUJe_6rCZcVc11U2uqcpAe_fivdzU8ycHedEg0SrvaJIRnv9dv3g2eXQI80UnTpeEfxNpJto5fHEvE9ZEYp9xMXOoYCy49PyjZG5RcRoWYPur8cSSQdfp1Dp2dP6l-fF4mx2cLePyStHHenPImBvQcO5AlU6flWxMmMGCva1h-ujbDnKhkjQuWnrijjT3EgE4MNzBFYH56nflFRzEpvONBEReLYO8jSTzZK_B5QReD8KFXO-KX6hmYPLVyMXjcKIho2Dm1XhforUjJeJ80y6wRvW5uK55MdV8t42_sjd1vgf8Pu2W3U8xbcknI8P_HuPcV5QuwS9RsNdaYfigL0q5RQHIUckm55685kQLfvYZLKxnAgSHyAW3zy6csbpdggmJAnF_V8aNufmVJ1YH7hAVot29dtWAYg4zPmodaXqS-GszM_vLx1Y8EK6Wvw9jXjR5zJpZAVYqYF0-m6rLu_LaGaEZKtGVDNCzYIWpfxCHYOpj5kRu9hu1QLhlobn8ieONW9-wOzLCM0Ltsx3yRmhLxmbSCkr85iEhVv_ZpNu4rMlulu_CUvuEWPypM4mY-j2Fc3UDZPEL0csC76ZzU79qhUIWqe818P_y039W4A09WlYRYgsXk93GtvoumQcdJlSw-gzQ-ulABVWbM2fKOZvcKiF9gwcL9WEYdjgzWsZX7jKInKRILDsX3yNW1k350PD4cjC1l4f7d8NCUc43AjlPoe2qhXusfS5KkmCY8wQU4ZMlX9w8.8VQ9Vv_s1za5x_FGdW4LHQ"
},
"accessToken": {
"jwtToken": "eyJraWQiOiI0cXc3QnIya0JDR0VXUk83ZDRtSXh2VlZwU3JMVkF4a1RMZ0I3Q0VYdnVvPSIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiI1NTYyZGE2Zi0zNDU5LTQxZmItYmUxYy04ZjY1M2U3OGJlZjkiLCJldmVudF9pZCI6IjgwNjVkMzhiLTMzODMtMTFlOS04NmMwLTM5ODQ3NzhjNDUyMSIsInRva2VuX3VzZSI6ImFjY2VzcyIsInNjb3BlIjoiYXdzLmNvZ25pdG8uc2lnbmluLnVzZXIuYWRtaW4iLCJhdXRoX3RpbWUiOjE1NTA0OTc1NTAsImlzcyI6Imh0dHBzOlwvXC9jb2duaXRvLWlkcC5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbVwvZXUtd2VzdC0xX3U3c09KNUFsSSIsImV4cCI6MTU1MDU2ODA4MCwiaWF0IjoxNTUwNTY0NDgwLCJqdGkiOiIzYTU2NTgwMi0wMjVjLTQ3MWYtOTU2MC1lY2I3MzhkYzg1MDQiLCJjbGllbnRfaWQiOiIxY21iYTY2MnZkYTFpbDU2b2poN2pxdmo0bCIsInVzZXJuYW1lIjoiaWRranMifQ.QWZ9XGKs_SPYZnEu5rmLWcUs3VRd2SZWurCn-U0E3A30BKJQDSLoxO4BlbH7vy_NqetA01i7WuKnc8lrcV2bybm2ThqCBfysVYlt7O6JKKu3onfmuxHzPNuZcZGrqNqiZG4yy0OOL67TL2cpOlfQ1EvkJbcJvpKjHyVYizt8SaxTpawOzAdpMXVRpJb-KAiG8NUu-Ka9caBvvZP_UY4a6YjNr-PeSOtQfbrPYgALf_1tEUoZYCFMDZbSDk3CX9VAka3Ty1UXq8PrKRGpLDD2YgKK3E04WNqITHNI8AtvNPbC7QUBaOB6pisYLLCr3m9ic3hSHmtTIjYukMoFu-uAtw",
"payload": {
"sub": "5562da6f-3459-41fb-be1c-8f653e78bef9",
"event_id": "8065d38b-3383-11e9-86c0-3984778c4521",
"token_use": "access",
"scope": "aws.cognito.signin.user.admin",
"auth_time": 1550497550,
"iss": "https://cognito-idp.eu-west-1.amazonaws.com/eu-west-1_u7sOJ5AlI",
"exp": 1550568080,
"iat": 1550564480,
"jti": "3a565802-025c-471f-9560-ecb738dc8504",
"client_id": "1cmba662vda1il56ojh7jqvj4l",
"username": "idkjs"
}
},
"clockDrift": 0
}
module AccessTokenPayload = {
type t = {
.
"sub": string,
"event_id": string,
"token_use": string,
"scope": string,
"auth_time": int,
"iss": string,
"exp": int,
"iat": int,
"jti": string,
"client_id": string,
"username": string,
};
};
module AccessToken = {
type t = {
.
"jwtToken": string,
"payload": AccessTokenPayload.t,
};
};
module IDTokenPayload = {
type t = {
.
"sub": string,
"email_verified": bool,
"iss": string,
"phone_number_verified": bool,
"cognito_username": string,
"aud": string,
"event_id": string,
"token_use": string,
"auth_time": int,
"phone_number": string,
"exp": int,
"iat": int,
"email": string,
};
};
module IDToken = {
type t = {
.
"jwtToken": string,
"payload": IDTokenPayload.t,
};
};
module RefreshToken = {
type t = {
.
"token": string,
};
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment