law4devs 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,289 @@
1
+ declare const DEFAULT_BASE_URL = "https://api.law4devs.eu/api/v1";
2
+ interface HTTPClientOptions {
3
+ baseUrl?: string;
4
+ apiKey?: string;
5
+ timeout?: number;
6
+ maxRetries?: number;
7
+ }
8
+ declare class HTTPClient {
9
+ readonly baseUrl: string;
10
+ readonly timeout: number;
11
+ readonly maxRetries: number;
12
+ readonly _headers: Record<string, string>;
13
+ constructor(options?: HTTPClientOptions);
14
+ get<T = unknown>(path: string, params?: Record<string, string | number | undefined>): Promise<T>;
15
+ }
16
+
17
+ interface PageMeta {
18
+ apiVersion: string;
19
+ total: number;
20
+ page: number;
21
+ perPage: number;
22
+ pages: number;
23
+ }
24
+ interface PageLinks {
25
+ next: string | null;
26
+ prev: string | null;
27
+ }
28
+ interface Page<T> {
29
+ data: T[];
30
+ meta: PageMeta;
31
+ links: PageLinks;
32
+ }
33
+
34
+ declare abstract class BaseResource {
35
+ protected readonly _http: HTTPClient;
36
+ constructor(_http: HTTPClient);
37
+ protected parsePage<T>(raw: Record<string, unknown>, fromDict: (d: Record<string, unknown>) => T): Page<T>;
38
+ protected pageParams(page?: number, perPage?: number): Record<string, number | undefined>;
39
+ protected _iterPages<T>(listFn: (opts: {
40
+ page: number;
41
+ perPage: number;
42
+ }) => Promise<Page<T>>, perPage?: number): AsyncGenerator<T>;
43
+ }
44
+
45
+ interface Framework {
46
+ id: number;
47
+ slug: string;
48
+ name: string;
49
+ shortName: string;
50
+ celexNumber: string;
51
+ description: string | null;
52
+ isActive: boolean;
53
+ status: string;
54
+ expectedArticles: number;
55
+ expectedRecitals: number;
56
+ lastSyncedAt: string | null;
57
+ createdAt: string;
58
+ articleCount: number;
59
+ recitalCount: number;
60
+ }
61
+ interface FrameworkDetail extends Framework {
62
+ eurLexUrl: string;
63
+ requirementCount: number;
64
+ annexCount: number;
65
+ tagCount: number;
66
+ coverage: Record<string, unknown> | null;
67
+ }
68
+
69
+ declare class FrameworksResource extends BaseResource {
70
+ list(opts?: {
71
+ page?: number;
72
+ perPage?: number;
73
+ }): Promise<Page<Framework>>;
74
+ get(slug: string): Promise<FrameworkDetail>;
75
+ iter(opts?: {
76
+ perPage?: number;
77
+ }): AsyncGenerator<Framework>;
78
+ }
79
+
80
+ interface Tag {
81
+ id: number;
82
+ slug: string;
83
+ name: string;
84
+ description: string | null;
85
+ keywords: string[];
86
+ color: string | null;
87
+ createdAt: string;
88
+ }
89
+
90
+ interface ArticleParagraph {
91
+ paragraphRef: string;
92
+ content: string;
93
+ position: number;
94
+ }
95
+ interface ArticleSummary {
96
+ id: number;
97
+ frameworkSlug: string;
98
+ articleNumber: number;
99
+ title: string;
100
+ position: number;
101
+ paragraphCount: number;
102
+ tags: Tag[];
103
+ }
104
+ interface Article extends ArticleSummary {
105
+ content: string;
106
+ paragraphs: ArticleParagraph[];
107
+ }
108
+
109
+ declare class ArticlesResource extends BaseResource {
110
+ list(frameworkSlug: string, opts?: {
111
+ page?: number;
112
+ perPage?: number;
113
+ }): Promise<Page<ArticleSummary>>;
114
+ get(frameworkSlug: string, articleNumber: number | string): Promise<Article>;
115
+ related(frameworkSlug: string, articleNumber: number | string, opts?: {
116
+ page?: number;
117
+ perPage?: number;
118
+ }): Promise<Page<ArticleSummary>>;
119
+ iter(frameworkSlug: string, opts?: {
120
+ perPage?: number;
121
+ }): AsyncGenerator<ArticleSummary>;
122
+ }
123
+
124
+ interface Recital {
125
+ id: number;
126
+ frameworkSlug: string;
127
+ recitalNumber: number;
128
+ content: string;
129
+ position: number;
130
+ }
131
+
132
+ declare class RecitalsResource extends BaseResource {
133
+ list(frameworkSlug: string, opts?: {
134
+ page?: number;
135
+ perPage?: number;
136
+ }): Promise<Page<Recital>>;
137
+ get(frameworkSlug: string, recitalNumber: number | string): Promise<Recital>;
138
+ iter(frameworkSlug: string, opts?: {
139
+ perPage?: number;
140
+ }): AsyncGenerator<Recital>;
141
+ }
142
+
143
+ interface Requirement {
144
+ id: number;
145
+ frameworkSlug: string;
146
+ articleNumber: number | null;
147
+ paragraphRef: string | null;
148
+ paragraphContent: string | null;
149
+ requirementText: string;
150
+ requirementType: string;
151
+ complianceDeadline: string | null;
152
+ linkedArticleNumbers: number[];
153
+ stakeholderRoles: string[];
154
+ tags: Tag[];
155
+ createdAt: string;
156
+ }
157
+
158
+ declare class RequirementsResource extends BaseResource {
159
+ list(opts?: {
160
+ page?: number;
161
+ perPage?: number;
162
+ frameworkSlug?: string;
163
+ }): Promise<Page<Requirement>>;
164
+ iter(opts?: {
165
+ perPage?: number;
166
+ frameworkSlug?: string;
167
+ }): AsyncGenerator<Requirement>;
168
+ }
169
+
170
+ declare class TagsResource extends BaseResource {
171
+ list(opts?: {
172
+ page?: number;
173
+ perPage?: number;
174
+ }): Promise<Page<Tag>>;
175
+ get(slug: string): Promise<Tag>;
176
+ iter(opts?: {
177
+ perPage?: number;
178
+ }): AsyncGenerator<Tag>;
179
+ }
180
+
181
+ interface ComplianceDeadline {
182
+ id: number;
183
+ frameworkSlug: string;
184
+ articleNumber: string | null;
185
+ paragraphRef: string | null;
186
+ deadlineDate: string;
187
+ deadlineType: string;
188
+ description: string | null;
189
+ }
190
+
191
+ declare class ComplianceResource extends BaseResource {
192
+ deadlines(opts?: {
193
+ page?: number;
194
+ perPage?: number;
195
+ frameworkSlug?: string;
196
+ }): Promise<Page<ComplianceDeadline>>;
197
+ iterDeadlines(opts?: {
198
+ perPage?: number;
199
+ frameworkSlug?: string;
200
+ }): AsyncGenerator<ComplianceDeadline>;
201
+ }
202
+
203
+ interface AnnexSummary {
204
+ id: number;
205
+ frameworkSlug: string;
206
+ annexNumber: string;
207
+ title: string;
208
+ }
209
+ interface Annex extends AnnexSummary {
210
+ content: string;
211
+ }
212
+
213
+ declare class AnnexesResource extends BaseResource {
214
+ list(frameworkSlug: string, opts?: {
215
+ page?: number;
216
+ perPage?: number;
217
+ }): Promise<Page<AnnexSummary>>;
218
+ get(frameworkSlug: string, annexNumber: string): Promise<Annex>;
219
+ iter(frameworkSlug: string, opts?: {
220
+ perPage?: number;
221
+ }): AsyncGenerator<AnnexSummary>;
222
+ }
223
+
224
+ interface SearchResult {
225
+ type: string;
226
+ frameworkSlug: string;
227
+ frameworkName: string;
228
+ articleNumber: string | null;
229
+ recitalNumber: string | null;
230
+ paragraphRef: string | null;
231
+ title: string | null;
232
+ requirementType: string | null;
233
+ matchContext: string;
234
+ url: string;
235
+ }
236
+
237
+ declare class SearchResource extends BaseResource {
238
+ query(q: string, opts?: {
239
+ framework?: string;
240
+ resultType?: string;
241
+ page?: number;
242
+ perPage?: number;
243
+ }): Promise<Page<SearchResult>>;
244
+ iter(q: string, opts?: {
245
+ perPage?: number;
246
+ framework?: string;
247
+ resultType?: string;
248
+ }): AsyncGenerator<SearchResult>;
249
+ }
250
+
251
+ interface Law4DevsClientOptions {
252
+ baseUrl?: string;
253
+ apiKey?: string;
254
+ timeout?: number;
255
+ maxRetries?: number;
256
+ }
257
+ declare class Law4DevsClient {
258
+ readonly _http: HTTPClient;
259
+ readonly frameworks: FrameworksResource;
260
+ readonly articles: ArticlesResource;
261
+ readonly recitals: RecitalsResource;
262
+ readonly requirements: RequirementsResource;
263
+ readonly tags: TagsResource;
264
+ readonly compliance: ComplianceResource;
265
+ readonly annexes: AnnexesResource;
266
+ readonly search: SearchResource;
267
+ constructor(options?: Law4DevsClientOptions);
268
+ }
269
+
270
+ declare class Law4DevsError extends Error {
271
+ readonly statusCode?: number | undefined;
272
+ constructor(message: string, statusCode?: number | undefined);
273
+ }
274
+ declare class NotFoundError extends Law4DevsError {
275
+ constructor(msg: string, sc?: number);
276
+ }
277
+ declare class ValidationError extends Law4DevsError {
278
+ constructor(msg: string, sc?: number);
279
+ }
280
+ declare class RateLimitError extends Law4DevsError {
281
+ constructor(msg: string, sc?: number);
282
+ }
283
+ declare class ServerError extends Law4DevsError {
284
+ constructor(msg: string, sc?: number);
285
+ }
286
+
287
+ declare const VERSION = "0.1.0";
288
+
289
+ export { type Annex, type AnnexSummary, AnnexesResource, type Article, type ArticleParagraph, type ArticleSummary, ArticlesResource, type ComplianceDeadline, ComplianceResource, DEFAULT_BASE_URL, type Framework, type FrameworkDetail, FrameworksResource, HTTPClient, type HTTPClientOptions, Law4DevsClient, type Law4DevsClientOptions, Law4DevsError, NotFoundError, type Page, type PageLinks, type PageMeta, RateLimitError, type Recital, RecitalsResource, type Requirement, RequirementsResource, SearchResource, type SearchResult, ServerError, type Tag, TagsResource, VERSION, ValidationError };