@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 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/mcp/prompts.ts","../../src/books.ts","../../src/models.ts","../../src/mcp/resources.ts","../../src/cache/memory.ts","../../src/cache/interface.ts","../../src/exceptions.ts","../../src/parser.ts","../../src/validators.ts","../../src/client.ts","../../src/mcp/tools.ts","../../src/mcp/server.ts","../../src/cache/noop.ts"],"names":["z","BookName","ResourceTemplate","parseHTML","bookName","output","McpServer"],"mappings":"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;AAAA,MAAI,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,CAAA;AAAA,MAAG,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,CAAA;AAAA,MAAG,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,CAAA;AAAA,MAAG,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,EAAA;AAAA,MAC1F,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,CAAA;AAAA,MAAG,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,CAAA;AAAA,MAAG,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,CAAA;AAAA,MAAG,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAC3F,CAAA;AAAA,MAAG,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,CAAA;AAAA,MAAG,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,CAAA;AAAA,MAAG,EAAA;AAAA,MAAI,GAAA;AAAA,MAAK,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAC1F,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,EAAA;AAAA,MAAI,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,EAAA;AAAA,MAAI,EAAA;AAAA,MAAI,C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","file":"index.cjs","sourcesContent":["/**\n * MCP prompt templates for LSBible.\n *\n * Provides 2 prompts:\n * - bible_study: Generate a structured Bible study guide\n * - cross_reference: Find related verses and themes\n */\n\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\n\n/**\n * Register all prompts with the MCP server.\n *\n * @param server - McpServer instance\n */\nexport function registerPrompts(server: McpServer): void {\n // Prompt 1: bible_study - Generate a structured Bible study guide\n server.registerPrompt(\n \"bible_study\",\n {\n title: \"Bible Study Guide\",\n description: \"Generate a comprehensive Bible study guide for a passage\",\n argsSchema: {\n passage: z.string().describe('Bible passage reference (e.g., \"John 3:16-21\")'),\n focusAreas: z\n .string()\n .optional()\n .describe(\n 'Optional comma-separated areas to focus on (e.g., \"context, application, cross-references\")'\n ),\n },\n },\n (args) => {\n const { passage, focusAreas } = args as { passage: string; focusAreas?: string };\n const focusText = focusAreas ? `\\n\\nFocus areas: ${focusAreas}` : \"\";\n\n return {\n messages: [\n {\n role: \"user\",\n content: {\n type: \"text\",\n text: `Create a comprehensive Bible study guide for ${passage}.\n\nInclude:\n1. Historical and cultural context\n2. Key themes and theological insights\n3. Practical applications for modern readers\n4. Discussion questions\n5. Cross-references to related passages${focusText}`,\n },\n },\n ],\n };\n }\n );\n\n // Prompt 2: cross_reference - Find related verses and themes\n server.registerPrompt(\n \"cross_reference\",\n {\n title: \"Find Cross References\",\n description: \"Find verses related to a specific verse\",\n argsSchema: {\n verse: z.string().describe('Bible verse reference (e.g., \"Romans 8:28\")'),\n maxResults: z.string().optional().describe(\"Maximum number of results (default: 10)\"),\n },\n },\n (args) => {\n const { verse, maxResults: maxResultsStr } = args as { verse: string; maxResults?: string };\n const maxResults = maxResultsStr ? Number.parseInt(maxResultsStr, 10) : 10;\n return {\n messages: [\n {\n role: \"user\",\n content: {\n type: \"text\",\n text: `Find up to ${maxResults} Bible verses that are thematically related to ${verse}.\n\nFor each related verse:\n1. Explain the thematic connection\n2. Note any parallel language or concepts\n3. Highlight complementary or contrasting perspectives`,\n },\n },\n ],\n };\n }\n );\n}\n","/**\n * Bible structure data for all 66 books.\n *\n * Contains complete chapter and verse counts for validation and reference building.\n */\n\n/** Bible testaments */\nexport enum Testament {\n OLD_TESTAMENT = \"OT\",\n NEW_TESTAMENT = \"NT\",\n}\n\n/** Bible sections for search result organization */\nexport enum BibleSection {\n PENTATEUCH = \"Pentateuch\",\n HISTORY = \"History\",\n WISDOM_AND_POETRY = \"Wisdom and Poetry\",\n MAJOR_PROPHETS = \"Major Prophets\",\n MINOR_PROPHETS = \"Minor Prophets\",\n GOSPELS_AND_ACTS = \"Gospels and Acts\",\n PAULINE_EPISTLES = \"Pauline Epistles\",\n GENERAL_EPISTLES = \"General Epistles\",\n}\n\n/** Information about a Bible book */\nexport interface BookInfo {\n number: number;\n name: string;\n testament: Testament;\n chapters: number;\n verses: number[]; // Verse count per chapter\n}\n\n/** Complete Bible structure with all 66 books */\nexport const BIBLE_STRUCTURE: Record<number, BookInfo> = {\n 1: {\n number: 1,\n name: \"Genesis\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 50,\n verses: [\n 31, 25, 24, 26, 32, 22, 24, 22, 29, 32, 32, 20, 18, 24, 21, 16, 27, 33, 38, 18, 34, 24, 20,\n 67, 34, 35, 46, 22, 35, 43, 55, 32, 20, 31, 29, 43, 36, 30, 23, 23, 57, 38, 34, 34, 28, 34,\n 31, 22, 33, 26,\n ],\n },\n 2: {\n number: 2,\n name: \"Exodus\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 40,\n verses: [\n 22, 25, 22, 31, 23, 30, 25, 32, 35, 29, 10, 51, 22, 31, 27, 36, 16, 27, 25, 26, 36, 31, 33,\n 18, 40, 37, 21, 43, 46, 38, 18, 35, 23, 35, 35, 38, 29, 31, 43, 38,\n ],\n },\n 3: {\n number: 3,\n name: \"Leviticus\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 27,\n verses: [\n 17, 16, 17, 35, 19, 30, 38, 36, 24, 20, 47, 8, 59, 57, 33, 34, 16, 30, 37, 27, 24, 33, 44, 23,\n 55, 46, 34,\n ],\n },\n 4: {\n number: 4,\n name: \"Numbers\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 36,\n verses: [\n 54, 34, 51, 49, 31, 27, 89, 26, 23, 36, 35, 16, 33, 45, 41, 50, 13, 32, 22, 29, 35, 41, 30,\n 25, 18, 65, 23, 31, 40, 16, 54, 42, 56, 29, 34, 13,\n ],\n },\n 5: {\n number: 5,\n name: \"Deuteronomy\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 34,\n verses: [\n 46, 37, 29, 49, 33, 25, 26, 20, 29, 22, 32, 32, 18, 29, 23, 22, 20, 22, 21, 20, 23, 30, 25,\n 22, 19, 19, 26, 68, 29, 20, 30, 52, 29, 12,\n ],\n },\n 6: {\n number: 6,\n name: \"Joshua\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 24,\n verses: [\n 18, 24, 17, 24, 15, 27, 26, 35, 27, 43, 23, 24, 33, 15, 63, 10, 18, 28, 51, 9, 45, 34, 16, 33,\n ],\n },\n 7: {\n number: 7,\n name: \"Judges\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 21,\n verses: [36, 23, 31, 24, 31, 40, 25, 35, 57, 18, 40, 15, 25, 20, 20, 31, 13, 31, 30, 48, 25],\n },\n 8: {\n number: 8,\n name: \"Ruth\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 4,\n verses: [22, 23, 18, 22],\n },\n 9: {\n number: 9,\n name: \"1 Samuel\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 31,\n verses: [\n 28, 36, 21, 22, 12, 21, 17, 22, 27, 27, 15, 25, 23, 52, 35, 23, 58, 30, 24, 42, 15, 23, 29,\n 22, 44, 25, 12, 25, 11, 31, 13,\n ],\n },\n 10: {\n number: 10,\n name: \"2 Samuel\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 24,\n verses: [\n 27, 32, 39, 12, 25, 23, 29, 18, 13, 19, 27, 31, 39, 33, 37, 23, 29, 33, 43, 26, 22, 51, 39,\n 25,\n ],\n },\n 11: {\n number: 11,\n name: \"1 Kings\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 22,\n verses: [\n 53, 46, 28, 34, 18, 38, 51, 66, 28, 29, 43, 33, 34, 31, 34, 34, 24, 46, 21, 43, 29, 53,\n ],\n },\n 12: {\n number: 12,\n name: \"2 Kings\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 25,\n verses: [\n 18, 25, 27, 44, 27, 33, 20, 29, 37, 36, 21, 21, 25, 29, 38, 20, 41, 37, 37, 21, 26, 20, 37,\n 20, 30,\n ],\n },\n 13: {\n number: 13,\n name: \"1 Chronicles\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 29,\n verses: [\n 54, 55, 24, 43, 26, 81, 40, 40, 44, 14, 47, 40, 14, 17, 29, 43, 27, 17, 19, 8, 30, 19, 32, 31,\n 31, 32, 34, 21, 30,\n ],\n },\n 14: {\n number: 14,\n name: \"2 Chronicles\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 36,\n verses: [\n 17, 18, 17, 22, 14, 42, 22, 18, 31, 19, 23, 16, 22, 15, 19, 14, 19, 34, 11, 37, 20, 12, 21,\n 27, 28, 23, 9, 27, 36, 27, 21, 33, 25, 33, 27, 23,\n ],\n },\n 15: {\n number: 15,\n name: \"Ezra\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 10,\n verses: [11, 70, 13, 24, 17, 22, 28, 36, 15, 44],\n },\n 16: {\n number: 16,\n name: \"Nehemiah\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 13,\n verses: [11, 20, 32, 23, 19, 19, 73, 18, 38, 39, 36, 47, 31],\n },\n 17: {\n number: 17,\n name: \"Esther\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 10,\n verses: [22, 23, 15, 17, 14, 14, 10, 17, 32, 3],\n },\n 18: {\n number: 18,\n name: \"Job\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 42,\n verses: [\n 22, 13, 26, 21, 27, 30, 21, 22, 35, 22, 20, 25, 28, 22, 35, 22, 16, 21, 29, 29, 34, 30, 17,\n 25, 6, 14, 23, 28, 25, 31, 40, 22, 33, 37, 16, 33, 24, 41, 30, 24, 34, 17,\n ],\n },\n 19: {\n number: 19,\n name: \"Psalms\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 150,\n verses: [\n 6, 12, 8, 8, 12, 10, 17, 9, 20, 18, 7, 8, 6, 7, 5, 11, 15, 50, 14, 9, 13, 31, 6, 10, 22, 12,\n 14, 9, 11, 12, 24, 11, 22, 22, 28, 12, 40, 22, 13, 17, 13, 11, 5, 26, 17, 11, 9, 14, 20, 23,\n 19, 9, 6, 7, 23, 13, 11, 11, 17, 12, 8, 12, 11, 10, 13, 20, 7, 35, 36, 5, 24, 20, 28, 23, 10,\n 12, 20, 72, 13, 19, 16, 8, 18, 12, 13, 17, 7, 18, 52, 17, 16, 15, 5, 23, 11, 13, 12, 9, 9, 5,\n 8, 28, 22, 35, 45, 48, 43, 13, 31, 7, 10, 10, 9, 8, 18, 19, 2, 29, 176, 7, 8, 9, 4, 8, 5, 6,\n 5, 6, 8, 8, 3, 18, 3, 3, 21, 26, 9, 8, 24, 13, 10, 7, 12, 15, 21, 10, 20, 14, 9, 6,\n ],\n },\n 20: {\n number: 20,\n name: \"Proverbs\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 31,\n verses: [\n 33, 22, 35, 27, 23, 35, 27, 36, 18, 32, 31, 28, 25, 35, 33, 33, 28, 24, 29, 30, 31, 29, 35,\n 34, 28, 28, 27, 28, 27, 33, 31,\n ],\n },\n 21: {\n number: 21,\n name: \"Ecclesiastes\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 12,\n verses: [18, 26, 22, 16, 20, 12, 29, 17, 18, 20, 10, 14],\n },\n 22: {\n number: 22,\n name: \"Song of Songs\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 8,\n verses: [17, 17, 11, 16, 16, 13, 13, 14],\n },\n 23: {\n number: 23,\n name: \"Isaiah\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 66,\n verses: [\n 31, 22, 26, 6, 30, 13, 25, 22, 21, 34, 16, 6, 22, 32, 9, 14, 14, 7, 25, 6, 17, 25, 18, 23, 12,\n 21, 13, 29, 24, 33, 9, 20, 24, 17, 10, 22, 38, 22, 8, 31, 29, 25, 28, 28, 25, 13, 15, 22, 26,\n 11, 23, 15, 12, 17, 13, 12, 21, 14, 21, 22, 11, 12, 19, 12, 25, 24,\n ],\n },\n 24: {\n number: 24,\n name: \"Jeremiah\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 52,\n verses: [\n 19, 37, 25, 31, 31, 30, 34, 22, 26, 25, 23, 17, 27, 22, 21, 21, 27, 23, 15, 18, 14, 30, 40,\n 10, 38, 24, 22, 17, 32, 24, 40, 44, 26, 22, 19, 32, 21, 28, 18, 16, 18, 22, 13, 30, 5, 28, 7,\n 47, 39, 46, 64, 34,\n ],\n },\n 25: {\n number: 25,\n name: \"Lamentations\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 5,\n verses: [22, 22, 66, 22, 22],\n },\n 26: {\n number: 26,\n name: \"Ezekiel\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 48,\n verses: [\n 28, 10, 27, 17, 17, 14, 27, 18, 11, 22, 25, 28, 23, 23, 8, 63, 24, 32, 14, 49, 32, 31, 49, 27,\n 17, 21, 36, 26, 21, 26, 18, 32, 33, 31, 15, 38, 28, 23, 29, 49, 26, 20, 27, 31, 25, 24, 23,\n 35,\n ],\n },\n 27: {\n number: 27,\n name: \"Daniel\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 12,\n verses: [21, 49, 30, 37, 31, 28, 28, 27, 27, 21, 45, 13],\n },\n 28: {\n number: 28,\n name: \"Hosea\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 14,\n verses: [11, 23, 5, 19, 15, 11, 16, 14, 17, 15, 12, 14, 16, 9],\n },\n 29: {\n number: 29,\n name: \"Joel\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 3,\n verses: [20, 32, 21],\n },\n 30: {\n number: 30,\n name: \"Amos\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 9,\n verses: [15, 16, 15, 13, 27, 14, 17, 14, 15],\n },\n 31: {\n number: 31,\n name: \"Obadiah\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 1,\n verses: [21],\n },\n 32: {\n number: 32,\n name: \"Jonah\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 4,\n verses: [17, 10, 10, 11],\n },\n 33: {\n number: 33,\n name: \"Micah\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 7,\n verses: [16, 13, 12, 13, 15, 16, 20],\n },\n 34: {\n number: 34,\n name: \"Nahum\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 3,\n verses: [15, 13, 19],\n },\n 35: {\n number: 35,\n name: \"Habakkuk\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 3,\n verses: [17, 20, 19],\n },\n 36: {\n number: 36,\n name: \"Zephaniah\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 3,\n verses: [18, 15, 20],\n },\n 37: {\n number: 37,\n name: \"Haggai\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 2,\n verses: [15, 23],\n },\n 38: {\n number: 38,\n name: \"Zechariah\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 14,\n verses: [21, 13, 10, 14, 11, 15, 14, 23, 17, 12, 17, 14, 9, 21],\n },\n 39: {\n number: 39,\n name: \"Malachi\",\n testament: Testament.OLD_TESTAMENT,\n chapters: 4,\n verses: [14, 17, 18, 6],\n },\n 40: {\n number: 40,\n name: \"Matthew\",\n testament: Testament.NEW_TESTAMENT,\n chapters: 28,\n verses: [\n 25, 23, 17, 25, 48, 34, 29, 34, 38, 42, 30, 50, 58, 36, 39, 28, 27, 35, 30, 34, 46, 46, 39,\n 51, 46, 75, 66, 20,\n ],\n },\n 41: {\n number: 41,\n name: \"Mark\",\n testament: Testament.NEW_TESTAMENT,\n chapters: 16,\n verses: [45, 28, 35, 41, 43, 56, 37, 38, 50, 52, 33, 44, 37, 72, 47, 20],\n },\n 42: {\n number: 42,\n name: \"Luke\",\n testament: Testament.NEW_TESTAMENT,\n chapters: 24,\n verses: [\n 80, 52, 38, 44, 39, 49, 50, 56, 62, 42, 54, 59, 35, 35, 32, 31, 37, 43, 48, 47, 38, 71, 56,\n 53,\n ],\n },\n 43: {\n number: 43,\n name: \"John\",\n testament: Testament.NEW_TESTAMENT,\n chapters: 21,\n verses: [51, 25, 36, 54, 47, 71, 53, 59, 41, 42, 57, 50, 38, 31, 27, 33, 26, 40, 42, 31, 25],\n },\n 44: {\n number: 44,\n name: \"Acts\",\n testament: Testament.NEW_TESTAMENT,\n chapters: 28,\n verses: [\n 26, 47, 26, 37, 42, 15, 60, 40, 43, 48, 30, 25, 52, 28, 41, 40, 34, 28, 41, 38, 40, 30, 35,\n 27, 27, 32, 44, 31,\n ],\n },\n 45: {\n number: 45,\n name: \"Romans\",\n testament: Testament.NEW_TESTAMENT,\n chapters: 16,\n verses: [32, 29, 31, 25, 21, 23, 25, 39, 33, 21, 36, 21, 14, 23, 33, 27],\n },\n 46: {\n number: 46,\n name: \"1 Corinthians\",\n testament: Testament.NEW_TESTAMENT,\n chapters: 16,\n verses: [31, 16, 23, 21, 13, 20, 40, 13, 27, 33, 34, 31, 13, 40, 58, 24],\n },\n 47: {\n number: 47,\n name: \"2 Corinthians\",\n testament: Testament.NEW_TESTAMENT,\n chapters: 13,\n verses: [24, 17, 18, 18, 21, 18, 16, 24, 15, 18, 33, 21, 14],\n },\n 48: {\n number: 48,\n name: \"Galatians\",\n testament: Testament.NEW_TESTAMENT,\n chapters: 6,\n verses: [24, 21, 29, 31, 26, 18],\n },\n 49: {\n number: 49,\n name: \"Ephesians\",\n testament: Testament.NEW_TESTAMENT,\n chapters: 6,\n verses: [23, 22, 21, 32, 33, 24],\n },\n 50: {\n number: 50,\n name: \"Philippians\",\n testament: Testament.NEW_TESTAMENT,\n chapters: 4,\n verses: [30, 30, 21, 23],\n },\n 51: {\n number: 51,\n name: \"Colossians\",\n testament: Testament.NEW_TESTAMENT,\n chapters: 4,\n verses: [29, 23, 25, 18],\n },\n 52: {\n number: 52,\n name: \"1 Thessalonians\",\n testament: Testament.NEW_TESTAMENT,\n chapters: 5,\n verses: [10, 20, 13, 18, 28],\n },\n 53: {\n number: 53,\n name: \"2 Thessalonians\",\n testament: Testament.NEW_TESTAMENT,\n chapters: 3,\n verses: [12, 17, 18],\n },\n 54: {\n number: 54,\n name: \"1 Timothy\",\n testament: Testament.NEW_TESTAMENT,\n chapters: 6,\n verses: [20, 15, 16, 16, 25, 21],\n },\n 55: {\n number: 55,\n name: \"2 Timothy\",\n testament: Testament.NEW_TESTAMENT,\n chapters: 4,\n verses: [18, 26, 17, 22],\n },\n 56: {\n number: 56,\n name: \"Titus\",\n testament: Testament.NEW_TESTAMENT,\n chapters: 3,\n verses: [16, 15, 15],\n },\n 57: {\n number: 57,\n name: \"Philemon\",\n testament: Testament.NEW_TESTAMENT,\n chapters: 1,\n verses: [25],\n },\n 58: {\n number: 58,\n name: \"Hebrews\",\n testament: Testament.NEW_TESTAMENT,\n chapters: 13,\n verses: [14, 18, 19, 16, 14, 20, 28, 13, 28, 39, 40, 29, 25],\n },\n 59: {\n number: 59,\n name: \"James\",\n testament: Testament.NEW_TESTAMENT,\n chapters: 5,\n verses: [27, 26, 18, 17, 20],\n },\n 60: {\n number: 60,\n name: \"1 Peter\",\n testament: Testament.NEW_TESTAMENT,\n chapters: 5,\n verses: [25, 25, 22, 19, 14],\n },\n 61: {\n number: 61,\n name: \"2 Peter\",\n testament: Testament.NEW_TESTAMENT,\n chapters: 3,\n verses: [21, 22, 18],\n },\n 62: {\n number: 62,\n name: \"1 John\",\n testament: Testament.NEW_TESTAMENT,\n chapters: 5,\n verses: [10, 29, 24, 21, 21],\n },\n 63: {\n number: 63,\n name: \"2 John\",\n testament: Testament.NEW_TESTAMENT,\n chapters: 1,\n verses: [13],\n },\n 64: {\n number: 64,\n name: \"3 John\",\n testament: Testament.NEW_TESTAMENT,\n chapters: 1,\n verses: [14],\n },\n 65: {\n number: 65,\n name: \"Jude\",\n testament: Testament.NEW_TESTAMENT,\n chapters: 1,\n verses: [25],\n },\n 66: {\n number: 66,\n name: \"Revelation\",\n testament: Testament.NEW_TESTAMENT,\n chapters: 22,\n verses: [20, 29, 22, 11, 14, 17, 17, 13, 21, 11, 19, 17, 18, 20, 8, 21, 18, 24, 21, 15, 27, 21],\n },\n};\n\n/** Quick lookup by book number to name */\nexport const BOOK_NAMES: Record<number, string> = Object.fromEntries(\n Object.values(BIBLE_STRUCTURE).map((book) => [book.number, book.name])\n);\n\n/** Reverse lookup by name to book number (lowercase keys) */\nexport const BOOK_NUMBERS: Record<string, number> = Object.fromEntries(\n Object.values(BIBLE_STRUCTURE).map((book) => [book.name.toLowerCase(), book.number])\n);\n\n/** Bible sections for search result organization */\nexport const SECTION_NAMES: Record<number, BibleSection> = {\n 1: BibleSection.PENTATEUCH,\n 2: BibleSection.HISTORY,\n 3: BibleSection.WISDOM_AND_POETRY,\n 4: BibleSection.MAJOR_PROPHETS,\n 5: BibleSection.MINOR_PROPHETS,\n 6: BibleSection.GOSPELS_AND_ACTS,\n 7: BibleSection.PAULINE_EPISTLES,\n 8: BibleSection.GENERAL_EPISTLES,\n};\n","/**\n * Zod schemas and TypeScript types for LSBible API data structures.\n *\n * Provides runtime validation and type inference for all API responses.\n */\n\nimport { z } from \"zod\";\nimport { BIBLE_STRUCTURE, BOOK_NAMES } from \"./books.js\";\n\n/**\n * Enumeration of all 66 Bible books for type-safe API calls.\n */\nexport enum BookName {\n // Old Testament\n GENESIS = \"Genesis\",\n EXODUS = \"Exodus\",\n LEVITICUS = \"Leviticus\",\n NUMBERS = \"Numbers\",\n DEUTERONOMY = \"Deuteronomy\",\n JOSHUA = \"Joshua\",\n JUDGES = \"Judges\",\n RUTH = \"Ruth\",\n SAMUEL_1 = \"1 Samuel\",\n SAMUEL_2 = \"2 Samuel\",\n KINGS_1 = \"1 Kings\",\n KINGS_2 = \"2 Kings\",\n CHRONICLES_1 = \"1 Chronicles\",\n CHRONICLES_2 = \"2 Chronicles\",\n EZRA = \"Ezra\",\n NEHEMIAH = \"Nehemiah\",\n ESTHER = \"Esther\",\n JOB = \"Job\",\n PSALMS = \"Psalms\",\n PROVERBS = \"Proverbs\",\n ECCLESIASTES = \"Ecclesiastes\",\n SONG_OF_SONGS = \"Song of Songs\",\n ISAIAH = \"Isaiah\",\n JEREMIAH = \"Jeremiah\",\n LAMENTATIONS = \"Lamentations\",\n EZEKIEL = \"Ezekiel\",\n DANIEL = \"Daniel\",\n HOSEA = \"Hosea\",\n JOEL = \"Joel\",\n AMOS = \"Amos\",\n OBADIAH = \"Obadiah\",\n JONAH = \"Jonah\",\n MICAH = \"Micah\",\n NAHUM = \"Nahum\",\n HABAKKUK = \"Habakkuk\",\n ZEPHANIAH = \"Zephaniah\",\n HAGGAI = \"Haggai\",\n ZECHARIAH = \"Zechariah\",\n MALACHI = \"Malachi\",\n // New Testament\n MATTHEW = \"Matthew\",\n MARK = \"Mark\",\n LUKE = \"Luke\",\n JOHN = \"John\",\n ACTS = \"Acts\",\n ROMANS = \"Romans\",\n CORINTHIANS_1 = \"1 Corinthians\",\n CORINTHIANS_2 = \"2 Corinthians\",\n GALATIANS = \"Galatians\",\n EPHESIANS = \"Ephesians\",\n PHILIPPIANS = \"Philippians\",\n COLOSSIANS = \"Colossians\",\n THESSALONIANS_1 = \"1 Thessalonians\",\n THESSALONIANS_2 = \"2 Thessalonians\",\n TIMOTHY_1 = \"1 Timothy\",\n TIMOTHY_2 = \"2 Timothy\",\n TITUS = \"Titus\",\n PHILEMON = \"Philemon\",\n HEBREWS = \"Hebrews\",\n JAMES = \"James\",\n PETER_1 = \"1 Peter\",\n PETER_2 = \"2 Peter\",\n JOHN_1 = \"1 John\",\n JOHN_2 = \"2 John\",\n JOHN_3 = \"3 John\",\n JUDE = \"Jude\",\n REVELATION = \"Revelation\",\n}\n\n/**\n * Zod schema for VerseReference with validation.\n *\n * Validates that:\n * - Book number is 1-66\n * - Chapter exists in the book\n * - Verse exists in the chapter\n */\nexport const VerseReferenceSchema = z\n .object({\n bookNumber: z.number().int().min(1).max(66),\n chapter: z.number().int().min(1),\n verse: z.number().int().min(1),\n })\n .refine(\n (data) => {\n const bookInfo = BIBLE_STRUCTURE[data.bookNumber];\n if (!bookInfo) return false;\n return data.chapter <= bookInfo.chapters;\n },\n (data) => {\n const bookInfo = BIBLE_STRUCTURE[data.bookNumber];\n const bookName = BOOK_NAMES[data.bookNumber];\n return {\n message: `${bookName} only has ${bookInfo?.chapters} chapters, but chapter ${data.chapter} was requested`,\n path: [\"chapter\"],\n };\n }\n )\n .refine(\n (data) => {\n const bookInfo = BIBLE_STRUCTURE[data.bookNumber];\n if (!bookInfo) return false;\n const maxVerse = bookInfo.verses[data.chapter - 1];\n if (!maxVerse) return false;\n return data.verse <= maxVerse;\n },\n (data) => {\n const bookInfo = BIBLE_STRUCTURE[data.bookNumber];\n const bookName = BOOK_NAMES[data.bookNumber];\n const maxVerse = bookInfo?.verses[data.chapter - 1];\n return {\n message: `${bookName} ${data.chapter} only has ${maxVerse} verses, but verse ${data.verse} was requested`,\n path: [\"verse\"],\n };\n }\n );\n\n/** Type for VerseReference inferred from Zod schema */\nexport type VerseReference = z.infer<typeof VerseReferenceSchema> & {\n /** Get the book name from the book number */\n readonly bookName: BookName;\n /** String representation (e.g., \"John 3:16\") */\n toString(): string;\n};\n\n/**\n * Create a VerseReference with computed properties.\n */\nexport function createVerseReference(data: z.infer<typeof VerseReferenceSchema>): VerseReference {\n const validated = VerseReferenceSchema.parse(data);\n return {\n ...validated,\n get bookName(): BookName {\n return (\n BookName[BOOK_NAMES[this.bookNumber] as keyof typeof BookName] ||\n (BOOK_NAMES[this.bookNumber] as BookName)\n );\n },\n toString(): string {\n return `${BOOK_NAMES[this.bookNumber]} ${this.chapter}:${this.verse}`;\n },\n };\n}\n\n/**\n * Zod schema for TextSegment.\n */\nexport const TextSegmentSchema = z.object({\n text: z.string(),\n isRedLetter: z.boolean().default(false), // Words of Jesus in red\n isItalic: z.boolean().default(false), // Italicized text (clarifications)\n isBold: z.boolean().default(false), // Bold text\n isSmallCaps: z.boolean().default(false), // LORD (Yahweh) in small caps\n});\n\n/** Type for TextSegment */\nexport type TextSegment = z.infer<typeof TextSegmentSchema>;\n\n/**\n * Zod schema for VerseContent.\n */\nexport const VerseContentSchema = z.object({\n reference: VerseReferenceSchema,\n verseNumber: z.number().int().min(1),\n segments: z.array(TextSegmentSchema),\n hasSubheading: z.boolean().default(false),\n subheadingText: z.string().nullable().default(null),\n isPoetry: z.boolean().default(false),\n isProse: z.boolean().default(false),\n chapterStart: z.boolean().default(false), // First verse of chapter\n});\n\n/** Type for VerseContent with computed properties */\nexport type VerseContent = Omit<z.infer<typeof VerseContentSchema>, \"reference\"> & {\n reference: VerseReference;\n /** Get plain text without formatting */\n readonly plainText: string;\n /** Get text with simple formatting markers */\n readonly formattedText: string;\n};\n\n/**\n * Create a VerseContent with computed properties.\n */\nexport function createVerseContent(data: z.infer<typeof VerseContentSchema>): VerseContent {\n const validated = VerseContentSchema.parse(data);\n const reference = createVerseReference(validated.reference);\n\n return {\n ...validated,\n reference,\n get plainText(): string {\n return this.segments.map((seg) => seg.text).join(\" \");\n },\n get formattedText(): string {\n const parts = this.segments.map((seg) => {\n let text = seg.text;\n if (seg.isItalic) text = `[${text}]`;\n if (seg.isRedLetter) text = `\"${text}\"`;\n return text;\n });\n return parts.join(\" \");\n },\n };\n}\n\n/**\n * Zod schema for Passage.\n */\nexport const PassageSchema = z.object({\n fromRef: VerseReferenceSchema,\n toRef: VerseReferenceSchema,\n title: z.string(),\n verses: z.array(VerseContentSchema),\n});\n\n/** Type for Passage with computed properties */\nexport type Passage = Omit<z.infer<typeof PassageSchema>, \"fromRef\" | \"toRef\" | \"verses\"> & {\n fromRef: VerseReference;\n toRef: VerseReference;\n verses: VerseContent[];\n /** Check if this passage is a single verse */\n readonly isSingleVerse: boolean;\n /** Get the number of verses in this passage */\n readonly verseCount: number;\n};\n\n/**\n * Create a Passage with computed properties.\n */\nexport function createPassage(data: z.infer<typeof PassageSchema>): Passage {\n const validated = PassageSchema.parse(data);\n const fromRef = createVerseReference(validated.fromRef);\n const toRef = createVerseReference(validated.toRef);\n const verses = validated.verses.map((v) => createVerseContent(v));\n\n return {\n ...validated,\n fromRef,\n toRef,\n verses,\n get isSingleVerse(): boolean {\n return (\n this.fromRef.bookNumber === this.toRef.bookNumber &&\n this.fromRef.chapter === this.toRef.chapter &&\n this.fromRef.verse === this.toRef.verse\n );\n },\n get verseCount(): number {\n return this.verses.length;\n },\n };\n}\n\n/**\n * Zod schema for SearchResponse.\n *\n * For text searches, includes rich metadata about result distribution across\n * Bible sections and books. For Bible reference lookups, these fields are undefined.\n */\nexport const SearchResponseSchema = z.object({\n query: z.string(),\n matchCount: z.number().int().min(0),\n passages: z.array(PassageSchema),\n durationMs: z.number().int().min(0),\n timestamp: z.number().int(),\n // Optional metadata for text searches\n totalCount: z.number().int().min(0).optional(),\n filteredCount: z.number().int().min(0).optional(),\n countsByBook: z.record(z.string(), z.number()).optional(),\n countsBySection: z.record(z.string(), z.number()).optional(),\n});\n\n/** Type for SearchResponse with computed properties */\nexport type SearchResponse = Omit<z.infer<typeof SearchResponseSchema>, \"passages\"> & {\n passages: Passage[];\n /** Get the number of passages returned */\n readonly passageCount: number;\n /** Get total number of verses across all passages */\n readonly totalVerses: number;\n /** Check if this response includes search distribution metadata */\n readonly hasSearchMetadata: boolean;\n};\n\n/**\n * Create a SearchResponse with computed properties.\n */\nexport function createSearchResponse(data: z.infer<typeof SearchResponseSchema>): SearchResponse {\n const validated = SearchResponseSchema.parse(data);\n const passages = validated.passages.map((p) => createPassage(p));\n\n return {\n ...validated,\n passages,\n get passageCount(): number {\n return this.passages.length;\n },\n get totalVerses(): number {\n return this.passages.reduce((sum, p) => sum + p.verseCount, 0);\n },\n get hasSearchMetadata(): boolean {\n return this.totalCount !== undefined;\n },\n };\n}\n","/**\n * MCP resource handlers for LSBible.\n *\n * Provides 2 resources:\n * - bible://books (static): List all 66 books of the Bible\n * - bible://structure/{book} (dynamic): Get chapter/verse structure for a specific book\n */\n\nimport { type McpServer, ResourceTemplate } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { BIBLE_STRUCTURE, type BookInfo } from \"../books.js\";\nimport { BookName } from \"../models.js\";\nimport type { BookResourceInfo, BookStructureResource } from \"./types.js\";\n\n/**\n * Register all resources with the MCP server.\n *\n * @param server - McpServer instance\n */\nexport function registerResources(server: McpServer): void {\n // Resource 1: bible://books - Static resource listing all books\n server.registerResource(\n \"books\",\n \"bible://books\",\n {\n title: \"Bible Books\",\n description: \"List of all 66 books in the Bible\",\n mimeType: \"application/json\",\n },\n async (uri) => {\n const books: BookResourceInfo[] = Object.values(BIBLE_STRUCTURE).map(\n (bookInfo: BookInfo) => ({\n name: bookInfo.name,\n testament: bookInfo.testament,\n chapters: bookInfo.chapters,\n verses: bookInfo.verses.reduce((sum, count) => sum + count, 0),\n })\n );\n\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: \"application/json\",\n text: JSON.stringify(books, null, 2),\n },\n ],\n };\n }\n );\n\n // Resource 2: bible://structure/{book} - Dynamic resource with completion\n server.registerResource(\n \"structure\",\n new ResourceTemplate(\"bible://structure/{book}\", {\n list: undefined,\n complete: {\n book: (value: string) => {\n // Return book names that match the partial input\n return Object.values(BookName)\n .filter((bookName) => bookName.toLowerCase().startsWith(value.toLowerCase()))\n .slice(0, 10);\n },\n },\n }),\n {\n title: \"Bible Book Structure\",\n description: \"Chapter and verse counts for a specific book\",\n mimeType: \"application/json\",\n },\n async (uri, { book }) => {\n // Normalize book name for lookup\n const bookName = book as string;\n\n // Find the book in BIBLE_STRUCTURE by name\n const bookEntry = Object.values(BIBLE_STRUCTURE).find(\n (b) => b.name.toLowerCase() === bookName.toLowerCase()\n );\n\n if (!bookEntry) {\n throw new Error(`Unknown book: ${bookName}`);\n }\n\n const data: BookStructureResource = {\n uri: uri.href,\n book: bookEntry.name,\n testament: bookEntry.testament,\n totalChapters: bookEntry.chapters,\n totalVerses: bookEntry.verses.reduce((sum, verses) => sum + verses, 0),\n chapters: bookEntry.verses.map((verses, index) => ({\n chapter: index + 1,\n verses,\n })),\n };\n\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: \"application/json\",\n text: JSON.stringify(data, null, 2),\n },\n ],\n };\n }\n );\n}\n","/**\n * In-memory cache provider for local development and testing.\n *\n * Stores cache entries in a Map with TTL support. Cache is not\n * shared across processes or requests.\n */\n\nimport type { CacheProvider } from \"./interface.js\";\n\ninterface CacheEntry<T> {\n data: T;\n expires: number;\n}\n\n/**\n * In-memory cache provider using Map.\n *\n * Suitable for:\n * - Local development\n * - Testing\n * - Single-process applications\n * - MCP stdio servers\n *\n * Not suitable for:\n * - Multi-process applications\n * - Cloudflare Workers (use CloudflareCacheProvider)\n * - Production high-traffic servers (use Redis/Memcached)\n *\n * @example\n * ```ts\n * import { LSBibleClient, MemoryCacheProvider } from 'lsbible';\n *\n * const client = new LSBibleClient({\n * cache: {\n * provider: new MemoryCacheProvider()\n * }\n * });\n * ```\n */\nexport class MemoryCacheProvider implements CacheProvider {\n private cache = new Map<string, CacheEntry<unknown>>();\n\n async get<T>(key: string): Promise<T | undefined> {\n const entry = this.cache.get(key) as CacheEntry<T> | undefined;\n\n if (!entry) {\n return undefined;\n }\n\n // Check if expired\n if (Date.now() > entry.expires) {\n this.cache.delete(key);\n return undefined;\n }\n\n return entry.data;\n }\n\n async set<T>(key: string, value: T, ttl: number): Promise<void> {\n const expires = Date.now() + ttl * 1000;\n this.cache.set(key, { data: value, expires });\n }\n\n /**\n * Clear all cache entries.\n *\n * Useful for testing or manual cache invalidation.\n */\n clear(): void {\n this.cache.clear();\n }\n\n /**\n * Get the number of entries in the cache.\n *\n * Includes expired entries that haven't been accessed yet.\n */\n size(): number {\n return this.cache.size;\n }\n}\n","/**\n * Cache provider interface for LSBible SDK.\n *\n * Allows users to implement custom caching strategies for different\n * deployment environments (Cloudflare Workers, Redis, in-memory, etc.)\n */\n\n/**\n * Cache provider interface.\n *\n * Implement this interface to provide custom caching for the LSBible client.\n *\n * @example\n * ```ts\n * class RedisCacheProvider implements CacheProvider {\n * async get<T>(key: string): Promise<T | undefined> {\n * const value = await redis.get(key);\n * return value ? JSON.parse(value) : undefined;\n * }\n *\n * async set<T>(key: string, value: T, ttl: number): Promise<void> {\n * await redis.set(key, JSON.stringify(value), 'EX', ttl);\n * }\n * }\n * ```\n */\nexport interface CacheProvider {\n /**\n * Get a value from the cache.\n *\n * @param key - Cache key\n * @returns Cached value or undefined if not found/expired\n */\n get<T>(key: string): Promise<T | undefined>;\n\n /**\n * Set a value in the cache.\n *\n * @param key - Cache key\n * @param value - Value to cache\n * @param ttl - Time to live in seconds\n */\n set<T>(key: string, value: T, ttl: number): Promise<void>;\n}\n\n/**\n * Cache configuration options.\n */\nexport interface CacheOptions {\n /**\n * Cache provider implementation.\n *\n * If not provided, caching is disabled.\n */\n provider?: CacheProvider;\n\n /**\n * Default TTL for cache entries (in seconds).\n *\n * Can be overridden per-operation.\n * @default 2592000 (30 days)\n */\n defaultTtl?: number;\n\n /**\n * Per-operation TTL overrides.\n */\n ttl?: {\n /** TTL for verse lookups */\n verse?: number;\n /** TTL for passage lookups */\n passage?: number;\n /** TTL for chapter lookups */\n chapter?: number;\n /** TTL for search queries */\n search?: number;\n };\n}\n\n/**\n * Recommended cache TTL values (in seconds).\n */\nexport const CacheTTL = {\n /** 1 month - for immutable Bible content (verses, passages, chapters) */\n BIBLE_CONTENT: 2_592_000,\n /** 1 week - for search results that may change with API updates */\n SEARCH_RESULTS: 604_800,\n /** 1 year - for static resources that never change */\n STATIC: 31_536_000,\n} as const;\n","/**\n * Custom exceptions for LSBible SDK.\n */\n\n/**\n * Base exception for LSBible SDK errors.\n */\nexport class LSBibleError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"LSBibleError\";\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n}\n\n/**\n * Raised when a Bible reference is invalid.\n *\n * Examples:\n * - Invalid book name\n * - Chapter number exceeds book's chapter count\n * - Verse number exceeds chapter's verse count\n */\nexport class InvalidReferenceError extends LSBibleError {\n constructor(message: string) {\n super(message);\n this.name = \"InvalidReferenceError\";\n }\n}\n\n/**\n * Raised when an API request fails.\n *\n * Examples:\n * - HTTP errors (4xx, 5xx)\n * - Network failures\n * - Malformed responses\n */\nexport class APIError extends LSBibleError {\n constructor(message: string) {\n super(message);\n this.name = \"APIError\";\n }\n}\n\n/**\n * Raised when build ID cannot be determined.\n *\n * The Next.js build ID is required for API requests but may change\n * with deployments. This error indicates the SDK couldn't auto-detect it.\n */\nexport class BuildIDError extends LSBibleError {\n constructor(message: string) {\n super(message);\n this.name = \"BuildIDError\";\n }\n}\n","/**\n * HTML parser for LSBible passages.\n */\n\nimport { parseHTML } from \"linkedom\";\nimport {\n type TextSegment,\n type VerseContent,\n createVerseContent,\n createVerseReference,\n} from \"./models.js\";\n\n// Type aliases for linkedom DOM elements\ntype DOMElement = ReturnType<typeof parseHTML>[\"document\"][\"body\"];\ntype DOMNode = ReturnType<typeof parseHTML>[\"document\"][\"body\"][\"childNodes\"][number];\ntype DOMDocument = ReturnType<typeof parseHTML>[\"document\"];\n\n/**\n * Parse search result HTML snippet into plain text.\n *\n * Search results include HTML snippets with <b> tags highlighting\n * matched terms. This function strips the tags but preserves the text.\n *\n * @param html - HTML snippet from search results (e.g., \"For God so <b>loved</b> the world\")\n * @returns Plain text with highlighting removed (e.g., \"For God so loved the world\")\n */\nexport function parseSearchResultHtml(html: string): string {\n // Wrap in proper HTML structure for linkedom to parse correctly\n const { document } = parseHTML(`<!DOCTYPE html><html><body>${html}</body></html>`);\n // Get text content, which automatically strips tags but preserves text\n return document.body.textContent?.trim() ?? \"\";\n}\n\n/**\n * Parse passageHtml into structured verse objects.\n *\n * Extracts:\n * - Verse references from data-key attributes\n * - Verse numbers from data-verse attributes\n * - Text formatting (red-letter, italic, bold)\n * - Subheadings and chapter markers\n * - Poetry vs prose structure\n *\n * @param html - The passageHtml string from API\n * @returns List of VerseContent objects\n */\nexport function parsePassageHtml(html: string): VerseContent[] {\n // Wrap in proper HTML structure for linkedom to parse correctly\n const { document } = parseHTML(`<!DOCTYPE html><html><body>${html}</body></html>`);\n const verses: VerseContent[] = [];\n\n const verseSpans = document.querySelectorAll(\"span.verse\");\n for (const verseSpan of verseSpans) {\n const verse = parseVerse(verseSpan as DOMElement, document);\n verses.push(verse);\n }\n\n return verses;\n}\n\n/**\n * Parse a single verse span into VerseContent.\n */\nfunction parseVerse(verseSpan: DOMElement, _document: DOMDocument): VerseContent {\n // Extract verse reference from data-key attribute\n const dataKey = verseSpan.getAttribute(\"data-key\");\n if (!dataKey) {\n throw new Error(\"Verse span missing data-key attribute\");\n }\n const reference = parseVerseReference(dataKey);\n\n // Extract verse number\n const verseNumElem = verseSpan.querySelector(\"small[data-verse]\");\n let verseNumber: number;\n if (verseNumElem) {\n verseNumber = Number.parseInt(verseNumElem.getAttribute(\"data-verse\") ?? \"0\", 10);\n } else {\n // First verses lack <small> tag - fallback to data-key reference\n verseNumber = reference.verse;\n }\n\n // Check for subheading\n let hasSubheading = false;\n let subheadingText: string | null = null;\n const prevSibling = verseSpan.previousElementSibling;\n if (prevSibling?.classList.contains(\"subhead\")) {\n hasSubheading = true;\n subheadingText = prevSibling.textContent?.trim() ?? null;\n }\n\n // Check for poetry vs prose\n let currentNode: DOMElement | null = verseSpan;\n let isPoetry = false;\n while (currentNode) {\n if (currentNode.classList?.contains(\"poetry\")) {\n isPoetry = true;\n break;\n }\n currentNode = currentNode.parentElement as DOMElement | null;\n }\n\n const isProse = verseSpan.querySelector(\".prose\") !== null;\n\n // Check if chapter start (first verses have element with class \"chapter-number\")\n const chapterStart = verseSpan.querySelector(\".chapter-number\") !== null;\n\n // Extract text segments\n const segments = extractSegments(verseSpan);\n\n return createVerseContent({\n reference,\n verseNumber,\n segments,\n hasSubheading,\n subheadingText,\n isPoetry,\n isProse,\n chapterStart,\n });\n}\n\n/**\n * Parse data-key attribute into VerseReference.\n * Format: \"43-003-016\" (book-chapter-verse)\n */\nfunction parseVerseReference(dataKey: string) {\n const parts = dataKey.split(\"-\");\n if (parts.length !== 3) {\n throw new Error(`Invalid data-key format: ${dataKey}`);\n }\n\n const bookNumber = Number.parseInt(parts[0] ?? \"0\", 10);\n const chapter = Number.parseInt(parts[1] ?? \"0\", 10);\n const verse = Number.parseInt(parts[2] ?? \"0\", 10);\n\n return createVerseReference({ bookNumber, chapter, verse });\n}\n\n/**\n * Extract text segments with formatting metadata.\n */\nfunction extractSegments(element: DOMElement): TextSegment[] {\n const segments: TextSegment[] = [];\n\n // Remove verse number element to avoid including it in text\n for (const smallElem of element.querySelectorAll(\"small[data-verse]\")) {\n smallElem.remove();\n }\n\n // Remove chapter number elements\n for (const chapterElem of element.querySelectorAll(\".chapter-number\")) {\n chapterElem.remove();\n }\n\n // Remove subheading elements\n for (const subheadElem of element.querySelectorAll(\".subhead\")) {\n subheadElem.remove();\n }\n\n // Process remaining text and formatting\n extractTextNodes(element, segments);\n\n return segments;\n}\n\n/**\n * Recursively extract text nodes with formatting.\n */\nfunction extractTextNodes(node: DOMNode, segments: TextSegment[]): void {\n for (const child of node.childNodes) {\n if (child.nodeType === 3) {\n // Text node\n const text = child.textContent?.trim();\n if (!text) continue;\n\n // Determine formatting based on parent elements\n let isRedLetter = false;\n let isItalic = false;\n let isBold = false;\n let isSmallCaps = false;\n\n let parent = child.parentElement;\n while (parent) {\n if (parent.classList.contains(\"red-letter\")) {\n isRedLetter = true;\n }\n if (parent.tagName === \"I\" || parent.classList.contains(\"italic\")) {\n isItalic = true;\n }\n if (parent.tagName === \"B\" || parent.classList.contains(\"bold\")) {\n isBold = true;\n }\n if (parent.classList.contains(\"small-caps\")) {\n isSmallCaps = true;\n }\n parent = parent.parentElement;\n }\n\n segments.push({\n text,\n isRedLetter,\n isItalic,\n isBold,\n isSmallCaps,\n });\n } else if (child.nodeType === 1) {\n // Element node - recurse\n extractTextNodes(child, segments);\n }\n }\n}\n","/**\n * Validators for Bible references and book names.\n */\n\nimport { BIBLE_STRUCTURE, BOOK_NUMBERS } from \"./books.js\";\nimport { InvalidReferenceError } from \"./exceptions.js\";\nimport { BookName, type VerseReference, createVerseReference } from \"./models.js\";\n\n/**\n * Normalize book name for API calls.\n *\n * @param book - BookName enum or string\n * @returns Normalized book name string\n * @throws InvalidReferenceError if book name is invalid\n *\n * @example\n * ```ts\n * normalizeBookName(BookName.JOHN) // \"John\"\n * normalizeBookName(\"john\") // \"John\"\n * normalizeBookName(\"1 john\") // \"1 John\"\n * ```\n */\nexport function normalizeBookName(book: BookName | string): string {\n if (typeof book === \"string\" && Object.values(BookName).includes(book as BookName)) {\n // It's already a valid BookName value\n return book;\n }\n\n if (typeof book !== \"string\") {\n throw new InvalidReferenceError(`Invalid book type: ${typeof book}`);\n }\n\n // Normalize string input\n const bookStr = book.trim();\n const bookLower = bookStr.toLowerCase();\n\n // Try direct lookup\n if (bookLower in BOOK_NUMBERS) {\n const bookNum = BOOK_NUMBERS[bookLower];\n if (bookNum) {\n return BIBLE_STRUCTURE[bookNum]?.name ?? book;\n }\n }\n\n // Try fuzzy matching (handle \"1John\" vs \"1 John\", \"1john\" vs \"1 John\")\n const normalized = bookLower.split(/\\s+/).join(\" \");\n if (normalized in BOOK_NUMBERS) {\n const bookNum = BOOK_NUMBERS[normalized];\n if (bookNum) {\n return BIBLE_STRUCTURE[bookNum]?.name ?? book;\n }\n }\n\n // Try adding space after leading digit (e.g., \"1john\" -> \"1 john\")\n if (/^\\d/.test(bookLower)) {\n const spaced = bookLower.replace(/^(\\d+)([a-z])/, \"$1 $2\");\n if (spaced in BOOK_NUMBERS) {\n const bookNum = BOOK_NUMBERS[spaced];\n if (bookNum) {\n return BIBLE_STRUCTURE[bookNum]?.name ?? book;\n }\n }\n }\n\n throw new InvalidReferenceError(`Unknown book: ${book}`);\n}\n\n/**\n * Get book number from book name.\n *\n * @param book - BookName enum or string\n * @returns Book number (1-66)\n * @throws InvalidReferenceError if book name is invalid\n */\nexport function getBookNumber(book: BookName | string): number {\n const normalized = normalizeBookName(book);\n const bookNum = BOOK_NUMBERS[normalized.toLowerCase()];\n if (!bookNum) {\n throw new InvalidReferenceError(`Unknown book: ${book}`);\n }\n return bookNum;\n}\n\n/**\n * Validate and create a VerseReference.\n *\n * @param book - Book name\n * @param chapter - Chapter number\n * @param verse - Verse number\n * @returns Validated VerseReference object\n * @throws InvalidReferenceError if reference is invalid\n */\nexport function validateReference(\n book: BookName | string,\n chapter: number,\n verse: number\n): VerseReference {\n try {\n const bookNumber = getBookNumber(book);\n\n // Create VerseReference (Zod validates chapter/verse)\n return createVerseReference({\n bookNumber,\n chapter,\n verse,\n });\n } catch (error) {\n if (error instanceof Error) {\n throw new InvalidReferenceError(error.message);\n }\n throw error;\n }\n}\n","/**\n * LSBible API client.\n */\n\nimport { BIBLE_STRUCTURE } from \"./books.js\";\nimport { type CacheOptions, type CacheProvider, CacheTTL } from \"./cache/interface.js\";\nimport { APIError, BuildIDError } from \"./exceptions.js\";\nimport {\n type BookName,\n type Passage,\n type SearchResponse,\n type TextSegment,\n createPassage,\n createSearchResponse,\n createVerseContent,\n createVerseReference,\n} from \"./models.js\";\nimport { parsePassageHtml, parseSearchResultHtml } from \"./parser.js\";\nimport { getBookNumber, normalizeBookName, validateReference } from \"./validators.js\";\n\n/** Client configuration options */\nexport interface LSBibleClientOptions {\n /** Request timeout in seconds (default: 30) */\n timeout?: number;\n /** Optional build ID (auto-detected if not provided) */\n buildId?: string;\n /** Optional custom headers */\n headers?: Record<string, string>;\n /** Optional cache configuration */\n cache?: CacheOptions;\n}\n\n/**\n * Get SDK version for User-Agent header.\n */\nfunction getSdkVersion(): string {\n // In production, this would be replaced by the actual version\n // For now, return a placeholder\n return \"0.1.0\";\n}\n\n/**\n * Build User-Agent string for SDK requests.\n *\n * Format: lsbible-typescript/VERSION (Runtime; +https://github.com/kdcokenny/lsbible)\n */\nfunction getUserAgent(): string {\n const version = getSdkVersion();\n // Detect runtime safely using 'in' operator\n const runtime = \"Bun\" in globalThis ? \"Bun\" : \"Deno\" in globalThis ? \"Deno\" : \"Node.js\";\n return `lsbible-typescript/${version} (${runtime}; +https://github.com/kdcokenny/lsbible)`;\n}\n\n/**\n * Client for interacting with the LSBible API.\n *\n * @example\n * ```ts\n * const client = new LSBibleClient();\n *\n * // Get a single verse\n * const verse = await client.getVerse(BookName.JOHN, 3, 16);\n *\n * // Search for text\n * const results = await client.search(\"love\");\n * ```\n */\nexport class LSBibleClient {\n private static readonly BASE_URL = \"https://read.lsbible.org\";\n\n private cacheProvider: CacheProvider | undefined;\n private cacheTtls: Required<NonNullable<CacheOptions[\"ttl\"]>>;\n private timeout: number;\n private buildId: string | undefined;\n private buildIdFetched: boolean;\n private headers: Record<string, string>;\n\n /**\n * Create a new LSBible client.\n *\n * @param options - Client configuration options\n */\n constructor(options: LSBibleClientOptions = {}) {\n this.cacheProvider = options.cache?.provider ?? undefined;\n this.cacheTtls = {\n verse: options.cache?.ttl?.verse ?? CacheTTL.BIBLE_CONTENT,\n passage: options.cache?.ttl?.passage ?? CacheTTL.BIBLE_CONTENT,\n chapter: options.cache?.ttl?.chapter ?? CacheTTL.BIBLE_CONTENT,\n search: options.cache?.ttl?.search ?? CacheTTL.SEARCH_RESULTS,\n };\n this.timeout = (options.timeout ?? 30) * 1000; // Convert to milliseconds\n this.buildId = options.buildId;\n this.buildIdFetched = options.buildId !== undefined;\n\n // Build default headers\n this.headers = {\n \"User-Agent\": getUserAgent(),\n Accept: \"*/*\",\n ...options.headers,\n };\n }\n\n /**\n * Get the Next.js build ID.\n *\n * Strategies:\n * 1. Use cached/provided build ID\n * 2. Extract from homepage HTML (__NEXT_DATA__ script)\n * 3. Try to find it in script tags\n *\n * @throws BuildIDError if build ID cannot be determined\n */\n private async getBuildId(): Promise<string> {\n if (this.buildId && this.buildIdFetched) {\n return this.buildId;\n }\n\n // Try to extract from homepage\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n const response = await fetch(LSBibleClient.BASE_URL, {\n signal: controller.signal,\n headers: this.headers,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const html = await response.text();\n\n // Look for __NEXT_DATA__ script tag\n const buildIdMatch = html.match(/\"buildId\":\"([^\"]+)\"/);\n if (buildIdMatch?.[1]) {\n this.buildId = buildIdMatch[1];\n this.buildIdFetched = true;\n return this.buildId;\n }\n\n // Fallback: Try to find build ID in any script tag\n const scriptMatch = html.match(/\\/_next\\/data\\/([^/]+)\\//);\n if (scriptMatch?.[1]) {\n this.buildId = scriptMatch[1];\n this.buildIdFetched = true;\n return this.buildId;\n }\n } catch (error) {\n throw new BuildIDError(\n `Failed to fetch build ID: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n\n throw new BuildIDError(\"Could not determine build ID from homepage\");\n }\n\n /**\n * Cache wrapper for async operations.\n *\n * @param key - Cache key\n * @param ttl - Time to live in seconds\n * @param fetcher - Function to fetch fresh data\n * @returns Cached or fresh data\n */\n private async withCache<T>(key: string, ttl: number, fetcher: () => Promise<T>): Promise<T> {\n // If no cache provider, just fetch\n if (!this.cacheProvider) {\n return fetcher();\n }\n\n // Try to get from cache\n const cached = await this.cacheProvider.get<T>(key);\n if (cached !== undefined) {\n return cached;\n }\n\n // Fetch fresh data\n const data = await fetcher();\n\n // Store in cache\n await this.cacheProvider.set(key, data, ttl);\n\n return data;\n }\n\n /**\n * Make a request to the LSBible API.\n *\n * @param query - Search query or verse reference\n * @returns API response JSON\n * @throws APIError if request fails\n */\n private async makeRequest(query: string): Promise<unknown> {\n // Get build ID\n const buildId = await this.getBuildId();\n\n // Construct URL\n const url = new URL(`${LSBibleClient.BASE_URL}/_next/data/${buildId}/index.json`);\n url.searchParams.set(\"q\", query);\n\n // Make request\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n const response = await fetch(url.toString(), {\n signal: controller.signal,\n headers: {\n ...this.headers,\n referer: `${LSBibleClient.BASE_URL}/`,\n \"x-nextjs-data\": \"1\",\n },\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n throw new APIError(\n `API request failed with status ${response.status}: ${response.statusText}`\n );\n }\n\n return await response.json();\n } catch (error) {\n if (error instanceof APIError) {\n throw error;\n }\n throw new APIError(\n `API request failed: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n\n /**\n * Detect if response is from text search or Bible reference lookup.\n *\n * Text searches have initialItems array with metadata.\n * Bible reference lookups have passages array with full HTML.\n */\n private isTextSearch(pageProps: Record<string, unknown>): boolean {\n return \"initialItems\" in pageProps && \"totalCount\" in pageProps;\n }\n\n /**\n * Parse text search results from initialItems format.\n */\n private parseSearchResults(pageProps: Record<string, unknown>, query: string): SearchResponse {\n const passages: Passage[] = [];\n const initialItems = (pageProps.initialItems as Array<Record<string, unknown>>) ?? [];\n\n // Parse each search result item\n for (const item of initialItems) {\n // Parse the key (e.g., \"43-003-016\" -> John 3:16)\n const key = item.key as string;\n const parts = key.split(\"-\");\n if (parts.length !== 3) continue;\n\n const bookNumber = Number.parseInt(parts[0] ?? \"0\", 10);\n const chapter = Number.parseInt(parts[1] ?? \"0\", 10);\n const verse = Number.parseInt(parts[2] ?? \"0\", 10);\n\n // Create verse reference\n const verseRef = createVerseReference({ bookNumber, chapter, verse });\n\n // Parse HTML snippet to plain text\n const htmlSnippet = (item.html as string) ?? \"\";\n const plainText = parseSearchResultHtml(htmlSnippet);\n\n // Create a minimal VerseContent\n const segment: TextSegment = {\n text: plainText,\n isRedLetter: false,\n isItalic: false,\n isBold: false,\n isSmallCaps: false,\n };\n const verseContent = createVerseContent({\n reference: verseRef,\n verseNumber: verse,\n segments: [segment],\n hasSubheading: false,\n subheadingText: null,\n isPoetry: false,\n isProse: false,\n chapterStart: false,\n });\n\n // Create a single-verse passage\n passages.push(\n createPassage({\n fromRef: verseRef,\n toRef: verseRef,\n title: verseRef.toString(),\n verses: [verseContent],\n })\n );\n }\n\n // Extract metadata\n const totalCount = (pageProps.totalCount as number) ?? 0;\n const filteredCount = (pageProps.filteredCount as number) ?? 0;\n const countsByBook = pageProps.countsByBook as Record<string, number> | undefined;\n const countsBySection = pageProps.countsBySection as Record<string, number> | undefined;\n\n return createSearchResponse({\n query,\n matchCount: totalCount,\n passages,\n durationMs: (pageProps.duration as number) ?? 0,\n timestamp: (pageProps.start as number) ?? 0,\n totalCount,\n filteredCount,\n countsByBook,\n countsBySection,\n });\n }\n\n /**\n * Parse Bible reference lookup results from passages format.\n */\n private parseReferenceResults(pageProps: Record<string, unknown>, query: string): SearchResponse {\n const passages: Passage[] = [];\n const passagesData = (pageProps.passages as Array<Record<string, unknown>>) ?? [];\n\n for (const passageData of passagesData) {\n const fromData = passageData.from as Record<string, number>;\n const toData = passageData.to as Record<string, number>;\n\n const fromRef = createVerseReference({\n bookNumber: fromData.bn ?? 0,\n chapter: fromData.cn ?? 0,\n verse: fromData.vn ?? 0,\n });\n\n const toRef = createVerseReference({\n bookNumber: toData.bn ?? 0,\n chapter: toData.cn ?? 0,\n verse: toData.vn ?? 0,\n });\n\n // Parse HTML to get verse content\n const passageHtml = (passageData.passageHtml as string) ?? \"\";\n const verses = parsePassageHtml(passageHtml);\n\n passages.push(\n createPassage({\n fromRef,\n toRef,\n title: (passageData.title as string) ?? \"\",\n verses,\n })\n );\n }\n\n return createSearchResponse({\n query,\n matchCount: (pageProps.searchMatchCount as number) ?? 0,\n passages,\n durationMs: (pageProps.duration as number) ?? 0,\n timestamp: (pageProps.start as number) ?? 0,\n });\n }\n\n /**\n * Parse API response into SearchResponse.\n */\n private parseResponse(data: unknown, query: string): SearchResponse {\n const responseData = data as Record<string, unknown>;\n const pageProps = (responseData.pageProps as Record<string, unknown>) ?? {};\n\n if (this.isTextSearch(pageProps)) {\n return this.parseSearchResults(pageProps, query);\n }\n return this.parseReferenceResults(pageProps, query);\n }\n\n /**\n * Search for passages containing text.\n *\n * @param query - Search text (e.g., \"love\", \"faith\")\n * @returns SearchResponse with structured passage data\n * @throws APIError if API request fails\n */\n async search(query: string): Promise<SearchResponse> {\n return this.withCache(`search:${query}`, this.cacheTtls.search, async () => {\n const data = await this.makeRequest(query);\n return this.parseResponse(data, query);\n });\n }\n\n /**\n * Get a specific verse with validated parameters.\n *\n * @param book - Book name as enum or string\n * @param chapter - Chapter number (validated against book)\n * @param verse - Verse number (validated against chapter)\n * @returns Single Passage containing the verse\n * @throws InvalidReferenceError if book/chapter/verse combination is invalid\n * @throws APIError if API request fails\n *\n * @example\n * ```ts\n * // Using enum (recommended - type-safe with autocomplete)\n * const passage = await client.getVerse(BookName.JOHN, 3, 16);\n *\n * // Using string (validated at runtime)\n * const passage2 = await client.getVerse(\"John\", 3, 16);\n * ```\n */\n async getVerse(book: BookName | string, chapter: number, verse: number): Promise<Passage> {\n // Validate reference\n validateReference(book, chapter, verse);\n\n // Construct query\n const bookName = normalizeBookName(book);\n const query = `${bookName} ${chapter}:${verse}`;\n\n return this.withCache(`verse:${query}`, this.cacheTtls.verse, async () => {\n // Make request\n const response = await this.search(query);\n\n // Return first passage (should be only one for single verse)\n if (response.passages.length === 0) {\n throw new APIError(`No passage found for ${query}`);\n }\n\n const passage = response.passages[0];\n if (!passage) {\n throw new APIError(`No passage found for ${query}`);\n }\n\n return passage;\n });\n }\n\n /**\n * Get a passage spanning multiple verses.\n *\n * @param fromBook - Starting book\n * @param fromChapter - Starting chapter\n * @param fromVerse - Starting verse\n * @param toBook - Ending book\n * @param toChapter - Ending chapter\n * @param toVerse - Ending verse\n * @returns Passage containing all verses in range\n * @throws InvalidReferenceError if any reference is invalid\n * @throws APIError if API request fails\n *\n * @example\n * ```ts\n * // Get John 3:16-18\n * const passage = await client.getPassage(\n * BookName.JOHN, 3, 16,\n * BookName.JOHN, 3, 18\n * );\n * ```\n */\n async getPassage(\n fromBook: BookName | string,\n fromChapter: number,\n fromVerse: number,\n toBook: BookName | string,\n toChapter: number,\n toVerse: number\n ): Promise<Passage> {\n // Validate references\n const fromRef = validateReference(fromBook, fromChapter, fromVerse);\n const toRef = validateReference(toBook, toChapter, toVerse);\n\n // Construct query\n const fromBookName = normalizeBookName(fromBook);\n const toBookName = normalizeBookName(toBook);\n\n let query: string;\n if (fromRef.bookNumber === toRef.bookNumber) {\n // Same book\n if (fromChapter === toChapter) {\n // Same chapter\n query = `${fromBookName} ${fromChapter}:${fromVerse}-${toVerse}`;\n } else {\n // Different chapters\n query = `${fromBookName} ${fromChapter}:${fromVerse}-${toChapter}:${toVerse}`;\n }\n } else {\n // Different books\n query = `${fromBookName} ${fromChapter}:${fromVerse}-${toBookName} ${toChapter}:${toVerse}`;\n }\n\n return this.withCache(`passage:${query}`, this.cacheTtls.passage, async () => {\n // Make request\n const response = await this.search(query);\n\n // Return first passage\n if (response.passages.length === 0) {\n throw new APIError(`No passage found for ${query}`);\n }\n\n const passage = response.passages[0];\n if (!passage) {\n throw new APIError(`No passage found for ${query}`);\n }\n\n return passage;\n });\n }\n\n /**\n * Get an entire chapter.\n *\n * @param book - Book name\n * @param chapter - Chapter number\n * @returns Passage containing all verses in the chapter\n * @throws InvalidReferenceError if book/chapter is invalid\n * @throws APIError if API request fails\n *\n * @example\n * ```ts\n * // Get all of John chapter 3\n * const passage = await client.getChapter(BookName.JOHN, 3);\n * ```\n */\n async getChapter(book: BookName | string, chapter: number): Promise<Passage> {\n // Validate book and chapter exist\n const bookNumber = getBookNumber(book);\n const bookInfo = BIBLE_STRUCTURE[bookNumber];\n\n if (!bookInfo) {\n throw new APIError(`Invalid book number: ${bookNumber}`);\n }\n\n const maxChapter = bookInfo.chapters;\n if (chapter < 1 || chapter > maxChapter) {\n const bookName = normalizeBookName(book);\n throw new APIError(\n `${bookName} only has ${maxChapter} chapters, but chapter ${chapter} was requested`\n );\n }\n\n // Construct query\n const bookName = normalizeBookName(book);\n const query = `${bookName} ${chapter}`;\n\n return this.withCache(`chapter:${query}`, this.cacheTtls.chapter, async () => {\n // Make request\n const response = await this.search(query);\n\n // Return first passage\n if (response.passages.length === 0) {\n throw new APIError(`No passage found for ${query}`);\n }\n\n const passage = response.passages[0];\n if (!passage) {\n throw new APIError(`No passage found for ${query}`);\n }\n\n return passage;\n });\n }\n\n /**\n * Clear all cached data.\n *\n * This method calls the cache provider's clear method if one is configured.\n * If the cache provider doesn't implement a clear method, this is a no-op.\n *\n * @example\n * ```ts\n * const client = new LSBibleClient({\n * cache: { provider: new MemoryCacheProvider() }\n * });\n *\n * // Clear all cached data\n * client.clearCache();\n * ```\n */\n clearCache(): void {\n if (this.cacheProvider && \"clear\" in this.cacheProvider) {\n (this.cacheProvider as { clear(): void }).clear();\n }\n }\n}\n","/**\n * MCP tool implementations for LSBible.\n *\n * Provides 4 tools:\n * - get_verse: Fetch a single Bible verse\n * - get_passage: Fetch a range of verses\n * - get_chapter: Fetch an entire chapter\n * - search_bible: Full-text search across the Bible\n */\n\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport { MemoryCacheProvider } from \"../cache/memory.js\";\nimport { LSBibleClient } from \"../client.js\";\nimport { BookName } from \"../models.js\";\nimport type {\n GetChapterOutput,\n GetPassageOutput,\n GetVerseOutput,\n SearchBibleOutput,\n} from \"./types.js\";\n\n/**\n * Register all tools with the MCP server.\n *\n * @param server - McpServer instance\n * @param client - Optional LSBibleClient instance (for custom cache configuration)\n */\nexport function registerTools(server: McpServer, client?: LSBibleClient): void {\n // Use provided client or create one with in-memory cache\n const apiClient =\n client ??\n new LSBibleClient({\n cache: {\n provider: new MemoryCacheProvider(),\n },\n });\n\n // Tool 1: get_verse - Fetch a single Bible verse\n server.registerTool(\n \"get_verse\",\n {\n title: \"Get Bible Verse\",\n description: \"Fetch a single Bible verse by book, chapter, and verse\",\n inputSchema: {\n book: z.nativeEnum(BookName).describe(\"Book name (e.g., John, Genesis)\"),\n chapter: z.number().int().positive().describe(\"Chapter number\"),\n verse: z.number().int().positive().describe(\"Verse number\"),\n },\n outputSchema: {\n reference: z.object({\n book: z.string(),\n chapter: z.number(),\n verse: z.number(),\n }),\n text: z.string(),\n segments: z.array(\n z.object({\n text: z.string(),\n isRedLetter: z.boolean().optional(),\n isItalic: z.boolean().optional(),\n isSmallCaps: z.boolean().optional(),\n isBold: z.boolean().optional(),\n })\n ),\n },\n },\n async ({ book, chapter, verse }) => {\n try {\n const passage = await apiClient.getVerse(book, chapter, verse);\n const verseData = passage.verses[0];\n\n if (!verseData) {\n const output = {\n error: `No verse found for ${book} ${chapter}:${verse}`,\n };\n return {\n content: [{ type: \"text\", text: JSON.stringify(output) }],\n isError: true,\n };\n }\n\n const output: GetVerseOutput = {\n reference: {\n book: verseData.reference.bookName,\n chapter: verseData.reference.chapter,\n verse: verseData.reference.verse,\n },\n text: verseData.plainText,\n segments: verseData.segments,\n };\n\n return {\n content: [{ type: \"text\", text: JSON.stringify(output) }],\n structuredContent: output,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n return {\n content: [{ type: \"text\", text: `Error: ${errorMessage}` }],\n isError: true,\n };\n }\n }\n );\n\n // Tool 2: get_passage - Fetch a range of verses\n server.registerTool(\n \"get_passage\",\n {\n title: \"Get Bible Passage\",\n description: \"Fetch a range of verses (single or multi-chapter)\",\n inputSchema: {\n fromBook: z.nativeEnum(BookName).describe(\"Starting book\"),\n fromChapter: z.number().int().positive().describe(\"Starting chapter\"),\n fromVerse: z.number().int().positive().describe(\"Starting verse\"),\n toBook: z.nativeEnum(BookName).describe(\"Ending book\"),\n toChapter: z.number().int().positive().describe(\"Ending chapter\"),\n toVerse: z.number().int().positive().describe(\"Ending verse\"),\n },\n outputSchema: {\n reference: z.object({\n from: z.object({\n book: z.string(),\n chapter: z.number(),\n verse: z.number(),\n }),\n to: z.object({\n book: z.string(),\n chapter: z.number(),\n verse: z.number(),\n }),\n }),\n verses: z.array(\n z.object({\n reference: z.object({\n book: z.string(),\n chapter: z.number(),\n verse: z.number(),\n }),\n text: z.string(),\n segments: z.array(\n z.object({\n text: z.string(),\n isRedLetter: z.boolean().optional(),\n isItalic: z.boolean().optional(),\n isSmallCaps: z.boolean().optional(),\n isBold: z.boolean().optional(),\n })\n ),\n })\n ),\n },\n },\n async ({ fromBook, fromChapter, fromVerse, toBook, toChapter, toVerse }) => {\n try {\n const passage = await apiClient.getPassage(\n fromBook,\n fromChapter,\n fromVerse,\n toBook,\n toChapter,\n toVerse\n );\n\n const output: GetPassageOutput = {\n reference: {\n from: {\n book: passage.fromRef.bookName,\n chapter: passage.fromRef.chapter,\n verse: passage.fromRef.verse,\n },\n to: {\n book: passage.toRef.bookName,\n chapter: passage.toRef.chapter,\n verse: passage.toRef.verse,\n },\n },\n verses: passage.verses.map((v) => ({\n reference: {\n book: v.reference.bookName,\n chapter: v.reference.chapter,\n verse: v.reference.verse,\n },\n text: v.plainText,\n segments: v.segments,\n })),\n };\n\n return {\n content: [{ type: \"text\", text: JSON.stringify(output) }],\n structuredContent: output,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n return {\n content: [{ type: \"text\", text: `Error: ${errorMessage}` }],\n isError: true,\n };\n }\n }\n );\n\n // Tool 3: get_chapter - Fetch an entire chapter\n server.registerTool(\n \"get_chapter\",\n {\n title: \"Get Bible Chapter\",\n description: \"Fetch an entire chapter\",\n inputSchema: {\n book: z.nativeEnum(BookName).describe(\"Book name\"),\n chapter: z.number().int().positive().describe(\"Chapter number\"),\n },\n outputSchema: {\n reference: z.object({\n book: z.string(),\n chapter: z.number(),\n verseCount: z.number(),\n }),\n verses: z.array(\n z.object({\n reference: z.object({\n book: z.string(),\n chapter: z.number(),\n verse: z.number(),\n }),\n text: z.string(),\n segments: z.array(\n z.object({\n text: z.string(),\n isRedLetter: z.boolean().optional(),\n isItalic: z.boolean().optional(),\n isSmallCaps: z.boolean().optional(),\n isBold: z.boolean().optional(),\n })\n ),\n })\n ),\n },\n },\n async ({ book, chapter }) => {\n try {\n const passage = await apiClient.getChapter(book, chapter);\n\n const output: GetChapterOutput = {\n reference: {\n book: passage.verses[0]?.reference.bookName ?? book,\n chapter,\n verseCount: passage.verses.length,\n },\n verses: passage.verses.map((v) => ({\n reference: {\n book: v.reference.bookName,\n chapter: v.reference.chapter,\n verse: v.reference.verse,\n },\n text: v.plainText,\n segments: v.segments,\n })),\n };\n\n return {\n content: [{ type: \"text\", text: JSON.stringify(output) }],\n structuredContent: output,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n return {\n content: [{ type: \"text\", text: `Error: ${errorMessage}` }],\n isError: true,\n };\n }\n }\n );\n\n // Tool 4: search_bible - Full-text search across the Bible\n server.registerTool(\n \"search_bible\",\n {\n title: \"Search Bible\",\n description: \"Full-text search across the entire Bible\",\n inputSchema: {\n query: z.string().describe(\"Search query text\"),\n includeDistribution: z\n .boolean()\n .optional()\n .default(false)\n .describe(\"Include search result distribution by section and book\"),\n },\n outputSchema: {\n query: z.string(),\n resultCount: z.number(),\n results: z.array(\n z.object({\n reference: z.object({\n book: z.string(),\n chapter: z.number(),\n verse: z.number(),\n }),\n text: z.string(),\n segments: z.array(\n z.object({\n text: z.string(),\n isRedLetter: z.boolean().optional(),\n isItalic: z.boolean().optional(),\n isSmallCaps: z.boolean().optional(),\n isBold: z.boolean().optional(),\n })\n ),\n })\n ),\n distribution: z\n .object({\n bySection: z.record(z.string(), z.number()),\n byBook: z.record(z.string(), z.number()),\n })\n .optional(),\n },\n },\n async ({ query, includeDistribution = false }) => {\n try {\n const searchResponse = await apiClient.search(query);\n\n // Build distribution if requested and available\n const distribution: SearchBibleOutput[\"distribution\"] = includeDistribution\n ? {\n bySection: searchResponse.countsBySection ?? {},\n byBook: searchResponse.countsByBook ?? {},\n }\n : undefined;\n\n // Extract verse results from passages\n const results = searchResponse.passages.flatMap((passage) =>\n passage.verses.map((v) => ({\n reference: {\n book: v.reference.bookName,\n chapter: v.reference.chapter,\n verse: v.reference.verse,\n },\n text: v.plainText,\n segments: v.segments,\n }))\n );\n\n const output: SearchBibleOutput = {\n query,\n resultCount: searchResponse.matchCount,\n results,\n distribution,\n };\n\n return {\n content: [{ type: \"text\", text: JSON.stringify(output) }],\n structuredContent: output,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n return {\n content: [{ type: \"text\", text: `Error: ${errorMessage}` }],\n isError: true,\n };\n }\n }\n );\n}\n","/**\n * LSBible MCP Server factory function.\n *\n * Creates a configured MCP server with all tools, resources, and prompts.\n */\n\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { registerPrompts } from \"./prompts.js\";\nimport { registerResources } from \"./resources.js\";\nimport { registerTools } from \"./tools.js\";\n\n/**\n * Create and configure an LSBible MCP server.\n *\n * The server exposes:\n * - 4 tools: get_verse, get_passage, get_chapter, search_bible\n * - 2 resources: bible://books, bible://structure/{book}\n * - 2 prompts: bible_study, cross_reference\n *\n * @returns Configured McpServer instance\n *\n * @example\n * ```ts\n * // For stdio transport (local)\n * const server = createLSBibleMCPServer();\n * const transport = new StdioServerTransport();\n * await server.connect(transport);\n * ```\n *\n * @example\n * ```ts\n * // For HTTP transport (Cloudflare Workers)\n * const server = createLSBibleMCPServer();\n * const transport = new StreamableHTTPServerTransport(...);\n * await server.connect(transport);\n * ```\n */\nexport function createLSBibleMCPServer(): McpServer {\n const server = new McpServer({\n name: \"lsbible\",\n version: \"0.1.0\",\n });\n\n // Register all capabilities\n registerTools(server);\n registerResources(server);\n registerPrompts(server);\n\n return server;\n}\n","/**\n * No-op cache provider that disables caching.\n *\n * Use this when you want to disable caching entirely.\n */\n\nimport type { CacheProvider } from \"./interface.js\";\n\n/**\n * No-op cache provider.\n *\n * All get() calls return undefined (cache miss).\n * All set() calls do nothing.\n *\n * Use when you want to disable caching for testing,\n * debugging, or when caching isn't beneficial for your use case.\n *\n * @example\n * ```ts\n * import { LSBibleClient, NoopCacheProvider } from 'lsbible';\n *\n * const client = new LSBibleClient({\n * cache: {\n * provider: new NoopCacheProvider()\n * }\n * });\n * ```\n */\nexport class NoopCacheProvider implements CacheProvider {\n async get<T>(_key: string): Promise<T | undefined> {\n return undefined;\n }\n\n async set<T>(_key: string, _value: T, _ttl: number): Promise<void> {\n // No-op\n }\n}\n"]}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { L as LSBibleClient, B as BookName, T as TextSegment } from '../noop-B62cxzKZ.cjs';
|
|
3
|
+
export { C as CacheOptions, a as CacheProvider, b as CacheTTL, M as MemoryCacheProvider, N as NoopCacheProvider } from '../noop-B62cxzKZ.cjs';
|
|
4
|
+
import 'zod';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* LSBible MCP Server factory function.
|
|
8
|
+
*
|
|
9
|
+
* Creates a configured MCP server with all tools, resources, and prompts.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Create and configure an LSBible MCP server.
|
|
14
|
+
*
|
|
15
|
+
* The server exposes:
|
|
16
|
+
* - 4 tools: get_verse, get_passage, get_chapter, search_bible
|
|
17
|
+
* - 2 resources: bible://books, bible://structure/{book}
|
|
18
|
+
* - 2 prompts: bible_study, cross_reference
|
|
19
|
+
*
|
|
20
|
+
* @returns Configured McpServer instance
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```ts
|
|
24
|
+
* // For stdio transport (local)
|
|
25
|
+
* const server = createLSBibleMCPServer();
|
|
26
|
+
* const transport = new StdioServerTransport();
|
|
27
|
+
* await server.connect(transport);
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```ts
|
|
32
|
+
* // For HTTP transport (Cloudflare Workers)
|
|
33
|
+
* const server = createLSBibleMCPServer();
|
|
34
|
+
* const transport = new StreamableHTTPServerTransport(...);
|
|
35
|
+
* await server.connect(transport);
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
declare function createLSBibleMCPServer(): McpServer;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* MCP tool implementations for LSBible.
|
|
42
|
+
*
|
|
43
|
+
* Provides 4 tools:
|
|
44
|
+
* - get_verse: Fetch a single Bible verse
|
|
45
|
+
* - get_passage: Fetch a range of verses
|
|
46
|
+
* - get_chapter: Fetch an entire chapter
|
|
47
|
+
* - search_bible: Full-text search across the Bible
|
|
48
|
+
*/
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Register all tools with the MCP server.
|
|
52
|
+
*
|
|
53
|
+
* @param server - McpServer instance
|
|
54
|
+
* @param client - Optional LSBibleClient instance (for custom cache configuration)
|
|
55
|
+
*/
|
|
56
|
+
declare function registerTools(server: McpServer, client?: LSBibleClient): void;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* MCP resource handlers for LSBible.
|
|
60
|
+
*
|
|
61
|
+
* Provides 2 resources:
|
|
62
|
+
* - bible://books (static): List all 66 books of the Bible
|
|
63
|
+
* - bible://structure/{book} (dynamic): Get chapter/verse structure for a specific book
|
|
64
|
+
*/
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Register all resources with the MCP server.
|
|
68
|
+
*
|
|
69
|
+
* @param server - McpServer instance
|
|
70
|
+
*/
|
|
71
|
+
declare function registerResources(server: McpServer): void;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* MCP prompt templates for LSBible.
|
|
75
|
+
*
|
|
76
|
+
* Provides 2 prompts:
|
|
77
|
+
* - bible_study: Generate a structured Bible study guide
|
|
78
|
+
* - cross_reference: Find related verses and themes
|
|
79
|
+
*/
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Register all prompts with the MCP server.
|
|
83
|
+
*
|
|
84
|
+
* @param server - McpServer instance
|
|
85
|
+
*/
|
|
86
|
+
declare function registerPrompts(server: McpServer): void;
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* MCP-specific types and interfaces for LSBible server.
|
|
90
|
+
*/
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* MCP Tool input for get_verse
|
|
94
|
+
*/
|
|
95
|
+
interface GetVerseInput {
|
|
96
|
+
book: BookName;
|
|
97
|
+
chapter: number;
|
|
98
|
+
verse: number;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* MCP Tool output for get_verse
|
|
102
|
+
*/
|
|
103
|
+
interface GetVerseOutput {
|
|
104
|
+
[x: string]: unknown;
|
|
105
|
+
reference: {
|
|
106
|
+
book: string;
|
|
107
|
+
chapter: number;
|
|
108
|
+
verse: number;
|
|
109
|
+
};
|
|
110
|
+
text: string;
|
|
111
|
+
segments: TextSegment[];
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* MCP Tool input for get_passage
|
|
115
|
+
*/
|
|
116
|
+
interface GetPassageInput {
|
|
117
|
+
fromBook: BookName;
|
|
118
|
+
fromChapter: number;
|
|
119
|
+
fromVerse: number;
|
|
120
|
+
toBook: BookName;
|
|
121
|
+
toChapter: number;
|
|
122
|
+
toVerse: number;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* MCP Tool output for get_passage
|
|
126
|
+
*/
|
|
127
|
+
interface GetPassageOutput {
|
|
128
|
+
[x: string]: unknown;
|
|
129
|
+
reference: {
|
|
130
|
+
from: {
|
|
131
|
+
book: string;
|
|
132
|
+
chapter: number;
|
|
133
|
+
verse: number;
|
|
134
|
+
};
|
|
135
|
+
to: {
|
|
136
|
+
book: string;
|
|
137
|
+
chapter: number;
|
|
138
|
+
verse: number;
|
|
139
|
+
};
|
|
140
|
+
};
|
|
141
|
+
verses: Array<{
|
|
142
|
+
reference: {
|
|
143
|
+
book: string;
|
|
144
|
+
chapter: number;
|
|
145
|
+
verse: number;
|
|
146
|
+
};
|
|
147
|
+
text: string;
|
|
148
|
+
segments: TextSegment[];
|
|
149
|
+
}>;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* MCP Tool input for get_chapter
|
|
153
|
+
*/
|
|
154
|
+
interface GetChapterInput {
|
|
155
|
+
book: BookName;
|
|
156
|
+
chapter: number;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* MCP Tool output for get_chapter
|
|
160
|
+
*/
|
|
161
|
+
interface GetChapterOutput {
|
|
162
|
+
[x: string]: unknown;
|
|
163
|
+
reference: {
|
|
164
|
+
book: string;
|
|
165
|
+
chapter: number;
|
|
166
|
+
verseCount: number;
|
|
167
|
+
};
|
|
168
|
+
verses: Array<{
|
|
169
|
+
reference: {
|
|
170
|
+
book: string;
|
|
171
|
+
chapter: number;
|
|
172
|
+
verse: number;
|
|
173
|
+
};
|
|
174
|
+
text: string;
|
|
175
|
+
segments: TextSegment[];
|
|
176
|
+
}>;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* MCP Tool input for search_bible
|
|
180
|
+
*/
|
|
181
|
+
interface SearchBibleInput {
|
|
182
|
+
query: string;
|
|
183
|
+
includeDistribution?: boolean;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* MCP Tool output for search_bible
|
|
187
|
+
*/
|
|
188
|
+
interface SearchBibleOutput {
|
|
189
|
+
[x: string]: unknown;
|
|
190
|
+
query: string;
|
|
191
|
+
resultCount: number;
|
|
192
|
+
results: Array<{
|
|
193
|
+
reference: {
|
|
194
|
+
book: string;
|
|
195
|
+
chapter: number;
|
|
196
|
+
verse: number;
|
|
197
|
+
};
|
|
198
|
+
text: string;
|
|
199
|
+
segments: TextSegment[];
|
|
200
|
+
}>;
|
|
201
|
+
distribution?: {
|
|
202
|
+
bySection: Record<string, number>;
|
|
203
|
+
byBook: Record<string, number>;
|
|
204
|
+
} | undefined;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Book info for resources
|
|
208
|
+
*/
|
|
209
|
+
interface BookResourceInfo {
|
|
210
|
+
name: string;
|
|
211
|
+
testament: string;
|
|
212
|
+
chapters: number;
|
|
213
|
+
verses: number;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Book structure resource
|
|
217
|
+
*/
|
|
218
|
+
interface BookStructureResource {
|
|
219
|
+
uri: string;
|
|
220
|
+
book: string;
|
|
221
|
+
testament: string;
|
|
222
|
+
totalChapters: number;
|
|
223
|
+
totalVerses: number;
|
|
224
|
+
chapters: Array<{
|
|
225
|
+
chapter: number;
|
|
226
|
+
verses: number;
|
|
227
|
+
}>;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
export { type BookResourceInfo, type BookStructureResource, type GetChapterInput, type GetChapterOutput, type GetPassageInput, type GetPassageOutput, type GetVerseInput, type GetVerseOutput, LSBibleClient, type SearchBibleInput, type SearchBibleOutput, createLSBibleMCPServer, registerPrompts, registerResources, registerTools };
|