@iflow-mcp/kdcokenny-lsbible 0.3.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 +529 -0
- package/dist/index.cjs +2269 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +81 -0
- package/dist/index.d.ts +81 -0
- package/dist/index.js +2254 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.cjs +2716 -0
- package/dist/mcp/index.cjs.map +1 -0
- package/dist/mcp/index.d.cts +230 -0
- package/dist/mcp/index.d.ts +230 -0
- package/dist/mcp/index.js +2707 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/stdio.cjs +2709 -0
- package/dist/mcp/stdio.cjs.map +1 -0
- package/dist/mcp/stdio.d.cts +1 -0
- package/dist/mcp/stdio.d.ts +1 -0
- package/dist/mcp/stdio.js +2707 -0
- package/dist/mcp/stdio.js.map +1 -0
- package/dist/noop-B62cxzKZ.d.cts +1157 -0
- package/dist/noop-B62cxzKZ.d.ts +1157 -0
- package/package.json +1 -0
|
@@ -0,0 +1,1157 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Cache provider interface for LSBible SDK.
|
|
5
|
+
*
|
|
6
|
+
* Allows users to implement custom caching strategies for different
|
|
7
|
+
* deployment environments (Cloudflare Workers, Redis, in-memory, etc.)
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Cache provider interface.
|
|
11
|
+
*
|
|
12
|
+
* Implement this interface to provide custom caching for the LSBible client.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* class RedisCacheProvider implements CacheProvider {
|
|
17
|
+
* async get<T>(key: string): Promise<T | undefined> {
|
|
18
|
+
* const value = await redis.get(key);
|
|
19
|
+
* return value ? JSON.parse(value) : undefined;
|
|
20
|
+
* }
|
|
21
|
+
*
|
|
22
|
+
* async set<T>(key: string, value: T, ttl: number): Promise<void> {
|
|
23
|
+
* await redis.set(key, JSON.stringify(value), 'EX', ttl);
|
|
24
|
+
* }
|
|
25
|
+
* }
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
interface CacheProvider {
|
|
29
|
+
/**
|
|
30
|
+
* Get a value from the cache.
|
|
31
|
+
*
|
|
32
|
+
* @param key - Cache key
|
|
33
|
+
* @returns Cached value or undefined if not found/expired
|
|
34
|
+
*/
|
|
35
|
+
get<T>(key: string): Promise<T | undefined>;
|
|
36
|
+
/**
|
|
37
|
+
* Set a value in the cache.
|
|
38
|
+
*
|
|
39
|
+
* @param key - Cache key
|
|
40
|
+
* @param value - Value to cache
|
|
41
|
+
* @param ttl - Time to live in seconds
|
|
42
|
+
*/
|
|
43
|
+
set<T>(key: string, value: T, ttl: number): Promise<void>;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Cache configuration options.
|
|
47
|
+
*/
|
|
48
|
+
interface CacheOptions {
|
|
49
|
+
/**
|
|
50
|
+
* Cache provider implementation.
|
|
51
|
+
*
|
|
52
|
+
* If not provided, caching is disabled.
|
|
53
|
+
*/
|
|
54
|
+
provider?: CacheProvider;
|
|
55
|
+
/**
|
|
56
|
+
* Default TTL for cache entries (in seconds).
|
|
57
|
+
*
|
|
58
|
+
* Can be overridden per-operation.
|
|
59
|
+
* @default 2592000 (30 days)
|
|
60
|
+
*/
|
|
61
|
+
defaultTtl?: number;
|
|
62
|
+
/**
|
|
63
|
+
* Per-operation TTL overrides.
|
|
64
|
+
*/
|
|
65
|
+
ttl?: {
|
|
66
|
+
/** TTL for verse lookups */
|
|
67
|
+
verse?: number;
|
|
68
|
+
/** TTL for passage lookups */
|
|
69
|
+
passage?: number;
|
|
70
|
+
/** TTL for chapter lookups */
|
|
71
|
+
chapter?: number;
|
|
72
|
+
/** TTL for search queries */
|
|
73
|
+
search?: number;
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Recommended cache TTL values (in seconds).
|
|
78
|
+
*/
|
|
79
|
+
declare const CacheTTL: {
|
|
80
|
+
/** 1 month - for immutable Bible content (verses, passages, chapters) */
|
|
81
|
+
readonly BIBLE_CONTENT: 2592000;
|
|
82
|
+
/** 1 week - for search results that may change with API updates */
|
|
83
|
+
readonly SEARCH_RESULTS: 604800;
|
|
84
|
+
/** 1 year - for static resources that never change */
|
|
85
|
+
readonly STATIC: 31536000;
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Zod schemas and TypeScript types for LSBible API data structures.
|
|
90
|
+
*
|
|
91
|
+
* Provides runtime validation and type inference for all API responses.
|
|
92
|
+
*/
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Enumeration of all 66 Bible books for type-safe API calls.
|
|
96
|
+
*/
|
|
97
|
+
declare enum BookName {
|
|
98
|
+
GENESIS = "Genesis",
|
|
99
|
+
EXODUS = "Exodus",
|
|
100
|
+
LEVITICUS = "Leviticus",
|
|
101
|
+
NUMBERS = "Numbers",
|
|
102
|
+
DEUTERONOMY = "Deuteronomy",
|
|
103
|
+
JOSHUA = "Joshua",
|
|
104
|
+
JUDGES = "Judges",
|
|
105
|
+
RUTH = "Ruth",
|
|
106
|
+
SAMUEL_1 = "1 Samuel",
|
|
107
|
+
SAMUEL_2 = "2 Samuel",
|
|
108
|
+
KINGS_1 = "1 Kings",
|
|
109
|
+
KINGS_2 = "2 Kings",
|
|
110
|
+
CHRONICLES_1 = "1 Chronicles",
|
|
111
|
+
CHRONICLES_2 = "2 Chronicles",
|
|
112
|
+
EZRA = "Ezra",
|
|
113
|
+
NEHEMIAH = "Nehemiah",
|
|
114
|
+
ESTHER = "Esther",
|
|
115
|
+
JOB = "Job",
|
|
116
|
+
PSALMS = "Psalms",
|
|
117
|
+
PROVERBS = "Proverbs",
|
|
118
|
+
ECCLESIASTES = "Ecclesiastes",
|
|
119
|
+
SONG_OF_SONGS = "Song of Songs",
|
|
120
|
+
ISAIAH = "Isaiah",
|
|
121
|
+
JEREMIAH = "Jeremiah",
|
|
122
|
+
LAMENTATIONS = "Lamentations",
|
|
123
|
+
EZEKIEL = "Ezekiel",
|
|
124
|
+
DANIEL = "Daniel",
|
|
125
|
+
HOSEA = "Hosea",
|
|
126
|
+
JOEL = "Joel",
|
|
127
|
+
AMOS = "Amos",
|
|
128
|
+
OBADIAH = "Obadiah",
|
|
129
|
+
JONAH = "Jonah",
|
|
130
|
+
MICAH = "Micah",
|
|
131
|
+
NAHUM = "Nahum",
|
|
132
|
+
HABAKKUK = "Habakkuk",
|
|
133
|
+
ZEPHANIAH = "Zephaniah",
|
|
134
|
+
HAGGAI = "Haggai",
|
|
135
|
+
ZECHARIAH = "Zechariah",
|
|
136
|
+
MALACHI = "Malachi",
|
|
137
|
+
MATTHEW = "Matthew",
|
|
138
|
+
MARK = "Mark",
|
|
139
|
+
LUKE = "Luke",
|
|
140
|
+
JOHN = "John",
|
|
141
|
+
ACTS = "Acts",
|
|
142
|
+
ROMANS = "Romans",
|
|
143
|
+
CORINTHIANS_1 = "1 Corinthians",
|
|
144
|
+
CORINTHIANS_2 = "2 Corinthians",
|
|
145
|
+
GALATIANS = "Galatians",
|
|
146
|
+
EPHESIANS = "Ephesians",
|
|
147
|
+
PHILIPPIANS = "Philippians",
|
|
148
|
+
COLOSSIANS = "Colossians",
|
|
149
|
+
THESSALONIANS_1 = "1 Thessalonians",
|
|
150
|
+
THESSALONIANS_2 = "2 Thessalonians",
|
|
151
|
+
TIMOTHY_1 = "1 Timothy",
|
|
152
|
+
TIMOTHY_2 = "2 Timothy",
|
|
153
|
+
TITUS = "Titus",
|
|
154
|
+
PHILEMON = "Philemon",
|
|
155
|
+
HEBREWS = "Hebrews",
|
|
156
|
+
JAMES = "James",
|
|
157
|
+
PETER_1 = "1 Peter",
|
|
158
|
+
PETER_2 = "2 Peter",
|
|
159
|
+
JOHN_1 = "1 John",
|
|
160
|
+
JOHN_2 = "2 John",
|
|
161
|
+
JOHN_3 = "3 John",
|
|
162
|
+
JUDE = "Jude",
|
|
163
|
+
REVELATION = "Revelation"
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Zod schema for VerseReference with validation.
|
|
167
|
+
*
|
|
168
|
+
* Validates that:
|
|
169
|
+
* - Book number is 1-66
|
|
170
|
+
* - Chapter exists in the book
|
|
171
|
+
* - Verse exists in the chapter
|
|
172
|
+
*/
|
|
173
|
+
declare const VerseReferenceSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
|
|
174
|
+
bookNumber: z.ZodNumber;
|
|
175
|
+
chapter: z.ZodNumber;
|
|
176
|
+
verse: z.ZodNumber;
|
|
177
|
+
}, "strip", z.ZodTypeAny, {
|
|
178
|
+
bookNumber: number;
|
|
179
|
+
chapter: number;
|
|
180
|
+
verse: number;
|
|
181
|
+
}, {
|
|
182
|
+
bookNumber: number;
|
|
183
|
+
chapter: number;
|
|
184
|
+
verse: number;
|
|
185
|
+
}>, {
|
|
186
|
+
bookNumber: number;
|
|
187
|
+
chapter: number;
|
|
188
|
+
verse: number;
|
|
189
|
+
}, {
|
|
190
|
+
bookNumber: number;
|
|
191
|
+
chapter: number;
|
|
192
|
+
verse: number;
|
|
193
|
+
}>, {
|
|
194
|
+
bookNumber: number;
|
|
195
|
+
chapter: number;
|
|
196
|
+
verse: number;
|
|
197
|
+
}, {
|
|
198
|
+
bookNumber: number;
|
|
199
|
+
chapter: number;
|
|
200
|
+
verse: number;
|
|
201
|
+
}>;
|
|
202
|
+
/** Type for VerseReference inferred from Zod schema */
|
|
203
|
+
type VerseReference = z.infer<typeof VerseReferenceSchema> & {
|
|
204
|
+
/** Get the book name from the book number */
|
|
205
|
+
readonly bookName: BookName;
|
|
206
|
+
/** String representation (e.g., "John 3:16") */
|
|
207
|
+
toString(): string;
|
|
208
|
+
};
|
|
209
|
+
/**
|
|
210
|
+
* Zod schema for TextSegment.
|
|
211
|
+
*/
|
|
212
|
+
declare const TextSegmentSchema: z.ZodObject<{
|
|
213
|
+
text: z.ZodString;
|
|
214
|
+
isRedLetter: z.ZodDefault<z.ZodBoolean>;
|
|
215
|
+
isItalic: z.ZodDefault<z.ZodBoolean>;
|
|
216
|
+
isBold: z.ZodDefault<z.ZodBoolean>;
|
|
217
|
+
isSmallCaps: z.ZodDefault<z.ZodBoolean>;
|
|
218
|
+
}, "strip", z.ZodTypeAny, {
|
|
219
|
+
text: string;
|
|
220
|
+
isRedLetter: boolean;
|
|
221
|
+
isItalic: boolean;
|
|
222
|
+
isBold: boolean;
|
|
223
|
+
isSmallCaps: boolean;
|
|
224
|
+
}, {
|
|
225
|
+
text: string;
|
|
226
|
+
isRedLetter?: boolean | undefined;
|
|
227
|
+
isItalic?: boolean | undefined;
|
|
228
|
+
isBold?: boolean | undefined;
|
|
229
|
+
isSmallCaps?: boolean | undefined;
|
|
230
|
+
}>;
|
|
231
|
+
/** Type for TextSegment */
|
|
232
|
+
type TextSegment = z.infer<typeof TextSegmentSchema>;
|
|
233
|
+
/**
|
|
234
|
+
* Zod schema for VerseContent.
|
|
235
|
+
*/
|
|
236
|
+
declare const VerseContentSchema: z.ZodObject<{
|
|
237
|
+
reference: z.ZodEffects<z.ZodEffects<z.ZodObject<{
|
|
238
|
+
bookNumber: z.ZodNumber;
|
|
239
|
+
chapter: z.ZodNumber;
|
|
240
|
+
verse: z.ZodNumber;
|
|
241
|
+
}, "strip", z.ZodTypeAny, {
|
|
242
|
+
bookNumber: number;
|
|
243
|
+
chapter: number;
|
|
244
|
+
verse: number;
|
|
245
|
+
}, {
|
|
246
|
+
bookNumber: number;
|
|
247
|
+
chapter: number;
|
|
248
|
+
verse: number;
|
|
249
|
+
}>, {
|
|
250
|
+
bookNumber: number;
|
|
251
|
+
chapter: number;
|
|
252
|
+
verse: number;
|
|
253
|
+
}, {
|
|
254
|
+
bookNumber: number;
|
|
255
|
+
chapter: number;
|
|
256
|
+
verse: number;
|
|
257
|
+
}>, {
|
|
258
|
+
bookNumber: number;
|
|
259
|
+
chapter: number;
|
|
260
|
+
verse: number;
|
|
261
|
+
}, {
|
|
262
|
+
bookNumber: number;
|
|
263
|
+
chapter: number;
|
|
264
|
+
verse: number;
|
|
265
|
+
}>;
|
|
266
|
+
verseNumber: z.ZodNumber;
|
|
267
|
+
segments: z.ZodArray<z.ZodObject<{
|
|
268
|
+
text: z.ZodString;
|
|
269
|
+
isRedLetter: z.ZodDefault<z.ZodBoolean>;
|
|
270
|
+
isItalic: z.ZodDefault<z.ZodBoolean>;
|
|
271
|
+
isBold: z.ZodDefault<z.ZodBoolean>;
|
|
272
|
+
isSmallCaps: z.ZodDefault<z.ZodBoolean>;
|
|
273
|
+
}, "strip", z.ZodTypeAny, {
|
|
274
|
+
text: string;
|
|
275
|
+
isRedLetter: boolean;
|
|
276
|
+
isItalic: boolean;
|
|
277
|
+
isBold: boolean;
|
|
278
|
+
isSmallCaps: boolean;
|
|
279
|
+
}, {
|
|
280
|
+
text: string;
|
|
281
|
+
isRedLetter?: boolean | undefined;
|
|
282
|
+
isItalic?: boolean | undefined;
|
|
283
|
+
isBold?: boolean | undefined;
|
|
284
|
+
isSmallCaps?: boolean | undefined;
|
|
285
|
+
}>, "many">;
|
|
286
|
+
hasSubheading: z.ZodDefault<z.ZodBoolean>;
|
|
287
|
+
subheadingText: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
288
|
+
isPoetry: z.ZodDefault<z.ZodBoolean>;
|
|
289
|
+
isProse: z.ZodDefault<z.ZodBoolean>;
|
|
290
|
+
chapterStart: z.ZodDefault<z.ZodBoolean>;
|
|
291
|
+
}, "strip", z.ZodTypeAny, {
|
|
292
|
+
reference: {
|
|
293
|
+
bookNumber: number;
|
|
294
|
+
chapter: number;
|
|
295
|
+
verse: number;
|
|
296
|
+
};
|
|
297
|
+
verseNumber: number;
|
|
298
|
+
segments: {
|
|
299
|
+
text: string;
|
|
300
|
+
isRedLetter: boolean;
|
|
301
|
+
isItalic: boolean;
|
|
302
|
+
isBold: boolean;
|
|
303
|
+
isSmallCaps: boolean;
|
|
304
|
+
}[];
|
|
305
|
+
hasSubheading: boolean;
|
|
306
|
+
subheadingText: string | null;
|
|
307
|
+
isPoetry: boolean;
|
|
308
|
+
isProse: boolean;
|
|
309
|
+
chapterStart: boolean;
|
|
310
|
+
}, {
|
|
311
|
+
reference: {
|
|
312
|
+
bookNumber: number;
|
|
313
|
+
chapter: number;
|
|
314
|
+
verse: number;
|
|
315
|
+
};
|
|
316
|
+
verseNumber: number;
|
|
317
|
+
segments: {
|
|
318
|
+
text: string;
|
|
319
|
+
isRedLetter?: boolean | undefined;
|
|
320
|
+
isItalic?: boolean | undefined;
|
|
321
|
+
isBold?: boolean | undefined;
|
|
322
|
+
isSmallCaps?: boolean | undefined;
|
|
323
|
+
}[];
|
|
324
|
+
hasSubheading?: boolean | undefined;
|
|
325
|
+
subheadingText?: string | null | undefined;
|
|
326
|
+
isPoetry?: boolean | undefined;
|
|
327
|
+
isProse?: boolean | undefined;
|
|
328
|
+
chapterStart?: boolean | undefined;
|
|
329
|
+
}>;
|
|
330
|
+
/** Type for VerseContent with computed properties */
|
|
331
|
+
type VerseContent = Omit<z.infer<typeof VerseContentSchema>, "reference"> & {
|
|
332
|
+
reference: VerseReference;
|
|
333
|
+
/** Get plain text without formatting */
|
|
334
|
+
readonly plainText: string;
|
|
335
|
+
/** Get text with simple formatting markers */
|
|
336
|
+
readonly formattedText: string;
|
|
337
|
+
};
|
|
338
|
+
/**
|
|
339
|
+
* Zod schema for Passage.
|
|
340
|
+
*/
|
|
341
|
+
declare const PassageSchema: z.ZodObject<{
|
|
342
|
+
fromRef: z.ZodEffects<z.ZodEffects<z.ZodObject<{
|
|
343
|
+
bookNumber: z.ZodNumber;
|
|
344
|
+
chapter: z.ZodNumber;
|
|
345
|
+
verse: z.ZodNumber;
|
|
346
|
+
}, "strip", z.ZodTypeAny, {
|
|
347
|
+
bookNumber: number;
|
|
348
|
+
chapter: number;
|
|
349
|
+
verse: number;
|
|
350
|
+
}, {
|
|
351
|
+
bookNumber: number;
|
|
352
|
+
chapter: number;
|
|
353
|
+
verse: number;
|
|
354
|
+
}>, {
|
|
355
|
+
bookNumber: number;
|
|
356
|
+
chapter: number;
|
|
357
|
+
verse: number;
|
|
358
|
+
}, {
|
|
359
|
+
bookNumber: number;
|
|
360
|
+
chapter: number;
|
|
361
|
+
verse: number;
|
|
362
|
+
}>, {
|
|
363
|
+
bookNumber: number;
|
|
364
|
+
chapter: number;
|
|
365
|
+
verse: number;
|
|
366
|
+
}, {
|
|
367
|
+
bookNumber: number;
|
|
368
|
+
chapter: number;
|
|
369
|
+
verse: number;
|
|
370
|
+
}>;
|
|
371
|
+
toRef: z.ZodEffects<z.ZodEffects<z.ZodObject<{
|
|
372
|
+
bookNumber: z.ZodNumber;
|
|
373
|
+
chapter: z.ZodNumber;
|
|
374
|
+
verse: z.ZodNumber;
|
|
375
|
+
}, "strip", z.ZodTypeAny, {
|
|
376
|
+
bookNumber: number;
|
|
377
|
+
chapter: number;
|
|
378
|
+
verse: number;
|
|
379
|
+
}, {
|
|
380
|
+
bookNumber: number;
|
|
381
|
+
chapter: number;
|
|
382
|
+
verse: number;
|
|
383
|
+
}>, {
|
|
384
|
+
bookNumber: number;
|
|
385
|
+
chapter: number;
|
|
386
|
+
verse: number;
|
|
387
|
+
}, {
|
|
388
|
+
bookNumber: number;
|
|
389
|
+
chapter: number;
|
|
390
|
+
verse: number;
|
|
391
|
+
}>, {
|
|
392
|
+
bookNumber: number;
|
|
393
|
+
chapter: number;
|
|
394
|
+
verse: number;
|
|
395
|
+
}, {
|
|
396
|
+
bookNumber: number;
|
|
397
|
+
chapter: number;
|
|
398
|
+
verse: number;
|
|
399
|
+
}>;
|
|
400
|
+
title: z.ZodString;
|
|
401
|
+
verses: z.ZodArray<z.ZodObject<{
|
|
402
|
+
reference: z.ZodEffects<z.ZodEffects<z.ZodObject<{
|
|
403
|
+
bookNumber: z.ZodNumber;
|
|
404
|
+
chapter: z.ZodNumber;
|
|
405
|
+
verse: z.ZodNumber;
|
|
406
|
+
}, "strip", z.ZodTypeAny, {
|
|
407
|
+
bookNumber: number;
|
|
408
|
+
chapter: number;
|
|
409
|
+
verse: number;
|
|
410
|
+
}, {
|
|
411
|
+
bookNumber: number;
|
|
412
|
+
chapter: number;
|
|
413
|
+
verse: number;
|
|
414
|
+
}>, {
|
|
415
|
+
bookNumber: number;
|
|
416
|
+
chapter: number;
|
|
417
|
+
verse: number;
|
|
418
|
+
}, {
|
|
419
|
+
bookNumber: number;
|
|
420
|
+
chapter: number;
|
|
421
|
+
verse: number;
|
|
422
|
+
}>, {
|
|
423
|
+
bookNumber: number;
|
|
424
|
+
chapter: number;
|
|
425
|
+
verse: number;
|
|
426
|
+
}, {
|
|
427
|
+
bookNumber: number;
|
|
428
|
+
chapter: number;
|
|
429
|
+
verse: number;
|
|
430
|
+
}>;
|
|
431
|
+
verseNumber: z.ZodNumber;
|
|
432
|
+
segments: z.ZodArray<z.ZodObject<{
|
|
433
|
+
text: z.ZodString;
|
|
434
|
+
isRedLetter: z.ZodDefault<z.ZodBoolean>;
|
|
435
|
+
isItalic: z.ZodDefault<z.ZodBoolean>;
|
|
436
|
+
isBold: z.ZodDefault<z.ZodBoolean>;
|
|
437
|
+
isSmallCaps: z.ZodDefault<z.ZodBoolean>;
|
|
438
|
+
}, "strip", z.ZodTypeAny, {
|
|
439
|
+
text: string;
|
|
440
|
+
isRedLetter: boolean;
|
|
441
|
+
isItalic: boolean;
|
|
442
|
+
isBold: boolean;
|
|
443
|
+
isSmallCaps: boolean;
|
|
444
|
+
}, {
|
|
445
|
+
text: string;
|
|
446
|
+
isRedLetter?: boolean | undefined;
|
|
447
|
+
isItalic?: boolean | undefined;
|
|
448
|
+
isBold?: boolean | undefined;
|
|
449
|
+
isSmallCaps?: boolean | undefined;
|
|
450
|
+
}>, "many">;
|
|
451
|
+
hasSubheading: z.ZodDefault<z.ZodBoolean>;
|
|
452
|
+
subheadingText: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
453
|
+
isPoetry: z.ZodDefault<z.ZodBoolean>;
|
|
454
|
+
isProse: z.ZodDefault<z.ZodBoolean>;
|
|
455
|
+
chapterStart: z.ZodDefault<z.ZodBoolean>;
|
|
456
|
+
}, "strip", z.ZodTypeAny, {
|
|
457
|
+
reference: {
|
|
458
|
+
bookNumber: number;
|
|
459
|
+
chapter: number;
|
|
460
|
+
verse: number;
|
|
461
|
+
};
|
|
462
|
+
verseNumber: number;
|
|
463
|
+
segments: {
|
|
464
|
+
text: string;
|
|
465
|
+
isRedLetter: boolean;
|
|
466
|
+
isItalic: boolean;
|
|
467
|
+
isBold: boolean;
|
|
468
|
+
isSmallCaps: boolean;
|
|
469
|
+
}[];
|
|
470
|
+
hasSubheading: boolean;
|
|
471
|
+
subheadingText: string | null;
|
|
472
|
+
isPoetry: boolean;
|
|
473
|
+
isProse: boolean;
|
|
474
|
+
chapterStart: boolean;
|
|
475
|
+
}, {
|
|
476
|
+
reference: {
|
|
477
|
+
bookNumber: number;
|
|
478
|
+
chapter: number;
|
|
479
|
+
verse: number;
|
|
480
|
+
};
|
|
481
|
+
verseNumber: number;
|
|
482
|
+
segments: {
|
|
483
|
+
text: string;
|
|
484
|
+
isRedLetter?: boolean | undefined;
|
|
485
|
+
isItalic?: boolean | undefined;
|
|
486
|
+
isBold?: boolean | undefined;
|
|
487
|
+
isSmallCaps?: boolean | undefined;
|
|
488
|
+
}[];
|
|
489
|
+
hasSubheading?: boolean | undefined;
|
|
490
|
+
subheadingText?: string | null | undefined;
|
|
491
|
+
isPoetry?: boolean | undefined;
|
|
492
|
+
isProse?: boolean | undefined;
|
|
493
|
+
chapterStart?: boolean | undefined;
|
|
494
|
+
}>, "many">;
|
|
495
|
+
}, "strip", z.ZodTypeAny, {
|
|
496
|
+
fromRef: {
|
|
497
|
+
bookNumber: number;
|
|
498
|
+
chapter: number;
|
|
499
|
+
verse: number;
|
|
500
|
+
};
|
|
501
|
+
toRef: {
|
|
502
|
+
bookNumber: number;
|
|
503
|
+
chapter: number;
|
|
504
|
+
verse: number;
|
|
505
|
+
};
|
|
506
|
+
title: string;
|
|
507
|
+
verses: {
|
|
508
|
+
reference: {
|
|
509
|
+
bookNumber: number;
|
|
510
|
+
chapter: number;
|
|
511
|
+
verse: number;
|
|
512
|
+
};
|
|
513
|
+
verseNumber: number;
|
|
514
|
+
segments: {
|
|
515
|
+
text: string;
|
|
516
|
+
isRedLetter: boolean;
|
|
517
|
+
isItalic: boolean;
|
|
518
|
+
isBold: boolean;
|
|
519
|
+
isSmallCaps: boolean;
|
|
520
|
+
}[];
|
|
521
|
+
hasSubheading: boolean;
|
|
522
|
+
subheadingText: string | null;
|
|
523
|
+
isPoetry: boolean;
|
|
524
|
+
isProse: boolean;
|
|
525
|
+
chapterStart: boolean;
|
|
526
|
+
}[];
|
|
527
|
+
}, {
|
|
528
|
+
fromRef: {
|
|
529
|
+
bookNumber: number;
|
|
530
|
+
chapter: number;
|
|
531
|
+
verse: number;
|
|
532
|
+
};
|
|
533
|
+
toRef: {
|
|
534
|
+
bookNumber: number;
|
|
535
|
+
chapter: number;
|
|
536
|
+
verse: number;
|
|
537
|
+
};
|
|
538
|
+
title: string;
|
|
539
|
+
verses: {
|
|
540
|
+
reference: {
|
|
541
|
+
bookNumber: number;
|
|
542
|
+
chapter: number;
|
|
543
|
+
verse: number;
|
|
544
|
+
};
|
|
545
|
+
verseNumber: number;
|
|
546
|
+
segments: {
|
|
547
|
+
text: string;
|
|
548
|
+
isRedLetter?: boolean | undefined;
|
|
549
|
+
isItalic?: boolean | undefined;
|
|
550
|
+
isBold?: boolean | undefined;
|
|
551
|
+
isSmallCaps?: boolean | undefined;
|
|
552
|
+
}[];
|
|
553
|
+
hasSubheading?: boolean | undefined;
|
|
554
|
+
subheadingText?: string | null | undefined;
|
|
555
|
+
isPoetry?: boolean | undefined;
|
|
556
|
+
isProse?: boolean | undefined;
|
|
557
|
+
chapterStart?: boolean | undefined;
|
|
558
|
+
}[];
|
|
559
|
+
}>;
|
|
560
|
+
/** Type for Passage with computed properties */
|
|
561
|
+
type Passage = Omit<z.infer<typeof PassageSchema>, "fromRef" | "toRef" | "verses"> & {
|
|
562
|
+
fromRef: VerseReference;
|
|
563
|
+
toRef: VerseReference;
|
|
564
|
+
verses: VerseContent[];
|
|
565
|
+
/** Check if this passage is a single verse */
|
|
566
|
+
readonly isSingleVerse: boolean;
|
|
567
|
+
/** Get the number of verses in this passage */
|
|
568
|
+
readonly verseCount: number;
|
|
569
|
+
};
|
|
570
|
+
/**
|
|
571
|
+
* Zod schema for SearchResponse.
|
|
572
|
+
*
|
|
573
|
+
* For text searches, includes rich metadata about result distribution across
|
|
574
|
+
* Bible sections and books. For Bible reference lookups, these fields are undefined.
|
|
575
|
+
*/
|
|
576
|
+
declare const SearchResponseSchema: z.ZodObject<{
|
|
577
|
+
query: z.ZodString;
|
|
578
|
+
matchCount: z.ZodNumber;
|
|
579
|
+
passages: z.ZodArray<z.ZodObject<{
|
|
580
|
+
fromRef: z.ZodEffects<z.ZodEffects<z.ZodObject<{
|
|
581
|
+
bookNumber: z.ZodNumber;
|
|
582
|
+
chapter: z.ZodNumber;
|
|
583
|
+
verse: z.ZodNumber;
|
|
584
|
+
}, "strip", z.ZodTypeAny, {
|
|
585
|
+
bookNumber: number;
|
|
586
|
+
chapter: number;
|
|
587
|
+
verse: number;
|
|
588
|
+
}, {
|
|
589
|
+
bookNumber: number;
|
|
590
|
+
chapter: number;
|
|
591
|
+
verse: number;
|
|
592
|
+
}>, {
|
|
593
|
+
bookNumber: number;
|
|
594
|
+
chapter: number;
|
|
595
|
+
verse: number;
|
|
596
|
+
}, {
|
|
597
|
+
bookNumber: number;
|
|
598
|
+
chapter: number;
|
|
599
|
+
verse: number;
|
|
600
|
+
}>, {
|
|
601
|
+
bookNumber: number;
|
|
602
|
+
chapter: number;
|
|
603
|
+
verse: number;
|
|
604
|
+
}, {
|
|
605
|
+
bookNumber: number;
|
|
606
|
+
chapter: number;
|
|
607
|
+
verse: number;
|
|
608
|
+
}>;
|
|
609
|
+
toRef: z.ZodEffects<z.ZodEffects<z.ZodObject<{
|
|
610
|
+
bookNumber: z.ZodNumber;
|
|
611
|
+
chapter: z.ZodNumber;
|
|
612
|
+
verse: z.ZodNumber;
|
|
613
|
+
}, "strip", z.ZodTypeAny, {
|
|
614
|
+
bookNumber: number;
|
|
615
|
+
chapter: number;
|
|
616
|
+
verse: number;
|
|
617
|
+
}, {
|
|
618
|
+
bookNumber: number;
|
|
619
|
+
chapter: number;
|
|
620
|
+
verse: number;
|
|
621
|
+
}>, {
|
|
622
|
+
bookNumber: number;
|
|
623
|
+
chapter: number;
|
|
624
|
+
verse: number;
|
|
625
|
+
}, {
|
|
626
|
+
bookNumber: number;
|
|
627
|
+
chapter: number;
|
|
628
|
+
verse: number;
|
|
629
|
+
}>, {
|
|
630
|
+
bookNumber: number;
|
|
631
|
+
chapter: number;
|
|
632
|
+
verse: number;
|
|
633
|
+
}, {
|
|
634
|
+
bookNumber: number;
|
|
635
|
+
chapter: number;
|
|
636
|
+
verse: number;
|
|
637
|
+
}>;
|
|
638
|
+
title: z.ZodString;
|
|
639
|
+
verses: z.ZodArray<z.ZodObject<{
|
|
640
|
+
reference: z.ZodEffects<z.ZodEffects<z.ZodObject<{
|
|
641
|
+
bookNumber: z.ZodNumber;
|
|
642
|
+
chapter: z.ZodNumber;
|
|
643
|
+
verse: z.ZodNumber;
|
|
644
|
+
}, "strip", z.ZodTypeAny, {
|
|
645
|
+
bookNumber: number;
|
|
646
|
+
chapter: number;
|
|
647
|
+
verse: number;
|
|
648
|
+
}, {
|
|
649
|
+
bookNumber: number;
|
|
650
|
+
chapter: number;
|
|
651
|
+
verse: number;
|
|
652
|
+
}>, {
|
|
653
|
+
bookNumber: number;
|
|
654
|
+
chapter: number;
|
|
655
|
+
verse: number;
|
|
656
|
+
}, {
|
|
657
|
+
bookNumber: number;
|
|
658
|
+
chapter: number;
|
|
659
|
+
verse: number;
|
|
660
|
+
}>, {
|
|
661
|
+
bookNumber: number;
|
|
662
|
+
chapter: number;
|
|
663
|
+
verse: number;
|
|
664
|
+
}, {
|
|
665
|
+
bookNumber: number;
|
|
666
|
+
chapter: number;
|
|
667
|
+
verse: number;
|
|
668
|
+
}>;
|
|
669
|
+
verseNumber: z.ZodNumber;
|
|
670
|
+
segments: z.ZodArray<z.ZodObject<{
|
|
671
|
+
text: z.ZodString;
|
|
672
|
+
isRedLetter: z.ZodDefault<z.ZodBoolean>;
|
|
673
|
+
isItalic: z.ZodDefault<z.ZodBoolean>;
|
|
674
|
+
isBold: z.ZodDefault<z.ZodBoolean>;
|
|
675
|
+
isSmallCaps: z.ZodDefault<z.ZodBoolean>;
|
|
676
|
+
}, "strip", z.ZodTypeAny, {
|
|
677
|
+
text: string;
|
|
678
|
+
isRedLetter: boolean;
|
|
679
|
+
isItalic: boolean;
|
|
680
|
+
isBold: boolean;
|
|
681
|
+
isSmallCaps: boolean;
|
|
682
|
+
}, {
|
|
683
|
+
text: string;
|
|
684
|
+
isRedLetter?: boolean | undefined;
|
|
685
|
+
isItalic?: boolean | undefined;
|
|
686
|
+
isBold?: boolean | undefined;
|
|
687
|
+
isSmallCaps?: boolean | undefined;
|
|
688
|
+
}>, "many">;
|
|
689
|
+
hasSubheading: z.ZodDefault<z.ZodBoolean>;
|
|
690
|
+
subheadingText: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
691
|
+
isPoetry: z.ZodDefault<z.ZodBoolean>;
|
|
692
|
+
isProse: z.ZodDefault<z.ZodBoolean>;
|
|
693
|
+
chapterStart: z.ZodDefault<z.ZodBoolean>;
|
|
694
|
+
}, "strip", z.ZodTypeAny, {
|
|
695
|
+
reference: {
|
|
696
|
+
bookNumber: number;
|
|
697
|
+
chapter: number;
|
|
698
|
+
verse: number;
|
|
699
|
+
};
|
|
700
|
+
verseNumber: number;
|
|
701
|
+
segments: {
|
|
702
|
+
text: string;
|
|
703
|
+
isRedLetter: boolean;
|
|
704
|
+
isItalic: boolean;
|
|
705
|
+
isBold: boolean;
|
|
706
|
+
isSmallCaps: boolean;
|
|
707
|
+
}[];
|
|
708
|
+
hasSubheading: boolean;
|
|
709
|
+
subheadingText: string | null;
|
|
710
|
+
isPoetry: boolean;
|
|
711
|
+
isProse: boolean;
|
|
712
|
+
chapterStart: boolean;
|
|
713
|
+
}, {
|
|
714
|
+
reference: {
|
|
715
|
+
bookNumber: number;
|
|
716
|
+
chapter: number;
|
|
717
|
+
verse: number;
|
|
718
|
+
};
|
|
719
|
+
verseNumber: number;
|
|
720
|
+
segments: {
|
|
721
|
+
text: string;
|
|
722
|
+
isRedLetter?: boolean | undefined;
|
|
723
|
+
isItalic?: boolean | undefined;
|
|
724
|
+
isBold?: boolean | undefined;
|
|
725
|
+
isSmallCaps?: boolean | undefined;
|
|
726
|
+
}[];
|
|
727
|
+
hasSubheading?: boolean | undefined;
|
|
728
|
+
subheadingText?: string | null | undefined;
|
|
729
|
+
isPoetry?: boolean | undefined;
|
|
730
|
+
isProse?: boolean | undefined;
|
|
731
|
+
chapterStart?: boolean | undefined;
|
|
732
|
+
}>, "many">;
|
|
733
|
+
}, "strip", z.ZodTypeAny, {
|
|
734
|
+
fromRef: {
|
|
735
|
+
bookNumber: number;
|
|
736
|
+
chapter: number;
|
|
737
|
+
verse: number;
|
|
738
|
+
};
|
|
739
|
+
toRef: {
|
|
740
|
+
bookNumber: number;
|
|
741
|
+
chapter: number;
|
|
742
|
+
verse: number;
|
|
743
|
+
};
|
|
744
|
+
title: string;
|
|
745
|
+
verses: {
|
|
746
|
+
reference: {
|
|
747
|
+
bookNumber: number;
|
|
748
|
+
chapter: number;
|
|
749
|
+
verse: number;
|
|
750
|
+
};
|
|
751
|
+
verseNumber: number;
|
|
752
|
+
segments: {
|
|
753
|
+
text: string;
|
|
754
|
+
isRedLetter: boolean;
|
|
755
|
+
isItalic: boolean;
|
|
756
|
+
isBold: boolean;
|
|
757
|
+
isSmallCaps: boolean;
|
|
758
|
+
}[];
|
|
759
|
+
hasSubheading: boolean;
|
|
760
|
+
subheadingText: string | null;
|
|
761
|
+
isPoetry: boolean;
|
|
762
|
+
isProse: boolean;
|
|
763
|
+
chapterStart: boolean;
|
|
764
|
+
}[];
|
|
765
|
+
}, {
|
|
766
|
+
fromRef: {
|
|
767
|
+
bookNumber: number;
|
|
768
|
+
chapter: number;
|
|
769
|
+
verse: number;
|
|
770
|
+
};
|
|
771
|
+
toRef: {
|
|
772
|
+
bookNumber: number;
|
|
773
|
+
chapter: number;
|
|
774
|
+
verse: number;
|
|
775
|
+
};
|
|
776
|
+
title: string;
|
|
777
|
+
verses: {
|
|
778
|
+
reference: {
|
|
779
|
+
bookNumber: number;
|
|
780
|
+
chapter: number;
|
|
781
|
+
verse: number;
|
|
782
|
+
};
|
|
783
|
+
verseNumber: number;
|
|
784
|
+
segments: {
|
|
785
|
+
text: string;
|
|
786
|
+
isRedLetter?: boolean | undefined;
|
|
787
|
+
isItalic?: boolean | undefined;
|
|
788
|
+
isBold?: boolean | undefined;
|
|
789
|
+
isSmallCaps?: boolean | undefined;
|
|
790
|
+
}[];
|
|
791
|
+
hasSubheading?: boolean | undefined;
|
|
792
|
+
subheadingText?: string | null | undefined;
|
|
793
|
+
isPoetry?: boolean | undefined;
|
|
794
|
+
isProse?: boolean | undefined;
|
|
795
|
+
chapterStart?: boolean | undefined;
|
|
796
|
+
}[];
|
|
797
|
+
}>, "many">;
|
|
798
|
+
durationMs: z.ZodNumber;
|
|
799
|
+
timestamp: z.ZodNumber;
|
|
800
|
+
totalCount: z.ZodOptional<z.ZodNumber>;
|
|
801
|
+
filteredCount: z.ZodOptional<z.ZodNumber>;
|
|
802
|
+
countsByBook: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
|
|
803
|
+
countsBySection: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
|
|
804
|
+
}, "strip", z.ZodTypeAny, {
|
|
805
|
+
query: string;
|
|
806
|
+
matchCount: number;
|
|
807
|
+
passages: {
|
|
808
|
+
fromRef: {
|
|
809
|
+
bookNumber: number;
|
|
810
|
+
chapter: number;
|
|
811
|
+
verse: number;
|
|
812
|
+
};
|
|
813
|
+
toRef: {
|
|
814
|
+
bookNumber: number;
|
|
815
|
+
chapter: number;
|
|
816
|
+
verse: number;
|
|
817
|
+
};
|
|
818
|
+
title: string;
|
|
819
|
+
verses: {
|
|
820
|
+
reference: {
|
|
821
|
+
bookNumber: number;
|
|
822
|
+
chapter: number;
|
|
823
|
+
verse: number;
|
|
824
|
+
};
|
|
825
|
+
verseNumber: number;
|
|
826
|
+
segments: {
|
|
827
|
+
text: string;
|
|
828
|
+
isRedLetter: boolean;
|
|
829
|
+
isItalic: boolean;
|
|
830
|
+
isBold: boolean;
|
|
831
|
+
isSmallCaps: boolean;
|
|
832
|
+
}[];
|
|
833
|
+
hasSubheading: boolean;
|
|
834
|
+
subheadingText: string | null;
|
|
835
|
+
isPoetry: boolean;
|
|
836
|
+
isProse: boolean;
|
|
837
|
+
chapterStart: boolean;
|
|
838
|
+
}[];
|
|
839
|
+
}[];
|
|
840
|
+
durationMs: number;
|
|
841
|
+
timestamp: number;
|
|
842
|
+
totalCount?: number | undefined;
|
|
843
|
+
filteredCount?: number | undefined;
|
|
844
|
+
countsByBook?: Record<string, number> | undefined;
|
|
845
|
+
countsBySection?: Record<string, number> | undefined;
|
|
846
|
+
}, {
|
|
847
|
+
query: string;
|
|
848
|
+
matchCount: number;
|
|
849
|
+
passages: {
|
|
850
|
+
fromRef: {
|
|
851
|
+
bookNumber: number;
|
|
852
|
+
chapter: number;
|
|
853
|
+
verse: number;
|
|
854
|
+
};
|
|
855
|
+
toRef: {
|
|
856
|
+
bookNumber: number;
|
|
857
|
+
chapter: number;
|
|
858
|
+
verse: number;
|
|
859
|
+
};
|
|
860
|
+
title: string;
|
|
861
|
+
verses: {
|
|
862
|
+
reference: {
|
|
863
|
+
bookNumber: number;
|
|
864
|
+
chapter: number;
|
|
865
|
+
verse: number;
|
|
866
|
+
};
|
|
867
|
+
verseNumber: number;
|
|
868
|
+
segments: {
|
|
869
|
+
text: string;
|
|
870
|
+
isRedLetter?: boolean | undefined;
|
|
871
|
+
isItalic?: boolean | undefined;
|
|
872
|
+
isBold?: boolean | undefined;
|
|
873
|
+
isSmallCaps?: boolean | undefined;
|
|
874
|
+
}[];
|
|
875
|
+
hasSubheading?: boolean | undefined;
|
|
876
|
+
subheadingText?: string | null | undefined;
|
|
877
|
+
isPoetry?: boolean | undefined;
|
|
878
|
+
isProse?: boolean | undefined;
|
|
879
|
+
chapterStart?: boolean | undefined;
|
|
880
|
+
}[];
|
|
881
|
+
}[];
|
|
882
|
+
durationMs: number;
|
|
883
|
+
timestamp: number;
|
|
884
|
+
totalCount?: number | undefined;
|
|
885
|
+
filteredCount?: number | undefined;
|
|
886
|
+
countsByBook?: Record<string, number> | undefined;
|
|
887
|
+
countsBySection?: Record<string, number> | undefined;
|
|
888
|
+
}>;
|
|
889
|
+
/** Type for SearchResponse with computed properties */
|
|
890
|
+
type SearchResponse = Omit<z.infer<typeof SearchResponseSchema>, "passages"> & {
|
|
891
|
+
passages: Passage[];
|
|
892
|
+
/** Get the number of passages returned */
|
|
893
|
+
readonly passageCount: number;
|
|
894
|
+
/** Get total number of verses across all passages */
|
|
895
|
+
readonly totalVerses: number;
|
|
896
|
+
/** Check if this response includes search distribution metadata */
|
|
897
|
+
readonly hasSearchMetadata: boolean;
|
|
898
|
+
};
|
|
899
|
+
|
|
900
|
+
/**
|
|
901
|
+
* LSBible API client.
|
|
902
|
+
*/
|
|
903
|
+
|
|
904
|
+
/** Client configuration options */
|
|
905
|
+
interface LSBibleClientOptions {
|
|
906
|
+
/** Request timeout in seconds (default: 30) */
|
|
907
|
+
timeout?: number;
|
|
908
|
+
/** Optional build ID (auto-detected if not provided) */
|
|
909
|
+
buildId?: string;
|
|
910
|
+
/** Optional custom headers */
|
|
911
|
+
headers?: Record<string, string>;
|
|
912
|
+
/** Optional cache configuration */
|
|
913
|
+
cache?: CacheOptions;
|
|
914
|
+
}
|
|
915
|
+
/**
|
|
916
|
+
* Client for interacting with the LSBible API.
|
|
917
|
+
*
|
|
918
|
+
* @example
|
|
919
|
+
* ```ts
|
|
920
|
+
* const client = new LSBibleClient();
|
|
921
|
+
*
|
|
922
|
+
* // Get a single verse
|
|
923
|
+
* const verse = await client.getVerse(BookName.JOHN, 3, 16);
|
|
924
|
+
*
|
|
925
|
+
* // Search for text
|
|
926
|
+
* const results = await client.search("love");
|
|
927
|
+
* ```
|
|
928
|
+
*/
|
|
929
|
+
declare class LSBibleClient {
|
|
930
|
+
private static readonly BASE_URL;
|
|
931
|
+
private cacheProvider;
|
|
932
|
+
private cacheTtls;
|
|
933
|
+
private timeout;
|
|
934
|
+
private buildId;
|
|
935
|
+
private buildIdFetched;
|
|
936
|
+
private headers;
|
|
937
|
+
/**
|
|
938
|
+
* Create a new LSBible client.
|
|
939
|
+
*
|
|
940
|
+
* @param options - Client configuration options
|
|
941
|
+
*/
|
|
942
|
+
constructor(options?: LSBibleClientOptions);
|
|
943
|
+
/**
|
|
944
|
+
* Get the Next.js build ID.
|
|
945
|
+
*
|
|
946
|
+
* Strategies:
|
|
947
|
+
* 1. Use cached/provided build ID
|
|
948
|
+
* 2. Extract from homepage HTML (__NEXT_DATA__ script)
|
|
949
|
+
* 3. Try to find it in script tags
|
|
950
|
+
*
|
|
951
|
+
* @throws BuildIDError if build ID cannot be determined
|
|
952
|
+
*/
|
|
953
|
+
private getBuildId;
|
|
954
|
+
/**
|
|
955
|
+
* Cache wrapper for async operations.
|
|
956
|
+
*
|
|
957
|
+
* @param key - Cache key
|
|
958
|
+
* @param ttl - Time to live in seconds
|
|
959
|
+
* @param fetcher - Function to fetch fresh data
|
|
960
|
+
* @returns Cached or fresh data
|
|
961
|
+
*/
|
|
962
|
+
private withCache;
|
|
963
|
+
/**
|
|
964
|
+
* Make a request to the LSBible API.
|
|
965
|
+
*
|
|
966
|
+
* @param query - Search query or verse reference
|
|
967
|
+
* @returns API response JSON
|
|
968
|
+
* @throws APIError if request fails
|
|
969
|
+
*/
|
|
970
|
+
private makeRequest;
|
|
971
|
+
/**
|
|
972
|
+
* Detect if response is from text search or Bible reference lookup.
|
|
973
|
+
*
|
|
974
|
+
* Text searches have initialItems array with metadata.
|
|
975
|
+
* Bible reference lookups have passages array with full HTML.
|
|
976
|
+
*/
|
|
977
|
+
private isTextSearch;
|
|
978
|
+
/**
|
|
979
|
+
* Parse text search results from initialItems format.
|
|
980
|
+
*/
|
|
981
|
+
private parseSearchResults;
|
|
982
|
+
/**
|
|
983
|
+
* Parse Bible reference lookup results from passages format.
|
|
984
|
+
*/
|
|
985
|
+
private parseReferenceResults;
|
|
986
|
+
/**
|
|
987
|
+
* Parse API response into SearchResponse.
|
|
988
|
+
*/
|
|
989
|
+
private parseResponse;
|
|
990
|
+
/**
|
|
991
|
+
* Search for passages containing text.
|
|
992
|
+
*
|
|
993
|
+
* @param query - Search text (e.g., "love", "faith")
|
|
994
|
+
* @returns SearchResponse with structured passage data
|
|
995
|
+
* @throws APIError if API request fails
|
|
996
|
+
*/
|
|
997
|
+
search(query: string): Promise<SearchResponse>;
|
|
998
|
+
/**
|
|
999
|
+
* Get a specific verse with validated parameters.
|
|
1000
|
+
*
|
|
1001
|
+
* @param book - Book name as enum or string
|
|
1002
|
+
* @param chapter - Chapter number (validated against book)
|
|
1003
|
+
* @param verse - Verse number (validated against chapter)
|
|
1004
|
+
* @returns Single Passage containing the verse
|
|
1005
|
+
* @throws InvalidReferenceError if book/chapter/verse combination is invalid
|
|
1006
|
+
* @throws APIError if API request fails
|
|
1007
|
+
*
|
|
1008
|
+
* @example
|
|
1009
|
+
* ```ts
|
|
1010
|
+
* // Using enum (recommended - type-safe with autocomplete)
|
|
1011
|
+
* const passage = await client.getVerse(BookName.JOHN, 3, 16);
|
|
1012
|
+
*
|
|
1013
|
+
* // Using string (validated at runtime)
|
|
1014
|
+
* const passage2 = await client.getVerse("John", 3, 16);
|
|
1015
|
+
* ```
|
|
1016
|
+
*/
|
|
1017
|
+
getVerse(book: BookName | string, chapter: number, verse: number): Promise<Passage>;
|
|
1018
|
+
/**
|
|
1019
|
+
* Get a passage spanning multiple verses.
|
|
1020
|
+
*
|
|
1021
|
+
* @param fromBook - Starting book
|
|
1022
|
+
* @param fromChapter - Starting chapter
|
|
1023
|
+
* @param fromVerse - Starting verse
|
|
1024
|
+
* @param toBook - Ending book
|
|
1025
|
+
* @param toChapter - Ending chapter
|
|
1026
|
+
* @param toVerse - Ending verse
|
|
1027
|
+
* @returns Passage containing all verses in range
|
|
1028
|
+
* @throws InvalidReferenceError if any reference is invalid
|
|
1029
|
+
* @throws APIError if API request fails
|
|
1030
|
+
*
|
|
1031
|
+
* @example
|
|
1032
|
+
* ```ts
|
|
1033
|
+
* // Get John 3:16-18
|
|
1034
|
+
* const passage = await client.getPassage(
|
|
1035
|
+
* BookName.JOHN, 3, 16,
|
|
1036
|
+
* BookName.JOHN, 3, 18
|
|
1037
|
+
* );
|
|
1038
|
+
* ```
|
|
1039
|
+
*/
|
|
1040
|
+
getPassage(fromBook: BookName | string, fromChapter: number, fromVerse: number, toBook: BookName | string, toChapter: number, toVerse: number): Promise<Passage>;
|
|
1041
|
+
/**
|
|
1042
|
+
* Get an entire chapter.
|
|
1043
|
+
*
|
|
1044
|
+
* @param book - Book name
|
|
1045
|
+
* @param chapter - Chapter number
|
|
1046
|
+
* @returns Passage containing all verses in the chapter
|
|
1047
|
+
* @throws InvalidReferenceError if book/chapter is invalid
|
|
1048
|
+
* @throws APIError if API request fails
|
|
1049
|
+
*
|
|
1050
|
+
* @example
|
|
1051
|
+
* ```ts
|
|
1052
|
+
* // Get all of John chapter 3
|
|
1053
|
+
* const passage = await client.getChapter(BookName.JOHN, 3);
|
|
1054
|
+
* ```
|
|
1055
|
+
*/
|
|
1056
|
+
getChapter(book: BookName | string, chapter: number): Promise<Passage>;
|
|
1057
|
+
/**
|
|
1058
|
+
* Clear all cached data.
|
|
1059
|
+
*
|
|
1060
|
+
* This method calls the cache provider's clear method if one is configured.
|
|
1061
|
+
* If the cache provider doesn't implement a clear method, this is a no-op.
|
|
1062
|
+
*
|
|
1063
|
+
* @example
|
|
1064
|
+
* ```ts
|
|
1065
|
+
* const client = new LSBibleClient({
|
|
1066
|
+
* cache: { provider: new MemoryCacheProvider() }
|
|
1067
|
+
* });
|
|
1068
|
+
*
|
|
1069
|
+
* // Clear all cached data
|
|
1070
|
+
* client.clearCache();
|
|
1071
|
+
* ```
|
|
1072
|
+
*/
|
|
1073
|
+
clearCache(): void;
|
|
1074
|
+
}
|
|
1075
|
+
|
|
1076
|
+
/**
|
|
1077
|
+
* In-memory cache provider for local development and testing.
|
|
1078
|
+
*
|
|
1079
|
+
* Stores cache entries in a Map with TTL support. Cache is not
|
|
1080
|
+
* shared across processes or requests.
|
|
1081
|
+
*/
|
|
1082
|
+
|
|
1083
|
+
/**
|
|
1084
|
+
* In-memory cache provider using Map.
|
|
1085
|
+
*
|
|
1086
|
+
* Suitable for:
|
|
1087
|
+
* - Local development
|
|
1088
|
+
* - Testing
|
|
1089
|
+
* - Single-process applications
|
|
1090
|
+
* - MCP stdio servers
|
|
1091
|
+
*
|
|
1092
|
+
* Not suitable for:
|
|
1093
|
+
* - Multi-process applications
|
|
1094
|
+
* - Cloudflare Workers (use CloudflareCacheProvider)
|
|
1095
|
+
* - Production high-traffic servers (use Redis/Memcached)
|
|
1096
|
+
*
|
|
1097
|
+
* @example
|
|
1098
|
+
* ```ts
|
|
1099
|
+
* import { LSBibleClient, MemoryCacheProvider } from 'lsbible';
|
|
1100
|
+
*
|
|
1101
|
+
* const client = new LSBibleClient({
|
|
1102
|
+
* cache: {
|
|
1103
|
+
* provider: new MemoryCacheProvider()
|
|
1104
|
+
* }
|
|
1105
|
+
* });
|
|
1106
|
+
* ```
|
|
1107
|
+
*/
|
|
1108
|
+
declare class MemoryCacheProvider implements CacheProvider {
|
|
1109
|
+
private cache;
|
|
1110
|
+
get<T>(key: string): Promise<T | undefined>;
|
|
1111
|
+
set<T>(key: string, value: T, ttl: number): Promise<void>;
|
|
1112
|
+
/**
|
|
1113
|
+
* Clear all cache entries.
|
|
1114
|
+
*
|
|
1115
|
+
* Useful for testing or manual cache invalidation.
|
|
1116
|
+
*/
|
|
1117
|
+
clear(): void;
|
|
1118
|
+
/**
|
|
1119
|
+
* Get the number of entries in the cache.
|
|
1120
|
+
*
|
|
1121
|
+
* Includes expired entries that haven't been accessed yet.
|
|
1122
|
+
*/
|
|
1123
|
+
size(): number;
|
|
1124
|
+
}
|
|
1125
|
+
|
|
1126
|
+
/**
|
|
1127
|
+
* No-op cache provider that disables caching.
|
|
1128
|
+
*
|
|
1129
|
+
* Use this when you want to disable caching entirely.
|
|
1130
|
+
*/
|
|
1131
|
+
|
|
1132
|
+
/**
|
|
1133
|
+
* No-op cache provider.
|
|
1134
|
+
*
|
|
1135
|
+
* All get() calls return undefined (cache miss).
|
|
1136
|
+
* All set() calls do nothing.
|
|
1137
|
+
*
|
|
1138
|
+
* Use when you want to disable caching for testing,
|
|
1139
|
+
* debugging, or when caching isn't beneficial for your use case.
|
|
1140
|
+
*
|
|
1141
|
+
* @example
|
|
1142
|
+
* ```ts
|
|
1143
|
+
* import { LSBibleClient, NoopCacheProvider } from 'lsbible';
|
|
1144
|
+
*
|
|
1145
|
+
* const client = new LSBibleClient({
|
|
1146
|
+
* cache: {
|
|
1147
|
+
* provider: new NoopCacheProvider()
|
|
1148
|
+
* }
|
|
1149
|
+
* });
|
|
1150
|
+
* ```
|
|
1151
|
+
*/
|
|
1152
|
+
declare class NoopCacheProvider implements CacheProvider {
|
|
1153
|
+
get<T>(_key: string): Promise<T | undefined>;
|
|
1154
|
+
set<T>(_key: string, _value: T, _ttl: number): Promise<void>;
|
|
1155
|
+
}
|
|
1156
|
+
|
|
1157
|
+
export { BookName as B, type CacheOptions as C, LSBibleClient as L, MemoryCacheProvider as M, NoopCacheProvider as N, type Passage as P, type SearchResponse as S, type TextSegment as T, type VerseContent as V, type CacheProvider as a, CacheTTL as b, type LSBibleClientOptions as c, type VerseReference as d };
|