{"id":21658988,"url":"https://github.com/3box/3box-address-server","last_synced_at":"2026-02-12T21:15:04.807Z","repository":{"id":33654930,"uuid":"145592766","full_name":"3box/3box-address-server","owner":"3box","description":"A server that associates an Ethereum address with its orbitdb address","archived":false,"fork":false,"pushed_at":"2023-01-09T22:48:30.000Z","size":3319,"stargazers_count":9,"open_issues_count":36,"forks_count":9,"subscribers_count":8,"default_branch":"develop","last_synced_at":"2023-04-03T13:52:58.817Z","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/3box.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2018-08-21T16:48:12.000Z","updated_at":"2021-12-28T15:54:05.000Z","dependencies_parsed_at":"2023-01-15T01:50:53.366Z","dependency_job_id":null,"html_url":"https://github.com/3box/3box-address-server","commit_stats":null,"previous_names":[],"tags_count":null,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3box%2F3box-address-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3box%2F3box-address-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3box%2F3box-address-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3box%2F3box-address-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/3box","download_url":"https://codeload.github.com/3box/3box-address-server/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":226305107,"owners_count":17603739,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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-11-25T09:30:11.871Z","updated_at":"2026-02-12T21:15:04.756Z","avatar_url":"https://github.com/3box.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"# ⚠️ ⚠️ Deprecated in favor of Ceramic ⚠️ ⚠️ \n\u003e 3box.js and related tools built by 3Box Labs are deprecated and no loger supported. Developers are encurraged to build with https://ceramic.network which is a more secure and decentralized protocol for sovereign data.\n\n# 3Box Address Server\n\n[![Greenkeeper badge](https://badges.greenkeeper.io/3box/3box-address-server.svg)](https://greenkeeper.io/)\n\n`3box-address-server` is a server utilizing a REST-API that is used to associate an Ethereum address with its root OrbitDB address. This is what must be looked up to sync the user's data.\n\n## API Endpoint\n\n```\nhttps://beta.3box.io/address-server/\n```\n\n## API Description\n\n\n### Set\n\n`POST /odbAddress`\n\n#### Body\n\n```\n{\n    address_token: \u003cjwt token containing the orbitDB root store address\u003e\n}\n```\n\nThe `address_token` is a [DID signed jwt](https://github.com/uport-project/did-jwt.git) of the address to be published. The payload of the `address_token` is:\n```\n{\n    rootStoreAddress: \u003corbitdb root store address\u003e\n}\n```\n\n#### Response\n\n| Status |     Message    |                                                   |\n|:------:|----------------|---------------------------------------------------|\n| 200    | Ok.            | rootStoreAddress stored                           |\n| 401    | Invalid JWT    | Posted token is invalid (signature, expired, etc) |\n| 403    | Missing data   | no `rootStoreAddress` in `address_token`          |\n| 500    | Internal Error | Internal Error                                    |\n\nThe response data follows the [`jsend`](https://labs.omniti.com/labs/jsend) standard.\n\n#### Response data\n```\n{\n  status: 'success',\n  data: {\n    rootStoreAddress: \u003cthe orbitDB root store address that was accepted\u003e\n  }\n}\n```\n\n### Link an ethereum address to a DID\n\n`POST /link`\n\n\n#### Body\n\n```\n{\n    consent_signature: \u003csignature\u003e,\n    linked_did: \u003cDID\u003e,\n    consent_msg: \u003cstring-message\u003e,\n    type: \u003cstring-[ethereum-eoa, erc1271]\u003e,\n    chainId: \u003cint\u003e,\n    address: \u003cstring-smart account address\u003e,\n    timestamp: \u003cint-unix timestamp\u003e\n}\n```\n\nThe `consent_signature` is a [personal_sign signature](https://web3js.readthedocs.io/en/1.0/web3-eth-personal.html) of a consent message and the DID to be linked. The data(text) of the signature is:\n\n```\nCreate a new 3Box profile\n\n-\nYour unique profile ID is did:muport:Qmsd89f7hg0w845hsdd\n```\n\n\nThe ethereum address to be linked is recovered from the signature.\n\n#### Response\n\n| Status |     Message     |                                                  |\n|:------:|-----------------|--------------------------------------------------|\n| 200    | Ok.             | Link created and stored                          |\n| 400    | Bad request     | No did on the message or dids does not match     |\n| 401    | Invalid consent | Posted signature is invalid (wrong DID, etc)     |\n| 403    | Missing data    | no `consent_signature` or `linked_did`           |\n| 500    | Internal Error  | Internal Error                                   |\n\nThe response data follows the [`jsend`](https://labs.omniti.com/labs/jsend) standard.\n\n#### Response data\n```\n{\n  status: 'success',\n  data: {\n    did: \u003cthe did that was linked\u003e,\n    address: \u003cthe ethereum address that was linked\u003e\n  }\n}\n```\n\n### Delete a link between an ethereum address and a DID\n\n`POST /linkdelete`\n\n#### Body\n\n```\n{\n  delete_token: \u003cjwt token\u003e\n}\n```\n\nThe `delete_token` is a [DID signed jwt](https://github.com/uport-project/did-jwt.git) with a 1 hour expiry, of the address to be deleted. The payload of the `delete_token` is:\n\n```\n{\n  \"address\": \"0x19bd82476fa8799e0eb7bbb03ee2a67678c01cdc\",\n  \"type\": \"delete-address-link\"\n}\n```\n\n#### Response\n\n| Status |     Message     |                                                  |\n|:------:|-----------------|--------------------------------------------------|\n| 200    | Ok.             | Link deleted                                     |\n| 401    | Invalid consent | delete token failed verification                 |\n| 403    | Missing data    | no delete_token                                  |\n| 500    | Internal Error  | Internal Error                                   |\n\nThe response data follows the [`jsend`](https://labs.omniti.com/labs/jsend) standard.\n\n#### Response data\n```\n{\n  status: 'success',\n  data: 'address of link deleted'\n}\n```\n\n### Get orbitDB root store address for given identity\n\n`GET /odbAddress/{identity}`\n\nHere the `ìdentity` is either a `DID` or an `ethereum address`.\n\n#### Response\n\n| Status |     Message     |                                                  |\n|:------:|-----------------|--------------------------------------------------|\n| 200    | Ok.             | An orbitDB address is returned                   |\n| 404    | Not found       | The DID or ethereum address was not found        |\n| 500    | Internal Error  | Internal Error                                   |\n\nThe response data follows the [`jsend`](https://labs.omniti.com/labs/jsend) standard.\n\n#### Response data\n```\n{\n  status: 'success',\n  data: {\n    rootStoreAddress: \u003cthe orbitDB root store address associated with the identity\u003e\n  }\n}\n```\n\n\n### Get multiple orbitDB root store addresses for given identities\n\n`Post /odbAddresses`\n\nReturns multiple root store addresses from multiple identities. If some identities are present but not all, the response will only contain the ones that do have root store addresses associated with them.\n\n#### Body\n\n```\n{\n    identities: \u003can array containing identities as strings\u003e\n}\n```\n\nHere the `ìdentity` is either a `DID` or an `ethereum address`.\n\n#### Response\n\n| Status |     Message     |                                                    |\n|:------:|-----------------|----------------------------------------------------|\n| 200    | Ok.             | All or some of the orbitDB addresses are returned  |\n| 400    | Bad request     | No identities found in request                     |\n| 404    | Not found       | No matching orbitDB addresses where found          |\n| 500    | Internal Error  | Internal Error                                     |\n\nThe response data follows the [`jsend`](https://labs.omniti.com/labs/jsend) standard.\n\n#### Response data\n```\n{\n  status: 'success',\n  data: {\n    rootStoreAddresses: {\n      \u003cidentity\u003e: \u003cthe orbitDB root store address associated with the identity, or null if no match for this identity\u003e\n    }\n  }\n}\n```\n\n## Maintainers\n[@simonovic86](https://github.com/simonovic86)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F3box%2F3box-address-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F3box%2F3box-address-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F3box%2F3box-address-server/lists"}