@nuberea/sdk 0.0.1

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/dist/client.js ADDED
@@ -0,0 +1,306 @@
1
+ /**
2
+ * NuBerea Client — Main SDK entry point.
3
+ *
4
+ * Wraps authentication, MCP tool calls, and REST analytics queries
5
+ * into a single, ergonomic interface.
6
+ */
7
+ import { NuBereaAuth } from './auth.js';
8
+ import { McpClient, } from './mcp.js';
9
+ const DEFAULT_BASE = 'https://auth.aws-dev.streamsappsgslbex.com';
10
+ export class NuBerea {
11
+ auth;
12
+ baseUrl;
13
+ mcpUrl;
14
+ staticToken;
15
+ firebaseToken;
16
+ useSession;
17
+ mcpClient = null;
18
+ constructor(config) {
19
+ this.baseUrl = config?.baseUrl ?? config?.auth?.oauthBaseUrl ?? DEFAULT_BASE;
20
+ this.mcpUrl = config?.mcpUrl ?? config?.auth?.mcpUrl ?? `${this.baseUrl}/mcp`;
21
+ this.staticToken = config?.accessToken;
22
+ this.firebaseToken = config?.firebaseToken;
23
+ this.useSession = config?.useSession ?? false;
24
+ this.auth = new NuBereaAuth({
25
+ oauthBaseUrl: this.baseUrl,
26
+ mcpUrl: this.mcpUrl,
27
+ ...config?.auth,
28
+ });
29
+ }
30
+ // ==========================================================================
31
+ // Auth
32
+ // ==========================================================================
33
+ /**
34
+ * Authenticate with the NuBerea platform.
35
+ * Opens a browser for Firebase sign-in if no token is cached.
36
+ */
37
+ async login() {
38
+ if (this.staticToken)
39
+ return;
40
+ await this.auth.login(this.firebaseToken);
41
+ }
42
+ /**
43
+ * Check if the client has valid credentials.
44
+ */
45
+ isAuthenticated() {
46
+ return !!this.staticToken || this.auth.isAuthenticated();
47
+ }
48
+ /**
49
+ * Clear stored credentials.
50
+ */
51
+ logout() {
52
+ this.staticToken = undefined;
53
+ this.auth.logout();
54
+ }
55
+ async getToken() {
56
+ if (this.staticToken)
57
+ return this.staticToken;
58
+ return this.auth.getAccessToken();
59
+ }
60
+ /**
61
+ * Get (or create) the MCP client instance.
62
+ * Handles token refresh automatically.
63
+ */
64
+ async getMcpClient() {
65
+ const token = await this.getToken();
66
+ if (!this.mcpClient) {
67
+ this.mcpClient = new McpClient({
68
+ mcpUrl: this.mcpUrl,
69
+ accessToken: token,
70
+ useSession: this.useSession,
71
+ });
72
+ }
73
+ else {
74
+ // Update token in case it was refreshed
75
+ this.mcpClient.setAccessToken(token);
76
+ }
77
+ return this.mcpClient;
78
+ }
79
+ // ==========================================================================
80
+ // MCP Protocol — Full MCP operations
81
+ // ==========================================================================
82
+ /**
83
+ * Initialize an MCP session. Required in session mode before other calls.
84
+ * In stateless mode (default), this is a no-op.
85
+ */
86
+ async initialize() {
87
+ if (!this.useSession)
88
+ return null;
89
+ const mcp = await this.getMcpClient();
90
+ return mcp.initialize();
91
+ }
92
+ /**
93
+ * Send a raw MCP JSON-RPC request.
94
+ * Use this for any MCP method not covered by the typed methods.
95
+ */
96
+ async mcpRequest(method, params) {
97
+ const mcp = await this.getMcpClient();
98
+ const res = await mcp.request(method, params);
99
+ if (res.error)
100
+ throw new Error(`MCP error: ${JSON.stringify(res.error)}`);
101
+ return res.result;
102
+ }
103
+ /**
104
+ * List available MCP resources.
105
+ */
106
+ async resources() {
107
+ const mcp = await this.getMcpClient();
108
+ return mcp.listResources();
109
+ }
110
+ /**
111
+ * Read an MCP resource by URI.
112
+ *
113
+ * @example
114
+ * ```ts
115
+ * const contents = await client.resource('macula://hebrew');
116
+ * console.log(contents[0].text);
117
+ * ```
118
+ */
119
+ async resource(uri) {
120
+ const mcp = await this.getMcpClient();
121
+ return mcp.readResource(uri);
122
+ }
123
+ /**
124
+ * Close the MCP session (if session-based).
125
+ */
126
+ async close() {
127
+ if (this.mcpClient) {
128
+ await this.mcpClient.close();
129
+ this.mcpClient = null;
130
+ }
131
+ }
132
+ /**
133
+ * Get the current MCP session ID (null in stateless mode).
134
+ */
135
+ getSessionId() {
136
+ return this.mcpClient?.getSessionId() ?? null;
137
+ }
138
+ // ==========================================================================
139
+ // MCP Tools
140
+ // ==========================================================================
141
+ /**
142
+ * List all available MCP tools.
143
+ * Uses MCP tools/list in session mode, or the public /tools endpoint in stateless mode.
144
+ */
145
+ async tools() {
146
+ if (this.useSession) {
147
+ const mcp = await this.getMcpClient();
148
+ return mcp.listTools();
149
+ }
150
+ // Stateless: use public endpoint (no auth needed)
151
+ const res = await fetch(`${this.baseUrl}/tools`);
152
+ if (!res.ok)
153
+ throw new Error(`Failed to list tools: HTTP ${res.status}`);
154
+ const data = (await res.json());
155
+ return data.tools;
156
+ }
157
+ /**
158
+ * Call an MCP tool by name.
159
+ *
160
+ * @example
161
+ * ```ts
162
+ * const result = await client.tool('bible_kjv_get_verse', {
163
+ * book: 'John', chapter: 1, verse: 1,
164
+ * });
165
+ * console.log(result.content[0].text);
166
+ * ```
167
+ */
168
+ async tool(name, args = {}) {
169
+ const mcp = await this.getMcpClient();
170
+ return mcp.callTool(name, args);
171
+ }
172
+ /**
173
+ * Call an MCP tool and return just the text content (convenience).
174
+ */
175
+ async toolText(name, args = {}) {
176
+ const result = await this.tool(name, args);
177
+ const textContent = result.content.find((c) => c.type === 'text');
178
+ return textContent?.text ?? '';
179
+ }
180
+ /**
181
+ * Call an MCP tool and parse the text content as JSON (convenience).
182
+ */
183
+ async toolJson(name, args = {}) {
184
+ const text = await this.toolText(name, args);
185
+ return JSON.parse(text);
186
+ }
187
+ // ==========================================================================
188
+ // Analytics / SQL queries
189
+ // ==========================================================================
190
+ /**
191
+ * Execute a SQL query against the unified data platform.
192
+ *
193
+ * @example
194
+ * ```ts
195
+ * const result = await client.query(
196
+ * "SELECT * FROM hebrew.morphemes WHERE book_id = 'Gen' AND chapter = 1 LIMIT 10"
197
+ * );
198
+ * ```
199
+ */
200
+ async query(sql, options) {
201
+ const result = await this.tool('analytics_query', {
202
+ sql,
203
+ limit: options?.limit ?? 100,
204
+ });
205
+ const text = result.content.find((c) => c.type === 'text')?.text ?? '';
206
+ // analytics_query returns "<summary>\n\n<json>" — extract the JSON part
207
+ const jsonStart = text.indexOf('[');
208
+ if (jsonStart === -1) {
209
+ // Might be an error or empty result
210
+ return {
211
+ columns: [],
212
+ rows: [],
213
+ rowCount: 0,
214
+ executionTimeMs: 0,
215
+ truncated: false,
216
+ offset: 0,
217
+ };
218
+ }
219
+ const summaryLine = text.substring(0, jsonStart).trim();
220
+ const rows = JSON.parse(text.substring(jsonStart));
221
+ const columns = rows.length > 0 ? Object.keys(rows[0]) : [];
222
+ // Parse summary: "N rows returned in Xms (truncated)"
223
+ const truncated = summaryLine.includes('truncated');
224
+ const timeMatch = summaryLine.match(/in (\d+)ms/);
225
+ const executionTimeMs = timeMatch ? parseInt(timeMatch[1], 10) : 0;
226
+ return {
227
+ columns,
228
+ rows,
229
+ rowCount: rows.length,
230
+ executionTimeMs,
231
+ truncated,
232
+ offset: options?.offset ?? 0,
233
+ };
234
+ }
235
+ /**
236
+ * List all available databases (schemas) and their tables.
237
+ */
238
+ async databases() {
239
+ const result = await this.tool('analytics_list_databases');
240
+ const text = result.content.find((c) => c.type === 'text')?.text ?? '{}';
241
+ const data = JSON.parse(text);
242
+ return data.databases;
243
+ }
244
+ /**
245
+ * Describe a table's columns.
246
+ */
247
+ async describe(database, table) {
248
+ const result = await this.tool('analytics_describe_table', { database, table });
249
+ const text = result.content.find((c) => c.type === 'text')?.text ?? '{}';
250
+ const data = JSON.parse(text);
251
+ return data.columns;
252
+ }
253
+ /**
254
+ * Deep introspection of a schema — tables, columns, row counts, sample rows.
255
+ */
256
+ async introspect(schema, table) {
257
+ const args = { schema };
258
+ if (table)
259
+ args.table = table;
260
+ const result = await this.tool('analytics_schema_introspect', args);
261
+ const text = result.content.find((c) => c.type === 'text')?.text ?? '{}';
262
+ return JSON.parse(text);
263
+ }
264
+ /**
265
+ * Get row counts for all tables.
266
+ */
267
+ async stats() {
268
+ const result = await this.tool('analytics_list_databases');
269
+ // This returns the databases list; we'd need a stats tool or use query
270
+ const text = result.content.find((c) => c.type === 'text')?.text ?? '{}';
271
+ const data = JSON.parse(text);
272
+ return data.databases.flatMap((db) => db.tables.map((t) => ({
273
+ database: db.name,
274
+ table: t.table,
275
+ rowCount: t.rowCount ?? 0,
276
+ })));
277
+ }
278
+ // ==========================================================================
279
+ // Convenience methods (typed shortcuts for common tools)
280
+ // ==========================================================================
281
+ /** Get a KJV verse */
282
+ async verse(book, chapter, verse) {
283
+ return this.toolText('bible_kjv_get_verse', { book, chapter, verse });
284
+ }
285
+ /** Search KJV text */
286
+ async search(text, limit = 10) {
287
+ return this.toolText('bible_kjv_search_text', { query: text, limit });
288
+ }
289
+ /** Look up a Greek word in LSJ */
290
+ async greekLookup(term) {
291
+ return this.toolText('lexicon_lsj_lookup', { term });
292
+ }
293
+ /** Look up a Hebrew word in BDB by Strong's number */
294
+ async hebrewStrong(strong) {
295
+ return this.toolText('lexicon_bdb_search_strong', { strong });
296
+ }
297
+ /** Get Hebrew morphology for a verse */
298
+ async hebrewMorphology(book, chapter, verse) {
299
+ return this.toolText('macula_hebrew_query_verse', { book, chapter, verse });
300
+ }
301
+ /** Get Greek morphology for a verse */
302
+ async greekMorphology(book, chapter, verse) {
303
+ return this.toolText('macula_greek_query_verse', { book, chapter, verse });
304
+ }
305
+ }
306
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * NuBerea SDK
3
+ *
4
+ * Client library for the NuBerea biblical data platform.
5
+ * Supports both MCP (Model Context Protocol) and REST query interfaces.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import { NuBerea } from '@nuberea/sdk';
10
+ *
11
+ * const client = new NuBerea();
12
+ * await client.login();
13
+ *
14
+ * // Call any MCP tool
15
+ * const result = await client.tool('bible_kjv_get_verse', {
16
+ * book: 'John', chapter: 1, verse: 1,
17
+ * });
18
+ *
19
+ * // Run SQL analytics
20
+ * const rows = await client.query(
21
+ * 'SELECT * FROM hebrew.morphemes WHERE book_id = \'Gen\' AND chapter = 1 LIMIT 10'
22
+ * );
23
+ *
24
+ * // List available tools
25
+ * const tools = await client.tools();
26
+ * ```
27
+ */
28
+ export { NuBerea } from './client.js';
29
+ export type { NuBereaConfig, NuBereaTokens } from './client.js';
30
+ export { NuBereaAuth } from './auth.js';
31
+ export type { AuthConfig } from './auth.js';
32
+ export { McpClient, McpError } from './mcp.js';
33
+ export type { McpClientConfig, McpServerInfo, McpCapabilities, McpInitializeResult, McpResource, McpResourceContent, McpJsonRpcRequest, McpJsonRpcResponse, } from './mcp.js';
34
+ export type { ToolResult, ToolInfo, QueryResult, DatabaseInfo, TableInfo, ColumnInfo, SchemaIntrospection, } from './types.js';
35
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC/C,YAAY,EACV,eAAe,EACf,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAClB,YAAY,EACV,UAAU,EACV,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,SAAS,EACT,UAAU,EACV,mBAAmB,GACpB,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,31 @@
1
+ /**
2
+ * NuBerea SDK
3
+ *
4
+ * Client library for the NuBerea biblical data platform.
5
+ * Supports both MCP (Model Context Protocol) and REST query interfaces.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import { NuBerea } from '@nuberea/sdk';
10
+ *
11
+ * const client = new NuBerea();
12
+ * await client.login();
13
+ *
14
+ * // Call any MCP tool
15
+ * const result = await client.tool('bible_kjv_get_verse', {
16
+ * book: 'John', chapter: 1, verse: 1,
17
+ * });
18
+ *
19
+ * // Run SQL analytics
20
+ * const rows = await client.query(
21
+ * 'SELECT * FROM hebrew.morphemes WHERE book_id = \'Gen\' AND chapter = 1 LIMIT 10'
22
+ * );
23
+ *
24
+ * // List available tools
25
+ * const tools = await client.tools();
26
+ * ```
27
+ */
28
+ export { NuBerea } from './client.js';
29
+ export { NuBereaAuth } from './auth.js';
30
+ export { McpClient, McpError } from './mcp.js';
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC"}
package/dist/mcp.d.ts ADDED
@@ -0,0 +1,125 @@
1
+ /**
2
+ * NuBerea MCP Client — Full MCP protocol implementation.
3
+ *
4
+ * Implements MCP Streamable HTTP transport:
5
+ * - POST /mcp: JSON-RPC requests (initialize, tools/list, tools/call, resources/list, resources/read)
6
+ * - Session tracking via mcp-session-id header
7
+ * - Stateless mode (no session) and session-based mode
8
+ *
9
+ * Can be used standalone or through the higher-level NuBerea client class.
10
+ */
11
+ import type { ToolInfo, ToolResult } from './types.js';
12
+ export interface McpServerInfo {
13
+ name: string;
14
+ version: string;
15
+ }
16
+ export interface McpCapabilities {
17
+ tools?: Record<string, unknown>;
18
+ resources?: Record<string, unknown>;
19
+ prompts?: Record<string, unknown>;
20
+ [key: string]: unknown;
21
+ }
22
+ export interface McpInitializeResult {
23
+ protocolVersion: string;
24
+ serverInfo: McpServerInfo;
25
+ capabilities: McpCapabilities;
26
+ }
27
+ export interface McpResource {
28
+ uri: string;
29
+ name: string;
30
+ description?: string;
31
+ mimeType?: string;
32
+ }
33
+ export interface McpResourceContent {
34
+ uri: string;
35
+ mimeType?: string;
36
+ text?: string;
37
+ blob?: string;
38
+ }
39
+ export interface McpJsonRpcRequest {
40
+ jsonrpc: '2.0';
41
+ method: string;
42
+ params?: Record<string, unknown>;
43
+ id: string | number;
44
+ }
45
+ export interface McpJsonRpcResponse {
46
+ jsonrpc: '2.0';
47
+ id: string | number;
48
+ result?: unknown;
49
+ error?: {
50
+ code: number;
51
+ message: string;
52
+ data?: unknown;
53
+ };
54
+ }
55
+ export interface McpClientConfig {
56
+ /** MCP endpoint URL */
57
+ mcpUrl: string;
58
+ /** Access token for Authorization header */
59
+ accessToken: string;
60
+ /** MCP protocol version (default: "2025-03-26") */
61
+ protocolVersion?: string;
62
+ /** Use session-based mode (sends initialize, tracks session ID) */
63
+ useSession?: boolean;
64
+ }
65
+ export declare class McpClient {
66
+ private mcpUrl;
67
+ private accessToken;
68
+ private protocolVersion;
69
+ private sessionId;
70
+ private initialized;
71
+ private serverInfo;
72
+ private capabilities;
73
+ private useSession;
74
+ private requestId;
75
+ constructor(config: McpClientConfig);
76
+ /**
77
+ * Send a JSON-RPC request to the MCP server.
78
+ * Handles both plain JSON and SSE response formats.
79
+ */
80
+ request(method: string, params?: Record<string, unknown>): Promise<McpJsonRpcResponse>;
81
+ /**
82
+ * Send a JSON-RPC notification (no id, no response expected).
83
+ */
84
+ notify(method: string, params?: Record<string, unknown>): Promise<void>;
85
+ /**
86
+ * Initialize the MCP session.
87
+ * Must be called before other methods in session-based mode.
88
+ */
89
+ initialize(): Promise<McpInitializeResult>;
90
+ /**
91
+ * List available tools.
92
+ */
93
+ listTools(): Promise<ToolInfo[]>;
94
+ /**
95
+ * Call a tool by name.
96
+ */
97
+ callTool(name: string, args?: Record<string, unknown>): Promise<ToolResult>;
98
+ /**
99
+ * List available resources.
100
+ */
101
+ listResources(): Promise<McpResource[]>;
102
+ /**
103
+ * Read a resource by URI.
104
+ */
105
+ readResource(uri: string): Promise<McpResourceContent[]>;
106
+ /**
107
+ * Close the MCP session (sends DELETE request).
108
+ */
109
+ close(): Promise<void>;
110
+ getSessionId(): string | null;
111
+ getServerInfo(): McpServerInfo | null;
112
+ getCapabilities(): McpCapabilities | null;
113
+ isInitialized(): boolean;
114
+ /**
115
+ * Update the access token (e.g., after refresh).
116
+ */
117
+ setAccessToken(token: string): void;
118
+ private ensureReady;
119
+ private parseResponse;
120
+ }
121
+ export declare class McpError extends Error {
122
+ code: number;
123
+ constructor(message: string, code: number);
124
+ }
125
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}