@did-core/data-model
npm i @did-core/data-model --save
Usage
import { factory, DidDocument } from '@did-core/data-model';
import { representation } from '@did-core/did-ld-json';
const didDocument: DidDocument = factory.build({
entries: {
id: 'did:example:123',
},
});
For use with Verifiable Credentials
didDocument.addRepresentation({ 'application/did+ld+json': representation });
try {
await didDocument.produce('application/did+ld+json');
} catch (e) {
expect(e.message).toBe('@context is required and not present.');
}
didDocument.assign({
'@context': 'https://www.w3.org/ns/did/v1',
});
const serialization = await didDocument.produce('application/did+ld+json');
expect(JSON.parse(serialization.toString())).toEqual({
'@context': 'https://www.w3.org/ns/did/v1',
id: 'did:example:123',
});
const didDocument = factory.build({
entries: {
'@context': ['https://www.w3.org/ns/did/v1'],
id: 'did:example:123',
'🔥': '💩',
},
});
didDocument.addRepresentation({ 'application/did+ld+json': representation });
try {
await didDocument.produce('application/did+ld+json');
} catch (e) {
expect(e.message).toBe('@context does not define: 🔥');
}
didDocument.assign({
'@context': [
'https://www.w3.org/ns/did/v1',
{
'🔥': 'https://en.wikipedia.org/wiki/Open-world_assumption',
},
],
});
const serialization = await didDocument.produce('application/did+ld+json');
expect(JSON.parse(serialization.toString())).toEqual({
'@context': [
'https://www.w3.org/ns/did/v1',
{
'🔥': 'https://en.wikipedia.org/wiki/Open-world_assumption',
},
],
id: 'did:example:123',
'🔥': '💩',
});
What about other representations?
application/did+dag+cbor
import { factory } from '@did-core/data-model';
import { representation } from '@did-core/did-dag-cbor';
const serialization = await factory
.build({ entries: { id: 'did:example:123' } })
.addRepresentation({ 'application/did+dag+cbor': representation })
.produce('application/did+dag+cbor');
expect(serialization.toString('hex')).toBe(
'a16269646f6469643a6578616d706c653a313233'
);
application/did+json
import { factory } from '@did-core/data-model';
import { representation } from '@did-core/did-json';
const didDocument = await factory
.build()
.addRepresentation({ 'application/did+json': representation })
.consume(
'application/did+json',
Buffer.from(
`{"id": "did:example:123","__proto__":{"isAdmin": "Let json be json!"}}`
)
);
const serialization = await didDocument
.assign({ 'this is safe': 'right guys...?' })
.produce('application/did+json');
expect(JSON.parse(serialization.toString())).toEqual({
id: 'did:example:123',
'this is safe': 'right guys...?',
});