34fad7eaaf
refs #10593 - Added `canonical_url` field to post&pages resources in Admin & Content APIs - Support for canonical URL on metadata layer (used in {{ghost_head}} helper) - Made sure the new field is not accessible from API v0.1 - Added handling same domain relative and absolute URLs
409 lines
22 KiB
JavaScript
409 lines
22 KiB
JavaScript
/* String Column Sizes Information
|
|
* (From: https://github.com/TryGhost/Ghost/pull/7932)
|
|
*
|
|
* Small strings = length 50
|
|
* Medium strings = length 191
|
|
* Large strings = length 1000-2000
|
|
* Text = length 65535 (64 KiB)
|
|
* Long text = length 1,000,000,000
|
|
*/
|
|
module.exports = {
|
|
posts: {
|
|
id: {type: 'string', maxlength: 24, nullable: false, primary: true},
|
|
uuid: {type: 'string', maxlength: 36, nullable: false, validations: {isUUID: true}},
|
|
title: {type: 'string', maxlength: 2000, nullable: false, validations: {isLength: {max: 255}}},
|
|
slug: {type: 'string', maxlength: 191, nullable: false, unique: true},
|
|
mobiledoc: {type: 'text', maxlength: 1000000000, fieldtype: 'long', nullable: true},
|
|
html: {type: 'text', maxlength: 1000000000, fieldtype: 'long', nullable: true},
|
|
comment_id: {type: 'string', maxlength: 50, nullable: true},
|
|
plaintext: {type: 'text', maxlength: 1000000000, fieldtype: 'long', nullable: true},
|
|
feature_image: {type: 'string', maxlength: 2000, nullable: true},
|
|
featured: {type: 'bool', nullable: false, defaultTo: false},
|
|
page: {type: 'bool', nullable: false, defaultTo: false},
|
|
status: {type: 'string', maxlength: 50, nullable: false, defaultTo: 'draft'},
|
|
locale: {type: 'string', maxlength: 6, nullable: true},
|
|
visibility: {
|
|
type: 'string',
|
|
maxlength: 50,
|
|
nullable: false,
|
|
defaultTo: 'public',
|
|
validations: {isIn: [['public']]}
|
|
},
|
|
meta_title: {type: 'string', maxlength: 2000, nullable: true, validations: {isLength: {max: 300}}},
|
|
meta_description: {type: 'string', maxlength: 2000, nullable: true, validations: {isLength: {max: 500}}},
|
|
/**
|
|
* @deprecated: `author_id`, might be removed in Ghost 3.0
|
|
* If we keep it, then only, because you can easier query post.author_id than posts_authors[*].sort_order.
|
|
*/
|
|
author_id: {type: 'string', maxlength: 24, nullable: false},
|
|
created_at: {type: 'dateTime', nullable: false},
|
|
/**
|
|
* @deprecated: https://github.com/TryGhost/Ghost/issues/10286
|
|
*
|
|
* This is valid for all x_by fields.
|
|
*/
|
|
created_by: {type: 'string', maxlength: 24, nullable: false},
|
|
updated_at: {type: 'dateTime', nullable: true},
|
|
updated_by: {type: 'string', maxlength: 24, nullable: true},
|
|
published_at: {type: 'dateTime', nullable: true},
|
|
published_by: {type: 'string', maxlength: 24, nullable: true},
|
|
custom_excerpt: {type: 'string', maxlength: 2000, nullable: true, validations: {isLength: {max: 300}}},
|
|
codeinjection_head: {type: 'text', maxlength: 65535, nullable: true},
|
|
codeinjection_foot: {type: 'text', maxlength: 65535, nullable: true},
|
|
og_image: {type: 'string', maxlength: 2000, nullable: true},
|
|
og_title: {type: 'string', maxlength: 300, nullable: true},
|
|
og_description: {type: 'string', maxlength: 500, nullable: true},
|
|
twitter_image: {type: 'string', maxlength: 2000, nullable: true},
|
|
twitter_title: {type: 'string', maxlength: 300, nullable: true},
|
|
twitter_description: {type: 'string', maxlength: 500, nullable: true},
|
|
custom_template: {type: 'string', maxlength: 100, nullable: true},
|
|
canonical_url: {type: 'text', maxlength: 2000, nullable: true}
|
|
},
|
|
users: {
|
|
id: {type: 'string', maxlength: 24, nullable: false, primary: true},
|
|
name: {type: 'string', maxlength: 191, nullable: false},
|
|
slug: {type: 'string', maxlength: 191, nullable: false, unique: true},
|
|
ghost_auth_access_token: {type: 'string', maxlength: 32, nullable: true},
|
|
ghost_auth_id: {type: 'string', maxlength: 24, nullable: true},
|
|
password: {type: 'string', maxlength: 60, nullable: false},
|
|
email: {type: 'string', maxlength: 191, nullable: false, unique: true, validations: {isEmail: true}},
|
|
profile_image: {type: 'string', maxlength: 2000, nullable: true},
|
|
cover_image: {type: 'string', maxlength: 2000, nullable: true},
|
|
bio: {type: 'text', maxlength: 65535, nullable: true, validations: {isLength: {max: 200}}},
|
|
website: {type: 'string', maxlength: 2000, nullable: true, validations: {isEmptyOrURL: true}},
|
|
location: {type: 'text', maxlength: 65535, nullable: true, validations: {isLength: {max: 150}}},
|
|
facebook: {type: 'string', maxlength: 2000, nullable: true},
|
|
twitter: {type: 'string', maxlength: 2000, nullable: true},
|
|
accessibility: {type: 'text', maxlength: 65535, nullable: true},
|
|
status: {type: 'string', maxlength: 50, nullable: false, defaultTo: 'active'},
|
|
locale: {type: 'string', maxlength: 6, nullable: true},
|
|
visibility: {
|
|
type: 'string',
|
|
maxlength: 50,
|
|
nullable: false,
|
|
defaultTo: 'public',
|
|
validations: {isIn: [['public']]}
|
|
},
|
|
meta_title: {type: 'string', maxlength: 2000, nullable: true, validations: {isLength: {max: 300}}},
|
|
meta_description: {type: 'string', maxlength: 2000, nullable: true, validations: {isLength: {max: 500}}},
|
|
tour: {type: 'text', maxlength: 65535, nullable: true},
|
|
last_seen: {type: 'dateTime', nullable: true},
|
|
created_at: {type: 'dateTime', nullable: false},
|
|
created_by: {type: 'string', maxlength: 24, nullable: false},
|
|
updated_at: {type: 'dateTime', nullable: true},
|
|
updated_by: {type: 'string', maxlength: 24, nullable: true}
|
|
},
|
|
posts_authors: {
|
|
id: {type: 'string', maxlength: 24, nullable: false, primary: true},
|
|
post_id: {type: 'string', maxlength: 24, nullable: false, references: 'posts.id'},
|
|
author_id: {type: 'string', maxlength: 24, nullable: false, references: 'users.id'},
|
|
sort_order: {type: 'integer', nullable: false, unsigned: true, defaultTo: 0}
|
|
},
|
|
roles: {
|
|
id: {type: 'string', maxlength: 24, nullable: false, primary: true},
|
|
name: {type: 'string', maxlength: 50, nullable: false, unique: true},
|
|
description: {type: 'string', maxlength: 2000, nullable: true},
|
|
created_at: {type: 'dateTime', nullable: false},
|
|
created_by: {type: 'string', maxlength: 24, nullable: false},
|
|
updated_at: {type: 'dateTime', nullable: true},
|
|
updated_by: {type: 'string', maxlength: 24, nullable: true}
|
|
},
|
|
roles_users: {
|
|
id: {type: 'string', maxlength: 24, nullable: false, primary: true},
|
|
role_id: {type: 'string', maxlength: 24, nullable: false},
|
|
user_id: {type: 'string', maxlength: 24, nullable: false}
|
|
},
|
|
permissions: {
|
|
id: {type: 'string', maxlength: 24, nullable: false, primary: true},
|
|
name: {type: 'string', maxlength: 50, nullable: false, unique: true},
|
|
object_type: {type: 'string', maxlength: 50, nullable: false},
|
|
action_type: {type: 'string', maxlength: 50, nullable: false},
|
|
object_id: {type: 'string', maxlength: 24, nullable: true},
|
|
created_at: {type: 'dateTime', nullable: false},
|
|
created_by: {type: 'string', maxlength: 24, nullable: false},
|
|
updated_at: {type: 'dateTime', nullable: true},
|
|
updated_by: {type: 'string', maxlength: 24, nullable: true}
|
|
},
|
|
permissions_users: {
|
|
id: {type: 'string', maxlength: 24, nullable: false, primary: true},
|
|
user_id: {type: 'string', maxlength: 24, nullable: false},
|
|
permission_id: {type: 'string', maxlength: 24, nullable: false}
|
|
},
|
|
permissions_roles: {
|
|
id: {type: 'string', maxlength: 24, nullable: false, primary: true},
|
|
role_id: {type: 'string', maxlength: 24, nullable: false},
|
|
permission_id: {type: 'string', maxlength: 24, nullable: false}
|
|
},
|
|
permissions_apps: {
|
|
id: {type: 'string', maxlength: 24, nullable: false, primary: true},
|
|
app_id: {type: 'string', maxlength: 24, nullable: false},
|
|
permission_id: {type: 'string', maxlength: 24, nullable: false}
|
|
},
|
|
settings: {
|
|
id: {type: 'string', maxlength: 24, nullable: false, primary: true},
|
|
key: {type: 'string', maxlength: 50, nullable: false, unique: true},
|
|
value: {type: 'text', maxlength: 65535, nullable: true},
|
|
type: {
|
|
type: 'string',
|
|
maxlength: 50,
|
|
nullable: false,
|
|
defaultTo: 'core',
|
|
validations: {isIn: [['core', 'blog', 'theme', 'app', 'plugin', 'private', 'members']]}
|
|
},
|
|
created_at: {type: 'dateTime', nullable: false},
|
|
created_by: {type: 'string', maxlength: 24, nullable: false},
|
|
updated_at: {type: 'dateTime', nullable: true},
|
|
updated_by: {type: 'string', maxlength: 24, nullable: true}
|
|
},
|
|
tags: {
|
|
id: {type: 'string', maxlength: 24, nullable: false, primary: true},
|
|
name: {type: 'string', maxlength: 191, nullable: false, validations: {matches: /^([^,]|$)/}},
|
|
slug: {type: 'string', maxlength: 191, nullable: false, unique: true},
|
|
description: {type: 'text', maxlength: 65535, nullable: true, validations: {isLength: {max: 500}}},
|
|
feature_image: {type: 'string', maxlength: 2000, nullable: true},
|
|
parent_id: {type: 'string', nullable: true},
|
|
visibility: {
|
|
type: 'string',
|
|
maxlength: 50,
|
|
nullable: false,
|
|
defaultTo: 'public',
|
|
validations: {isIn: [['public', 'internal']]}
|
|
},
|
|
meta_title: {type: 'string', maxlength: 2000, nullable: true, validations: {isLength: {max: 300}}},
|
|
meta_description: {type: 'string', maxlength: 2000, nullable: true, validations: {isLength: {max: 500}}},
|
|
created_at: {type: 'dateTime', nullable: false},
|
|
created_by: {type: 'string', maxlength: 24, nullable: false},
|
|
updated_at: {type: 'dateTime', nullable: true},
|
|
updated_by: {type: 'string', maxlength: 24, nullable: true}
|
|
},
|
|
posts_tags: {
|
|
id: {type: 'string', maxlength: 24, nullable: false, primary: true},
|
|
post_id: {type: 'string', maxlength: 24, nullable: false, references: 'posts.id'},
|
|
tag_id: {type: 'string', maxlength: 24, nullable: false, references: 'tags.id'},
|
|
sort_order: {type: 'integer', nullable: false, unsigned: true, defaultTo: 0}
|
|
},
|
|
apps: {
|
|
id: {type: 'string', maxlength: 24, nullable: false, primary: true},
|
|
name: {type: 'string', maxlength: 191, nullable: false, unique: true},
|
|
slug: {type: 'string', maxlength: 191, nullable: false, unique: true},
|
|
version: {type: 'string', maxlength: 50, nullable: false},
|
|
status: {type: 'string', maxlength: 50, nullable: false, defaultTo: 'inactive'},
|
|
created_at: {type: 'dateTime', nullable: false},
|
|
created_by: {type: 'string', maxlength: 24, nullable: false},
|
|
updated_at: {type: 'dateTime', nullable: true},
|
|
updated_by: {type: 'string', maxlength: 24, nullable: true}
|
|
},
|
|
app_settings: {
|
|
id: {type: 'string', maxlength: 24, nullable: false, primary: true},
|
|
key: {type: 'string', maxlength: 50, nullable: false, unique: true},
|
|
value: {type: 'text', maxlength: 65535, nullable: true},
|
|
app_id: {type: 'string', maxlength: 24, nullable: false, references: 'apps.id'},
|
|
created_at: {type: 'dateTime', nullable: false},
|
|
created_by: {type: 'string', maxlength: 24, nullable: false},
|
|
updated_at: {type: 'dateTime', nullable: true},
|
|
updated_by: {type: 'string', maxlength: 24, nullable: true}
|
|
},
|
|
app_fields: {
|
|
id: {type: 'string', maxlength: 24, nullable: false, primary: true},
|
|
key: {type: 'string', maxlength: 50, nullable: false},
|
|
value: {type: 'text', maxlength: 65535, nullable: true},
|
|
type: {type: 'string', maxlength: 50, nullable: false, defaultTo: 'html'},
|
|
app_id: {type: 'string', maxlength: 24, nullable: false, references: 'apps.id'},
|
|
relatable_id: {type: 'string', maxlength: 24, nullable: false},
|
|
relatable_type: {type: 'string', maxlength: 50, nullable: false, defaultTo: 'posts'},
|
|
active: {type: 'bool', nullable: false, defaultTo: true},
|
|
created_at: {type: 'dateTime', nullable: false},
|
|
created_by: {type: 'string', maxlength: 24, nullable: false},
|
|
updated_at: {type: 'dateTime', nullable: true},
|
|
updated_by: {type: 'string', maxlength: 24, nullable: true}
|
|
},
|
|
clients: {
|
|
id: {type: 'string', maxlength: 24, nullable: false, primary: true},
|
|
uuid: {type: 'string', maxlength: 36, nullable: false},
|
|
name: {type: 'string', maxlength: 50, nullable: false, unique: true},
|
|
slug: {type: 'string', maxlength: 50, nullable: false, unique: true},
|
|
secret: {type: 'string', maxlength: 191, nullable: false},
|
|
redirection_uri: {type: 'string', maxlength: 2000, nullable: true},
|
|
client_uri: {type: 'string', maxlength: 2000, nullable: true},
|
|
auth_uri: {type: 'string', maxlength: 2000, nullable: true},
|
|
logo: {type: 'string', maxlength: 2000, nullable: true},
|
|
status: {type: 'string', maxlength: 50, nullable: false, defaultTo: 'development'},
|
|
type: {
|
|
type: 'string',
|
|
maxlength: 50,
|
|
nullable: false,
|
|
defaultTo: 'ua',
|
|
validations: {isIn: [['ua', 'web', 'native']]}
|
|
},
|
|
description: {type: 'string', maxlength: 2000, nullable: true},
|
|
created_at: {type: 'dateTime', nullable: false},
|
|
created_by: {type: 'string', maxlength: 24, nullable: false},
|
|
updated_at: {type: 'dateTime', nullable: true},
|
|
updated_by: {type: 'string', maxlength: 24, nullable: true}
|
|
},
|
|
client_trusted_domains: {
|
|
id: {type: 'string', maxlength: 24, nullable: false, primary: true},
|
|
client_id: {type: 'string', maxlength: 24, nullable: false, references: 'clients.id'},
|
|
trusted_domain: {type: 'string', maxlength: 2000, nullable: true}
|
|
},
|
|
accesstokens: {
|
|
id: {type: 'string', maxlength: 24, nullable: false, primary: true},
|
|
token: {type: 'string', maxlength: 191, nullable: false, unique: true},
|
|
user_id: {type: 'string', maxlength: 24, nullable: false, references: 'users.id'},
|
|
client_id: {type: 'string', maxlength: 24, nullable: false, references: 'clients.id'},
|
|
issued_by: {type: 'string', maxlength: 24, nullable: true},
|
|
expires: {type: 'bigInteger', nullable: false}
|
|
},
|
|
refreshtokens: {
|
|
id: {type: 'string', maxlength: 24, nullable: false, primary: true},
|
|
token: {type: 'string', maxlength: 191, nullable: false, unique: true},
|
|
user_id: {type: 'string', maxlength: 24, nullable: false, references: 'users.id'},
|
|
client_id: {type: 'string', maxlength: 24, nullable: false, references: 'clients.id'},
|
|
expires: {type: 'bigInteger', nullable: false}
|
|
},
|
|
subscribers: {
|
|
id: {type: 'string', maxlength: 24, nullable: false, primary: true},
|
|
name: {type: 'string', maxlength: 191, nullable: true},
|
|
email: {type: 'string', maxlength: 191, nullable: false, unique: true, validations: {isEmail: true}},
|
|
status: {
|
|
type: 'string',
|
|
maxlength: 50,
|
|
nullable: false,
|
|
defaultTo: 'pending',
|
|
validations: {isIn: [['subscribed', 'pending', 'unsubscribed']]}
|
|
},
|
|
post_id: {type: 'string', maxlength: 24, nullable: true},
|
|
subscribed_url: {type: 'string', maxlength: 2000, nullable: true, validations: {isEmptyOrURL: true}},
|
|
subscribed_referrer: {type: 'string', maxlength: 2000, nullable: true, validations: {isEmptyOrURL: true}},
|
|
unsubscribed_url: {type: 'string', maxlength: 2000, nullable: true, validations: {isEmptyOrURL: true}},
|
|
unsubscribed_at: {type: 'dateTime', nullable: true},
|
|
created_at: {type: 'dateTime', nullable: false},
|
|
created_by: {type: 'string', maxlength: 24, nullable: false},
|
|
updated_at: {type: 'dateTime', nullable: true},
|
|
updated_by: {type: 'string', maxlength: 24, nullable: true}
|
|
},
|
|
invites: {
|
|
id: {type: 'string', maxlength: 24, nullable: false, primary: true},
|
|
role_id: {type: 'string', maxlength: 24, nullable: false},
|
|
status: {
|
|
type: 'string',
|
|
maxlength: 50,
|
|
nullable: false,
|
|
defaultTo: 'pending',
|
|
validations: {isIn: [['pending', 'sent']]}
|
|
},
|
|
token: {type: 'string', maxlength: 191, nullable: false, unique: true},
|
|
email: {type: 'string', maxlength: 191, nullable: false, unique: true, validations: {isEmail: true}},
|
|
expires: {type: 'bigInteger', nullable: false},
|
|
created_at: {type: 'dateTime', nullable: false},
|
|
created_by: {type: 'string', maxlength: 24, nullable: false},
|
|
updated_at: {type: 'dateTime', nullable: true},
|
|
updated_by: {type: 'string', maxlength: 24, nullable: true}
|
|
},
|
|
brute: {
|
|
key: {type: 'string', maxlength: 191},
|
|
firstRequest: {type: 'bigInteger'},
|
|
lastRequest: {type: 'bigInteger'},
|
|
lifetime: {type: 'bigInteger'},
|
|
count: {type: 'integer'}
|
|
},
|
|
webhooks: {
|
|
id: {type: 'string', maxlength: 24, nullable: false, primary: true},
|
|
event: {type: 'string', maxlength: 50, nullable: false, validations: {isLowercase: true}},
|
|
target_url: {type: 'string', maxlength: 2000, nullable: false},
|
|
name: {type: 'string', maxlength: 191, nullable: true},
|
|
secret: {type: 'string', maxlength: 191, nullable: true},
|
|
api_version: {type: 'string', maxlength: 50, nullable: false, defaultTo: 'v2'},
|
|
integration_id: {type: 'string', maxlength: 24, nullable: true},
|
|
status: {type: 'string', maxlength: 50, nullable: false, defaultTo: 'available'},
|
|
last_triggered_at: {type: 'dateTime', nullable: true},
|
|
last_triggered_status: {type: 'string', maxlength: 50, nullable: true},
|
|
last_triggered_error: {type: 'string', maxlength: 50, nullable: true},
|
|
created_at: {type: 'dateTime', nullable: false},
|
|
created_by: {type: 'string', maxlength: 24, nullable: false},
|
|
updated_at: {type: 'dateTime', nullable: true},
|
|
updated_by: {type: 'string', maxlength: 24, nullable: true}
|
|
},
|
|
sessions: {
|
|
id: {type: 'string', maxlength: 24, nullable: false, primary: true},
|
|
session_id: {type: 'string', maxlength: 32, nullable: false, unique: true},
|
|
user_id: {type: 'string', maxlength: 24, nullable: false},
|
|
session_data: {type: 'string', maxlength: 2000, nullable: false},
|
|
created_at: {type: 'dateTime', nullable: false},
|
|
updated_at: {type: 'dateTime', nullable: true}
|
|
},
|
|
integrations: {
|
|
id: {type: 'string', maxlength: 24, nullable: false, primary: true},
|
|
type: {
|
|
type: 'string',
|
|
maxlength: 50,
|
|
nullable: false,
|
|
defaultTo: 'custom',
|
|
validations: {isIn: [['internal', 'builtin', 'custom']]}
|
|
},
|
|
name: {type: 'string', maxlength: 191, nullable: false},
|
|
slug: {type: 'string', maxlength: 191, nullable: false, unique: true},
|
|
icon_image: {type: 'string', maxlength: 2000, nullable: true},
|
|
description: {type: 'string', maxlength: 2000, nullable: true},
|
|
created_at: {type: 'dateTime', nullable: false},
|
|
created_by: {type: 'string', maxlength: 24, nullable: false},
|
|
updated_at: {type: 'dateTime', nullable: true},
|
|
updated_by: {type: 'string', maxlength: 24, nullable: true}
|
|
},
|
|
api_keys: {
|
|
id: {type: 'string', maxlength: 24, nullable: false, primary: true},
|
|
type: {
|
|
type: 'string',
|
|
maxlength: 50,
|
|
nullable: false,
|
|
validations: {isIn: [['content', 'admin']]}
|
|
},
|
|
secret: {
|
|
type: 'string',
|
|
maxlength: 191,
|
|
nullable: false,
|
|
unique: true,
|
|
validations: {isLength: {min: 26, max: 128}}
|
|
},
|
|
role_id: {type: 'string', maxlength: 24, nullable: true},
|
|
// integration_id is nullable to allow "internal" API keys that don't show in the UI
|
|
integration_id: {type: 'string', maxlength: 24, nullable: true},
|
|
last_seen_at: {type: 'dateTime', nullable: true},
|
|
last_seen_version: {type: 'string', maxlength: 50, nullable: true},
|
|
created_at: {type: 'dateTime', nullable: false},
|
|
created_by: {type: 'string', maxlength: 24, nullable: false},
|
|
updated_at: {type: 'dateTime', nullable: true},
|
|
updated_by: {type: 'string', maxlength: 24, nullable: true}
|
|
},
|
|
mobiledoc_revisions: {
|
|
id: {type: 'string', maxlength: 24, nullable: false, primary: true},
|
|
post_id: {type: 'string', maxlength: 24, nullable: false, index: true},
|
|
mobiledoc: {type: 'text', maxlength: 1000000000, fieldtype: 'long', nullable: true},
|
|
created_at_ts: {type: 'bigInteger', nullable: false},
|
|
created_at: {type: 'dateTime', nullable: false}
|
|
},
|
|
members: {
|
|
id: {type: 'string', maxlength: 24, nullable: false, primary: true},
|
|
email: {type: 'string', maxlength: 191, nullable: false, unique: true, validations: {isEmail: true}},
|
|
name: {type: 'string', maxlength: 191, nullable: false},
|
|
password: {type: 'string', maxlength: 60, nullable: true},
|
|
created_at: {type: 'dateTime', nullable: false},
|
|
created_by: {type: 'string', maxlength: 24, nullable: false},
|
|
updated_at: {type: 'dateTime', nullable: true},
|
|
updated_by: {type: 'string', maxlength: 24, nullable: true}
|
|
},
|
|
actions: {
|
|
id: {type: 'string', maxlength: 24, nullable: false, primary: true},
|
|
resource_id: {type: 'string', maxlength: 24, nullable: true},
|
|
resource_type: {type: 'string', maxlength: 50, nullable: false},
|
|
actor_id: {type: 'string', maxlength: 24, nullable: false},
|
|
actor_type: {type: 'string', maxlength: 50, nullable: false},
|
|
// @NOTE: The event column contains short buzzwords e.g. subscribed, started, added, deleted, edited etc.
|
|
// We already store and require the target resource type. No need to remember e.g. post.edited
|
|
event: {type: 'string', maxlength: 50, nullable: false},
|
|
// @NOTE: The context object can be used to store information about an action e.g. diffs, meta
|
|
context: {type: 'text', maxlength: 1000000000, nullable: true},
|
|
created_at: {type: 'dateTime', nullable: false}
|
|
}
|
|
};
|