# frozen_string_literal: true require 'jwt' class JsonWebToken ALG = 'HS384' ISS = 'https://pokemon.trade/' AUD = 'pk.t' Error = Class.new(StandardError) def self.encode(payload) data = payload.reverse_merge(meta) JWT.encode( data, Rails.application.credentials.jwt_secret, ALG, ) end def self.decode(token) return if token.nil? JWT.decode( token, Rails.application.credentials.jwt_secret, true, algorithm: ALG, iss: ISS, verify_iss: true, aud: AUD, verify_aud: true, ) rescue JWT::DecodeError => e Rails.logger.error("Failed to decode JWT: #{e.message}") raise Error, e.message end def self.meta { exp: 7.days.from_now.to_i, iss: ISS, aud: AUD, } end end