1 import AsyncLRU from 'async-lru'
2 import { logger } from './logger'
4 import jsonld = require('jsonld')
7 'https://w3id.org/security/v1': {
12 dc: 'http://purl.org/dc/terms/',
13 sec: 'https://w3id.org/security#',
14 xsd: 'http://www.w3.org/2001/XMLSchema#',
16 EcdsaKoblitzSignature2016: 'sec:EcdsaKoblitzSignature2016',
17 Ed25519Signature2018: 'sec:Ed25519Signature2018',
18 EncryptedMessage: 'sec:EncryptedMessage',
19 GraphSignature2012: 'sec:GraphSignature2012',
20 LinkedDataSignature2015: 'sec:LinkedDataSignature2015',
21 LinkedDataSignature2016: 'sec:LinkedDataSignature2016',
22 CryptographicKey: 'sec:Key',
24 authenticationTag: 'sec:authenticationTag',
25 canonicalizationAlgorithm: 'sec:canonicalizationAlgorithm',
26 cipherAlgorithm: 'sec:cipherAlgorithm',
27 cipherData: 'sec:cipherData',
28 cipherKey: 'sec:cipherKey',
29 created: { '@id': 'dc:created', '@type': 'xsd:dateTime' },
30 creator: { '@id': 'dc:creator', '@type': '@id' },
31 digestAlgorithm: 'sec:digestAlgorithm',
32 digestValue: 'sec:digestValue',
34 encryptionKey: 'sec:encryptionKey',
35 expiration: { '@id': 'sec:expiration', '@type': 'xsd:dateTime' },
36 expires: { '@id': 'sec:expiration', '@type': 'xsd:dateTime' },
37 initializationVector: 'sec:initializationVector',
38 iterationCount: 'sec:iterationCount',
40 normalizationAlgorithm: 'sec:normalizationAlgorithm',
41 owner: { '@id': 'sec:owner', '@type': '@id' },
42 password: 'sec:password',
43 privateKey: { '@id': 'sec:privateKey', '@type': '@id' },
44 privateKeyPem: 'sec:privateKeyPem',
45 publicKey: { '@id': 'sec:publicKey', '@type': '@id' },
46 publicKeyBase58: 'sec:publicKeyBase58',
47 publicKeyPem: 'sec:publicKeyPem',
48 publicKeyWif: 'sec:publicKeyWif',
49 publicKeyService: { '@id': 'sec:publicKeyService', '@type': '@id' },
50 revoked: { '@id': 'sec:revoked', '@type': 'xsd:dateTime' },
52 signature: 'sec:signature',
53 signatureAlgorithm: 'sec:signingAlgorithm',
54 signatureValue: 'sec:signatureValue'
59 const nodeDocumentLoader = jsonld.documentLoaders.node()
61 const lru = new AsyncLRU({
64 if (CACHE[url] !== undefined) {
65 logger.debug('Using cache for JSON-LD %s.', url)
74 nodeDocumentLoader(url)
75 .then(value => cb(null, value))
76 .catch(err => cb(err))
80 /* eslint-disable no-import-assign */
81 jsonld.documentLoader = (url) => {
82 return new Promise((res, rej) => {
83 lru.get(url, (err, value) => {
84 if (err) return rej(err)