A Bucklescript implementation of various Google REST APIs.
Very incomplete, unstable API. The published version may lag behind the GitHub repo – feel free to file a bug if this is the case.
npm i @ryb73/bs-google-apis
More info:
https://developers.google.com/identity/protocols/OAuth2UserAgent https://developers.google.com/identity/protocols/OpenIDConnect
Builds a URL to which you can redirect the user to begin the client-side OAuth2 flow.
let getAuthUrl:
(~state: string=?, ~accessType: accessType=?, ~prompt: prompt=?, string,
Js.Array.t(scope), string, responseType) => string;
GoogleApis.Auth.getAuthUrl(
~state="<STATE>", clientId, [| YouTube |],
"https://my.app/", Code);
/* https://accounts.google.com/o/oauth2/v2/auth?client_id=<CLIENT_ID>&redirect_uri=https%3A%2F%2Fmy.app%2F&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube&response_type=code&state=<STATE> */
958: <UNKNOWN SYNTAX ERROR>
Retrieves access and refresh tokens given an OAuth2 code.
type tokens = {
access_token: string,
refresh_token: option(string),
expires_in: int,
};
let getTokensFromCode:
(~accessType: accessType=?, string, string, string, string) =>
Js.Promise.t(tokens);
GoogleApis.Auth.getTokensFromCode("<client id>", "<client secret>", code, "https://my.app/");
958: <UNKNOWN SYNTAX ERROR>
Retrieve access and refresh tokens for a service account.
let getTokensForServiceAccount:
(Js.Array.t(scope), string, string) => Js.Promise.t(tokens);
GoogleApis.Auth.getTokensForServiceAccount([| Profile |], "me@my.app", "<private key>");
958: <UNKNOWN SYNTAX ERROR>
let refreshAccessToken:
(string, string, string) => Js.Promise.t(tokens);
GoogleApis.Auth.refreshAccessToken(clientId, secret, refreshToken);
958: <UNKNOWN SYNTAX ERROR>
More info: https://developers.google.com/people/api/rest/v1/people
type name = { displayName: string, };
type t = {
resourceName: string,
etag: string,
names: option(array(name)),
};
let getMe: (string, Js.Array.t(field)) => Js.Promise.t(t);
GoogleApis.People.getMe(accessToken, [| Names |]);
958: <UNKNOWN SYNTAX ERROR>
More info: https://developers.google.com/youtube/v3/docs/
In this section you can assume open GoogleApis.YouTube
is included.
Represents the parts of the resource that are being requested. The parts are typed such that the type of the response you get from an API call will match the parts
that you pass in.
let parts = PlaylistItems.(parts |> withSnippet);
PlaylistItems.listByPlaylistId(~parts, ~playlistId, accessToken);
/*
{
...,
items: [|
...,
{
id: "playlistitem123",
contentDetails: (), /* `contentDetails` is typed as unit because `withContentDetails` was omitted */
snippet: { /* while `snippet` is typed with the actual response data */
channelId: string,
channelTitle: string,
title: string,
description: string,
playlistId: string,
position: int,
}
}
|]
}
*/
let parts = let open PlaylistItems in parts |> withSnippet
let _ = PlaylistItems.listByPlaylistId ~parts ~playlistId accessToken
type pageInfo = {
resultsPerPage: int,
totalResults: int,
};
type result('item) = {
items: array('item),
nextPageToken: option(string),
prevPageToken: option(string),
pageInfo: pageInfo,
};
type pageInfo = {
resultsPerPage: int;
totalResults: int;}
type 'item result =
{
items: 'item array;
nextPageToken: string option;
prevPageToken: string option;
pageInfo: pageInfo;}
let listByPlaylistId:
(~maxResults: int=?, ~pageToken: string=?,
~parts: parts('a, 'b), ~playlistId: string, string)
=> Js.Promise.t(List.result('a, 'b));
/* (see `parts` section above for example usage) */
958: <UNKNOWN SYNTAX ERROR>
let listById:
(~maxResults: int=?, ~parts: parts('a, 'b), ~ids: Js.Array.t(id),
string) => Js.Promise.t(List.result('a, 'b));
Playlists.listById(~parts, ~ids=[|"<playlist ID>"|], accessToken);
958: <UNKNOWN SYNTAX ERROR>
List the authenticated user's playlists.
let listMine:
(~maxResults: int=?, ~pageToken: string=?, ~parts: parts('a, 'b), string) =>
Js.Promise.t(List.result('a, 'b));
Playlists.listMine(~parts, accessToken);
958: <UNKNOWN SYNTAX ERROR>
let list:
(~maxResults: int=?, ~pageToken: string=?, ~query: string, string) =>
Js.Promise.t(List.result);
Search.list(~query, accessToken);
958: <UNKNOWN SYNTAX ERROR>
let listById:
(~maxResults: int=?, ~pageToken: string=?, ~parts: parts('a, 'b),
~ids: Js.Array.t(id), string) => Js.Promise.t(List.result('a, 'b));
Videos.listById(~parts, ~ids=[|"<video ID>"|], accessToken);
958: <UNKNOWN SYNTAX ERROR>