Skip to content

Instantly share code, notes, and snippets.

@jakubkoci
Created August 31, 2023 08:49
Show Gist options
  • Save jakubkoci/26cb093d274bf61d982b4c56e05d9ebc to your computer and use it in GitHub Desktop.
Save jakubkoci/26cb093d274bf61d982b4c56e05d9ebc to your computer and use it in GitHub Desktop.
SSI fully qualified schema ID conversion
describe('convert schema ID', () => {
test('converts unqualified to fully qualified', () => {
const result = convertToFullyQualified(
'did:indy:sovrin',
'2NPnMDv5Lh57gVZ3p3SYu3:2:e-KYC:1.0.0',
)
console.log(result)
expect(result).toEqual(
'did:indy:sovrin:2NPnMDv5Lh57gVZ3p3SYu3/anoncreds/v0/SCHEMA/e-KYC/1.0.0',
)
})
test('converts fully qualified to unqualified', () => {
const result = convertToUnqualified(
'did:indy:sovrin:2NPnMDv5Lh57gVZ3p3SYu3/anoncreds/v0/SCHEMA/e-KYC/1.0.0',
)
console.log(result)
expect(result).toEqual({
ledger: 'did:indy:sovrin',
schemaId: '2NPnMDv5Lh57gVZ3p3SYu3:2:e-KYC:1.0.0',
})
})
})
function convertToFullyQualified(
didPrefix: string,
unqualifiedSchemaId: string,
) {
const [unqualifiedDid, objectTypeNumber, schemaName, schemaVersion] =
unqualifiedSchemaId.split(':')
const objectTypeString = mapObjectTypeNumberToString[objectTypeNumber]
return `${didPrefix}:${unqualifiedDid}/anoncreds/v0/${objectTypeString}/${schemaName}/${schemaVersion}`
}
function convertToUnqualified(fullyQualified: string) {
const ledger = fullyQualified.split(':').slice(0, -1).join(':')
const [ledgerObject] = fullyQualified.split(':').slice(-1)
const [
unqualifiedDid,
objectFamily,
objectFamilyVersion,
objectTypeString,
schemaName,
schemaVersion,
] = ledgerObject.split('/')
const objectTypeNumber = mapObjectTypeStringToNumber[objectTypeString]
return {
ledger,
schemaId: `${unqualifiedDid}:${objectTypeNumber}:${schemaName}:${schemaVersion}`,
}
}
const mapObjectTypeNumberToString: Record<string, string> = {
'2': 'SCHEMA',
}
const mapObjectTypeStringToNumber: Record<string, string> = {
SCHEMA: '2',
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment