UNPKG

steemconnect-firebase-functions

Version:

A TypeScript library that can help you build applications with SteemConnect and Firebase.

1,022 lines (703 loc) 23.1 kB
## What is this module for? This module stores these tools that didn't fit other modules or are used by multiple modules. You'll find here two **utility functions**, a bunch of **helper functions**, **error constants**, and a lot of **interfaces** (+ one **type**). ## API reference ### Utilities #### pipe ##### Definition Generic function used to compose functions. ##### Implementation ```typescript export const pipe = <T>(...fns: Array<Function>) => (x: T) => fns.reduce((v, f) => f(v), x); ``` ##### Example Usage ```typescript export const createBroadcastableVote = pipe<VoteConfig>( createVote, Array.of, broadcastOperations ); ``` ###### References * [`VoteConfig`](#voteconfig) * [`createVote`](operation=creators.md#createvote) * [`broadcastOperations`](broadcasting.md#broadcastoperations) --- #### combine ##### Definition Generic function used to combine multiple operation creators into one with a single configuration object. ##### Implementation ```typescript export const combine = <T, U>(...fns: Array<Function>) => ( ...args: Array<T> ): Array<U> => fns.reduce( (arr, f) => { arr.push(f(...args)); return arr; }, [] as Array<U> ); ``` ##### Example Usage ```typescript export const combineCommentWithOptions = combine< CommentConfig & CommentOptionsConfig, Operation >(createComment, createCommentOptions); ``` ###### References * [`CommentConfig`](#commentconfig) * [`CommentOptionsConfig`](#commentoptionsconfig) * [`Operation`](#operation) * [`createComment`](operation-creators.md#createcomment) * [`createCommentOptions`](operation-creators.md#createcommentoptions) --- ### Functions #### combineCommentWithOptions ```typescript export declare const combineCommentWithOptions: ( configuration: CommentConfig & CommentOptionsConfig ) => Operation[]; ``` ##### Definition Combines `createComment` with `createCommentOptions`, so you can create these two operations with a single configuration object. ##### Parameters * `configuration` ([`CommentConfig`](#commentconfig) & [`CommentOptionsConfig`](#commentoptionsconfig)): combined configuration object ##### Returns * [`Operations`](#operations): two operations - `comment` and `comment_options` - in an array ##### Example Usage ```typescript import { combineCommentWithOptions } from 'steemconnect-firebase-functions'; const combinedCommentWithOptions = combineCommentWithOptions({ parent_permlink: 'i-am-ned', author: 'jakipatryk', permlink: 'hello-ned-sup', body: 'Hello Ned! Whats up?', parent_author: 'ned', title: '', extensions: [ [ 0, { beneficiaries: [ { account: 'strimi', weight: 1000 } ] } ] ] }); // [ // [ // 'comment', { // parent_permlink: 'i-am-ned', // author: 'jakipatryk', // permlink: 'hello-ned-sup', // body: 'Hello Ned! Whats up?', // parent_author: 'ned', // title: '', // json_metadata: '' // } // ], // [ // 'comment_options', { // author: 'jakipatryk', // permlink: 'hello-ned-sup', // max_accepted_payout: '1000000.000 SBD', // percent_steem_dollars: 10000, // allow_votes: true, // allow_curation_rewards: true, // extensions: [ // [ // 0, // { // beneficiaries: [ // { // account: 'strimi', // weight: 1000 // } // ] // } // ] // ] // ] // ] ``` --- #### createBroadcastableVote ```typescript export declare const createBroadcastableVote: ( voteConfig: VoteConfig ) => Function; ``` ##### Definition Creates [_broadcastable_](getting-started.md#broadcastable) for a `vote` operation. ##### Parameters * `voteConfig` ([`VoteConfig`](#voteconfig)): the configuration object for a vote ##### Returns * [`broadcastable`](getting-started.md#broadcastable): the broadcastable function for a `vote` operation ##### Example Usage ```typescript import { createBroadcastableVote } from 'steemconnect-firebase-functions'; const broadcastableVote = createBroadcastableVote({ voter: 'jakipatryk', author: 'ned', permlink: 'i-am-ned', weight: 10000 }); ``` ##### Implementation The implementation is available on [Github](https://github.com/jakipatryk/steemconnect-firebase-functions/blob/master/src/shared/helpers/createBroadcastable.ts). --- #### createBroadcastableComment ```typescript export declare const createBroadcastableComment: ( commentConfig: CommentConfig ) => Function; ``` ##### Definition Creates [_broadcastable_](getting-started.md#broadcastable) for a `comment` operation. ##### Parameters * `commentConfig` ([`CommentConfig`](#commentconfig)): the configuration object for a comment ##### Returns * [`broadcastable`](getting-started.md#broadcastable): the broadcastable function for a `comment` operation ##### Example Usage ```typescript import { createBroadcastableComment } from 'steemconnect-firebase-functions'; const broadcastableComment = createBroadcastableComment({ parent_author: 'ned', parent_permlink: 'i-am-ned', author: 'jakipatryk', permlink: 'i-am-jakipatryk-from-polska', body: 'Hello! Whats up Ned?' }); ``` ##### Implementation The implementation is available on [Github](https://github.com/jakipatryk/steemconnect-firebase-functions/blob/master/src/shared/helpers/createBroadcastable.ts). --- #### createBroadcastableCommentOptions ```typescript export declare const createBroadcastableCommentOptions: ( commentOptionsConfig: CommentOptionsConfig ) => Function; ``` ##### Definition Creates [_broadcastable_](getting-started.md#broadcastable) for a `comment_options` operation. ##### Parameters * `commentOptionsConfig` ([`CommentOptionsConfig`](#commentoptionsconfig)): the configuration object for a comment options ##### Returns * [`broadcastable`](getting-started.md#broadcastable): the broadcastable function for a `comment_options` operation ##### Example Usage ```typescript import { createBroadcastableCommentOptions } from 'steemconnect-firebase-functions'; const broadcastableCommentOptions = createBroadcastableCommentOptions({ author: 'jakipatryk', permlink: 'i-am-jakipatryk-from-polska', percent_steem_dollars: 0 }); ``` ##### Implementation The implementation is available on [Github](https://github.com/jakipatryk/steemconnect-firebase-functions/blob/master/src/shared/helpers/createBroadcastable.ts). --- #### createBroadcastableCustomJson ```typescript export declare const createBroadcastableCustomJson: ( customJsonConfig: CustomJsonConfig ) => Function; ``` ##### Definition Creates [_broadcastable_](getting-started.md#broadcastable) for a `custom_json` operation. ##### Parameters * `customJsonConfig` ([`CustomJsonConfig`](#customjsonconfig)): the configuration object for a custom json ##### Returns * [`broadcastable`](getting-started.md#broadcastable): the broadcastable function for a `custom_json` operation ##### Example Usage ```typescript import { createBroadcastableCustomJson } from 'steemconnect-firebase-functions'; const broadcastableCustomJson = createBroadcastableCustomJson({ required_posting_auths: ['jakipatryk'], id: 'follow', json: JSON.stringify([ 'reblog', { account: 'jakipatryk', author: 'ned', permlink: 'i-am-ned' } ]) }); ``` ##### Implementation The implementation is available on [Github](https://github.com/jakipatryk/steemconnect-firebase-functions/blob/master/src/shared/helpers/createBroadcastable.ts). --- #### checkOAuth2Error ```typescript export declare const checkOAuth2Error: ( { error, error_description }: OAuth2Error, errorToCheckAgainst: OAuth2Error ) => boolean; ``` ##### Definition Checks if provided error object is equal the error object to check against. ##### Parameters * `actualError` ([`OAuth2Error`](#oauth2error)): the error object to be checked - `errorToCheckAgainst` ([`OAuth2Error`](#oauth2error)): the error object to check `actualError` against ##### Returns * `boolean`: true if errors are equal, false otherwise ##### Example Usage ```typescript import { checkOAuth2Error, AccessTokenResponse, ACCESS_TOKEN_EXPIRED, broadcastUpvote, Vote } from 'steemconnect-firebase-functions'; const accessToken: AccessTokenResponse = { access_token: 'smtnjknfjfnsk342.sddvdskgs', expires_in: 640000 username: 'jakipatryk' } const upvote: Vote = { author: 'ned', permlink: 'i-am-ned' weight: 2000 } broadcastUpvote(upvote)(accessToken) .then(response => console.log(response)) .catch(err => checkOAuth2Error(err, ACCESS_TOKEN_EXPIRED) ? console.error('Your access token has expired, please get a new one!') : console.log('Oups, something went wrong')); ``` ##### Implementation The implementation is available on [Github](https://github.com/jakipatryk/steemconnect-firebase-functions/blob/master/src/shared/errors/checkOAuth2Error.ts). --- #### isAccessTokenExpiredError ```typescript export declare const isAccessTokenExpiredError: ( { error, error_description }: OAuth2Error ) => boolean; ``` ##### Definition Checks if provided error object is equal to the error caused by expired access token. ##### Parameters * `error` ([`OAuth2Error`](#oauth2error)): the error object to be checked ##### Returns * `boolean`: true if errors is equal to error caused by expired access token, false otherwise ##### Example Usage ```typescript import { isAccessTokenExpiredError, AccessTokenResponse, broadcastUpvote, Vote } from 'steemconnect-firebase-functions'; const accessToken: AccessTokenResponse = { access_token: 'smtnjknfjfnsk342.sddvdskgs', expires_in: 640000 username: 'jakipatryk' } const upvote: Vote = { author: 'ned', permlink: 'i-am-ned' weight: 2000 } broadcastUpvote(upvote)(accessToken) .then(response => console.log(response)) .catch(err => isAccessTokenExpiredError(err) ? console.error('Your access token has expired, please get a new one!') : console.log('Oups, something went wrong')); ``` ##### Implementation The implementation is available on [Github](https://github.com/jakipatryk/steemconnect-firebase-functions/blob/master/src/shared/errors/isAccessTokenExpiredError.ts). --- #### isAccessTokenInvalidError ```typescript export declare const isAccessTokenInvalidError: ( { error, error_description }: OAuth2Error ) => boolean; ``` ##### Definition Checks if provided error object is equal to the error caused by invalid access token. ##### Parameters * `error` ([`OAuth2Error`](#oauth2error)): the error object to be checked ##### Returns * `boolean`: true if errors is equal to error caused by invalid access token, false otherwise ##### Example Usage ```typescript import { isAccessTokenInvalidError, AccessTokenResponse, broadcastUpvote, Vote } from 'steemconnect-firebase-functions'; const accessToken: AccessTokenResponse = { access_token: 'smtnjknfjfnsk342.sddvdskgs', expires_in: 640000 username: 'jakipatryk' } const upvote: Vote = { author: 'ned', permlink: 'i-am-ned' weight: 2000 } broadcastUpvote(upvote)(accessToken) .then(response => console.log(response)) .catch(err => isAccessTokenInvalidError(err) ? console.error('Your access token is invalid!') : console.log('Oups, something went wrong')); ``` ##### Implementation The implementation is available on [Github](https://github.com/jakipatryk/steemconnect-firebase-functions/blob/master/src/shared/errors/isAccessTokenInvalidError.ts). --- #### isAccessTokenRevokedError ```typescript export declare const isAccessTokenRevokedError: ( { error, error_description }: OAuth2Error ) => boolean; ``` ##### Definition Checks if provided error object is equal to the error caused by revoked access token. ##### Parameters * `error` ([`OAuth2Error`](#oauth2error)): the error object to be checked ##### Returns * `boolean`: true if errors is equal to error caused by revoked access token, false otherwise ##### Example Usage ```typescript import { isAccessTokenRevokedError, AccessTokenResponse, broadcastUpvote, Vote } from 'steemconnect-firebase-functions'; const accessToken: AccessTokenResponse = { access_token: 'smtnjknfjfnsk342.sddvdskgs', expires_in: 640000 username: 'jakipatryk' } const upvote: Vote = { author: 'ned', permlink: 'i-am-ned' weight: 2000 } broadcastUpvote(upvote)(accessToken) .then(response => console.log(response)) .catch(err => isAccessTokenRevokedError(err) ? console.error('Your access token has been revoked, please get a new one!') : console.log('Oups, something went wrong')); ``` ##### Implementation The implementation is available on [Github](https://github.com/jakipatryk/steemconnect-firebase-functions/blob/master/src/shared/errors/isAccessTokenRevokedError.ts). --- #### isAccessTokenError ```typescript export declare const isAccessTokenError: ( { error, error_description }: OAuth2Error ) => boolean; ``` ##### Definition Checks if provided error object is equal to any of errors caused by access token. ##### Parameters * `error` ([`OAuth2Error`](#oauth2error)): the error object to be checked ##### Returns * `boolean`: true if errors is equal to error caused by access token, false otherwise ##### Example Usage ```typescript import { isAccessTokenError, AccessTokenResponse, broadcastUpvote, Vote } from 'steemconnect-firebase-functions'; const accessToken: AccessTokenResponse = { access_token: 'smtnjknfjfnsk342.sddvdskgs', expires_in: 640000 username: 'jakipatryk' } const upvote: Vote = { author: 'ned', permlink: 'i-am-ned' weight: 2000 } broadcastUpvote(upvote)(accessToken) .then(response => console.log(response)) .catch( err => isAccessTokenError(err) ? console.error('Something is wrong with your access token, please get a new one!') : console.error('Oups, something went wrong') ); ``` ##### Implementation The implementation is available on [Github](https://github.com/jakipatryk/steemconnect-firebase-functions/blob/master/src/shared/errors/isAccessTokenError.ts). --- #### isRefreshTokenError ```typescript export declare const isRefreshTokenError: ( { error, error_description }: OAuth2Error ) => boolean; ``` ##### Definition Checks if provided error object is caused by refresh token. ##### Parameters * `error` ([`OAuth2Error`](#oauth2error)): the error object to be checked ##### Returns * `boolean`: true if errors is equal to error caused by refresh token, false otherwise ##### Example Usage ```typescript import { isRefreshTokenError, refreshAccessToken, ClientCredentials } from 'steemconnect-firebase-functions'; const clientCredentials: ClientCredentials = { clientId: 'strimi.app', clientSecret: '4324mknknrk3nkjnkvfgd.434nrjk53' }; const refreshToken: string = 'smtfhdbgsnjr3nr34.34n5nk3'; refreshAccessToken({ ...clientCredentials, refreshToken }) .then(newTokens => console.log(newTokens)) .catch( err => isRefreshTokenError(err) ? console.error('Your refresh token is wrong!') : console.error('Oups, someting went wrong') ); ``` ##### Implementation The implementation is available on [Github](https://github.com/jakipatryk/steemconnect-firebase-functions/blob/master/src/shared/errors/isRefreshTokenError.ts). --- #### isCodeError ```typescript export declare const isCodeError: ( { error, error_description }: OAuth2Error ) => boolean; ``` ##### Definition Checks if provided error object is caused by wrong code. ##### Parameters * `error` ([`OAuth2Error`](#oauth2error)): the error object to be checked ##### Returns * `boolean`: true if errors is equal to error caused by code, false otherwise ##### Example Usage ```typescript import { isCodeError, getAccessToken, ClientCredentials } from 'steemconnect-firebase-functions'; const clientCredentials: ClientCredentials = { clientId: 'strimi.app', clientSecret: '4324mknknrk3nkjnkvfgd.434nrjk53' }; const redirectUri: string = 'https://strimi.pl/redirect'; const code: string = 'msdofwef.34jkfnmsdkjfnsdkfksd'; getAccessToken({ ...clientCredentials, redirectUri, code }) .then(tokens => console.log(tokens)) .catch( err => isCodeError(err) ? console.error('Your code is wrong!') : console.error('Oups, someting went wrong') ); ``` ##### Implementation The implementation is available on [Github](https://github.com/jakipatryk/steemconnect-firebase-functions/blob/master/src/shared/errors/isCodeError.ts). --- #### createBroadcastableDeleteComment ```typescript export declare const createBroadcastableDeleteComment: ( deleteCommentConfig: DeleteCommentConfig ) => Function; ``` ##### Definition Creates [_broadcastable_](getting-started.md#broadcastable) for a `delete_comment` operation. ##### Parameters * `deleteCommentConfig` ([`DeleteCommentConfig`](#deletecommentconfig)): the configuration object for a comment deletion ##### Returns * [`broadcastable`](getting-started.md#broadcastable): the broadcastable function for a `delete_comment` operation ##### Example Usage ```typescript import { createBroadcastableDeleteComment } from 'steemconnect-firebase-functions'; const broadcastableDeleteComment = createBroadcastableDeleteComment({ author: 'jakipatryk', permlink: 'i-am-jakipatryk' }); ``` ##### Implementation The implementation is available on [Github](https://github.com/jakipatryk/steemconnect-firebase-functions/blob/master/src/shared/helpers/createBroadcastable.ts). --- ### Interfaces and Types #### AccessTokenResponse ##### Definition Defines an object containing OAuth2 tokens details. ##### Implementation ```typescript export interface AccessTokenResponse { access_token: string; expires_in: number; username: string; refresh_token?: string; } ``` --- #### CommentConfig ##### Definition Defines a configuration object for `comment` operation. ###### Implementation ```typescript export interface CommentConfig { parent_permlink: string; author: string; permlink: string; body: string; parent_author?: string; title?: string; json_metadata?: string; } ``` --- #### CommentOptionsConfig ##### Definition Defines a configuration object for `comment_options` operation. ###### Implementation ```typescript export interface CommentOptionsConfig { author: string; permlink: string; extensions?: Array<any>; max_accepted_payout?: string; percent_steem_dollars?: number; allow_votes?: boolean; allow_curation_rewards?: boolean; } ``` --- #### CustomJsonConfig ##### Definition Defines a configuration object for `custom_json` operation. ###### Implementation ```typescript export interface CustomJsonConfig { required_posting_auths: Array<string>; id: string; json: string; required_auths?: Array<string>; } ``` --- #### DeleteCommentConfig ##### Definition Defines a configuration object for `delete_comment` operation. ###### Implementation ```typescript export interface DeleteCommentConfig { author: string; permlink: string; } ``` --- #### VoteConfig ##### Definition Defines a configuration object for `vote` operation. ###### Implementation ```typescript export interface VoteConfig { voter: string; author: string; permlink: string; weight: number; } ``` --- #### UserData ##### Definition Defines an object containing user data from SteemConnect. ##### Implementation ```typescript export interface UserData { user: string; _id: string; name: string; account: object; scope: Array<string>; user_metadata: object; } ``` --- #### OAuth2Error ##### Definition Defines an OAuth2 error object. ##### Implementation ```typescript export interface OAuth2Error { error: string; error_description: string; } ``` --- #### Operation ##### Defniniton Defines an operation object (array). ##### Implementation ```typescript export interface Operation extends Array<string | object> { // type of operation 0: string; // operation details 1: object; } ``` #### Operations ##### Definition A type which defines an array of operations. ##### Implementation ```typescript export type Operations = Array<Operation>; ``` ##### References * [`Operation`](#operation) --- ### Constants #### ACCESS_TOKEN_EXPIRED ##### Definition Error message caused by expired `access_token`. ##### Implementation ```typescript export const ACCESS_TOKEN_EXPIRED: OAuth2Error = Object.freeze({ error: 'invalid_grant', error_description: 'The token has invalid role' }); ``` ##### References * [`OAuth2Error`](#oauth2error) --- #### ACCESS_TOKEN_INVALID ##### Definition Error message caused by invalid `access_token`. ##### Implementation ```typescript export const ACCESS_TOKEN_INVALID: OAuth2Error = Object.freeze({ error: 'invalid_grant', error_description: 'The token has invalid role' }); ``` ##### References * [`OAuth2Error`](#oauth2error) --- #### ACCESS_TOKEN_REVOKED ##### Definition Error message caused by revoked `access_token`. ##### Implementation ```typescript export const ACCESS_TOKEN_REVOKED: OAuth2Error = Object.freeze({ error: 'invalid_grant', error_description: 'The access_token has been revoked' }); ``` ##### References * [`OAuth2Error`](#oauth2error) --- #### CODE_INVALID ##### Definition Error message caused by invalid `code`. ##### Implementation ```typescript export const CODE_INVALID: OAuth2Error = Object.freeze({ error: 'invalid_grant', error_description: 'The token has invalid role' }); ``` ##### References * [`OAuth2Error`](#oauth2error) --- #### REFRESH_TOKEN_INVALID ##### Definition Error message caused by invalid `refresh_token`. ##### Implementation ```typescript export const REFRESH_TOKEN_INVALID: OAuth2Error = Object.freeze({ error: 'invalid_grant', error_description: 'The token has invalid role' }); ``` ##### References * [`OAuth2Error`](#oauth2error) ---