Giter VIP home page Giter VIP logo

content-record-library's Introduction

Content Record Library

Description

The content record library is a library for skapp developers, allowing them to record the interactions of their users with pieces of content within the skapp that they are building. The main purpose of this tool is content discovery; if all skapps were to make use of this library, the end result would be a scrapable global record of all content and the popularity of that content and the skapp.

This information will eventually get displayed in a type of leaderboard that ranks top pieces of content and top skapps.

Interface

The library itself is a simple class that acts as a wrapper around the Content Record DAC. This DAC, or Data Access Controller, is built and hosted by Skynetlabs. The library will contain a hardcoded reference to its domain, thus abstracting all of its complexities from the skapp developer.

The skapp developer is expected to call upon the content record when its user perform the following two types of actions. This is when a user

  • creates content
  • interacts with a piece of content

The content record library exports the following types, allowing the skapp developer to record new entries in the content record. Note that the content info has a metadata field, the skapp developer can add whatever metadata he would like to add here. In the case of an interaction with a piece of content, the metadata could give more information about the type of interaction for instance, e.g. "liked", "commented", etc...

export interface IContentRecordDAC {
  recordNewContent(...content: IContentInfo[]): Promise<IDACResponse>;
  recordInteraction(...content: IContentInfo[]): Promise<IDACResponse>;
}

export interface IContentInfo {
  skylink: string;
  metadata: object; // should be valid JSON (capped in size ~=4kib)
}

export interface IDACResponse {
  submitted: boolean;
  error?: string;
}

Usage

Using the library is very straightforward. In this section we'll show an example of how a skapp could use the content record library and record user interactions.

import { SkynetClient } from "skynet-js";
import { ContentRecordDAC } from "skynet-content-record-library";

(async () => {
  // create client
  const client = new SkynetClient();

  // create content record
  const contentRecord = new ContentRecordDAC();

  // load mysky
  const mySky = await client.loadMySky("exampleskapp.hns");

  // load DACs
  await mySky.loadDacs(contentRecord);

  // check login
  const isLoggedIn = await mySky.checkLogin();
  if (!isLoggedIn) {
    // request login access
  }

  // DAC is now loaded and ready for use:
  //
  // - on content being created we can call:
  //
  // await contentRecord.recordNewContent({
  //     skylink,
  //     metadata: {foo: "bar"}
  // });
  //
  // - on content being interacted with we can call:
  //
  // await contentRecord.recordInteraction({
  //     skylink,
  //     metadata: {action: "liked"}
  // });
})();

Metadata

The metadata submitted to the content record can be used for a lot of purposes, there are other DACs that make use of this metadata already, and which supply a link field in the metadata under the content property.

This link field is described in the skystandards, and should contain a URI from which the content can be retrieved. E.g. if you are submitting a record to the content record DAC that describes the creation of an image at certain skylink _AT2YIzNUnzFH4QV-MMa_CuIJBTTypcbnv2_irbjYUMNxQ, then a good submission would be:

await contentRecord.recordNewContent({
     skylink: '_AT2YIzNUnzFH4QV-MMa_CuIJBTTypcbnv2_irbjYUMNxQ',
     metadata: {
       content: { link: "https://siasky.net/_AT2YIzNUnzFH4QV-MMa_CuIJBTTypcbnv2_irbjYUMNxQ" },
       description: "beautiful wallpaper"
     }
});

content-record-library's People

Contributors

alexfreska avatar chrisschinnerl avatar dghelm avatar mrcnski avatar msevey avatar peterjan avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.