All files / src/components/views/Schemas types.ts

0% Statements 0/4
100% Branches 0/0
100% Functions 0/0
0% Lines 0/4

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 116 117 118 119 120 121 122                                                                                                                                                                                                                                                   
import { baseVcJsonSchema, DefaultSchemaMetadata, JsonSchema, JsonSchemaNode } from "vc-schema-tools";
 
/** Metadata fields specific to our use-case, intended to be stored in the `$metadata` object in a JSON Schema. */
export interface SchemaMetadata extends DefaultSchemaMetadata {
  version: string;
  slug: string;
  icon?: string;
  discoverable?: boolean;
}
 
/** In-progress schema interface during CreateSchema flow. */
export type WorkingSchema = Partial<JsonSchema<Partial<SchemaMetadata>>>;
export type CompletedSchema = JsonSchema<SchemaMetadata>;
 
/** Data format expected by API. */
export interface SchemaDataInput extends SchemaMetadata {
  name: string;
  description?: string;
  jsonSchema: string;
  ldContext: string;
  /** DEPRECATED */
  ldContextPlus?: string;
}
 
/** Data format returned by API. */
export interface SchemaDataResponse extends SchemaDataInput {
  id: string;
  created: string;
  updated: string;
  tenant: any;
  deleted?: string;
  favorite?: boolean;
  favoriteCount?: number;
  creator?: {
    name: string;
    /** username */
    nickName: string;
    picture: string;
    /** JWT subject */
    identifier: string;
  };
  ipfsHash?: {
    jsonSchema?: string;
    ldContext?: string;
  };
}
 
export const defaultSchemaProperties = [
  {
    $linkedData: {
      term: "id",
      "@id": "@id",
    },
    title: "Credential ID",
    type: "string",
    format: "uri",
  },
  {
    $linkedData: {
      term: "issuanceDate",
      "@id": "http://schema.org/DateTime",
    },
    title: "Issuance Date",
    type: "string",
    format: "date-time",
  },
  {
    $linkedData: {
      term: "issuer",
      "@id": "@id",
    },
    title: "Issuer ID",
    type: "string",
    format: "uri",
  },
];
export const defaultSchemaPropertiesRequired = [false, true, true];
 
export const newSchemaAttribute: JsonSchemaNode = {
  $linkedData: {
    term: "",
    "@id": "http://schema.org/Text",
  },
  title: "",
  description: "",
  type: "string",
};
 
export const baseWorkingSchema: WorkingSchema = {
  $schema: "http://json-schema.org/draft-07/schema#",
 
  $metadata: {
    slug: "",
    version: "1.0",
    icon: "",
    discoverable: false,
  },
  title: "",
  description: "",
 
  ...baseVcJsonSchema,
 
  properties: {
    ...baseVcJsonSchema.properties,
    credentialSubject: {
      type: "object",
      required: [],
      properties: {
        id: {
          $linkedData: { term: "id", "@id": "@id" },
          title: "Credential Subject ID",
          type: "string",
          format: "uri",
        },
        "": {
          ...newSchemaAttribute,
        },
      },
    },
  },
};