Shapeshifter - rollthecloudinc/hedge GitHub Wiki

Summary

The shapeshifter API is used to write non-relational data such as; JSON and image files to Github repositories. Data is enriched with automatic, organic version control, activity logging, and low latency access highly available distributed via Github pages websites. Data and files can be optionally indexed inside OpenSearch for advanced searching capabilities.

shapeshifter is part of the rtc vertigo low carbon dev toolkit

Download

Take data storage to the next level using our low carbon and carbon aware Github App. Once installed in a repo authorized users will be able to use the following API Catalog to save JSON Documents and media files directly to the Github repository.

https://github.com/apps/rtc-vertigo (preview – NON-FUNCTIONAL)

Features

Version Control

See exactly who, when, and what data changed.

Data becomes living breathing entity with full retention capabilities. No more loosing changes or needing to build your own change control and/or audit system. Its all right here in Github already.

Awareness and Activity Log

Data changes become organically part of activity within Github just like code changes.

Reduce App Api Request

Repositories that host user uploaded content can be included directly within builds. This provides the opportunity to eliminate trips to servers when data is needed. Data that is JSON can also be compiled directly into the JavaScript builds. Compiling data directly into builds can significantly reduce requests. This is the way all panel page entities are currently stored inside Druid. Druid works along side vertigo to deliver rapid development capabilities on top of platform architected from the very beginning with sustainability at center. Making it easy to produce low energy websites that run efficiently on infrastructure using renewable resources inside the cloud.

API Catalog

Entity API

This API is used to store JSON Documents.

Method URL Description
POST https://vertigo.druidcloud.io/{owner}/{repo}/shapeshifter/{path} Create JSON Document entity
PUT https://vertigo.druidcloud.io/{owner}/{repo}/shapeshifter/{path} Update JSON Document entity
GET https://vertigo.druidcloud.io/{owner}/{repo}/shapeshifter/{path} Get JSON Document entity bypassing cache

Use Case: https://classifieds-ui.com

Free market of goods, products and services on the sustainable web. Secure ecommerce that fast tracks healthy planetary growth and entrepreneurial aspirations.

Create classified ad.

Result: https://github.com/rollthecloudinc/classifieds-ui-objects-prod/tree/master/ads/realestate

POST https://vertigo.druidcloud.io/rollthecloudinc/classifieds-ui-objects-prod/shapeshifter/ads/realestate/bc7816b7-bf8d-11ea-add0-5adf5261a303

{
          "id" : "bc7816b7-bf8d-11ea-add0-5adf5261a303",
          "images" : [ ],
          "location" : [
            -83.0604,
            42.3474
          ],
          "profileId" : "a6060999-b399-4f2a-9f7d-1e75d1a87c28",
          "status" : 0,
          "title" : "dwerwer",
          "typeId" : "5665f5f8-5533-4aa1-96f4-b78e02714de0",
          "attributes" : [
            {
              "attributes" : [ ],
              "computedValue" : "10000",
              "displayName" : "Asking Price",
              "floatValue" : 0,
              "intValue" : 10000,
              "name" : "price",
              "type" : 0,
              "value" : "100,00.00"
            },
            {
              "attributes" : [ ],
              "computedValue" : "1",
              "displayName" : "Beds",
              "floatValue" : 0,
              "intValue" : 1,
              "name" : "beds",
              "type" : 0,
              "value" : "1"
            },
            {
              "attributes" : [ ],
              "computedValue" : "1",
              "displayName" : "Baths",
              "floatValue" : 0,
              "intValue" : 1,
              "name" : "baths",
              "type" : 0,
              "value" : "1"
            },
            {
              "attributes" : [ ],
              "computedValue" : "1234",
              "displayName" : "Sqft",
              "floatValue" : 0,
              "intValue" : 1234,
              "name" : "sqft",
              "type" : 0,
              "value" : "1234"
            }
          ],
          "cityDisplay" : "Detroit, Michigan (48201)",
          "description" : "ewqewwr",
          "featureSets" : [
            {
              "humanName" : "My new vocab 3",
              "id" : "f85f312c-9bdc-11ea-8c16-4a848dc08ce4",
              "machineName" : "my_new_cvocab 3",
              "terms" : [ ],
              "userId" : "e36b42fe-b09c-4514-a519-e178bb52957e"
            }
          ]
        }

Use Case: https://zingurus.com

Free exchange of media, thoughts, sarcasm and commentary without limits on the sustainable web. Strike lightening begin a storm and rain down free from the shackles of censorship.

Create a zing

Result: https://github.com/rollthecloudinc/zingurus-objects-prod/tree/master/zings

POST https://vertigo.druidcloud.io/rollthecloudinc/zingurus-objects-prod/shapeshifter/zings/f6165d71-73bc-4b32-a0c0-a7ce268edfaa

{
          "id": "f6165d71-73bc-4b32-a0c0-a7ce268edfaa",
          "target" : {
            "url" : "https://cnn.com/whatever-story-link"
          },
          "comment" : "Some zinger about the story.",
          "type" : "URL",
          "ats" : [
            {
              "at" : "cnn"
            }
          ],
          "hashes" : [
            {
              "hash" : "cnn"
            }
          ]
        }

Media API

This API is used to store files like images below 100mb in size.

Method URL Description
POST https://vertigo.druidcloud.io/{owner}/{repo}/media/shapshifter/{path} Upload file
GET https://vertigo.druidcloud.io/{owner}/{repo}/media/shapshifter/{path} Serve file bypassing cache

Large Object API

This API will be used to store files above 100mb in size.

Method URL Description
POST https://vertigo.druidcloud.io/{owner}/{repo}/lo/shapshifter/{path} Upload large file
GET https://vertigo.druidcloud.io/{owner}/{repo}/lo/shapshifter/{path} Serve large file bypassing cache

Validation (future)

Github repos will be able to include optional json schema file used to validate incoming JSON data for entity api. Validation strategy will also be implemented for incoming media and large object files.

Authorization (future)

Github repos will be able to include optional json file with authorization rules to restrict operations to specific users or segment of users.

Notifications & Webhooks (future)

Github repos will be able to be wired-up to lifecycle push notifications via web sockets and web hooks.

Searching (future)

JSON documents and media files will be optionally indexes in open search. Open search dashboards will also be available for users to login and manage their own open search tenant.

NIST Compliance

Security controls for encoding data using key store, integration with private repositories, etc.

Anonymous Commits

Users will be able to open up specific paths in repo to unauthenticated users for storing things like submitted contact forms or anonymous surveys.

Best of all completely free but donations are welcomed.