OverviewFilesCommitsIssuesDocsReleasesPeers

holepunchto-deps / @holepunchto / keet-media / shared / spec / schema.js

265 lines · javascript ref:
import Hyperschema from 'hyperschema'

import { SCHEMA_DIR } from './constants'

export const schema = Hyperschema.from(SCHEMA_DIR)
const media = schema.namespace('media')

media.register({
  name: 'dimensions',
  fields: [
    {
      name: 'width',
      type: 'uint',
      required: true
    },
    {
      name: 'height',
      type: 'uint',
      required: true
    }
  ]
})

media.register({
  name: 'metadata',
  fields: [
    {
      name: 'mimetype',
      type: 'string'
    },
    {
      name: 'dimensions',
      type: '@media/dimensions'
    },
    {
      name: 'duration',
      type: 'uint'
    }
  ]
})

media.register({
  name: 'file',
  fields: [
    {
      name: 'metadata',
      type: '@media/metadata'
    },
    {
      name: 'base64',
      type: 'string'
    },
    {
      name: 'buffer',
      type: 'buffer'
    }
  ]
})

media.register({
  name: 'crop',
  fields: [
    {
      name: 'left',
      type: 'uint'
    },
    {
      name: 'top',
      type: 'uint'
    },
    {
      name: 'width',
      type: 'uint'
    },
    {
      name: 'height',
      type: 'uint'
    }
  ]
})

media.register({
  name: 'create-chat-image-preview-request',
  fields: [
    {
      name: 'path',
      type: 'string'
    }
  ]
})

media.register({
  name: 'create-chat-image-preview-response',
  fields: [
    {
      name: 'metadata',
      type: '@media/metadata',
      required: true
    },
    {
      name: 'small',
      type: '@media/file',
      required: true
    },
    {
      name: 'medium',
      type: '@media/file',
      required: true
    },
    {
      name: 'large',
      type: '@media/file',
      required: true
    }
  ]
})

media.register({
  name: 'create-chat-video-preview-request',
  fields: [
    {
      name: 'path',
      type: 'string'
    }
  ]
})

media.register({
  name: 'create-chat-video-preview-response',
  fields: [
    {
      name: 'metadata',
      type: '@media/metadata',
      required: true
    },
    {
      name: 'small',
      type: '@media/file',
      required: true
    },
    {
      name: 'medium',
      type: '@media/file',
      required: true
    },
    {
      name: 'large',
      type: '@media/file',
      required: true
    }
  ]
})

media.register({
  name: 'create-chat-link-preview-request',
  fields: [
    {
      name: 'path',
      type: 'string'
    },
    {
      name: 'buffer',
      type: 'buffer'
    }
  ]
})

media.register({
  name: 'create-chat-link-preview-response',
  fields: [
    {
      name: 'metadata',
      type: '@media/metadata'
    },
    {
      name: 'buffer',
      type: 'buffer'
    }
  ]
})

media.register({
  name: 'create-profile-avatar-request',
  fields: [
    {
      name: 'path',
      type: 'string'
    },
    {
      name: 'crop',
      type: '@media/crop'
    }
  ]
})

media.register({
  name: 'create-profile-avatar-response',
  fields: [
    {
      name: 'small',
      type: '@media/file',
      required: true
    },
    {
      name: 'medium',
      type: '@media/file',
      required: true
    }
  ]
})

media.register({
  name: 'create-room-avatar-request',
  fields: [
    {
      name: 'path',
      type: 'string'
    },
    {
      name: 'crop',
      type: '@media/crop'
    }
  ]
})

media.register({
  name: 'create-room-avatar-response',
  fields: [
    {
      name: 'small',
      type: '@media/file',
      required: true
    },
    {
      name: 'medium',
      type: '@media/file',
      required: true
    }
  ]
})

media.register({
  name: 'decode-image-request',
  fields: [
    {
      name: 'httpLink',
      type: 'string'
    }
  ]
})

media.register({
  name: 'decode-image-response',
  fields: [
    {
      name: 'metadata',
      type: '@media/metadata'
    },
    {
      name: 'data',
      type: 'buffer'
    }
  ]
})