A library for handling DID identifiers used in Bluesky AT Protocol

allow passing a DID to resolve_handle for convenience

+10 -4
+1 -1
bin/resolve
··· 12 12 begin 13 13 query = ARGV[0].to_s 14 14 15 - if query =~ /^did\:/ 15 + if query =~ DID::GENERIC_REGEXP 16 16 did = DID.new(query) 17 17 elsif query =~ /^@[\w\-]+(\.[\w\-]+)+$/ 18 18 did = resolver.resolve_handle(query)
+4 -2
lib/didkit/did.rb
··· 7 7 8 8 module DIDKit 9 9 class DID 10 + GENERIC_REGEXP = /\Adid\:\w+\:.+\z/ 11 + 10 12 include Requests 11 13 12 14 def self.resolve_handle(handle) ··· 16 18 attr_reader :type, :did, :resolved_by 17 19 18 20 def initialize(did, resolved_by = nil) 19 - if did =~ /^did\:(\w+)\:/ 21 + if did =~ GENERIC_REGEXP 20 22 @did = did 21 - @type = $1.to_sym 23 + @type = did.split(':')[1].to_sym 22 24 else 23 25 raise DIDError.new("Invalid DID format") 24 26 end
+5 -1
lib/didkit/resolver.rb
··· 19 19 end 20 20 21 21 def resolve_handle(handle) 22 + if handle =~ DID::GENERIC_REGEXP 23 + return DID.new(handle) 24 + end 25 + 22 26 domain = handle.gsub(/^@/, '') 23 27 24 28 return nil if RESERVED_DOMAINS.include?(domain.split('.').last) ··· 71 75 72 76 def parse_did_from_well_known(text) 73 77 text = text.strip 74 - text.lines.length == 1 && text =~ /\Adid\:\w+\:.*\z/ ? text : nil 78 + text.lines.length == 1 && text =~ DID::GENERIC_REGEXP ? text : nil 75 79 end 76 80 77 81 def resolve_did(did)