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