30 lines
1.0 KiB
JavaScript
30 lines
1.0 KiB
JavaScript
export const NDC_CREDENTIAL_REFERENCE_OWNER = "ndc_l2_credentials";
|
|
|
|
const CREDENTIAL_REFERENCE_PATTERN =
|
|
/^ndc-credref:[A-Za-z0-9][A-Za-z0-9._:-]{7,240}$/;
|
|
|
|
export function normalizeNdcCredentialReference(input) {
|
|
if (!input || typeof input !== "object" || Array.isArray(input)) {
|
|
throw new TypeError("ndc_credential_reference_invalid");
|
|
}
|
|
for (const key of Object.keys(input)) {
|
|
if (!new Set(["owner", "reference"]).has(key)) {
|
|
throw new TypeError(`ndc_credential_reference_field_unexpected:${key}`);
|
|
}
|
|
}
|
|
if (input.owner !== NDC_CREDENTIAL_REFERENCE_OWNER) {
|
|
throw new TypeError("ndc_credential_reference_owner_invalid");
|
|
}
|
|
if (!isNdcCredentialReferenceValue(input.reference)) {
|
|
throw new TypeError("ndc_credential_reference_value_invalid");
|
|
}
|
|
return Object.freeze({
|
|
owner: NDC_CREDENTIAL_REFERENCE_OWNER,
|
|
reference: input.reference,
|
|
});
|
|
}
|
|
|
|
export function isNdcCredentialReferenceValue(value) {
|
|
return typeof value === "string" && CREDENTIAL_REFERENCE_PATTERN.test(value);
|
|
}
|