@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/LICENSE +21 -0
- package/README.md +146 -0
- package/dist/auth.d.ts +61 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +245 -0
- package/dist/auth.js.map +1 -0
- package/dist/cli/index.d.ts +22 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +417 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/client.d.ts +159 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +306 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp.d.ts +125 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +255 -0
- package/dist/mcp.js.map +1 -0
- package/dist/types.d.ts +58 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* NuBerea CLI
|
|
4
|
+
*
|
|
5
|
+
* Command-line interface for the NuBerea biblical data platform.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* nuberea login — Authenticate (opens browser)
|
|
9
|
+
* nuberea logout — Clear stored credentials
|
|
10
|
+
* nuberea tools — List available MCP tools
|
|
11
|
+
* nuberea tool <name> [json] — Call an MCP tool
|
|
12
|
+
* nuberea query <sql> — Run a SQL analytics query
|
|
13
|
+
* nuberea databases — List available databases
|
|
14
|
+
* nuberea describe <db> <tbl>— Describe a table
|
|
15
|
+
* nuberea introspect <schema>— Deep schema introspection
|
|
16
|
+
* nuberea verse <ref> — Get a KJV verse (e.g., "John 1:1")
|
|
17
|
+
* nuberea search <text> — Search KJV text
|
|
18
|
+
* nuberea greek <word> — Look up a Greek word in LSJ
|
|
19
|
+
* nuberea hebrew <strong> — Look up a Hebrew Strong's number in BDB
|
|
20
|
+
*/
|
|
21
|
+
import { NuBerea } from '../client.js';
|
|
22
|
+
// ============================================================================
|
|
23
|
+
// Helpers
|
|
24
|
+
// ============================================================================
|
|
25
|
+
function usage() {
|
|
26
|
+
console.log(`
|
|
27
|
+
nuberea — NuBerea biblical data platform CLI
|
|
28
|
+
|
|
29
|
+
AUTHENTICATION
|
|
30
|
+
login Sign in (opens browser)
|
|
31
|
+
logout Clear stored credentials
|
|
32
|
+
status Check authentication status
|
|
33
|
+
|
|
34
|
+
MCP TOOLS
|
|
35
|
+
tools List all available tools
|
|
36
|
+
tool <name> [args_json] Call a tool by name
|
|
37
|
+
e.g., nuberea tool bible_kjv_get_verse '{"book":"John","chapter":1,"verse":1}'
|
|
38
|
+
resources List available MCP resources
|
|
39
|
+
resource <uri> Read an MCP resource by URI
|
|
40
|
+
mcp <method> [params] Send a raw MCP JSON-RPC request
|
|
41
|
+
|
|
42
|
+
ANALYTICS
|
|
43
|
+
query <sql> Execute a SQL query
|
|
44
|
+
databases List databases and tables
|
|
45
|
+
describe <db> <table> Describe table columns
|
|
46
|
+
introspect <schema> Deep schema inspection (columns, counts, samples)
|
|
47
|
+
stats Row counts for all tables
|
|
48
|
+
|
|
49
|
+
SHORTCUTS
|
|
50
|
+
verse <book> <ch>:<vs> Get a KJV verse
|
|
51
|
+
search <text> Search KJV text
|
|
52
|
+
greek <word> Look up Greek word in LSJ
|
|
53
|
+
hebrew <strong> Look up Hebrew Strong's number in BDB
|
|
54
|
+
|
|
55
|
+
OPTIONS
|
|
56
|
+
--json Output raw JSON (default: formatted)
|
|
57
|
+
--limit <n> Row limit for queries (default: 100)
|
|
58
|
+
--session Use MCP session mode (initialize + session tracking)
|
|
59
|
+
--base-url <url> Override API base URL
|
|
60
|
+
--token <token> Use pre-set access token
|
|
61
|
+
|
|
62
|
+
ENVIRONMENT
|
|
63
|
+
NUBEREA_BASE_URL API base URL
|
|
64
|
+
NUBEREA_ACCESS_TOKEN Pre-set access token
|
|
65
|
+
NUBEREA_FIREBASE_TOKEN Pre-set Firebase token (skip browser)
|
|
66
|
+
`);
|
|
67
|
+
}
|
|
68
|
+
function die(msg) {
|
|
69
|
+
console.error(`error: ${msg}`);
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
function parseArgs(argv) {
|
|
73
|
+
const flags = {};
|
|
74
|
+
const positional = [];
|
|
75
|
+
let i = 0;
|
|
76
|
+
while (i < argv.length) {
|
|
77
|
+
const arg = argv[i];
|
|
78
|
+
if (arg.startsWith('--')) {
|
|
79
|
+
const key = arg.slice(2);
|
|
80
|
+
const next = argv[i + 1];
|
|
81
|
+
if (next && !next.startsWith('--')) {
|
|
82
|
+
flags[key] = next;
|
|
83
|
+
i += 2;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
flags[key] = true;
|
|
87
|
+
i += 1;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
positional.push(arg);
|
|
92
|
+
i += 1;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return {
|
|
96
|
+
command: positional[0] ?? '',
|
|
97
|
+
args: positional.slice(1),
|
|
98
|
+
flags,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
function formatJson(data, raw) {
|
|
102
|
+
if (raw)
|
|
103
|
+
return JSON.stringify(data);
|
|
104
|
+
return JSON.stringify(data, null, 2);
|
|
105
|
+
}
|
|
106
|
+
function createClient(flags) {
|
|
107
|
+
return new NuBerea({
|
|
108
|
+
baseUrl: flags['base-url'] ?? process.env.NUBEREA_BASE_URL,
|
|
109
|
+
accessToken: flags.token ?? process.env.NUBEREA_ACCESS_TOKEN,
|
|
110
|
+
firebaseToken: process.env.NUBEREA_FIREBASE_TOKEN,
|
|
111
|
+
useSession: !!flags.session,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
// ============================================================================
|
|
115
|
+
// Commands
|
|
116
|
+
// ============================================================================
|
|
117
|
+
async function cmdLogin(client) {
|
|
118
|
+
console.log('Signing in to NuBerea...');
|
|
119
|
+
await client.login();
|
|
120
|
+
console.log('✅ Authenticated. Tokens saved to ~/.nuberea/tokens.json');
|
|
121
|
+
}
|
|
122
|
+
async function cmdLogout(client) {
|
|
123
|
+
client.logout();
|
|
124
|
+
console.log('✅ Logged out. Tokens cleared.');
|
|
125
|
+
}
|
|
126
|
+
async function cmdStatus(client) {
|
|
127
|
+
if (client.isAuthenticated()) {
|
|
128
|
+
console.log('✅ Authenticated');
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
console.log('❌ Not authenticated. Run: nuberea login');
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
async function cmdTools(client, raw) {
|
|
135
|
+
const tools = await client.tools();
|
|
136
|
+
if (raw) {
|
|
137
|
+
console.log(formatJson(tools, true));
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
console.log(`\n${tools.length} tools available:\n`);
|
|
141
|
+
for (const tool of tools) {
|
|
142
|
+
console.log(` ${tool.name}`);
|
|
143
|
+
if (tool.description) {
|
|
144
|
+
const desc = tool.description.split('\n')[0].substring(0, 80);
|
|
145
|
+
console.log(` ${desc}`);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
console.log();
|
|
149
|
+
}
|
|
150
|
+
async function cmdTool(client, args, raw) {
|
|
151
|
+
const name = args[0];
|
|
152
|
+
if (!name)
|
|
153
|
+
die('Usage: nuberea tool <name> [args_json]');
|
|
154
|
+
let toolArgs = {};
|
|
155
|
+
if (args[1]) {
|
|
156
|
+
try {
|
|
157
|
+
toolArgs = JSON.parse(args[1]);
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
die(`Invalid JSON: ${args[1]}`);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
const result = await client.tool(name, toolArgs);
|
|
164
|
+
if (raw) {
|
|
165
|
+
console.log(formatJson(result, true));
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
for (const content of result.content) {
|
|
169
|
+
if (content.type === 'text') {
|
|
170
|
+
console.log(content.text);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
async function cmdQuery(client, args, flags, raw) {
|
|
176
|
+
const sql = args.join(' ');
|
|
177
|
+
if (!sql)
|
|
178
|
+
die('Usage: nuberea query <sql>');
|
|
179
|
+
const limit = flags.limit ? parseInt(flags.limit, 10) : 100;
|
|
180
|
+
const result = await client.query(sql, { limit });
|
|
181
|
+
if (raw) {
|
|
182
|
+
console.log(formatJson(result, true));
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
console.log(`\n${result.rowCount} rows (${result.executionTimeMs}ms)${result.truncated ? ' [truncated]' : ''}\n`);
|
|
186
|
+
if (result.rows.length === 0)
|
|
187
|
+
return;
|
|
188
|
+
// Simple table output
|
|
189
|
+
const cols = result.columns;
|
|
190
|
+
const widths = cols.map((c) => Math.max(c.length, ...result.rows.map((r) => String(r[c] ?? '').substring(0, 60).length)));
|
|
191
|
+
const header = cols.map((c, i) => c.padEnd(widths[i])).join(' | ');
|
|
192
|
+
const separator = widths.map((w) => '-'.repeat(w)).join('-+-');
|
|
193
|
+
console.log(header);
|
|
194
|
+
console.log(separator);
|
|
195
|
+
for (const row of result.rows) {
|
|
196
|
+
const line = cols
|
|
197
|
+
.map((c, i) => String(row[c] ?? '').substring(0, 60).padEnd(widths[i]))
|
|
198
|
+
.join(' | ');
|
|
199
|
+
console.log(line);
|
|
200
|
+
}
|
|
201
|
+
console.log();
|
|
202
|
+
}
|
|
203
|
+
async function cmdDatabases(client, raw) {
|
|
204
|
+
const dbs = await client.databases();
|
|
205
|
+
if (raw) {
|
|
206
|
+
console.log(formatJson(dbs, true));
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
console.log(`\n${dbs.length} databases:\n`);
|
|
210
|
+
for (const db of dbs) {
|
|
211
|
+
const tables = db.tables.map((t) => t.table).join(', ');
|
|
212
|
+
console.log(` ${db.name.padEnd(15)} ${db.description}`);
|
|
213
|
+
console.log(` ${''.padEnd(15)} tables: ${tables}`);
|
|
214
|
+
}
|
|
215
|
+
console.log();
|
|
216
|
+
}
|
|
217
|
+
async function cmdDescribe(client, args, raw) {
|
|
218
|
+
if (args.length < 2)
|
|
219
|
+
die('Usage: nuberea describe <database> <table>');
|
|
220
|
+
const columns = await client.describe(args[0], args[1]);
|
|
221
|
+
if (raw) {
|
|
222
|
+
console.log(formatJson(columns, true));
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
console.log(`\n${args[0]}.${args[1]}:\n`);
|
|
226
|
+
for (const col of columns) {
|
|
227
|
+
console.log(` ${col.column_name.padEnd(25)} ${col.column_type.padEnd(15)} ${col.null === 'YES' ? 'nullable' : ''}`);
|
|
228
|
+
}
|
|
229
|
+
console.log();
|
|
230
|
+
}
|
|
231
|
+
async function cmdIntrospect(client, args, raw) {
|
|
232
|
+
if (args.length < 1)
|
|
233
|
+
die('Usage: nuberea introspect <schema> [table]');
|
|
234
|
+
const result = await client.introspect(args[0], args[1]);
|
|
235
|
+
if (raw) {
|
|
236
|
+
console.log(formatJson(result, true));
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
console.log(`\nSchema: ${result.schema} — ${result.description}\n`);
|
|
240
|
+
for (const table of result.tables) {
|
|
241
|
+
console.log(` ${table.table} (${(table.rowCount ?? 0).toLocaleString()} rows)`);
|
|
242
|
+
for (const col of table.columns ?? []) {
|
|
243
|
+
console.log(` ${col.column_name.padEnd(25)} ${col.column_type}`);
|
|
244
|
+
}
|
|
245
|
+
if (table.sampleRows?.length) {
|
|
246
|
+
console.log(` Sample: ${JSON.stringify(table.sampleRows[0]).substring(0, 120)}...`);
|
|
247
|
+
}
|
|
248
|
+
console.log();
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
async function cmdVerse(client, args, raw) {
|
|
252
|
+
// Parse "John 1:1" or "John" "1:1" or "John" "1" "1"
|
|
253
|
+
const joined = args.join(' ');
|
|
254
|
+
const match = joined.match(/^(.+?)\s+(\d+):(\d+)$/);
|
|
255
|
+
if (!match)
|
|
256
|
+
die('Usage: nuberea verse <book> <chapter>:<verse> (e.g., "John 1:1")');
|
|
257
|
+
const [, book, chapter, verse] = match;
|
|
258
|
+
const text = await client.verse(book, parseInt(chapter, 10), parseInt(verse, 10));
|
|
259
|
+
if (raw) {
|
|
260
|
+
console.log(text);
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
console.log(`\n${text}\n`);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
async function cmdSearch(client, args, raw) {
|
|
267
|
+
const text = args.join(' ');
|
|
268
|
+
if (!text)
|
|
269
|
+
die('Usage: nuberea search <text>');
|
|
270
|
+
const result = await client.search(text);
|
|
271
|
+
if (raw) {
|
|
272
|
+
console.log(result);
|
|
273
|
+
}
|
|
274
|
+
else {
|
|
275
|
+
console.log(`\n${result}\n`);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
async function cmdGreek(client, args, raw) {
|
|
279
|
+
const word = args[0];
|
|
280
|
+
if (!word)
|
|
281
|
+
die('Usage: nuberea greek <word>');
|
|
282
|
+
const result = await client.greekLookup(word);
|
|
283
|
+
if (raw) {
|
|
284
|
+
console.log(result);
|
|
285
|
+
}
|
|
286
|
+
else {
|
|
287
|
+
console.log(`\n${result}\n`);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
async function cmdHebrew(client, args, raw) {
|
|
291
|
+
const strong = args[0];
|
|
292
|
+
if (!strong)
|
|
293
|
+
die('Usage: nuberea hebrew <strong_number>');
|
|
294
|
+
const result = await client.hebrewStrong(strong);
|
|
295
|
+
if (raw) {
|
|
296
|
+
console.log(result);
|
|
297
|
+
}
|
|
298
|
+
else {
|
|
299
|
+
console.log(`\n${result}\n`);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
async function cmdResources(client, raw) {
|
|
303
|
+
const resources = await client.resources();
|
|
304
|
+
if (raw) {
|
|
305
|
+
console.log(formatJson(resources, true));
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
308
|
+
console.log(`\n${resources.length} resources:\n`);
|
|
309
|
+
for (const r of resources) {
|
|
310
|
+
console.log(` ${r.uri}`);
|
|
311
|
+
if (r.description) {
|
|
312
|
+
console.log(` ${r.description.substring(0, 80)}`);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
console.log();
|
|
316
|
+
}
|
|
317
|
+
async function cmdResource(client, args, raw) {
|
|
318
|
+
const uri = args[0];
|
|
319
|
+
if (!uri)
|
|
320
|
+
die('Usage: nuberea resource <uri>');
|
|
321
|
+
const contents = await client.resource(uri);
|
|
322
|
+
if (raw) {
|
|
323
|
+
console.log(formatJson(contents, true));
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
for (const content of contents) {
|
|
327
|
+
console.log(`\n--- ${content.uri} (${content.mimeType ?? 'text/plain'}) ---`);
|
|
328
|
+
if (content.text) {
|
|
329
|
+
console.log(content.text);
|
|
330
|
+
}
|
|
331
|
+
else if (content.blob) {
|
|
332
|
+
console.log(`[binary: ${content.blob.length} bytes base64]`);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
console.log();
|
|
336
|
+
}
|
|
337
|
+
async function cmdMcpRaw(client, args, raw) {
|
|
338
|
+
const method = args[0];
|
|
339
|
+
if (!method)
|
|
340
|
+
die('Usage: nuberea mcp <method> [params_json]');
|
|
341
|
+
let params;
|
|
342
|
+
if (args[1]) {
|
|
343
|
+
try {
|
|
344
|
+
params = JSON.parse(args[1]);
|
|
345
|
+
}
|
|
346
|
+
catch {
|
|
347
|
+
die(`Invalid JSON: ${args[1]}`);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
const result = await client.mcpRequest(method, params);
|
|
351
|
+
console.log(formatJson(result, !raw));
|
|
352
|
+
}
|
|
353
|
+
// ============================================================================
|
|
354
|
+
// Main
|
|
355
|
+
// ============================================================================
|
|
356
|
+
async function main() {
|
|
357
|
+
const { command, args, flags } = parseArgs(process.argv.slice(2));
|
|
358
|
+
const raw = !!flags.json;
|
|
359
|
+
if (!command || command === 'help' || flags.help) {
|
|
360
|
+
usage();
|
|
361
|
+
process.exit(0);
|
|
362
|
+
}
|
|
363
|
+
const client = createClient(flags);
|
|
364
|
+
// Commands that don't need auth
|
|
365
|
+
if (command === 'login')
|
|
366
|
+
return cmdLogin(client);
|
|
367
|
+
if (command === 'logout')
|
|
368
|
+
return cmdLogout(client);
|
|
369
|
+
if (command === 'status')
|
|
370
|
+
return cmdStatus(client);
|
|
371
|
+
// Tools listing doesn't need auth (public endpoint)
|
|
372
|
+
if (command === 'tools')
|
|
373
|
+
return cmdTools(client, raw);
|
|
374
|
+
// All other commands need auth — ensure we have it
|
|
375
|
+
if (!client.isAuthenticated() && !flags.token && !process.env.NUBEREA_ACCESS_TOKEN) {
|
|
376
|
+
console.log('Not authenticated. Signing in...\n');
|
|
377
|
+
await client.login();
|
|
378
|
+
}
|
|
379
|
+
switch (command) {
|
|
380
|
+
case 'tool':
|
|
381
|
+
return cmdTool(client, args, raw);
|
|
382
|
+
case 'resources':
|
|
383
|
+
return cmdResources(client, raw);
|
|
384
|
+
case 'resource':
|
|
385
|
+
return cmdResource(client, args, raw);
|
|
386
|
+
case 'mcp':
|
|
387
|
+
return cmdMcpRaw(client, args, raw);
|
|
388
|
+
case 'query':
|
|
389
|
+
case 'sql':
|
|
390
|
+
return cmdQuery(client, args, flags, raw);
|
|
391
|
+
case 'databases':
|
|
392
|
+
case 'dbs':
|
|
393
|
+
return cmdDatabases(client, raw);
|
|
394
|
+
case 'describe':
|
|
395
|
+
case 'desc':
|
|
396
|
+
return cmdDescribe(client, args, raw);
|
|
397
|
+
case 'introspect':
|
|
398
|
+
return cmdIntrospect(client, args, raw);
|
|
399
|
+
case 'verse':
|
|
400
|
+
return cmdVerse(client, args, raw);
|
|
401
|
+
case 'search':
|
|
402
|
+
return cmdSearch(client, args, raw);
|
|
403
|
+
case 'greek':
|
|
404
|
+
return cmdGreek(client, args, raw);
|
|
405
|
+
case 'hebrew':
|
|
406
|
+
return cmdHebrew(client, args, raw);
|
|
407
|
+
default:
|
|
408
|
+
console.error(`Unknown command: ${command}`);
|
|
409
|
+
usage();
|
|
410
|
+
process.exit(1);
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
main().catch((err) => {
|
|
414
|
+
console.error(`\n❌ ${err instanceof Error ? err.message : String(err)}`);
|
|
415
|
+
process.exit(1);
|
|
416
|
+
});
|
|
417
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,SAAS,KAAK;IACZ,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCb,CAAC,CAAC;AACH,CAAC;AAED,SAAS,GAAG,CAAC,GAAW;IACtB,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC;IAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,SAAS,CAAC,IAAc;IAK/B,MAAM,KAAK,GAAqC,EAAE,CAAC;IACnD,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACzB,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;gBAClB,CAAC,IAAI,CAAC,CAAC;YACT,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;gBAClB,CAAC,IAAI,CAAC,CAAC;YACT,CAAC;QACH,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE;QAC5B,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QACzB,KAAK;KACN,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,IAAa,EAAE,GAAY;IAC7C,IAAI,GAAG;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,YAAY,CAAC,KAAuC;IAC3D,OAAO,IAAI,OAAO,CAAC;QACjB,OAAO,EAAG,KAAK,CAAC,UAAU,CAAY,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB;QACtE,WAAW,EAAG,KAAK,CAAC,KAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB;QACxE,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB;QACjD,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO;KAC5B,CAAC,CAAC;AACL,CAAC;AAED,+EAA+E;AAC/E,WAAW;AACX,+EAA+E;AAE/E,KAAK,UAAU,QAAQ,CAAC,MAAe;IACrC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACxC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACrB,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;AACzE,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,MAAe;IACtC,MAAM,CAAC,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;AAC/C,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,MAAe;IACtC,IAAI,MAAM,CAAC,eAAe,EAAE,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACjC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,MAAe,EAAE,GAAY;IACnD,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IAEnC,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;QACrC,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,qBAAqB,CAAC,CAAC;IACpD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,OAAO,CACpB,MAAe,EACf,IAAc,EACd,GAAY;IAEZ,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACrB,IAAI,CAAC,IAAI;QAAE,GAAG,CAAC,wCAAwC,CAAC,CAAC;IAEzD,IAAI,QAAQ,GAA4B,EAAE,CAAC;IAC3C,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,GAAG,CAAC,iBAAiB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAEjD,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IACxC,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACrC,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,QAAQ,CACrB,MAAe,EACf,IAAc,EACd,KAAuC,EACvC,GAAY;IAEZ,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,CAAC,GAAG;QAAE,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAE5C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAe,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACtE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAElD,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QACtC,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,QAAQ,UAAU,MAAM,CAAC,eAAe,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAElH,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAErC,sBAAsB;IACtB,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;IAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC5B,IAAI,CAAC,GAAG,CACN,CAAC,CAAC,MAAM,EACR,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CACtE,CACF,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnE,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAEvB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAI;aACd,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;aACtE,IAAI,CAAC,KAAK,CAAC,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,MAAe,EAAE,GAAY;IACvD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;IAErC,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;QACnC,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,eAAe,CAAC,CAAC;IAC5C,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,MAAM,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,WAAW,CACxB,MAAe,EACf,IAAc,EACd,GAAY;IAEZ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAEvE,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAExD,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QACvC,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC1C,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACvH,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,MAAe,EACf,IAAc,EACd,GAAY;IAEZ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAEvE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzD,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QACtC,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,MAAM,MAAM,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;IACpE,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACjF,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QACzF,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,MAAe,EAAE,IAAc,EAAE,GAAY;IACnE,qDAAqD;IACrD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACpD,IAAI,CAAC,KAAK;QAAE,GAAG,CAAC,mEAAmE,CAAC,CAAC;IAErF,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;IACvC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IAElF,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,MAAe,EAAE,IAAc,EAAE,GAAY;IACpE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,CAAC,IAAI;QAAE,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,MAAe,EAAE,IAAc,EAAE,GAAY;IACnE,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACrB,IAAI,CAAC,IAAI;QAAE,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,MAAe,EAAE,IAAc,EAAE,GAAY;IACpE,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,IAAI,CAAC,MAAM;QAAE,GAAG,CAAC,uCAAuC,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACjD,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,MAAe,EAAE,GAAY;IACvD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;IAE3C,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;QACzC,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,MAAM,eAAe,CAAC,CAAC;IAClD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAC1B,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,MAAe,EAAE,IAAc,EAAE,GAAY;IACtE,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,CAAC,GAAG;QAAE,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAE/C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAE5C,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;QACxC,OAAO;IACT,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,SAAS,OAAO,CAAC,GAAG,KAAK,OAAO,CAAC,QAAQ,IAAI,YAAY,OAAO,CAAC,CAAC;QAC9E,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,IAAI,CAAC,MAAM,gBAAgB,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,MAAe,EAAE,IAAc,EAAE,GAAY;IACpE,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,IAAI,CAAC,MAAM;QAAE,GAAG,CAAC,2CAA2C,CAAC,CAAC;IAE9D,IAAI,MAA2C,CAAC;IAChD,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,GAAG,CAAC,iBAAiB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,+EAA+E;AAC/E,OAAO;AACP,+EAA+E;AAE/E,KAAK,UAAU,IAAI;IACjB,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;IAEzB,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACjD,KAAK,EAAE,CAAC;QACR,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAEnC,gCAAgC;IAChC,IAAI,OAAO,KAAK,OAAO;QAAE,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjD,IAAI,OAAO,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC;IACnD,IAAI,OAAO,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC;IAEnD,oDAAoD;IACpD,IAAI,OAAO,KAAK,OAAO;QAAE,OAAO,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEtD,mDAAmD;IACnD,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;QACnF,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAClD,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAED,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM;YACT,OAAO,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QACpC,KAAK,WAAW;YACd,OAAO,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACnC,KAAK,UAAU;YACb,OAAO,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QACxC,KAAK,KAAK;YACR,OAAO,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QACtC,KAAK,OAAO,CAAC;QACb,KAAK,KAAK;YACR,OAAO,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAC5C,KAAK,WAAW,CAAC;QACjB,KAAK,KAAK;YACR,OAAO,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACnC,KAAK,UAAU,CAAC;QAChB,KAAK,MAAM;YACT,OAAO,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QACxC,KAAK,YAAY;YACf,OAAO,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QAC1C,KAAK,OAAO;YACV,OAAO,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QACrC,KAAK,QAAQ;YACX,OAAO,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QACtC,KAAK,OAAO;YACV,OAAO,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QACrC,KAAK,QAAQ;YACX,OAAO,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QACtC;YACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;YAC7C,KAAK,EAAE,CAAC;YACR,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
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 { type AuthConfig } from './auth.js';
|
|
8
|
+
import { type McpInitializeResult, type McpResource, type McpResourceContent } from './mcp.js';
|
|
9
|
+
import type { ToolResult, ToolInfo, QueryResult, QueryFormat, DatabaseInfo, ColumnInfo, SchemaIntrospection, StatsEntry } from './types.js';
|
|
10
|
+
export interface NuBereaConfig {
|
|
11
|
+
/** OAuth / MCP server configuration */
|
|
12
|
+
auth?: Partial<AuthConfig>;
|
|
13
|
+
/** Override: OAuth server base URL */
|
|
14
|
+
baseUrl?: string;
|
|
15
|
+
/** Override: MCP endpoint URL */
|
|
16
|
+
mcpUrl?: string;
|
|
17
|
+
/** Pre-set access token (skip login) */
|
|
18
|
+
accessToken?: string;
|
|
19
|
+
/** Pre-set Firebase token (skip browser sign-in) */
|
|
20
|
+
firebaseToken?: string;
|
|
21
|
+
/** Use MCP session mode (initialize + session tracking) vs stateless */
|
|
22
|
+
useSession?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export type NuBereaTokens = {
|
|
25
|
+
accessToken: string;
|
|
26
|
+
refreshToken: string;
|
|
27
|
+
expiresAt: number;
|
|
28
|
+
};
|
|
29
|
+
export declare class NuBerea {
|
|
30
|
+
private auth;
|
|
31
|
+
private baseUrl;
|
|
32
|
+
private mcpUrl;
|
|
33
|
+
private staticToken;
|
|
34
|
+
private firebaseToken;
|
|
35
|
+
private useSession;
|
|
36
|
+
private mcpClient;
|
|
37
|
+
constructor(config?: NuBereaConfig);
|
|
38
|
+
/**
|
|
39
|
+
* Authenticate with the NuBerea platform.
|
|
40
|
+
* Opens a browser for Firebase sign-in if no token is cached.
|
|
41
|
+
*/
|
|
42
|
+
login(): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Check if the client has valid credentials.
|
|
45
|
+
*/
|
|
46
|
+
isAuthenticated(): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Clear stored credentials.
|
|
49
|
+
*/
|
|
50
|
+
logout(): void;
|
|
51
|
+
private getToken;
|
|
52
|
+
/**
|
|
53
|
+
* Get (or create) the MCP client instance.
|
|
54
|
+
* Handles token refresh automatically.
|
|
55
|
+
*/
|
|
56
|
+
private getMcpClient;
|
|
57
|
+
/**
|
|
58
|
+
* Initialize an MCP session. Required in session mode before other calls.
|
|
59
|
+
* In stateless mode (default), this is a no-op.
|
|
60
|
+
*/
|
|
61
|
+
initialize(): Promise<McpInitializeResult | null>;
|
|
62
|
+
/**
|
|
63
|
+
* Send a raw MCP JSON-RPC request.
|
|
64
|
+
* Use this for any MCP method not covered by the typed methods.
|
|
65
|
+
*/
|
|
66
|
+
mcpRequest(method: string, params?: Record<string, unknown>): Promise<unknown>;
|
|
67
|
+
/**
|
|
68
|
+
* List available MCP resources.
|
|
69
|
+
*/
|
|
70
|
+
resources(): Promise<McpResource[]>;
|
|
71
|
+
/**
|
|
72
|
+
* Read an MCP resource by URI.
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```ts
|
|
76
|
+
* const contents = await client.resource('macula://hebrew');
|
|
77
|
+
* console.log(contents[0].text);
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
resource(uri: string): Promise<McpResourceContent[]>;
|
|
81
|
+
/**
|
|
82
|
+
* Close the MCP session (if session-based).
|
|
83
|
+
*/
|
|
84
|
+
close(): Promise<void>;
|
|
85
|
+
/**
|
|
86
|
+
* Get the current MCP session ID (null in stateless mode).
|
|
87
|
+
*/
|
|
88
|
+
getSessionId(): string | null;
|
|
89
|
+
/**
|
|
90
|
+
* List all available MCP tools.
|
|
91
|
+
* Uses MCP tools/list in session mode, or the public /tools endpoint in stateless mode.
|
|
92
|
+
*/
|
|
93
|
+
tools(): Promise<ToolInfo[]>;
|
|
94
|
+
/**
|
|
95
|
+
* Call an MCP tool by name.
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* ```ts
|
|
99
|
+
* const result = await client.tool('bible_kjv_get_verse', {
|
|
100
|
+
* book: 'John', chapter: 1, verse: 1,
|
|
101
|
+
* });
|
|
102
|
+
* console.log(result.content[0].text);
|
|
103
|
+
* ```
|
|
104
|
+
*/
|
|
105
|
+
tool(name: string, args?: Record<string, unknown>): Promise<ToolResult>;
|
|
106
|
+
/**
|
|
107
|
+
* Call an MCP tool and return just the text content (convenience).
|
|
108
|
+
*/
|
|
109
|
+
toolText(name: string, args?: Record<string, unknown>): Promise<string>;
|
|
110
|
+
/**
|
|
111
|
+
* Call an MCP tool and parse the text content as JSON (convenience).
|
|
112
|
+
*/
|
|
113
|
+
toolJson<T = unknown>(name: string, args?: Record<string, unknown>): Promise<T>;
|
|
114
|
+
/**
|
|
115
|
+
* Execute a SQL query against the unified data platform.
|
|
116
|
+
*
|
|
117
|
+
* @example
|
|
118
|
+
* ```ts
|
|
119
|
+
* const result = await client.query(
|
|
120
|
+
* "SELECT * FROM hebrew.morphemes WHERE book_id = 'Gen' AND chapter = 1 LIMIT 10"
|
|
121
|
+
* );
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
124
|
+
query(sql: string, options?: {
|
|
125
|
+
limit?: number;
|
|
126
|
+
offset?: number;
|
|
127
|
+
timeout?: number;
|
|
128
|
+
format?: QueryFormat;
|
|
129
|
+
}): Promise<QueryResult>;
|
|
130
|
+
/**
|
|
131
|
+
* List all available databases (schemas) and their tables.
|
|
132
|
+
*/
|
|
133
|
+
databases(): Promise<DatabaseInfo[]>;
|
|
134
|
+
/**
|
|
135
|
+
* Describe a table's columns.
|
|
136
|
+
*/
|
|
137
|
+
describe(database: string, table: string): Promise<ColumnInfo[]>;
|
|
138
|
+
/**
|
|
139
|
+
* Deep introspection of a schema — tables, columns, row counts, sample rows.
|
|
140
|
+
*/
|
|
141
|
+
introspect(schema: string, table?: string): Promise<SchemaIntrospection>;
|
|
142
|
+
/**
|
|
143
|
+
* Get row counts for all tables.
|
|
144
|
+
*/
|
|
145
|
+
stats(): Promise<StatsEntry[]>;
|
|
146
|
+
/** Get a KJV verse */
|
|
147
|
+
verse(book: string, chapter: number, verse: number): Promise<string>;
|
|
148
|
+
/** Search KJV text */
|
|
149
|
+
search(text: string, limit?: number): Promise<string>;
|
|
150
|
+
/** Look up a Greek word in LSJ */
|
|
151
|
+
greekLookup(term: string): Promise<string>;
|
|
152
|
+
/** Look up a Hebrew word in BDB by Strong's number */
|
|
153
|
+
hebrewStrong(strong: string): Promise<string>;
|
|
154
|
+
/** Get Hebrew morphology for a verse */
|
|
155
|
+
hebrewMorphology(book: string, chapter: number, verse: number): Promise<string>;
|
|
156
|
+
/** Get Greek morphology for a verse */
|
|
157
|
+
greekMorphology(book: string, chapter: number, verse: number): Promise<string>;
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACxB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,WAAW,EACX,WAAW,EACX,YAAY,EACZ,UAAU,EACV,mBAAmB,EACnB,UAAU,EACX,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,aAAa;IAC5B,uCAAuC;IACvC,IAAI,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3B,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wEAAwE;IACxE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAIF,qBAAa,OAAO;IAClB,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,SAAS,CAA0B;gBAE/B,MAAM,CAAC,EAAE,aAAa;IAkBlC;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;OAEG;IACH,eAAe,IAAI,OAAO;IAI1B;;OAEG;IACH,MAAM,IAAI,IAAI;YAKA,QAAQ;IAKtB;;;OAGG;YACW,YAAY;IAqB1B;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAMvD;;;OAGG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAOpF;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAKzC;;;;;;;;OAQG;IACG,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAK1D;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B;;OAEG;IACH,YAAY,IAAI,MAAM,GAAG,IAAI;IAQ7B;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAalC;;;;;;;;;;OAUG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAKjF;;OAEG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAMjF;;OAEG;IACG,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IASzF;;;;;;;;;OASG;IACG,KAAK,CACT,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GACpF,OAAO,CAAC,WAAW,CAAC;IAyCvB;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAO1C;;OAEG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAOtE;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAQ9E;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAkBpC,sBAAsB;IAChB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI1E,sBAAsB;IAChB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IAIvD,kCAAkC;IAC5B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIhD,sDAAsD;IAChD,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAInD,wCAAwC;IAClC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIrF,uCAAuC;IACjC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAIrF"}
|