All files / src/modules tag.ts

95.45% Statements 21/22
100% Branches 0/0
85.71% Functions 6/7
95% Lines 19/20

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 11633x   33x     33x             33x 2x           2x   2x                                   33x 2x         2x   2x                                     33x 824x           824x 82368x   82368x                                 33x 1x                       33x                  
import { Types } from 'cafe-utility'
import { BeeRequestOptions, Tag } from '../types'
import { http } from '../utils/http'
import { Reference } from '../utils/typed-bytes'
 
const endpoint = 'tags'
 
/**
 * Create new tag on the Bee node
 *
 * @param url Bee tag URL
 */
export async function createTag(requestOptions: BeeRequestOptions): Promise<Tag> {
  const response = await http<unknown>(requestOptions, {
    method: 'post',
    url: endpoint,
    responseType: 'json',
  })
 
  const body = Types.asObject(response.data, { name: 'response.data' })
 
  return {
    address: Types.asEmptiableString(body.address, { name: 'address' }),
    seen: Types.asNumber(body.seen, { name: 'seen' }),
    sent: Types.asNumber(body.sent, { name: 'sent' }),
    split: Types.asNumber(body.split, { name: 'split' }),
    startedAt: Types.asString(body.startedAt, { name: 'startedAt' }),
    stored: Types.asNumber(body.stored, { name: 'stored' }),
    synced: Types.asNumber(body.synced, { name: 'synced' }),
    uid: Types.asNumber(body.uid, { name: 'uid' }),
  }
}
 
/**
 * Retrieve tag information from Bee node
 *
 * @param url Bee tag URL
 * @param uid UID of tag to be retrieved
 */
export async function retrieveTag(requestOptions: BeeRequestOptions, uid: number): Promise<Tag> {
  const response = await http<unknown>(requestOptions, {
    url: `${endpoint}/${uid}`,
    responseType: 'json',
  })
 
  const body = Types.asObject(response.data, { name: 'response.data' })
 
  return {
    address: Types.asEmptiableString(body.address, { name: 'address' }),
    seen: Types.asNumber(body.seen, { name: 'seen' }),
    sent: Types.asNumber(body.sent, { name: 'sent' }),
    split: Types.asNumber(body.split, { name: 'split' }),
    startedAt: Types.asString(body.startedAt, { name: 'startedAt' }),
    stored: Types.asNumber(body.stored, { name: 'stored' }),
    synced: Types.asNumber(body.synced, { name: 'synced' }),
    uid: Types.asNumber(body.uid, { name: 'uid' }),
  }
}
 
/**
 * Get limited listing of all tags.
 *
 * @param url
 * @param offset
 * @param limit
 */
export async function getAllTags(requestOptions: BeeRequestOptions, offset?: number, limit?: number): Promise<Tag[]> {
  const response = await http<unknown>(requestOptions, {
    url: endpoint,
    params: { offset, limit },
    responseType: 'json',
  })
 
  const body = Types.asObject(response.data, { name: 'response.data' })
  const tags = Types.asArray(body.tags, { name: 'tags' }).map(x => Types.asObject(x, { name: 'tag' }))
 
  return tags.map(x => ({
    address: Types.asEmptiableString(x.address, { name: 'address' }),
    seen: Types.asNumber(x.seen, { name: 'seen' }),
    sent: Types.asNumber(x.sent, { name: 'sent' }),
    split: Types.asNumber(x.split, { name: 'split' }),
    startedAt: Types.asString(x.startedAt, { name: 'startedAt' }),
    stored: Types.asNumber(x.stored, { name: 'stored' }),
    synced: Types.asNumber(x.synced, { name: 'synced' }),
    uid: Types.asNumber(x.uid, { name: 'uid' }),
  }))
}
 
/**
 * Removes tag from the Bee node.
 * @param url
 * @param uid
 */
export async function deleteTag(requestOptions: BeeRequestOptions, uid: number): Promise<void> {
  await http<void>(requestOptions, {
    method: 'delete',
    url: `${endpoint}/${uid}`,
  })
}
 
/**
 * Updates tag
 * @param url
 * @param uid
 * @param reference
 */
export async function updateTag(requestOptions: BeeRequestOptions, uid: number, reference: Reference): Promise<void> {
  await http<void>(requestOptions, {
    method: 'patch',
    url: `${endpoint}/${uid}`,
    data: {
      reference,
    },
  })
}