{"id":15451982,"url":"https://github.com/cryptix/js-gabbygrove","last_synced_at":"2026-01-20T04:01:49.897Z","repository":{"id":47984379,"uuid":"199654717","full_name":"cryptix/js-gabbygrove","owner":"cryptix","description":"experimental, cbor based feed format for ssb","archived":false,"fork":false,"pushed_at":"2021-08-11T07:33:14.000Z","size":22,"stargazers_count":2,"open_issues_count":2,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-06T17:51:58.646Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cryptix.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-07-30T13:13:21.000Z","updated_at":"2022-04-23T07:31:30.000Z","dependencies_parsed_at":"2022-08-12T15:52:07.669Z","dependency_job_id":null,"html_url":"https://github.com/cryptix/js-gabbygrove","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/cryptix/js-gabbygrove","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cryptix%2Fjs-gabbygrove","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cryptix%2Fjs-gabbygrove/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cryptix%2Fjs-gabbygrove/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cryptix%2Fjs-gabbygrove/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cryptix","download_url":"https://codeload.github.com/cryptix/js-gabbygrove/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cryptix%2Fjs-gabbygrove/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28595316,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T02:08:49.799Z","status":"ssl_error","status_checked_at":"2026-01-20T02:08:44.148Z","response_time":117,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-01T21:40:40.932Z","updated_at":"2026-01-20T04:01:49.880Z","avatar_url":"https://github.com/cryptix.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Gabby Grove\n\nthis is an experimental, CBOR based feed format for secure-scuttlebutt.\n\nIt spec draft will be published to the [ssb-spec-drafts](https://github.com/ssbc/ssb-spec-drafts). The current working copy can be found on the [core-gabbygrove-00 branch](https://github.com/ssbc/ssb-spec-drafts/tree/core-gabbygrove-00).\n\n# Structures\n\nSee the working copy for an detailed description of the fields in the `Event` and `Transfer` strucutre.\n\n\u003c!--\n## Event\n\nAn array of length five with various data...\n\n\n\n## Transfer\n\nAn array of length three, each being a bytes array\n\n1. `eventBytes`\n2. `signature`\n3. `content` (optional) --\u003e\n\n# API\n\n## verifyTransfer\n\n`verifyTransfer(Buffer, cb)` expects a `Buffer` as it's first argument, it will be decoded as a `Transfer` message (three cbor arrays). Then, the first element of `Transfer` will be decoded as an `Event`. The author inside the event will be used to verify the `Signature` (field number to of `Transfer`). If present, the `content` will be hashed and compared against the `content.hash` inside the `Event`, as well.\n\nIf anything fails, the callback will be called with an error as it's first argument.\nIf successfull, the first argument will be null and the seconed one will get this decoded data:\n\n```js\n{\n    key: BinaryRef(), // of the received event\n    evt: decodedEvent,\n    content: jsonObject, // JSON.parse of content (if that's the `content.encoding`)\n}\n```\n\n# makeEvent\n\n`makeEvent(keyPair, sequence, prev, content)` creates a new `Transfer` object with a signed event inside. It's a **low level** function and should be wrapped apropriatly to create the right sequence numbers and use the correct `previous` hashes.\n\nIt throws in case of mis-use.\n\nIt returns this object:\n\n```js\n{\n    key: BinaryRef(),  // of the new event\n    event: []...,      // array of fields of event\n    trBytes: Buffer(), // complete encoded Transfer object\n}\n`","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcryptix%2Fjs-gabbygrove","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcryptix%2Fjs-gabbygrove","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcryptix%2Fjs-gabbygrove/lists"}