# CID SDK

## Use cidjs SDK to interact with Core ID contracts

## CID.js

Javascript bindings for the CORE ID .core Domain

### Overview of the API

#### Installation

Install @ciddomains/cidjs, alongcide [web3](https://www.npmjs.com/package/web3).

```
npm install @ciddomains/cidjs web3
```

#### Getting Started

All that's needed to get started is a web3 provider instance, you should pass it and select network id when creating a new CID instance.

```
// core mainnet domain example, getAddress

const CID = require('@ciddomains/cidjs').default       

const Web3 = require('web3')                                                                                                                

async function main(name) {
  const provider = new Web3.providers.HttpProvider("https://rpc.coredao.org")
  let cid = new CID({ provider })

  const address = await cid.name(name).getAddress() // 0x123                                                                                
  console.log("name: %s, address: %s", name, address)                                                                                          

}                                                                                                                                           
main("coreid.core") // 0x9826a59Aa17C36e88AA2F6dC367772381f034401

```

#### Reverse Resolution

```
// core mainnet domain example, getName
const CID = require('@ciddomains/cidjs').default       

const Web3 = require('web3')                                                                                                                

async function main(address) {
  const provider = new Web3.providers.HttpProvider("https://rpc.coredao.org")
  let cid = new CID({ provider })

  const {name} = await cid.getName(address)                                                                               
  console.log("name: %s, address: %s", name, address)                                                                                           

}                                                                                                                                           
main("0x9826a59Aa17C36e88AA2F6dC367772381f034401") // coreid.core
```

#### exports

```
default - CID
getCidAddress
getResolverContract
getCIDContract
namehash
labelhash
```

#### CID Interface

```
name(name: String) => Name
```

Returns a Name Object, that allows you to make record queries.

```
resolver(address: EvmAddress) => Resolver
```

Returns a Resolver Object, allowing you to query names from this specific resolver. Most useful when querying a different resolver that is different than is currently recorded on the registry. E.g. migrating to a new resolver

```
async getName(address: EvmAddress) => Promise<Name>
```

Returns the reverse record for a particular Evm address.

```
async setReverseRecord(name: Name) => Promise<EthersTxObject>
```

Sets the reverse record for the current Evm address

#### Name Interface

```ts
async getOwner() => Promise<EvmAddress>
```

Returns the owner/controller for the current CID name.

```ts
async setOwner(address: EvmAddress) => Promise<Ethers>
```

Sets the owner/controller for the current CID name.

```ts
async getResolver() => Promise<EvmAddress>
```

Returns the resolver for the current CID name.

```ts
async setResolver(address: EvmAddress) => Promise<EvmAddress>
```

Sets the resolver for the current CID name.

```ts
async getTTL() => Promise<Number>
```

Returns the TTL for the current CID name.

```ts
async getAddress(coinId: String) => Promise<EvmAddress>
```

Returns the address for the current CID name for the coinId provided.

```ts
async setAddress(coinId: String, address: EvmAddress) => Promise<EthersTxObject>
```

Sets the address for the current CID name for the coinId provided.

```ts
async getContent() => Promise<ContentHash>
```

Returns the contentHash for the current CID name.

```ts
async setContenthash(content: ContentHash) => Promise<EthersTxObject>
```

Sets the contentHash for the current CID name.

```ts
async getText(key: String) => Promise<String>
```

Returns the text record for a given key for the current CID name.

```ts
async setText(key: String, recordValue: String) => Promise<EthersTxObject>
```

Sets the text record for a given key for the current CID name.

```ts
async setSubnodeOwner(label: String, newOwner: EvmAddress) => Promise<EthersTxObject>
```

Sets the subnode owner for a subdomain of the current CID name.

```ts
async setSubnodeRecord(label: String, newOwner: EvmAddress, resolver: EvmAddress, ttl: ?Number) => Promise<EthersTxObject>
```

Sets the subnode owner, resolver, ttl for a subdomain of the current CID name in one transaction.

```ts
 async createSubdomain(label: String) => Promise<EthersTxObject>
```

Creates a subdomain for the current CID name. Automatically sets the owner to the signing account.

```ts
async deleteSubdomain(label: String) => Promise<EthersTxObject>
```

Deletes a subdomain for the current CID name. Automatically sets the owner to "0x0..."

### Resolver Interface

```ts
address
```

Static property that returns current resolver address

```ts
name(name) => Name
```

Returns a Name Object that hardcodes the resolver

Build SDK and test on your test machine

```shell
yarn install
yarn run build
node main.js
```
