( il: InnerList, label: string, )
| 1084 | } |
| 1085 | |
| 1086 | function parseSignatureInput( |
| 1087 | il: InnerList, |
| 1088 | label: string, |
| 1089 | ): ParsedSignatureParams { |
| 1090 | const components: ComponentIdentifier[] = []; |
| 1091 | |
| 1092 | for (const member of il.items) { |
| 1093 | if (member.value.type !== "string") { |
| 1094 | throw new TypeError( |
| 1095 | `Component identifier in "${label}" is not a String`, |
| 1096 | ); |
| 1097 | } |
| 1098 | const name = member.value.value; |
| 1099 | const params: ComponentParameters = {}; |
| 1100 | for (const [key, value] of member.parameters) { |
| 1101 | switch (key) { |
| 1102 | case "sf": |
| 1103 | if (value.type === "boolean" && value.value) params.sf = true; |
| 1104 | break; |
| 1105 | case "key": |
| 1106 | if (value.type === "string") params.key = value.value; |
| 1107 | break; |
| 1108 | case "bs": |
| 1109 | if (value.type === "boolean" && value.value) params.bs = true; |
| 1110 | break; |
| 1111 | case "req": |
| 1112 | if (value.type === "boolean" && value.value) params.req = true; |
| 1113 | break; |
| 1114 | case "tr": |
| 1115 | if (value.type === "boolean" && value.value) params.tr = true; |
| 1116 | break; |
| 1117 | case "name": |
| 1118 | if (value.type === "string") params.name = value.value; |
| 1119 | break; |
| 1120 | } |
| 1121 | } |
| 1122 | const hasParams = Object.values(params).some((v) => v !== undefined); |
| 1123 | components.push(hasParams ? { name, parameters: params } : { name }); |
| 1124 | } |
| 1125 | |
| 1126 | const result: ParsedSignatureParams = { components }; |
| 1127 | |
| 1128 | for (const [key, value] of il.parameters) { |
| 1129 | switch (key) { |
| 1130 | case "created": |
| 1131 | if (value.type === "integer") result.created = value.value; |
| 1132 | break; |
| 1133 | case "expires": |
| 1134 | if (value.type === "integer") result.expires = value.value; |
| 1135 | break; |
| 1136 | case "nonce": |
| 1137 | if (value.type === "string") result.nonce = value.value; |
| 1138 | break; |
| 1139 | case "alg": |
| 1140 | if (value.type === "string" && isSupportedAlgorithm(value.value)) { |
| 1141 | result.algorithm = value.value; |
| 1142 | } |
| 1143 | break; |
no test coverage detected