Claims.java

package jasper.security.jwt;

import java.time.Instant;
import java.util.Date;
import java.util.Map;

/**
 * Typed accessors for JWT claims.
 */
public class Claims {

	public static final Claims EMPTY = new Claims(Map.of());

	private final Map<String, Object> claims;

	public Claims(Map<String, Object> claims) {
		this.claims = claims;
	}

	public boolean containsKey(String claim) {
		return claims.containsKey(claim);
	}

	public Object get(String claim) {
		return claims.get(claim);
	}

	public <T> T get(String claim, Class<T> type) {
		return type.cast(claims.get(claim));
	}

	public String getString(String claim) {
		return claims.get(claim) instanceof String s ? s : null;
	}

	public Instant getIssuedAt() {
		var iat = claims.get("iat");
		if (iat instanceof Instant i) return i;
		if (iat instanceof Date d) return d.toInstant();
		if (iat instanceof Number n) return Instant.ofEpochSecond(n.longValue());
		return null;
	}
}