egirlskey/packages/backend/src/core/activitypub/misc/contexts.ts

534 lines
13 KiB
TypeScript

/*
* SPDX-FileCopyrightText: syuilo and misskey-project
* SPDX-License-Identifier: AGPL-3.0-only
*/
import type { JsonLd } from 'jsonld/jsonld-spec.js';
/* eslint:disable:quotemark indent */
const id_v1 = {
'@context': {
'id': '@id',
'type': '@type',
'cred': 'https://w3id.org/credentials#',
'dc': 'http://purl.org/dc/terms/',
'identity': 'https://w3id.org/identity#',
'perm': 'https://w3id.org/permissions#',
'ps': 'https://w3id.org/payswarm#',
'rdf': 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
'rdfs': 'http://www.w3.org/2000/01/rdf-schema#',
'sec': 'https://w3id.org/security#',
'schema': 'http://schema.org/',
'xsd': 'http://www.w3.org/2001/XMLSchema#',
'Group': 'https://www.w3.org/ns/activitystreams#Group',
'claim': { '@id': 'cred:claim', '@type': '@id' },
'credential': { '@id': 'cred:credential', '@type': '@id' },
'issued': { '@id': 'cred:issued', '@type': 'xsd:dateTime' },
'issuer': { '@id': 'cred:issuer', '@type': '@id' },
'recipient': { '@id': 'cred:recipient', '@type': '@id' },
'Credential': 'cred:Credential',
'CryptographicKeyCredential': 'cred:CryptographicKeyCredential',
'about': { '@id': 'schema:about', '@type': '@id' },
'address': { '@id': 'schema:address', '@type': '@id' },
'addressCountry': 'schema:addressCountry',
'addressLocality': 'schema:addressLocality',
'addressRegion': 'schema:addressRegion',
'comment': 'rdfs:comment',
'created': { '@id': 'dc:created', '@type': 'xsd:dateTime' },
'creator': { '@id': 'dc:creator', '@type': '@id' },
'description': 'schema:description',
'email': 'schema:email',
'familyName': 'schema:familyName',
'givenName': 'schema:givenName',
'image': { '@id': 'schema:image', '@type': '@id' },
'label': 'rdfs:label',
'name': 'schema:name',
'postalCode': 'schema:postalCode',
'streetAddress': 'schema:streetAddress',
'title': 'dc:title',
'url': { '@id': 'schema:url', '@type': '@id' },
'Person': 'schema:Person',
'PostalAddress': 'schema:PostalAddress',
'Organization': 'schema:Organization',
'identityService': { '@id': 'identity:identityService', '@type': '@id' },
'idp': { '@id': 'identity:idp', '@type': '@id' },
'Identity': 'identity:Identity',
'paymentProcessor': 'ps:processor',
'preferences': { '@id': 'ps:preferences', '@type': '@vocab' },
'cipherAlgorithm': 'sec:cipherAlgorithm',
'cipherData': 'sec:cipherData',
'cipherKey': 'sec:cipherKey',
'digestAlgorithm': 'sec:digestAlgorithm',
'digestValue': 'sec:digestValue',
'domain': 'sec:domain',
'expires': { '@id': 'sec:expiration', '@type': 'xsd:dateTime' },
'initializationVector': 'sec:initializationVector',
'member': { '@id': 'schema:member', '@type': '@id' },
'memberOf': { '@id': 'schema:memberOf', '@type': '@id' },
'nonce': 'sec:nonce',
'normalizationAlgorithm': 'sec:normalizationAlgorithm',
'owner': { '@id': 'sec:owner', '@type': '@id' },
'password': 'sec:password',
'privateKey': { '@id': 'sec:privateKey', '@type': '@id' },
'privateKeyPem': 'sec:privateKeyPem',
'publicKey': { '@id': 'sec:publicKey', '@type': '@id' },
'publicKeyPem': 'sec:publicKeyPem',
'publicKeyService': { '@id': 'sec:publicKeyService', '@type': '@id' },
'revoked': { '@id': 'sec:revoked', '@type': 'xsd:dateTime' },
'signature': 'sec:signature',
'signatureAlgorithm': 'sec:signatureAlgorithm',
'signatureValue': 'sec:signatureValue',
'CryptographicKey': 'sec:Key',
'EncryptedMessage': 'sec:EncryptedMessage',
'GraphSignature2012': 'sec:GraphSignature2012',
'LinkedDataSignature2015': 'sec:LinkedDataSignature2015',
'accessControl': { '@id': 'perm:accessControl', '@type': '@id' },
'writePermission': { '@id': 'perm:writePermission', '@type': '@id' },
},
} satisfies JsonLd;
const security_v1 = {
'@context': {
'id': '@id',
'type': '@type',
'dc': 'http://purl.org/dc/terms/',
'sec': 'https://w3id.org/security#',
'xsd': 'http://www.w3.org/2001/XMLSchema#',
'EcdsaKoblitzSignature2016': 'sec:EcdsaKoblitzSignature2016',
'Ed25519Signature2018': 'sec:Ed25519Signature2018',
'EncryptedMessage': 'sec:EncryptedMessage',
'GraphSignature2012': 'sec:GraphSignature2012',
'LinkedDataSignature2015': 'sec:LinkedDataSignature2015',
'LinkedDataSignature2016': 'sec:LinkedDataSignature2016',
'CryptographicKey': 'sec:Key',
'authenticationTag': 'sec:authenticationTag',
'canonicalizationAlgorithm': 'sec:canonicalizationAlgorithm',
'cipherAlgorithm': 'sec:cipherAlgorithm',
'cipherData': 'sec:cipherData',
'cipherKey': 'sec:cipherKey',
'created': { '@id': 'dc:created', '@type': 'xsd:dateTime' },
'creator': { '@id': 'dc:creator', '@type': '@id' },
'digestAlgorithm': 'sec:digestAlgorithm',
'digestValue': 'sec:digestValue',
'domain': 'sec:domain',
'encryptionKey': 'sec:encryptionKey',
'expiration': { '@id': 'sec:expiration', '@type': 'xsd:dateTime' },
'expires': { '@id': 'sec:expiration', '@type': 'xsd:dateTime' },
'initializationVector': 'sec:initializationVector',
'iterationCount': 'sec:iterationCount',
'nonce': 'sec:nonce',
'normalizationAlgorithm': 'sec:normalizationAlgorithm',
'owner': { '@id': 'sec:owner', '@type': '@id' },
'password': 'sec:password',
'privateKey': { '@id': 'sec:privateKey', '@type': '@id' },
'privateKeyPem': 'sec:privateKeyPem',
'publicKey': { '@id': 'sec:publicKey', '@type': '@id' },
'publicKeyBase58': 'sec:publicKeyBase58',
'publicKeyPem': 'sec:publicKeyPem',
'publicKeyWif': 'sec:publicKeyWif',
'publicKeyService': { '@id': 'sec:publicKeyService', '@type': '@id' },
'revoked': { '@id': 'sec:revoked', '@type': 'xsd:dateTime' },
'salt': 'sec:salt',
'signature': 'sec:signature',
'signatureAlgorithm': 'sec:signingAlgorithm',
'signatureValue': 'sec:signatureValue',
},
} satisfies JsonLd;
const activitystreams = {
'@context': {
'@vocab': '_:',
'xsd': 'http://www.w3.org/2001/XMLSchema#',
'as': 'https://www.w3.org/ns/activitystreams#',
'ldp': 'http://www.w3.org/ns/ldp#',
'vcard': 'http://www.w3.org/2006/vcard/ns#',
'id': '@id',
'type': '@type',
'Accept': 'as:Accept',
'Activity': 'as:Activity',
'IntransitiveActivity': 'as:IntransitiveActivity',
'Add': 'as:Add',
'Announce': 'as:Announce',
'Application': 'as:Application',
'Arrive': 'as:Arrive',
'Article': 'as:Article',
'Audio': 'as:Audio',
'Block': 'as:Block',
'Collection': 'as:Collection',
'CollectionPage': 'as:CollectionPage',
'Relationship': 'as:Relationship',
'Create': 'as:Create',
'Delete': 'as:Delete',
'Dislike': 'as:Dislike',
'Document': 'as:Document',
'Event': 'as:Event',
'Follow': 'as:Follow',
'Flag': 'as:Flag',
'Group': 'as:Group',
'Ignore': 'as:Ignore',
'Image': 'as:Image',
'Invite': 'as:Invite',
'Join': 'as:Join',
'Leave': 'as:Leave',
'Like': 'as:Like',
'Link': 'as:Link',
'Mention': 'as:Mention',
'Note': 'as:Note',
'Object': 'as:Object',
'Offer': 'as:Offer',
'OrderedCollection': 'as:OrderedCollection',
'OrderedCollectionPage': 'as:OrderedCollectionPage',
'Organization': 'as:Organization',
'Page': 'as:Page',
'Person': 'as:Person',
'Place': 'as:Place',
'Profile': 'as:Profile',
'Question': 'as:Question',
'Reject': 'as:Reject',
'Remove': 'as:Remove',
'Service': 'as:Service',
'TentativeAccept': 'as:TentativeAccept',
'TentativeReject': 'as:TentativeReject',
'Tombstone': 'as:Tombstone',
'Undo': 'as:Undo',
'Update': 'as:Update',
'Video': 'as:Video',
'View': 'as:View',
'Listen': 'as:Listen',
'Read': 'as:Read',
'Move': 'as:Move',
'Travel': 'as:Travel',
'IsFollowing': 'as:IsFollowing',
'IsFollowedBy': 'as:IsFollowedBy',
'IsContact': 'as:IsContact',
'IsMember': 'as:IsMember',
'subject': {
'@id': 'as:subject',
'@type': '@id',
},
'relationship': {
'@id': 'as:relationship',
'@type': '@id',
},
'actor': {
'@id': 'as:actor',
'@type': '@id',
},
'attributedTo': {
'@id': 'as:attributedTo',
'@type': '@id',
},
'attachment': {
'@id': 'as:attachment',
'@type': '@id',
},
'bcc': {
'@id': 'as:bcc',
'@type': '@id',
},
'bto': {
'@id': 'as:bto',
'@type': '@id',
},
'cc': {
'@id': 'as:cc',
'@type': '@id',
},
'context': {
'@id': 'as:context',
'@type': '@id',
},
'current': {
'@id': 'as:current',
'@type': '@id',
},
'first': {
'@id': 'as:first',
'@type': '@id',
},
'generator': {
'@id': 'as:generator',
'@type': '@id',
},
'icon': {
'@id': 'as:icon',
'@type': '@id',
},
'image': {
'@id': 'as:image',
'@type': '@id',
},
'inReplyTo': {
'@id': 'as:inReplyTo',
'@type': '@id',
},
'items': {
'@id': 'as:items',
'@type': '@id',
},
'instrument': {
'@id': 'as:instrument',
'@type': '@id',
},
'orderedItems': {
'@id': 'as:items',
'@type': '@id',
'@container': '@list',
},
'last': {
'@id': 'as:last',
'@type': '@id',
},
'location': {
'@id': 'as:location',
'@type': '@id',
},
'next': {
'@id': 'as:next',
'@type': '@id',
},
'object': {
'@id': 'as:object',
'@type': '@id',
},
'oneOf': {
'@id': 'as:oneOf',
'@type': '@id',
},
'anyOf': {
'@id': 'as:anyOf',
'@type': '@id',
},
'closed': {
'@id': 'as:closed',
'@type': 'xsd:dateTime',
},
'origin': {
'@id': 'as:origin',
'@type': '@id',
},
'accuracy': {
'@id': 'as:accuracy',
'@type': 'xsd:float',
},
'prev': {
'@id': 'as:prev',
'@type': '@id',
},
'preview': {
'@id': 'as:preview',
'@type': '@id',
},
'replies': {
'@id': 'as:replies',
'@type': '@id',
},
'result': {
'@id': 'as:result',
'@type': '@id',
},
'audience': {
'@id': 'as:audience',
'@type': '@id',
},
'partOf': {
'@id': 'as:partOf',
'@type': '@id',
},
'tag': {
'@id': 'as:tag',
'@type': '@id',
},
'target': {
'@id': 'as:target',
'@type': '@id',
},
'to': {
'@id': 'as:to',
'@type': '@id',
},
'url': {
'@id': 'as:url',
'@type': '@id',
},
'altitude': {
'@id': 'as:altitude',
'@type': 'xsd:float',
},
'content': 'as:content',
'contentMap': {
'@id': 'as:content',
'@container': '@language',
},
'name': 'as:name',
'nameMap': {
'@id': 'as:name',
'@container': '@language',
},
'duration': {
'@id': 'as:duration',
'@type': 'xsd:duration',
},
'endTime': {
'@id': 'as:endTime',
'@type': 'xsd:dateTime',
},
'height': {
'@id': 'as:height',
'@type': 'xsd:nonNegativeInteger',
},
'href': {
'@id': 'as:href',
'@type': '@id',
},
'hreflang': 'as:hreflang',
'latitude': {
'@id': 'as:latitude',
'@type': 'xsd:float',
},
'longitude': {
'@id': 'as:longitude',
'@type': 'xsd:float',
},
'mediaType': 'as:mediaType',
'published': {
'@id': 'as:published',
'@type': 'xsd:dateTime',
},
'radius': {
'@id': 'as:radius',
'@type': 'xsd:float',
},
'rel': 'as:rel',
'startIndex': {
'@id': 'as:startIndex',
'@type': 'xsd:nonNegativeInteger',
},
'startTime': {
'@id': 'as:startTime',
'@type': 'xsd:dateTime',
},
'summary': 'as:summary',
'summaryMap': {
'@id': 'as:summary',
'@container': '@language',
},
'totalItems': {
'@id': 'as:totalItems',
'@type': 'xsd:nonNegativeInteger',
},
'units': 'as:units',
'updated': {
'@id': 'as:updated',
'@type': 'xsd:dateTime',
},
'width': {
'@id': 'as:width',
'@type': 'xsd:nonNegativeInteger',
},
'describes': {
'@id': 'as:describes',
'@type': '@id',
},
'formerType': {
'@id': 'as:formerType',
'@type': '@id',
},
'deleted': {
'@id': 'as:deleted',
'@type': 'xsd:dateTime',
},
'inbox': {
'@id': 'ldp:inbox',
'@type': '@id',
},
'outbox': {
'@id': 'as:outbox',
'@type': '@id',
},
'following': {
'@id': 'as:following',
'@type': '@id',
},
'followers': {
'@id': 'as:followers',
'@type': '@id',
},
'streams': {
'@id': 'as:streams',
'@type': '@id',
},
'preferredUsername': 'as:preferredUsername',
'endpoints': {
'@id': 'as:endpoints',
'@type': '@id',
},
'uploadMedia': {
'@id': 'as:uploadMedia',
'@type': '@id',
},
'proxyUrl': {
'@id': 'as:proxyUrl',
'@type': '@id',
},
'liked': {
'@id': 'as:liked',
'@type': '@id',
},
'oauthAuthorizationEndpoint': {
'@id': 'as:oauthAuthorizationEndpoint',
'@type': '@id',
},
'oauthTokenEndpoint': {
'@id': 'as:oauthTokenEndpoint',
'@type': '@id',
},
'provideClientKey': {
'@id': 'as:provideClientKey',
'@type': '@id',
},
'signClientKey': {
'@id': 'as:signClientKey',
'@type': '@id',
},
'sharedInbox': {
'@id': 'as:sharedInbox',
'@type': '@id',
},
'Public': {
'@id': 'as:Public',
'@type': '@id',
},
'source': 'as:source',
'likes': {
'@id': 'as:likes',
'@type': '@id',
},
'shares': {
'@id': 'as:shares',
'@type': '@id',
},
'alsoKnownAs': {
'@id': 'as:alsoKnownAs',
'@type': '@id',
},
},
} satisfies JsonLd;
export const CONTEXTS: Record<string, JsonLd> = {
'https://w3id.org/identity/v1': id_v1,
'https://w3id.org/security/v1': security_v1,
'https://www.w3.org/ns/activitystreams': activitystreams,
};