import * as AsyncLRU from 'async-lru'
import * as jsonld from 'jsonld'
-import * as jsig from 'jsonld-signatures'
import { logger } from './logger'
const CACHE = {
'https://w3id.org/security/v1': {
'@context': {
- 'id': '@id',
- 'type': '@type',
+ id: '@id',
+ type: '@type',
- 'dc': 'http://purl.org/dc/terms/',
- 'sec': 'https://w3id.org/security#',
- 'xsd': 'http://www.w3.org/2001/XMLSchema#',
+ 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',
+ 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'
+ 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'
}
}
}
const lru = new AsyncLRU({
max: 10,
load: (url, cb) => {
- if (CACHE[ url ] !== undefined) {
+ if (CACHE[url] !== undefined) {
logger.debug('Using cache for JSON-LD %s.', url)
return cb(null, {
contextUrl: null,
- document: CACHE[ url ],
+ document: CACHE[url],
documentUrl: url
})
}
- nodeDocumentLoader(url, cb)
+ nodeDocumentLoader(url)
+ .then(value => cb(null, value))
+ .catch(err => cb(err))
}
})
-jsonld.documentLoader = (url, cb) => {
- lru.get(url, cb)
-}
+jsonld.documentLoader = (url) => {
+ return new Promise((res, rej) => {
+ lru.get(url, (err, value) => {
+ if (err) return rej(err)
-jsig.use('jsonld', jsonld)
+ return res(value)
+ })
+ })
+}
-export { jsig, jsonld }
+export { jsonld }