A curated list of libraries & SDKs for the Bluesky API and AT Protocol
at master 73 lines 1.3 kB view raw
1require_relative 'requests' 2require 'json' 3require 'time' 4 5class NPMImport 6 include Requests 7 8 class PackageJSON 9 def initialize(data) 10 @json = JSON.parse(data) 11 end 12 13 def name 14 @json['name'] 15 end 16 17 def version 18 @json['version'] 19 end 20 21 def private? 22 @json['private'] 23 end 24 end 25 26 class RemotePackage 27 def initialize(json) 28 @json = json 29 end 30 31 def name 32 @json['name'] 33 end 34 35 def last_version 36 @json['dist-tags']['latest'] 37 end 38 39 def last_release_time 40 Time.parse(@json['time'][last_version]) 41 end 42 43 def homepage_url 44 @json['homepage'] 45 end 46 47 def repository_url 48 @json.dig('repository', 'url') 49 end 50 51 def inspect 52 fields = [:name, :last_version, :last_release_time].map { |v| "#{v}=#{self.send(v).inspect}" }.join(", ") 53 "#<#{self.class}:0x#{object_id} #{fields}>" 54 end 55 end 56 57 def initialize 58 @@cache ||= {} 59 end 60 61 def get_package_info(name) 62 response = @@cache[name] || get_response("https://registry.npmjs.com/#{name}") 63 @@cache[name] = response 64 65 if response.code.to_i == 200 66 RemotePackage.new(JSON.parse(response.body)) 67 elsif response.code.to_i == 404 68 nil 69 else 70 raise FetchError.new(response) 71 end 72 end 73end