parliament-api 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.
- package/README.md +167 -0
- package/dist/index.d.mts +693 -0
- package/dist/index.d.ts +693 -0
- package/dist/index.js +350 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +307 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +45 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/index.ts
|
|
31
|
+
var index_exports = {};
|
|
32
|
+
__export(index_exports, {
|
|
33
|
+
AnsweredStatus: () => AnsweredStatus,
|
|
34
|
+
BaseClient: () => BaseClient,
|
|
35
|
+
HansardClient: () => HansardClient,
|
|
36
|
+
House: () => House,
|
|
37
|
+
MembersClient: () => MembersClient,
|
|
38
|
+
ParliamentAPI: () => ParliamentAPI,
|
|
39
|
+
QuestionsClient: () => QuestionsClient
|
|
40
|
+
});
|
|
41
|
+
module.exports = __toCommonJS(index_exports);
|
|
42
|
+
|
|
43
|
+
// src/client.ts
|
|
44
|
+
var import_p_limit = __toESM(require("p-limit"));
|
|
45
|
+
var DEFAULT_OPTIONS = {
|
|
46
|
+
concurrency: 5,
|
|
47
|
+
retries: 3,
|
|
48
|
+
retryDelay: 1e3
|
|
49
|
+
};
|
|
50
|
+
var BaseClient = class {
|
|
51
|
+
constructor(baseUrl, options = {}) {
|
|
52
|
+
this.baseUrl = baseUrl;
|
|
53
|
+
const opts = { ...DEFAULT_OPTIONS, ...options };
|
|
54
|
+
this.limit = (0, import_p_limit.default)(opts.concurrency);
|
|
55
|
+
this.retries = opts.retries;
|
|
56
|
+
this.retryDelay = opts.retryDelay;
|
|
57
|
+
}
|
|
58
|
+
limit;
|
|
59
|
+
retries;
|
|
60
|
+
retryDelay;
|
|
61
|
+
async request(path, params) {
|
|
62
|
+
return this.limit(() => this.fetchWithRetry(path, params));
|
|
63
|
+
}
|
|
64
|
+
async fetchWithRetry(path, params) {
|
|
65
|
+
const base = this.baseUrl.endsWith("/") ? this.baseUrl : this.baseUrl + "/";
|
|
66
|
+
const cleanPath = path.startsWith("/") ? path.slice(1) : path;
|
|
67
|
+
const url = new URL(cleanPath, base);
|
|
68
|
+
if (params) {
|
|
69
|
+
for (const [key, value] of Object.entries(params)) {
|
|
70
|
+
if (value !== void 0 && value !== null) {
|
|
71
|
+
if (Array.isArray(value)) {
|
|
72
|
+
for (const v of value) {
|
|
73
|
+
url.searchParams.append(key, String(v));
|
|
74
|
+
}
|
|
75
|
+
} else {
|
|
76
|
+
url.searchParams.set(key, String(value));
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
let lastError;
|
|
82
|
+
for (let attempt = 0; attempt <= this.retries; attempt++) {
|
|
83
|
+
try {
|
|
84
|
+
const response = await fetch(url.toString(), {
|
|
85
|
+
headers: { Accept: "application/json" }
|
|
86
|
+
});
|
|
87
|
+
if (response.status === 429 || response.status >= 500) {
|
|
88
|
+
const retryAfter = response.headers.get("Retry-After");
|
|
89
|
+
const delay = retryAfter ? parseInt(retryAfter, 10) * 1e3 : this.retryDelay * Math.pow(2, attempt);
|
|
90
|
+
if (attempt < this.retries) {
|
|
91
|
+
await this.sleep(delay);
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (!response.ok) {
|
|
96
|
+
throw new Error(`HTTP ${response.status}: ${response.statusText} for ${url.toString()}`);
|
|
97
|
+
}
|
|
98
|
+
return await response.json();
|
|
99
|
+
} catch (error) {
|
|
100
|
+
lastError = error instanceof Error ? error : new Error(String(error));
|
|
101
|
+
if (attempt < this.retries) {
|
|
102
|
+
await this.sleep(this.retryDelay * Math.pow(2, attempt));
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
throw lastError ?? new Error(`Request failed after ${this.retries} retries`);
|
|
108
|
+
}
|
|
109
|
+
sleep(ms) {
|
|
110
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
// src/members/index.ts
|
|
115
|
+
var BASE_URL = "https://members-api.parliament.uk/api/";
|
|
116
|
+
var MembersClient = class extends BaseClient {
|
|
117
|
+
constructor(options) {
|
|
118
|
+
super(BASE_URL, options);
|
|
119
|
+
}
|
|
120
|
+
// ─── Member Search ─────────────────────────────────────────
|
|
121
|
+
async search(params) {
|
|
122
|
+
return this.request("/Members/Search", params);
|
|
123
|
+
}
|
|
124
|
+
async searchHistorical(params) {
|
|
125
|
+
return this.request("/Members/SearchHistorical", params);
|
|
126
|
+
}
|
|
127
|
+
/** Auto-paginating search that yields each page */
|
|
128
|
+
async *searchAll(params) {
|
|
129
|
+
let skip = params?.skip ?? 0;
|
|
130
|
+
const take = params?.take ?? 20;
|
|
131
|
+
while (true) {
|
|
132
|
+
const page = await this.search({ ...params, skip, take });
|
|
133
|
+
if (page.items.length === 0) break;
|
|
134
|
+
yield page.items;
|
|
135
|
+
skip += take;
|
|
136
|
+
if (skip >= page.totalResults) break;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// ─── Member Details ────────────────────────────────────────
|
|
140
|
+
async getById(id) {
|
|
141
|
+
return this.request(`/Members/${id}`);
|
|
142
|
+
}
|
|
143
|
+
async getBiography(id) {
|
|
144
|
+
return this.request(`/Members/${id}/Biography`);
|
|
145
|
+
}
|
|
146
|
+
async getContact(id) {
|
|
147
|
+
return this.request(`/Members/${id}/Contact`);
|
|
148
|
+
}
|
|
149
|
+
async getContributionSummary(id, params) {
|
|
150
|
+
return this.request(`/Members/${id}/ContributionSummary`, params);
|
|
151
|
+
}
|
|
152
|
+
async getEdms(id, params) {
|
|
153
|
+
return this.request(`/Members/${id}/Edms`, params);
|
|
154
|
+
}
|
|
155
|
+
async getExperience(id) {
|
|
156
|
+
return this.request(`/Members/${id}/Experience`);
|
|
157
|
+
}
|
|
158
|
+
async getFocus(id) {
|
|
159
|
+
return this.request(`/Members/${id}/Focus`);
|
|
160
|
+
}
|
|
161
|
+
async getLatestElectionResult(id) {
|
|
162
|
+
return this.request(`/Members/${id}/LatestElectionResult`);
|
|
163
|
+
}
|
|
164
|
+
async getRegisteredInterests(id) {
|
|
165
|
+
return this.request(`/Members/${id}/RegisteredInterests`);
|
|
166
|
+
}
|
|
167
|
+
async getStaff(id) {
|
|
168
|
+
return this.request(`/Members/${id}/Staff`);
|
|
169
|
+
}
|
|
170
|
+
async getSynopsis(id) {
|
|
171
|
+
return this.request(`/Members/${id}/Synopsis`);
|
|
172
|
+
}
|
|
173
|
+
async getVoting(id, params) {
|
|
174
|
+
return this.request(`/Members/${id}/Voting`, params);
|
|
175
|
+
}
|
|
176
|
+
async getWrittenQuestions(id, params) {
|
|
177
|
+
return this.request(`/Members/${id}/WrittenQuestions`, params);
|
|
178
|
+
}
|
|
179
|
+
async getPortraitUrl(id) {
|
|
180
|
+
return this.request(`/Members/${id}/PortraitUrl`);
|
|
181
|
+
}
|
|
182
|
+
async getThumbnailUrl(id) {
|
|
183
|
+
return this.request(`/Members/${id}/ThumbnailUrl`);
|
|
184
|
+
}
|
|
185
|
+
// ─── Posts ─────────────────────────────────────────────────
|
|
186
|
+
async getGovernmentPosts() {
|
|
187
|
+
return this.request("/Posts/GovernmentPosts");
|
|
188
|
+
}
|
|
189
|
+
async getOppositionPosts() {
|
|
190
|
+
return this.request("/Posts/OppositionPosts");
|
|
191
|
+
}
|
|
192
|
+
async getSpokespersons() {
|
|
193
|
+
return this.request("/Posts/Spokespersons");
|
|
194
|
+
}
|
|
195
|
+
// ─── Parties ───────────────────────────────────────────────
|
|
196
|
+
async getActiveParties(house) {
|
|
197
|
+
return this.request(`/Parties/GetActive/${house}`);
|
|
198
|
+
}
|
|
199
|
+
async getStateOfTheParties(house, date) {
|
|
200
|
+
return this.request(`/Parties/StateOfTheParties/${house}/${date}`);
|
|
201
|
+
}
|
|
202
|
+
// ─── Constituencies ────────────────────────────────────────
|
|
203
|
+
async searchConstituencies(params) {
|
|
204
|
+
return this.request("/Location/Constituency/Search", params);
|
|
205
|
+
}
|
|
206
|
+
async getConstituency(id) {
|
|
207
|
+
return this.request(`/Location/Constituency/${id}`);
|
|
208
|
+
}
|
|
209
|
+
async getConstituencyElectionResults(id) {
|
|
210
|
+
return this.request(`/Location/Constituency/${id}/ElectionResults`);
|
|
211
|
+
}
|
|
212
|
+
};
|
|
213
|
+
|
|
214
|
+
// src/questions/types.ts
|
|
215
|
+
var AnsweredStatus = /* @__PURE__ */ ((AnsweredStatus2) => {
|
|
216
|
+
AnsweredStatus2["Any"] = "Any";
|
|
217
|
+
AnsweredStatus2["Answered"] = "Answered";
|
|
218
|
+
AnsweredStatus2["Unanswered"] = "Unanswered";
|
|
219
|
+
return AnsweredStatus2;
|
|
220
|
+
})(AnsweredStatus || {});
|
|
221
|
+
|
|
222
|
+
// src/questions/index.ts
|
|
223
|
+
var BASE_URL2 = "https://questions-statements-api.parliament.uk/api/";
|
|
224
|
+
var QuestionsClient = class extends BaseClient {
|
|
225
|
+
constructor(options) {
|
|
226
|
+
super(BASE_URL2, options);
|
|
227
|
+
}
|
|
228
|
+
// ─── Written Questions ─────────────────────────────────────
|
|
229
|
+
async searchWrittenQuestions(params) {
|
|
230
|
+
return this.request("/writtenquestions/questions", params);
|
|
231
|
+
}
|
|
232
|
+
async getWrittenQuestion(id) {
|
|
233
|
+
return this.request(`/writtenquestions/questions/${id}`);
|
|
234
|
+
}
|
|
235
|
+
/** Auto-paginating search that yields each page */
|
|
236
|
+
async *searchAllWrittenQuestions(params) {
|
|
237
|
+
let skip = params?.skip ?? 0;
|
|
238
|
+
const take = params?.take ?? 20;
|
|
239
|
+
while (true) {
|
|
240
|
+
const page = await this.searchWrittenQuestions({ ...params, skip, take });
|
|
241
|
+
if (page.results.length === 0) break;
|
|
242
|
+
yield page.results;
|
|
243
|
+
skip += take;
|
|
244
|
+
if (skip >= page.totalResults) break;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
// ─── Written Statements ────────────────────────────────────
|
|
248
|
+
async searchWrittenStatements(params) {
|
|
249
|
+
return this.request("/writtenstatements/statements", params);
|
|
250
|
+
}
|
|
251
|
+
async getWrittenStatement(id) {
|
|
252
|
+
return this.request(`/writtenstatements/statements/${id}`);
|
|
253
|
+
}
|
|
254
|
+
/** Auto-paginating search that yields each page */
|
|
255
|
+
async *searchAllWrittenStatements(params) {
|
|
256
|
+
let skip = params?.skip ?? 0;
|
|
257
|
+
const take = params?.take ?? 20;
|
|
258
|
+
while (true) {
|
|
259
|
+
const page = await this.searchWrittenStatements({ ...params, skip, take });
|
|
260
|
+
if (page.results.length === 0) break;
|
|
261
|
+
yield page.results;
|
|
262
|
+
skip += take;
|
|
263
|
+
if (skip >= page.totalResults) break;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
// ─── Daily Reports ─────────────────────────────────────────
|
|
267
|
+
async getDailyReports(params) {
|
|
268
|
+
return this.request("/dailyreports/dailyreports", params);
|
|
269
|
+
}
|
|
270
|
+
};
|
|
271
|
+
|
|
272
|
+
// src/hansard/index.ts
|
|
273
|
+
var BASE_URL3 = "https://hansard-api.parliament.uk/";
|
|
274
|
+
var HansardClient = class extends BaseClient {
|
|
275
|
+
constructor(options) {
|
|
276
|
+
super(BASE_URL3, options);
|
|
277
|
+
}
|
|
278
|
+
// ─── Search ────────────────────────────────────────────────
|
|
279
|
+
async search(params) {
|
|
280
|
+
return this.request("/search.json", params);
|
|
281
|
+
}
|
|
282
|
+
async searchContributions(type, params) {
|
|
283
|
+
return this.request(`/search/contributions/${type}.json`, params);
|
|
284
|
+
}
|
|
285
|
+
async getMemberContributionSummary(id, params) {
|
|
286
|
+
return this.request(`/search/membercontributionsummary/${id}.json`, params);
|
|
287
|
+
}
|
|
288
|
+
async searchDebates(params) {
|
|
289
|
+
return this.request("/search/debates.json", params);
|
|
290
|
+
}
|
|
291
|
+
async searchDivisions(params) {
|
|
292
|
+
return this.request("/search/divisions.json", params);
|
|
293
|
+
}
|
|
294
|
+
async searchMembers(params) {
|
|
295
|
+
return this.request("/search/members.json", params);
|
|
296
|
+
}
|
|
297
|
+
// ─── Debates ───────────────────────────────────────────────
|
|
298
|
+
async getDebate(id) {
|
|
299
|
+
return this.request(`/debates/debate/${id}.json`);
|
|
300
|
+
}
|
|
301
|
+
async getDebateSpeakers(id) {
|
|
302
|
+
return this.request(`/debates/speakerslist/${id}.json`);
|
|
303
|
+
}
|
|
304
|
+
async getDebateDivisions(id) {
|
|
305
|
+
return this.request(`/debates/divisions/${id}.json`);
|
|
306
|
+
}
|
|
307
|
+
async getMemberDebateContributions(id) {
|
|
308
|
+
return this.request(`/debates/memberdebatecontributions/${id}.json`);
|
|
309
|
+
}
|
|
310
|
+
// ─── Sitting Days & Overview ───────────────────────────────
|
|
311
|
+
async getSittingDays(params) {
|
|
312
|
+
return this.request("/historicsittingdays", params);
|
|
313
|
+
}
|
|
314
|
+
async getLastSittingDate() {
|
|
315
|
+
return this.request("/overview/lastsittingdate.json");
|
|
316
|
+
}
|
|
317
|
+
async getSectionsForDay(params) {
|
|
318
|
+
return this.request("/overview/sectionsforday.json", { ...params });
|
|
319
|
+
}
|
|
320
|
+
};
|
|
321
|
+
|
|
322
|
+
// src/types.ts
|
|
323
|
+
var House = /* @__PURE__ */ ((House2) => {
|
|
324
|
+
House2[House2["Commons"] = 1] = "Commons";
|
|
325
|
+
House2[House2["Lords"] = 2] = "Lords";
|
|
326
|
+
return House2;
|
|
327
|
+
})(House || {});
|
|
328
|
+
|
|
329
|
+
// src/index.ts
|
|
330
|
+
var ParliamentAPI = class {
|
|
331
|
+
members;
|
|
332
|
+
questions;
|
|
333
|
+
hansard;
|
|
334
|
+
constructor(options) {
|
|
335
|
+
this.members = new MembersClient(options);
|
|
336
|
+
this.questions = new QuestionsClient(options);
|
|
337
|
+
this.hansard = new HansardClient(options);
|
|
338
|
+
}
|
|
339
|
+
};
|
|
340
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
341
|
+
0 && (module.exports = {
|
|
342
|
+
AnsweredStatus,
|
|
343
|
+
BaseClient,
|
|
344
|
+
HansardClient,
|
|
345
|
+
House,
|
|
346
|
+
MembersClient,
|
|
347
|
+
ParliamentAPI,
|
|
348
|
+
QuestionsClient
|
|
349
|
+
});
|
|
350
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/client.ts","../src/members/index.ts","../src/questions/types.ts","../src/questions/index.ts","../src/hansard/index.ts","../src/types.ts"],"sourcesContent":["import { ClientOptions } from './client.js';\nimport { MembersClient } from './members/index.js';\nimport { QuestionsClient } from './questions/index.js';\nimport { HansardClient } from './hansard/index.js';\n\nexport class ParliamentAPI {\n readonly members: MembersClient;\n readonly questions: QuestionsClient;\n readonly hansard: HansardClient;\n\n constructor(options?: ClientOptions) {\n this.members = new MembersClient(options);\n this.questions = new QuestionsClient(options);\n this.hansard = new HansardClient(options);\n }\n}\n\n// Re-export everything\nexport { MembersClient } from './members/index.js';\nexport { QuestionsClient } from './questions/index.js';\nexport { HansardClient } from './hansard/index.js';\nexport { BaseClient, type ClientOptions } from './client.js';\nexport * from './types.js';\nexport * from './members/types.js';\nexport * from './questions/types.js';\nexport * from './hansard/types.js';\n","import pLimit from 'p-limit';\n\nexport interface ClientOptions {\n /** Max concurrent requests (default: 5) */\n concurrency?: number;\n /** Max retry attempts on 429/5xx (default: 3) */\n retries?: number;\n /** Base delay in ms for exponential backoff (default: 1000) */\n retryDelay?: number;\n}\n\nconst DEFAULT_OPTIONS: Required<ClientOptions> = {\n concurrency: 5,\n retries: 3,\n retryDelay: 1000,\n};\n\nexport class BaseClient {\n protected readonly limit: ReturnType<typeof pLimit>;\n protected readonly retries: number;\n protected readonly retryDelay: number;\n\n constructor(\n protected readonly baseUrl: string,\n options: ClientOptions = {},\n ) {\n const opts = { ...DEFAULT_OPTIONS, ...options };\n this.limit = pLimit(opts.concurrency);\n this.retries = opts.retries;\n this.retryDelay = opts.retryDelay;\n }\n\n protected async request<T>(path: string, params?: Record<string, unknown>): Promise<T> {\n return this.limit(() => this.fetchWithRetry<T>(path, params));\n }\n\n private async fetchWithRetry<T>(path: string, params?: Record<string, unknown>): Promise<T> {\n const base = this.baseUrl.endsWith('/') ? this.baseUrl : this.baseUrl + '/';\n const cleanPath = path.startsWith('/') ? path.slice(1) : path;\n const url = new URL(cleanPath, base);\n if (params) {\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined && value !== null) {\n if (Array.isArray(value)) {\n for (const v of value) {\n url.searchParams.append(key, String(v));\n }\n } else {\n url.searchParams.set(key, String(value));\n }\n }\n }\n }\n\n let lastError: Error | undefined;\n for (let attempt = 0; attempt <= this.retries; attempt++) {\n try {\n const response = await fetch(url.toString(), {\n headers: { Accept: 'application/json' },\n });\n\n if (response.status === 429 || response.status >= 500) {\n const retryAfter = response.headers.get('Retry-After');\n const delay = retryAfter\n ? parseInt(retryAfter, 10) * 1000\n : this.retryDelay * Math.pow(2, attempt);\n if (attempt < this.retries) {\n await this.sleep(delay);\n continue;\n }\n }\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText} for ${url.toString()}`);\n }\n\n return (await response.json()) as T;\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n if (attempt < this.retries) {\n await this.sleep(this.retryDelay * Math.pow(2, attempt));\n continue;\n }\n }\n }\n\n throw lastError ?? new Error(`Request failed after ${this.retries} retries`);\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n","import { BaseClient, ClientOptions } from '../client.js';\nimport { House, MemberApiItem, PaginatedResponse } from '../types.js';\nimport {\n Member,\n MemberBiography,\n MemberContact,\n MemberSearchParams,\n MemberHistoricalSearchParams,\n ContributionSummary,\n ContributionSummaryParams,\n Edm,\n EdmParams,\n MemberExperience,\n MemberFocus,\n ElectionResult,\n RegisteredInterestCategory,\n MemberStaff,\n MemberSynopsis,\n MemberVote,\n VotingParams,\n WrittenQuestionsParams,\n GovernmentOppositionPost,\n Party,\n PartyStateOfTheParties,\n Constituency,\n ConstituencySearchParams,\n} from './types.js';\n\nconst BASE_URL = 'https://members-api.parliament.uk/api/';\n\nexport class MembersClient extends BaseClient {\n constructor(options?: ClientOptions) {\n super(BASE_URL, options);\n }\n\n // ─── Member Search ─────────────────────────────────────────\n\n async search(params?: MemberSearchParams): Promise<PaginatedResponse<MemberApiItem<Member>>> {\n return this.request('/Members/Search', params as Record<string, unknown>);\n }\n\n async searchHistorical(params?: MemberHistoricalSearchParams): Promise<PaginatedResponse<MemberApiItem<Member>>> {\n return this.request('/Members/SearchHistorical', params as Record<string, unknown>);\n }\n\n /** Auto-paginating search that yields each page */\n async *searchAll(params?: MemberSearchParams): AsyncGenerator<MemberApiItem<Member>[]> {\n let skip = params?.skip ?? 0;\n const take = params?.take ?? 20;\n while (true) {\n const page = await this.search({ ...params, skip, take });\n if (page.items.length === 0) break;\n yield page.items;\n skip += take;\n if (skip >= page.totalResults) break;\n }\n }\n\n // ─── Member Details ────────────────────────────────────────\n\n async getById(id: number): Promise<MemberApiItem<Member>> {\n return this.request(`/Members/${id}`);\n }\n\n async getBiography(id: number): Promise<MemberApiItem<MemberBiography>> {\n return this.request(`/Members/${id}/Biography`);\n }\n\n async getContact(id: number): Promise<MemberApiItem<MemberContact[]>> {\n return this.request(`/Members/${id}/Contact`);\n }\n\n async getContributionSummary(id: number, params?: ContributionSummaryParams): Promise<MemberApiItem<ContributionSummary>> {\n return this.request(`/Members/${id}/ContributionSummary`, params as Record<string, unknown>);\n }\n\n async getEdms(id: number, params?: EdmParams): Promise<PaginatedResponse<MemberApiItem<Edm>>> {\n return this.request(`/Members/${id}/Edms`, params as Record<string, unknown>);\n }\n\n async getExperience(id: number): Promise<MemberApiItem<MemberExperience[]>> {\n return this.request(`/Members/${id}/Experience`);\n }\n\n async getFocus(id: number): Promise<MemberApiItem<MemberFocus[]>> {\n return this.request(`/Members/${id}/Focus`);\n }\n\n async getLatestElectionResult(id: number): Promise<MemberApiItem<ElectionResult>> {\n return this.request(`/Members/${id}/LatestElectionResult`);\n }\n\n async getRegisteredInterests(id: number): Promise<MemberApiItem<RegisteredInterestCategory[]>> {\n return this.request(`/Members/${id}/RegisteredInterests`);\n }\n\n async getStaff(id: number): Promise<MemberApiItem<MemberStaff[]>> {\n return this.request(`/Members/${id}/Staff`);\n }\n\n async getSynopsis(id: number): Promise<MemberApiItem<MemberSynopsis>> {\n return this.request(`/Members/${id}/Synopsis`);\n }\n\n async getVoting(id: number, params?: VotingParams): Promise<PaginatedResponse<MemberApiItem<MemberVote>>> {\n return this.request(`/Members/${id}/Voting`, params as Record<string, unknown>);\n }\n\n async getWrittenQuestions(id: number, params?: WrittenQuestionsParams): Promise<PaginatedResponse<MemberApiItem<unknown>>> {\n return this.request(`/Members/${id}/WrittenQuestions`, params as Record<string, unknown>);\n }\n\n async getPortraitUrl(id: number): Promise<MemberApiItem<string>> {\n return this.request(`/Members/${id}/PortraitUrl`);\n }\n\n async getThumbnailUrl(id: number): Promise<MemberApiItem<string>> {\n return this.request(`/Members/${id}/ThumbnailUrl`);\n }\n\n // ─── Posts ─────────────────────────────────────────────────\n\n async getGovernmentPosts(): Promise<PaginatedResponse<MemberApiItem<GovernmentOppositionPost>>> {\n return this.request('/Posts/GovernmentPosts');\n }\n\n async getOppositionPosts(): Promise<PaginatedResponse<MemberApiItem<GovernmentOppositionPost>>> {\n return this.request('/Posts/OppositionPosts');\n }\n\n async getSpokespersons(): Promise<PaginatedResponse<MemberApiItem<GovernmentOppositionPost>>> {\n return this.request('/Posts/Spokespersons');\n }\n\n // ─── Parties ───────────────────────────────────────────────\n\n async getActiveParties(house: House): Promise<MemberApiItem<Party[]>> {\n return this.request(`/Parties/GetActive/${house}`);\n }\n\n async getStateOfTheParties(house: House, date: string): Promise<MemberApiItem<PartyStateOfTheParties[]>> {\n return this.request(`/Parties/StateOfTheParties/${house}/${date}`);\n }\n\n // ─── Constituencies ────────────────────────────────────────\n\n async searchConstituencies(params?: ConstituencySearchParams): Promise<PaginatedResponse<MemberApiItem<Constituency>>> {\n return this.request('/Location/Constituency/Search', params as Record<string, unknown>);\n }\n\n async getConstituency(id: number): Promise<MemberApiItem<Constituency>> {\n return this.request(`/Location/Constituency/${id}`);\n }\n\n async getConstituencyElectionResults(id: number): Promise<MemberApiItem<ElectionResult[]>> {\n return this.request(`/Location/Constituency/${id}/ElectionResults`);\n }\n}\n\nexport * from './types.js';\n","import { House, PaginationParams } from '../types.js';\n\n// ─── Core Models ───────────────────────────────────────────────\n\nexport interface WrittenQuestion {\n id: number;\n askingMemberId: number;\n askingMember: QuestionMember | null;\n house: House;\n memberHasInterest: boolean;\n dateTabled: string;\n dateForAnswer: string;\n uin: string;\n questionText: string;\n answeringBodyId: number;\n answeringBodyName: string;\n isWithdrawn: boolean;\n isNamedDay: boolean;\n groupedQuestions: string[] | null;\n answerIsHolding: boolean | null;\n answerIsCorrection: boolean | null;\n answeringMemberId: number | null;\n answeringMember: QuestionMember | null;\n correctingMemberId: number | null;\n correctingMember: QuestionMember | null;\n dateAnswered: string | null;\n answerText: string | null;\n originalAnswerText: string | null;\n comparableAnswerText: string | null;\n dateAnswerCorrected: string | null;\n dateHoldingAnswer: string | null;\n attachmentCount: number;\n heading: string;\n attachments: Attachment[] | null;\n groupedQuestionsDates: GroupedQuestion[] | null;\n}\n\nexport interface QuestionMember {\n id: number;\n name: string | null;\n listAs: string | null;\n party: string | null;\n partyId: number | null;\n partyColour: string | null;\n partyAbbreviation: string | null;\n memberFrom: string | null;\n thumbnailUrl: string | null;\n}\n\nexport interface Attachment {\n fileName: string;\n fileSizeBytes: number;\n url: string;\n title: string | null;\n}\n\nexport interface GroupedQuestion {\n uin: string;\n questionId: number;\n dateTabled: string;\n}\n\n// ─── Written Statement ─────────────────────────────────────────\n\nexport interface WrittenStatement {\n id: number;\n memberId: number;\n member: QuestionMember | null;\n memberRole: string | null;\n uin: string;\n dateMade: string;\n answeringBodyId: number;\n answeringBodyName: string;\n title: string;\n text: string;\n house: House;\n noticeNumber: number;\n hasAttachments: boolean;\n hasLinkedStatements: boolean;\n linkedStatements: LinkedStatement[] | null;\n attachments: Attachment[] | null;\n}\n\nexport interface LinkedStatement {\n id: number;\n uin: string;\n title: string;\n house: House;\n}\n\n// ─── Daily Report ──────────────────────────────────────────────\n\nexport interface DailyReport {\n house: House;\n date: string;\n fileSizeBytes: number;\n url: string;\n}\n\n// ─── Search Params ─────────────────────────────────────────────\n\nexport enum AnsweredStatus {\n Any = 'Any',\n Answered = 'Answered',\n Unanswered = 'Unanswered',\n}\n\nexport interface WrittenQuestionSearchParams extends PaginationParams {\n searchTerm?: string;\n askingMemberId?: number;\n answeringMemberId?: number;\n tabledWhenFrom?: string;\n tabledWhenTo?: string;\n dateForAnswerWhenFrom?: string;\n dateForAnswerWhenTo?: string;\n answered?: AnsweredStatus;\n answeredWhenFrom?: string;\n answeredWhenTo?: string;\n includeWithdrawn?: boolean;\n expandMember?: boolean;\n correctedWhenFrom?: string;\n correctedWhenTo?: string;\n uIN?: string;\n answeringBodies?: number[];\n members?: number[];\n house?: House;\n}\n\nexport interface WrittenStatementSearchParams extends PaginationParams {\n searchTerm?: string;\n memberId?: number;\n madeWhenFrom?: string;\n madeWhenTo?: string;\n house?: House;\n answeringBodies?: number[];\n}\n\nexport interface DailyReportParams extends PaginationParams {\n house?: House;\n dateFrom?: string;\n dateTo?: string;\n}\n","import { BaseClient, ClientOptions } from '../client.js';\nimport { MemberApiItem, QuestionsApiResponse } from '../types.js';\nimport {\n WrittenQuestion,\n WrittenQuestionSearchParams,\n WrittenStatement,\n WrittenStatementSearchParams,\n DailyReport,\n DailyReportParams,\n} from './types.js';\n\nconst BASE_URL = 'https://questions-statements-api.parliament.uk/api/';\n\nexport class QuestionsClient extends BaseClient {\n constructor(options?: ClientOptions) {\n super(BASE_URL, options);\n }\n\n // ─── Written Questions ─────────────────────────────────────\n\n async searchWrittenQuestions(params?: WrittenQuestionSearchParams): Promise<QuestionsApiResponse<WrittenQuestion>> {\n return this.request('/writtenquestions/questions', params as Record<string, unknown>);\n }\n\n async getWrittenQuestion(id: number): Promise<MemberApiItem<WrittenQuestion>> {\n return this.request(`/writtenquestions/questions/${id}`);\n }\n\n /** Auto-paginating search that yields each page */\n async *searchAllWrittenQuestions(params?: WrittenQuestionSearchParams): AsyncGenerator<MemberApiItem<WrittenQuestion>[]> {\n let skip = params?.skip ?? 0;\n const take = params?.take ?? 20;\n while (true) {\n const page = await this.searchWrittenQuestions({ ...params, skip, take });\n if (page.results.length === 0) break;\n yield page.results;\n skip += take;\n if (skip >= page.totalResults) break;\n }\n }\n\n // ─── Written Statements ────────────────────────────────────\n\n async searchWrittenStatements(params?: WrittenStatementSearchParams): Promise<QuestionsApiResponse<WrittenStatement>> {\n return this.request('/writtenstatements/statements', params as Record<string, unknown>);\n }\n\n async getWrittenStatement(id: number): Promise<MemberApiItem<WrittenStatement>> {\n return this.request(`/writtenstatements/statements/${id}`);\n }\n\n /** Auto-paginating search that yields each page */\n async *searchAllWrittenStatements(params?: WrittenStatementSearchParams): AsyncGenerator<MemberApiItem<WrittenStatement>[]> {\n let skip = params?.skip ?? 0;\n const take = params?.take ?? 20;\n while (true) {\n const page = await this.searchWrittenStatements({ ...params, skip, take });\n if (page.results.length === 0) break;\n yield page.results;\n skip += take;\n if (skip >= page.totalResults) break;\n }\n }\n\n // ─── Daily Reports ─────────────────────────────────────────\n\n async getDailyReports(params?: DailyReportParams): Promise<QuestionsApiResponse<DailyReport>> {\n return this.request('/dailyreports/dailyreports', params as Record<string, unknown>);\n }\n}\n\nexport * from './types.js';\n","import { BaseClient, ClientOptions } from '../client.js';\nimport {\n HansardSearchResponse,\n HansardSearchParams,\n HansardContributionSearchParams,\n HansardContributionType,\n MemberContributionSummary,\n MemberContributionSummaryParams,\n HansardDebateSearchParams,\n HansardDivisionSearchParams,\n HansardMemberSearchParams,\n HansardDebate,\n HansardSpeaker,\n HansardDivision,\n HansardContribution,\n SittingDay,\n SittingDaysParams,\n HansardSection,\n SectionsForDayParams,\n} from './types.js';\n\nconst BASE_URL = 'https://hansard-api.parliament.uk/';\n\nexport class HansardClient extends BaseClient {\n constructor(options?: ClientOptions) {\n super(BASE_URL, options);\n }\n\n // ─── Search ────────────────────────────────────────────────\n\n async search(params?: HansardSearchParams): Promise<HansardSearchResponse> {\n return this.request('/search.json', params as Record<string, unknown>);\n }\n\n async searchContributions(type: HansardContributionType, params?: HansardContributionSearchParams): Promise<HansardSearchResponse> {\n return this.request(`/search/contributions/${type}.json`, params as Record<string, unknown>);\n }\n\n async getMemberContributionSummary(id: number, params?: MemberContributionSummaryParams): Promise<MemberContributionSummary> {\n return this.request(`/search/membercontributionsummary/${id}.json`, params as Record<string, unknown>);\n }\n\n async searchDebates(params?: HansardDebateSearchParams): Promise<HansardSearchResponse> {\n return this.request('/search/debates.json', params as Record<string, unknown>);\n }\n\n async searchDivisions(params?: HansardDivisionSearchParams): Promise<HansardSearchResponse> {\n return this.request('/search/divisions.json', params as Record<string, unknown>);\n }\n\n async searchMembers(params?: HansardMemberSearchParams): Promise<HansardSearchResponse> {\n return this.request('/search/members.json', params as Record<string, unknown>);\n }\n\n // ─── Debates ───────────────────────────────────────────────\n\n async getDebate(id: string): Promise<HansardDebate> {\n return this.request(`/debates/debate/${id}.json`);\n }\n\n async getDebateSpeakers(id: string): Promise<HansardSpeaker[]> {\n return this.request(`/debates/speakerslist/${id}.json`);\n }\n\n async getDebateDivisions(id: string): Promise<HansardDivision[]> {\n return this.request(`/debates/divisions/${id}.json`);\n }\n\n async getMemberDebateContributions(id: string): Promise<HansardContribution[]> {\n return this.request(`/debates/memberdebatecontributions/${id}.json`);\n }\n\n // ─── Sitting Days & Overview ───────────────────────────────\n\n async getSittingDays(params?: SittingDaysParams): Promise<SittingDay[]> {\n return this.request('/historicsittingdays', params as Record<string, unknown>);\n }\n\n async getLastSittingDate(): Promise<string> {\n return this.request('/overview/lastsittingdate.json');\n }\n\n async getSectionsForDay(params: SectionsForDayParams): Promise<HansardSection[]> {\n return this.request('/overview/sectionsforday.json', { ...params } as Record<string, unknown>);\n }\n}\n\nexport * from './types.js';\n","/** House of Parliament */\nexport enum House {\n Commons = 1,\n Lords = 2,\n}\n\n/** Pagination parameters accepted by search endpoints */\nexport interface PaginationParams {\n skip?: number;\n take?: number;\n}\n\n/** Standard paginated response wrapper from the Members/Questions APIs */\nexport interface PaginatedResponse<T> {\n items: T[];\n totalResults: number;\n resultContext: string;\n skip: number;\n take: number;\n links: Link[];\n}\n\nexport interface Link {\n rel: string;\n href: string;\n method: string;\n}\n\n/** Wrapper that the Members API uses around individual items */\nexport interface MemberApiItem<T> {\n value: T;\n links: Link[];\n}\n\n/** Response wrapper used by the Questions & Statements API */\nexport interface QuestionsApiResponse<T> {\n totalResults: number;\n results: MemberApiItem<T>[];\n}\n"],"mappings":"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","names":["pLimit","AnsweredStatus","BASE_URL","BASE_URL","House"]}
|