anon-identity
Version:
Decentralized identity framework with DIDs, Verifiable Credentials, and privacy-preserving selective disclosure
93 lines • 2.98 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CREDENTIAL_TYPES = exports.CREDENTIAL_CONTEXTS = exports.CONTACT_INFO_SCHEMA = exports.BASIC_PROFILE_SCHEMA = void 0;
exports.validateAttributes = validateAttributes;
exports.BASIC_PROFILE_SCHEMA = [
{
name: 'givenName',
type: 'string',
required: true
},
{
name: 'dateOfBirth',
type: 'date',
required: true
},
{
name: 'isOver18',
type: 'boolean',
required: false
}
];
exports.CONTACT_INFO_SCHEMA = [
{
name: 'phoneNumbers',
type: 'object',
required: false
},
{
name: 'emailAddresses',
type: 'object',
required: false
},
{
name: 'addresses',
type: 'object',
required: false
}
];
exports.CREDENTIAL_CONTEXTS = {
W3C_VC: 'https://www.w3.org/2018/credentials/v1',
BASIC_PROFILE: 'https://example.com/schemas/BasicProfile',
CONTACT_INFO: 'https://example.com/schemas/ContactInfo',
ED25519_2020: 'https://w3id.org/security/suites/ed25519-2020/v1'
};
exports.CREDENTIAL_TYPES = {
VERIFIABLE_CREDENTIAL: 'VerifiableCredential',
BASIC_PROFILE: 'BasicProfileCredential',
CONTACT_INFO: 'ContactInfoCredential'
};
function validateAttributes(attributes, schema) {
const errors = [];
for (const field of schema) {
const value = attributes[field.name];
if (field.required && (value === undefined || value === null)) {
errors.push(`Missing required field: ${field.name}`);
continue;
}
if (value !== undefined && value !== null) {
switch (field.type) {
case 'string':
if (typeof value !== 'string') {
errors.push(`Field ${field.name} must be a string`);
}
break;
case 'date':
if (typeof value !== 'string' || isNaN(Date.parse(value))) {
errors.push(`Field ${field.name} must be a valid date string`);
}
break;
case 'boolean':
if (typeof value !== 'boolean') {
errors.push(`Field ${field.name} must be a boolean`);
}
break;
case 'number':
if (typeof value !== 'number' || isNaN(value)) {
errors.push(`Field ${field.name} must be a number`);
}
break;
case 'object':
if (typeof value !== 'object' || value === null) {
errors.push(`Field ${field.name} must be an object`);
}
break;
}
}
}
return {
valid: errors.length === 0,
errors
};
}
//# sourceMappingURL=schemas.js.map