A curated list of libraries & SDKs for the Bluesky API and AT Protocol
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