create account

Reliable broadcasting? steemconnect-firebase-functions v2.0 is here! by jakipatryk

View this thread on: hive.blogpeakd.comecency.com
· @jakipatryk · (edited)
$282.58
Reliable broadcasting? steemconnect-firebase-functions v2.0 is here!
**I'm happy to finally introduce version 2.0 of *steemconnect-firebase-funtions*, which brings the library to a next level. I hope that changes described in this contribution and in my [previous one](https://utopian.io/utopian-io/@jakipatryk/road-to-steemconnect-firebase-functions-2-0-0-what-has-been-done-so-far) will make development of apps built with Firebase and SteemConnect easier.**

![](https://cdn.utopian.io/posts/09b3235d4c2aa51887ac16db167951b4112aimage.png)

### Quick recap

**steemconnect-firebase-functions** is a TypeScript library that can help you build applications with SteemConnect and Firebase. The library makes it easy to:

- **implement** OAuth2 Authorization Code Grant
- **broadcast** operations to the Steem blockchain
- **check** OAuth2 error types
- **mint** Firebase Custom Tokens
- **create** Firebase Auth accounts for your users with additional data
- **store** tokens in the Firebase Cloud Firestore

#### Links:

- Github: https://github.com/jakipatryk/steemconnect-firebase-functions
- SteemProjects: https://steemprojects.com/projects/p/steemconnect-firebase-functions/
- NPM: https://www.npmjs.com/package/steemconnect-firebase-functions

### New documentation

For version 2.0, I've made new documentation. The new one is available [here](https://jakipatryk.github.io/steemconnect-firebase-functions/).

More on that in my next contribution.

### New features

#### `rely` for reliable broadcasting

Most of the changes in my previous contribution were made to make the function `rely` possible to be built. For that, I introduced a few concepts. But what does `rely` do anyway?

SteemConnect's `access_token` **expires** 7 days after issuing. If your app didn't use server-side authentication, your user would have to refresh the access token himself by logging into SteemConnect once again.

But it is not the case when you use OAuth2 authorization code grant with `offline` scope. During this OAuth2 flow you get, along with `access_token`, another token called `refresh_token`, which doesn't expire and lets you refresh the access token.

##### How should the `refresh_token` be used? 

In my opinion, if a request to the SteemConnect service fails cause of expired `access_token`, the `refresh_token` should be used to get a new `access_token` and the request should be repeated.

The `rely` function does exactly that .

First of all, it wrapps a [**broadcastable**](https://jakipatryk.github.io/steemconnect-firebase-functions/getting-started/#broadcastable) function, client credentials, and a `AccessTokenResponse` object (with properties: `access_token`, `refresh_token`, `username`, `expires_in`).

Next, it tries to broadcast the [**broadcastable**](https://jakipatryk.github.io/steemconnect-firebase-functions/getting-started/#broadcastable) with provided `access_token`.

If the request is successful, it simply returns the result of broadcast. If it's not, it checks if the error is caused by expired `access_token` and if so, it refreshes it using provided `refresh_token`.

The request is being sent once again, this time with new `access_token`, and if successful, the `rely` function returns the result of broadcast along with new tokens.

##### Example usage

```typescript
import {
  rely,
  broadcastUpvote,
  Vote,
  AccessTokenResponse,
  ClientCredentials
} from 'steemconnect-firebase-functions';

const clientCredentials: ClientCredentials = {
  clientId: 'strimi.app',
  clientSecret: '432rnj3nr23nkvfdvdf'
};
const accessToken: AccessTokenResponse = {
  access_token: 'fdsfertre',
  expires_in: 4323432,
  username: 'jakipatryk',
  refresh_token: '3rk3m2krl3'
};
const voteOptions: Vote = {
  author: 'ned',
  permlink: 'i-am-ned',
  weight: 10000
};

const broadcastableUpvote = broadcastUpvote(voteOptions);

rely(clientCredentials)(accessToken)(broadcastableUpvote).then(response =>
  console.log(response)
);
//  {
//    result: { ... }
//    access_token: 'new access token if refreshed, otherwise undefined`
//    refresh_token: 'new refresh token if refreshed, otherwise undefined'
//    username: ...
//    expires: ...
//  }
```

For more, check the [documentation](https://jakipatryk.github.io/steemconnect-firebase-functions/broadcasting/#rely) and [implementation](https://github.com/jakipatryk/steemconnect-firebase-functions/blob/master/src/broadcasting/rely.ts).

#### Autocompleting author of operation

I changed the behavior of functions from *broadcasting* module.

As they require the entire `AccessTokenResponse` object as a parameter, so I decided to always autocomplete the author of operation with `username` property of `AccessTokenResponse`.

##### Example

```typescript
import {
  broadcastFollow,
  Follow,
  AccessTokenResponse
} from 'steemconnect-firebase-functions';

const followConfig: Follow = {
  userToFollow: 'jakipatryk'
};
const accessToken: AccessTokenResponse = {
  access_token: 'kj3n4jn2342.432p4k2p',
  expires_in: 640000,
  username: 'ned'
};

broadcastFollow(followConfig)(accessToken).then(response =>
  console.log(response)
);
//  {
//    result: { ... }
//  }
```

#### `AccessTokenResponse` everywhere

I decided to require the entire `AccessTokenResponse` object for every function which needs either `access_token` or any other properties.

I think it limits confusion, before this change, `accessToken` sometimes referred to the `access_token` string, sometimes to the object `AccessTokenResponse`.

#### `Scope` type

For better developer experience, I've added a `Scope` type:

```typescript
export type Scope =
  | 'login'
  | 'offline'
  | 'vote'
  | 'comment'
  | 'comment_options'
  | 'custom_json'
  | 'delete_comment'
  | 'claim_reward_balance';
```

#### `delete_comment` operation

Last but not least new feature in 2.0 is a support for `delete_comment` operation, which allows to delete a comment or post.

I've added the operation creator [`createDeleteComment`](https://jakipatryk.github.io/steemconnect-firebase-functions/operation-creators/#createdeletecomment), the broadcastable creator [`createBroadcastableDeleteComment`](https://jakipatryk.github.io/steemconnect-firebase-functions/shared/#createbroadcastabledeletecomment), and broadcast function [`broadcastDeletion`](https://jakipatryk.github.io/steemconnect-firebase-functions/broadcasting/#broadcastdeletion).

### How to contribute?

##### Do you have a question? 

Feel free to contact me on **Discord** (jakipatryk#1263) or on **Steem.chat** (jakipatryk).

##### Have you found a bug?

Publish a Utopian contribution and add an Issue to the project on Github!

###### Do you want to write some code?

Fork the repo, do your changes and create a pull request!

### Pull requests
- https://github.com/jakipatryk/steemconnect-firebase-functions/pull/43
- https://github.com/jakipatryk/steemconnect-firebase-functions/pull/46
- https://github.com/jakipatryk/steemconnect-firebase-functions/pull/48
- https://github.com/jakipatryk/steemconnect-firebase-functions/pull/53
- https://github.com/jakipatryk/steemconnect-firebase-functions/pull/44


<br /><hr/><em>Posted on <a href="https://utopian.io/utopian-io/@jakipatryk/36gter-reliable-broadcasting-steemconnect-firebase-functions-v2-0-is-here">Utopian.io -  Rewarding Open Source Contributors</a></em><hr/>
👍  , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , and 5 others
properties (23)
authorjakipatryk
permlink36gter-reliable-broadcasting-steemconnect-firebase-functions-v2-0-is-here
categoryutopian-io
json_metadata"{"community":"utopian","app":"utopian/1.0.0","format":"markdown","repository":{"id":120048095,"name":"steemconnect-firebase-functions","full_name":"jakipatryk/steemconnect-firebase-functions","html_url":"https://github.com/jakipatryk/steemconnect-firebase-functions","fork":false,"owner":{"login":"jakipatryk"}},"pullRequests":[{"author_association":"OWNER","_links":{"statuses":{"href":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/statuses/906d20ae90c1707cef30f1622bd9d5ed1a8c9d17"},"commits":{"href":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/pulls/43/commits"},"review_comment":{"href":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/pulls/comments{/number}"},"review_comments":{"href":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/pulls/43/comments"},"comments":{"href":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/issues/43/comments"},"issue":{"href":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/issues/43"},"html":{"href":"https://github.com/jakipatryk/steemconnect-firebase-functions/pull/43"},"self":{"href":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/pulls/43"}},"base":{"repo":{"default_branch":"master","watchers":4,"open_issues":1,"forks":0,"license":{"url":"https://api.github.com/licenses/mit","spdx_id":"MIT","name":"MIT License","key":"mit"},"open_issues_count":1,"archived":false,"mirror_url":null,"forks_count":0,"has_pages":true,"has_wiki":true,"has_downloads":true,"has_projects":true,"has_issues":true,"language":"TypeScript","watchers_count":4,"stargazers_count":4,"size":487,"homepage":"https://steemprojects.com/projects/p/steemconnect-firebase-functions/","svn_url":"https://github.com/jakipatryk/steemconnect-firebase-functions","clone_url":"https://github.com/jakipatryk/steemconnect-firebase-functions.git","ssh_url":"git@github.com:jakipatryk/steemconnect-firebase-functions.git","git_url":"git://github.com/jakipatryk/steemconnect-firebase-functions.git","pushed_at":"2018-04-23T21:17:10Z","updated_at":"2018-04-23T21:08:54Z","created_at":"2018-02-03T01:11:22Z","deployments_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/deployments","releases_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/releases{/id}","labels_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/labels{/name}","notifications_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/notifications{?since,all,participating}","milestones_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/milestones{/number}","pulls_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/pulls{/number}","issues_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/issues{/number}","downloads_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/downloads","archive_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/{archive_format}{/ref}","merges_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/merges","compare_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/compare/{base}...{head}","contents_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/contents/{+path}","issue_comment_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/issues/comments{/number}","comments_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/comments{/number}","git_commits_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/git/commits{/sha}","commits_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/commits{/sha}","subscription_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/subscription","subscribers_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/subscribers","contributors_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/contributors","stargazers_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/stargazers","languages_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/languages","statuses_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/statuses/{sha}","trees_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/git/trees{/sha}","git_refs_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/git/tags{/sha}","blobs_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/git/blobs{/sha}","tags_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/tags","branches_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/branches{/branch}","assignees_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/assignees{/user}","events_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/events","issue_events_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/issues/events{/number}","hooks_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/hooks","teams_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/teams","collaborators_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/collaborators{/collaborator}","keys_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/keys{/key_id}","forks_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/forks","url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions","fork":false,"description":"A library to use SteemConnect in Firebase Functions.","html_url":"https://github.com/jakipatryk/steemconnect-firebase-functions","private":false,"owner":{"site_admin":false,"type":"User","received_events_url":"https://api.github.com/users/jakipatryk/received_events","events_url":"https://api.github.com/users/jakipatryk/events{/privacy}","repos_url":"https://api.github.com/users/jakipatryk/repos","organizations_url":"https://api.github.com/users/jakipatryk/orgs","subscriptions_url":"https://api.github.com/users/jakipatryk/subscriptions","starred_url":"https://api.github.com/users/jakipatryk/starred{/owner}{/repo}","gists_url":"https://api.github.com/users/jakipatryk/gists{/gist_id}","following_url":"https://api.github.com/users/jakipatryk/following{/other_user}","followers_url":"https://api.github.com/users/jakipatryk/followers","html_url":"https://github.com/jakipatryk","url":"https://api.github.com/users/jakipatryk","gravatar_id":"","avatar_url":"https://avatars2.githubusercontent.com/u/18032838?v=4","id":18032838,"login":"jakipatryk"},"full_name":"jakipatryk/steemconnect-firebase-functions","name":"steemconnect-firebase-functions","id":120048095},"user":{"site_admin":false,"type":"User","received_events_url":"https://api.github.com/users/jakipatryk/received_events","events_url":"https://api.github.com/users/jakipatryk/events{/privacy}","repos_url":"https://api.github.com/users/jakipatryk/repos","organizations_url":"https://api.github.com/users/jakipatryk/orgs","subscriptions_url":"https://api.github.com/users/jakipatryk/subscriptions","starred_url":"https://api.github.com/users/jakipatryk/starred{/owner}{/repo}","gists_url":"https://api.github.com/users/jakipatryk/gists{/gist_id}","following_url":"https://api.github.com/users/jakipatryk/following{/other_user}","followers_url":"https://api.github.com/users/jakipatryk/followers","html_url":"https://github.com/jakipatryk","url":"https://api.github.com/users/jakipatryk","gravatar_id":"","avatar_url":"https://avatars2.githubusercontent.com/u/18032838?v=4","id":18032838,"login":"jakipatryk"},"sha":"83570b136f39b2540422573d14d4028d49569728","ref":"master","label":"jakipatryk:master"},"head":{"repo":{"default_branch":"master","watchers":4,"open_issues":1,"forks":0,"license":{"url":"https://api.github.com/licenses/mit","spdx_id":"MIT","name":"MIT License","key":"mit"},"open_issues_count":1,"archived":false,"mirror_url":null,"forks_count":0,"has_pages":true,"has_wiki":true,"has_downloads":true,"has_projects":true,"has_issues":true,"language":"TypeScript","watchers_count":4,"stargazers_count":4,"size":487,"homepage":"https://steemprojects.com/projects/p/steemconnect-firebase-functions/","svn_url":"https://github.com/jakipatryk/steemconnect-firebase-functions","clone_url":"https://github.com/jakipatryk/steemconnect-firebase-functions.git","ssh_url":"git@github.com:jakipatryk/steemconnect-firebase-functions.git","git_url":"git://github.com/jakipatryk/steemconnect-firebase-functions.git","pushed_at":"2018-04-23T21:17:10Z","updated_at":"2018-04-23T21:08:54Z","created_at":"2018-02-03T01:11:22Z","deployments_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/deployments","releases_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/releases{/id}","labels_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/labels{/name}","notifications_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/notifications{?since,all,participating}","milestones_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/milestones{/number}","pulls_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/pulls{/number}","issues_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/issues{/number}","downloads_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/downloads","archive_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/{archive_format}{/ref}","merges_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/merges","compare_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/compare/{base}...{head}","contents_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/contents/{+path}","issue_comment_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/issues/comments{/number}","comments_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/comments{/number}","git_commits_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/git/commits{/sha}","commits_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/commits{/sha}","subscription_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/subscription","subscribers_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/subscribers","contributors_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/contributors","stargazers_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/stargazers","languages_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/languages","statuses_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/statuses/{sha}","trees_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/git/trees{/sha}","git_refs_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/git/tags{/sha}","blobs_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/git/blobs{/sha}","tags_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/tags","branches_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/branches{/branch}","assignees_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/assignees{/user}","events_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/events","issue_events_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/issues/events{/number}","hooks_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/hooks","teams_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/teams","collaborators_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/collaborators{/collaborator}","keys_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/keys{/key_id}","forks_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/forks","url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions","fork":false,"description":"A library to use SteemConnect in Firebase Functions.","html_url":"https://github.com/jakipatryk/steemconnect-firebase-functions","private":false,"owner":{"site_admin":false,"type":"User","received_events_url":"https://api.github.com/users/jakipatryk/received_events","events_url":"https://api.github.com/users/jakipatryk/events{/privacy}","repos_url":"https://api.github.com/users/jakipatryk/repos","organizations_url":"https://api.github.com/users/jakipatryk/orgs","subscriptions_url":"https://api.github.com/users/jakipatryk/subscriptions","starred_url":"https://api.github.com/users/jakipatryk/starred{/owner}{/repo}","gists_url":"https://api.github.com/users/jakipatryk/gists{/gist_id}","following_url":"https://api.github.com/users/jakipatryk/following{/other_user}","followers_url":"https://api.github.com/users/jakipatryk/followers","html_url":"https://github.com/jakipatryk","url":"https://api.github.com/users/jakipatryk","gravatar_id":"","avatar_url":"https://avatars2.githubusercontent.com/u/18032838?v=4","id":18032838,"login":"jakipatryk"},"full_name":"jakipatryk/steemconnect-firebase-functions","name":"steemconnect-firebase-functions","id":120048095},"user":{"site_admin":false,"type":"User","received_events_url":"https://api.github.com/users/jakipatryk/received_events","events_url":"https://api.github.com/users/jakipatryk/events{/privacy}","repos_url":"https://api.github.com/users/jakipatryk/repos","organizations_url":"https://api.github.com/users/jakipatryk/orgs","subscriptions_url":"https://api.github.com/users/jakipatryk/subscriptions","starred_url":"https://api.github.com/users/jakipatryk/starred{/owner}{/repo}","gists_url":"https://api.github.com/users/jakipatryk/gists{/gist_id}","following_url":"https://api.github.com/users/jakipatryk/following{/other_user}","followers_url":"https://api.github.com/users/jakipatryk/followers","html_url":"https://github.com/jakipatryk","url":"https://api.github.com/users/jakipatryk","gravatar_id":"","avatar_url":"https://avatars2.githubusercontent.com/u/18032838?v=4","id":18032838,"login":"jakipatryk"},"sha":"906d20ae90c1707cef30f1622bd9d5ed1a8c9d17","ref":"feature/wrapper","label":"jakipatryk:feature/wrapper"},"statuses_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/statuses/906d20ae90c1707cef30f1622bd9d5ed1a8c9d17","comments_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/issues/43/comments","review_comment_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/pulls/comments{/number}","review_comments_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/pulls/43/comments","commits_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/pulls/43/commits","milestone":{"closed_at":null,"due_on":null,"updated_at":"2018-04-23T19:53:03Z","created_at":"2018-03-19T19:41:14Z","state":"open","closed_issues":32,"open_issues":0,"creator":{"site_admin":false,"type":"User","received_events_url":"https://api.github.com/users/jakipatryk/received_events","events_url":"https://api.github.com/users/jakipatryk/events{/privacy}","repos_url":"https://api.github.com/users/jakipatryk/repos","organizations_url":"https://api.github.com/users/jakipatryk/orgs","subscriptions_url":"https://api.github.com/users/jakipatryk/subscriptions","starred_url":"https://api.github.com/users/jakipatryk/starred{/owner}{/repo}","gists_url":"https://api.github.com/users/jakipatryk/gists{/gist_id}","following_url":"https://api.github.com/users/jakipatryk/following{/other_user}","followers_url":"https://api.github.com/users/jakipatryk/followers","html_url":"https://github.com/jakipatryk","url":"https://api.github.com/users/jakipatryk","gravatar_id":"","avatar_url":"https://avatars2.githubusercontent.com/u/18032838?v=4","id":18032838,"login":"jakipatryk"},"description":null,"title":"2.0.0","number":1,"id":3200775,"labels_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/milestones/1/labels","html_url":"https://github.com/jakipatryk/steemconnect-firebase-functions/milestone/1","url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/milestones/1"},"labels":[{"default":true,"color":"a2eeef","name":"enhancement","url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/labels/enhancement","id":825419782}],"requested_teams":[],"requested_reviewers":[],"assignees":[{"site_admin":false,"type":"User","received_events_url":"https://api.github.com/users/jakipatryk/received_events","events_url":"https://api.github.com/users/jakipatryk/events{/privacy}","repos_url":"https://api.github.com/users/jakipatryk/repos","organizations_url":"https://api.github.com/users/jakipatryk/orgs","subscriptions_url":"https://api.github.com/users/jakipatryk/subscriptions","starred_url":"https://api.github.com/users/jakipatryk/starred{/owner}{/repo}","gists_url":"https://api.github.com/users/jakipatryk/gists{/gist_id}","following_url":"https://api.github.com/users/jakipatryk/following{/other_user}","followers_url":"https://api.github.com/users/jakipatryk/followers","html_url":"https://github.com/jakipatryk","url":"https://api.github.com/users/jakipatryk","gravatar_id":"","avatar_url":"https://avatars2.githubusercontent.com/u/18032838?v=4","id":18032838,"login":"jakipatryk"}],"assignee":{"site_admin":false,"type":"User","received_events_url":"https://api.github.com/users/jakipatryk/received_events","events_url":"https://api.github.com/users/jakipatryk/events{/privacy}","repos_url":"https://api.github.com/users/jakipatryk/repos","organizations_url":"https://api.github.com/users/jakipatryk/orgs","subscriptions_url":"https://api.github.com/users/jakipatryk/subscriptions","starred_url":"https://api.github.com/users/jakipatryk/starred{/owner}{/repo}","gists_url":"https://api.github.com/users/jakipatryk/gists{/gist_id}","following_url":"https://api.github.com/users/jakipatryk/following{/other_user}","followers_url":"https://api.github.com/users/jakipatryk/followers","html_url":"https://github.com/jakipatryk","url":"https://api.github.com/users/jakipatryk","gravatar_id":"","avatar_url":"https://avatars2.githubusercontent.com/u/18032838?v=4","id":18032838,"login":"jakipatryk"},"merge_commit_sha":"8a013d4ba912e22c84d062ed7bb9ea0a54020eb0","merged_at":"2018-04-16T18:35:10Z","closed_at":"2018-04-16T18:35:11Z","updated_at":"2018-04-16T18:35:14Z","created_at":"2018-04-16T15:24:30Z","body":"- added a `rely` wrapper function which works like an HTTP interceptor (broadcasts even if `access_token` expired by refreshing it)\r\n- fixed some compilation errors\r\n\r\nCloses #15 ","user":{"site_admin":false,"type":"User","received_events_url":"https://api.github.com/users/jakipatryk/received_events","events_url":"https://api.github.com/users/jakipatryk/events{/privacy}","repos_url":"https://api.github.com/users/jakipatryk/repos","organizations_url":"https://api.github.com/users/jakipatryk/orgs","subscriptions_url":"https://api.github.com/users/jakipatryk/subscriptions","starred_url":"https://api.github.com/users/jakipatryk/starred{/owner}{/repo}","gists_url":"https://api.github.com/users/jakipatryk/gists{/gist_id}","following_url":"https://api.github.com/users/jakipatryk/following{/other_user}","followers_url":"https://api.github.com/users/jakipatryk/followers","html_url":"https://github.com/jakipatryk","url":"https://api.github.com/users/jakipatryk","gravatar_id":"","avatar_url":"https://avatars2.githubusercontent.com/u/18032838?v=4","id":18032838,"login":"jakipatryk"},"title":"Reliable broadcasting as a wrapper function","locked":false,"state":"closed","number":43,"issue_url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/issues/43","patch_url":"https://github.com/jakipatryk/steemconnect-firebase-functions/pull/43.patch","diff_url":"https://github.com/jakipatryk/steemconnect-firebase-functions/pull/43.diff","html_url":"https://github.com/jakipatryk/steemconnect-firebase-functions/pull/43","id":181902971,"url":"https://api.github.com/repos/jakipatryk/steemconnect-firebase-functions/pulls/43"}],"platform":"github","type":"development","tags":["utopian-io","steemconnect","steem","steemdev","firebase"],"users":["jakipatryk"],"links":["https://utopian.io/utopian-io/@jakipatryk/road-to-steemconnect-firebase-functions-2-0-0-what-has-been-done-so-far","https://jakipatryk.github.io/steemconnect-firebase-functions/","https://jakipatryk.github.io/steemconnect-firebase-functions/getting-started/#broadcastable","https://jakipatryk.github.io/steemconnect-firebase-functions/broadcasting/#rely","https://github.com/jakipatryk/steemconnect-firebase-functions/blob/master/src/broadcasting/rely.ts","https://jakipatryk.github.io/steemconnect-firebase-functions/operation-creators/#createdeletecomment","https://jakipatryk.github.io/steemconnect-firebase-functions/shared/#createbroadcastabledeletecomment","https://jakipatryk.github.io/steemconnect-firebase-functions/broadcasting/#broadcastdeletion"],"moderator":{"account":"amosbastian","time":"2018-04-25T13:46:55.386Z","pending":false,"reviewed":true,"flagged":false},"questions":null,"score":null,"total_influence":null,"staff_pick":null,"config":{"questions":[{"question":"How would you describe the formatting, language and overall presentation of the post?","question_id":"dev-1","answers":[{"answer":"The quality of the post is fantastic.","answer_id":"dev-1-a-1","value":10},{"answer":"The post is of very good quality. ","answer_id":"dev-1-a-2","value":8},{"answer":"The post is poorly written and/or formatted, but readable.","answer_id":"dev-1-a-3","value":3},{"answer":"The post is really hard to read and the content is barely understandable.","answer_id":"dev-1-a-4","value":0}]},{"question":"How would you rate the impact and significance of the contribution to the project and/or open source ecosystem in terms of uniqueness, usefulness and potential future applications?","question_id":"dev-2","answers":[{"answer":"This contribution adds high value and holds great significance for the project and/or open source ecosystem.","answer_id":"dev-2-a-1","value":35},{"answer":"This contribution adds significant value to the project and/or open source ecosystem. ","answer_id":"dev-2-a-2","value":28},{"answer":"This contribution adds some value to the project and/or open source ecosystem.","answer_id":"dev-2-a-3","value":17.5},{"answer":"This contribution hold no value and is insignificant in impact. ","answer_id":"dev-2-a-4","value":0}]},{"question":"How would you rate the total volume of work invested into this contribution?","question_id":"dev-3","answers":[{"answer":"This contribution appears to have demanded a lot of intensive work.","answer_id":"dev-3-a-1","value":20},{"answer":"This contribution appears to have required an average volume of work.","answer_id":"dev-3-a-2","value":14},{"answer":"This contribution shows some work done.","answer_id":"dev-3-a-3","value":6},{"answer":"This contribution shows no work done.","answer_id":"dev-3-a-4","value":0}]},{"question":"How would you rate the quality of the code submitted?","question_id":"dev-4","answers":[{"answer":"High - it follows all best practices. ","answer_id":"dev-4-a-1","value":20},{"answer":"Average - it follows most best practices.","answer_id":"dev-4-a-2","value":14},{"answer":"Low - it follows some best practices.","answer_id":"dev-4-a-3","value":6},{"answer":"Very low - it doesn't follow any best practices. ","answer_id":"dev-4-a-4","value":0}]},{"question":"How would you rate the knowledge and expertise necessary to fix the bug / implement the added feature(s)?","question_id":"dev-5","answers":[{"answer":"High - a lot of research and specific knowledge was required.","answer_id":"dev-5-a-1","value":7.5},{"answer":"Average - some research and knowledge was required.","answer_id":"dev-5-a-2","value":5.25},{"answer":"Low - not much knowledge or skill were required.","answer_id":"dev-5-a-3","value":2.25},{"answer":"Insignificant - no knowledge or skills were necessary.","answer_id":"dev-5-a-4","value":0}]},{"question":"How would you rate the accuracy and readability of the commit messages?","question_id":"dev-6","answers":[{"answer":"High - they are concise, descriptive and consistent. ","answer_id":"dev-6-a-1","value":2.5},{"answer":"Average - they are mostly concise, descriptive and consistent. ","answer_id":"dev-6-a-2","value":2},{"answer":"Low - they could be more concise, descriptive or consistent.","answer_id":"dev-6-a-3","value":0.75},{"answer":"Very low - they aren't concise, descriptive or consistent at all.","answer_id":"dev-6-a-4","value":0}]},{"question":"How do you rate the quality of the comments in the code?","question_id":"dev-7","answers":[{"answer":"High - everything is well-commented and adds to the readability of the code. ","answer_id":"dev-7-a-1","value":5},{"answer":"Average - most of the code is commented and most if it adds to the readability of the code.","answer_id":"dev-7-a-2","value":3},{"answer":"Low - little of the code is commented, but it still adds to the readability.","answer_id":"dev-7-a-3","value":1.5},{"answer":"Very low - the added comments provide no value or are not present at all.","answer_id":"dev-7-a-4","value":0}]}]}}"
created2018-04-24 14:35:00
last_update2018-04-25 13:46:54
depth0
children6
last_payout2018-05-01 14:35:00
cashout_time1969-12-31 23:59:59
total_payout_value205.600 HBD
curator_payout_value76.980 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length7,259
author_reputation14,313,610,947,295
root_title"Reliable broadcasting? steemconnect-firebase-functions v2.0 is here!"
beneficiaries
0.
accountutopian.pay
weight1,500
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id51,879,885
net_rshares47,387,231,575,911
author_curate_reward""
vote details (69)
@amosbastian ·
$0.10
Thanks for the contribution, it has been approved.

Really great work, keep it up!

----------------------------------------------------------------------
Need help? Write a ticket on https://support.utopian.io.
Chat with us on [Discord](https://discord.gg/uTyJkNm).

**[[utopian-moderator]](https://utopian.io/moderators)**
👍  
properties (23)
authoramosbastian
permlinkre-jakipatryk-36gter-reliable-broadcasting-steemconnect-firebase-functions-v2-0-is-here-20180425t140837289z
categoryutopian-io
json_metadata{"tags":["utopian-io"],"community":"utopian","app":"utopian/1.0.0"}
created2018-04-25 14:08:36
last_update2018-04-25 14:08:36
depth1
children1
last_payout2018-05-02 14:08:36
cashout_time1969-12-31 23:59:59
total_payout_value0.102 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length324
author_reputation174,473,586,900,705
root_title"Reliable broadcasting? steemconnect-firebase-functions v2.0 is here!"
beneficiaries
0.
accountutopian.pay
weight1,500
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id52,072,828
net_rshares24,343,995,119
author_curate_reward""
vote details (1)
@jakipatryk ·
Thanks!
properties (22)
authorjakipatryk
permlinkre-amosbastian-re-jakipatryk-36gter-reliable-broadcasting-steemconnect-firebase-functions-v2-0-is-here-20180425t172428885z
categoryutopian-io
json_metadata{"tags":["utopian-io"],"community":"busy","app":"busy/2.4.0"}
created2018-04-25 17:24:30
last_update2018-04-25 17:24:30
depth2
children0
last_payout2018-05-02 17:24:30
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length7
author_reputation14,313,610,947,295
root_title"Reliable broadcasting? steemconnect-firebase-functions v2.0 is here!"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id52,104,496
net_rshares0
@steembottrackerr ·
<center>https://steemitimages.com/200x200/https://s-media-cache-ak0.pinimg.com/originals/81/28/3c/81283c6aed7bdb5b9f8ad73b8ce62c2f.jpg</center>
---
<center>Hello @jakipatryk , Congratulations ✅ . Your content began to appear in the hot section.
I am the information account of "SteemBotTracker" site.
</center>
---
<center>
Your Informations
Total SBD: 0.192
Total STEEM: 3.967
</center>
---
<center>
I recommend to increase this;
You can make "Resteem" and advertise to the followers of the whale accounts.
"Resteem Bot" for you;
✅ The most profitable Resteem Whale @hottopic  has 18.500 Followers + 5200 Sp + Upvote with min +45 accounts. 
</center>
---
<center>
You can purchase "upvote" by bid bots.
"Upvote Bot"
✅ The most profitable whale in the last round. @upme
</center>
---
<center>
I'm taking this message once. You need to use the #steembottrackerr tag for more information.
Those who "upvote" this interpretation will be awarded a "UpVote" prize of 100 Sbd per week per person.
I am a bot, I can not answer the comment. I hope I could help. Good luck. Sorry if I disturbed you.
</center>
properties (22)
authorsteembottrackerr
permlink20180501t182024258z
categoryutopian-io
json_metadata{"tags":["advice"],"app":"steemjs/test"}
created2018-05-01 18:20:30
last_update2018-05-01 18:20:30
depth1
children0
last_payout2018-05-08 18:20:30
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length1,129
author_reputation-1,493,369,324,060
root_title"Reliable broadcasting? steemconnect-firebase-functions v2.0 is here!"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id53,288,440
net_rshares0
@suvojit ·
Sir, your post is very beautiful, your posts are so beautiful I think we have a lot to learn from your posts
properties (22)
authorsuvojit
permlinkre-jakipatryk-36gter-reliable-broadcasting-steemconnect-firebase-functions-v2-0-is-here-20180428t083255583z
categoryutopian-io
json_metadata{"tags":["utopian-io"],"app":"steemit/0.1"}
created2018-04-28 08:33:06
last_update2018-04-28 08:33:06
depth1
children0
last_payout2018-05-05 08:33:06
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length108
author_reputation62,542,102,513
root_title"Reliable broadcasting? steemconnect-firebase-functions v2.0 is here!"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id52,603,911
net_rshares0
@topfreeser ·
@jakipatryk,  it's a great job you have done and an outstanding work for the benefit of steemians.
Thanks for your efforts and lots of more wisdom and luck.
properties (22)
authortopfreeser
permlinkre-jakipatryk-36gter-reliable-broadcasting-steemconnect-firebase-functions-v2-0-is-here-20180425t082321206z
categoryutopian-io
json_metadata{"tags":["utopian-io"],"users":["jakipatryk"],"app":"steemit/0.1"}
created2018-04-25 08:23:27
last_update2018-04-25 08:23:27
depth1
children0
last_payout2018-05-02 08:23:27
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length156
author_reputation295,703,150,742
root_title"Reliable broadcasting? steemconnect-firebase-functions v2.0 is here!"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id52,021,629
net_rshares0
@utopian-io ·
### Hey @jakipatryk! Thank you for the great work you've done!
We're already looking forward to your next contribution!
#### Fully Decentralized Rewards
We hope you will take the time to share your expertise and knowledge by rating contributions made by others on Utopian.io to help us reward the best contributions together.
#### Utopian Witness!
<a href="https://v2.steemconnect.com/sign/account-witness-vote?witness=utopian-io&approve=1">Vote for Utopian Witness!</a> We are made of developers, system administrators, entrepreneurs, artists, content creators, thinkers. We embrace every nationality, mindset and belief.

**Want to chat? Join us on Discord https://discord.me/utopian-io**
properties (22)
authorutopian-io
permlinkre-jakipatryk-36gter-reliable-broadcasting-steemconnect-firebase-functions-v2-0-is-here-20180426t150142790z
categoryutopian-io
json_metadata{"tags":["utopian-io"],"community":"utopian","app":"utopian/1.0.0"}
created2018-04-26 15:01:45
last_update2018-04-26 15:01:45
depth1
children0
last_payout2018-05-03 15:01:45
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length690
author_reputation152,955,367,999,756
root_title"Reliable broadcasting? steemconnect-firebase-functions v2.0 is here!"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id52,276,491
net_rshares0