@oxy-hq/sdk 0.1.5 → 0.2.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 +288 -157
- package/dist/index.cjs +592 -95
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +424 -40
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +424 -40
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +588 -96
- package/dist/index.mjs.map +1 -1
- package/dist/{postMessage-CufWf9ji.cjs → postMessage-B1J0jDRN.cjs} +15 -11
- package/dist/postMessage-B1J0jDRN.cjs.map +1 -0
- package/dist/{postMessage-CVS3MsL5.cjs → postMessage-BSNS3ccd.cjs} +1 -1
- package/dist/{postMessage-DLGITn0e.mjs → postMessage-BxdgtX8j.mjs} +15 -11
- package/dist/postMessage-BxdgtX8j.mjs.map +1 -0
- package/dist/{postMessage-DwfY0HM5.mjs → postMessage-D5wWgwcO.mjs} +1 -1
- package/package.json +12 -7
- package/dist/postMessage-CufWf9ji.cjs.map +0 -1
- package/dist/postMessage-DLGITn0e.mjs.map +0 -1
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
import * as duckdb from "@duckdb/duckdb-wasm";
|
|
3
|
+
import React, { ReactNode } from "react";
|
|
3
4
|
|
|
4
5
|
//#region src/config.d.ts
|
|
5
6
|
/**
|
|
@@ -108,7 +109,7 @@ interface FileReference {
|
|
|
108
109
|
*/
|
|
109
110
|
interface TableData {
|
|
110
111
|
columns: string[];
|
|
111
|
-
rows:
|
|
112
|
+
rows: unknown[][];
|
|
112
113
|
total_rows?: number;
|
|
113
114
|
}
|
|
114
115
|
type DataContainer = Record<string, FileReference>;
|
|
@@ -131,7 +132,7 @@ interface DisplayWithError {
|
|
|
131
132
|
*/
|
|
132
133
|
interface DisplayData {
|
|
133
134
|
type: string;
|
|
134
|
-
content:
|
|
135
|
+
content: unknown;
|
|
135
136
|
}
|
|
136
137
|
/**
|
|
137
138
|
* Response from get displays endpoint
|
|
@@ -139,14 +140,6 @@ interface DisplayData {
|
|
|
139
140
|
interface GetDisplaysResponse {
|
|
140
141
|
displays: DisplayWithError[];
|
|
141
142
|
}
|
|
142
|
-
/**
|
|
143
|
-
* Query result from ParquetReader
|
|
144
|
-
*/
|
|
145
|
-
interface QueryResult$1 {
|
|
146
|
-
columns: string[];
|
|
147
|
-
rows: any[][];
|
|
148
|
-
rowCount: number;
|
|
149
|
-
}
|
|
150
143
|
/**
|
|
151
144
|
* PostMessage authentication protocol types
|
|
152
145
|
*/
|
|
@@ -154,8 +147,8 @@ interface QueryResult$1 {
|
|
|
154
147
|
* Request message sent from iframe to parent window
|
|
155
148
|
*/
|
|
156
149
|
interface OxyAuthRequestMessage {
|
|
157
|
-
type:
|
|
158
|
-
version:
|
|
150
|
+
type: "OXY_AUTH_REQUEST";
|
|
151
|
+
version: "1.0";
|
|
159
152
|
timestamp: number;
|
|
160
153
|
requestId: string;
|
|
161
154
|
}
|
|
@@ -163,8 +156,8 @@ interface OxyAuthRequestMessage {
|
|
|
163
156
|
* Response message sent from parent window to iframe
|
|
164
157
|
*/
|
|
165
158
|
interface OxyAuthResponseMessage {
|
|
166
|
-
type:
|
|
167
|
-
version:
|
|
159
|
+
type: "OXY_AUTH_RESPONSE";
|
|
160
|
+
version: "1.0";
|
|
168
161
|
requestId: string;
|
|
169
162
|
apiKey?: string;
|
|
170
163
|
projectId?: string;
|
|
@@ -188,7 +181,7 @@ interface PostMessageAuthResult {
|
|
|
188
181
|
apiKey?: string;
|
|
189
182
|
projectId?: string;
|
|
190
183
|
baseUrl?: string;
|
|
191
|
-
source:
|
|
184
|
+
source: "postmessage";
|
|
192
185
|
}
|
|
193
186
|
/**
|
|
194
187
|
* Custom error classes for postMessage authentication
|
|
@@ -399,29 +392,63 @@ declare function initializeDuckDB(): Promise<duckdb.AsyncDuckDB>;
|
|
|
399
392
|
*/
|
|
400
393
|
interface QueryResult {
|
|
401
394
|
columns: string[];
|
|
402
|
-
rows:
|
|
395
|
+
rows: unknown[][];
|
|
403
396
|
rowCount: number;
|
|
404
397
|
}
|
|
405
398
|
/**
|
|
406
|
-
* ParquetReader provides methods to read and query Parquet files
|
|
399
|
+
* ParquetReader provides methods to read and query Parquet files.
|
|
400
|
+
* Supports registering multiple Parquet files with different table names.
|
|
407
401
|
*/
|
|
408
402
|
declare class ParquetReader {
|
|
409
|
-
private
|
|
410
|
-
|
|
411
|
-
constructor(tableName?: string);
|
|
403
|
+
private tableMap;
|
|
404
|
+
constructor();
|
|
412
405
|
/**
|
|
413
|
-
*
|
|
406
|
+
* Generate a unique internal table name to prevent conflicts
|
|
407
|
+
*/
|
|
408
|
+
private generateInternalTableName;
|
|
409
|
+
/**
|
|
410
|
+
* Register a Parquet file from a Blob with a specific table name
|
|
414
411
|
*
|
|
415
412
|
* @param blob - Parquet file as Blob
|
|
413
|
+
* @param tableName - Name to use for the table in queries (required)
|
|
416
414
|
*
|
|
417
415
|
* @example
|
|
418
416
|
* ```typescript
|
|
419
417
|
* const blob = await client.getFile('data/sales.parquet');
|
|
420
|
-
* const reader = new ParquetReader(
|
|
421
|
-
* await reader.registerParquet(blob);
|
|
418
|
+
* const reader = new ParquetReader();
|
|
419
|
+
* await reader.registerParquet(blob, 'sales');
|
|
420
|
+
* ```
|
|
421
|
+
*
|
|
422
|
+
* @example
|
|
423
|
+
* ```typescript
|
|
424
|
+
* // Register multiple files
|
|
425
|
+
* const reader = new ParquetReader();
|
|
426
|
+
* await reader.registerParquet(salesBlob, 'sales');
|
|
427
|
+
* await reader.registerParquet(customersBlob, 'customers');
|
|
428
|
+
* const result = await reader.query('SELECT * FROM sales JOIN customers ON sales.customer_id = customers.id');
|
|
422
429
|
* ```
|
|
423
430
|
*/
|
|
424
|
-
registerParquet(blob: Blob): Promise<void>;
|
|
431
|
+
registerParquet(blob: Blob, tableName: string): Promise<void>;
|
|
432
|
+
/**
|
|
433
|
+
* Register multiple Parquet files at once
|
|
434
|
+
*
|
|
435
|
+
* @param files - Array of objects containing blob and tableName
|
|
436
|
+
*
|
|
437
|
+
* @example
|
|
438
|
+
* ```typescript
|
|
439
|
+
* const reader = new ParquetReader();
|
|
440
|
+
* await reader.registerMultipleParquet([
|
|
441
|
+
* { blob: salesBlob, tableName: 'sales' },
|
|
442
|
+
* { blob: customersBlob, tableName: 'customers' },
|
|
443
|
+
* { blob: productsBlob, tableName: 'products' }
|
|
444
|
+
* ]);
|
|
445
|
+
* const result = await reader.query('SELECT * FROM sales JOIN customers ON sales.customer_id = customers.id');
|
|
446
|
+
* ```
|
|
447
|
+
*/
|
|
448
|
+
registerMultipleParquet(files: Array<{
|
|
449
|
+
blob: Blob;
|
|
450
|
+
tableName: string;
|
|
451
|
+
}>): Promise<void>;
|
|
425
452
|
/**
|
|
426
453
|
* Execute a SQL query against the registered Parquet data
|
|
427
454
|
*
|
|
@@ -434,48 +461,63 @@ declare class ParquetReader {
|
|
|
434
461
|
* console.log(result.columns);
|
|
435
462
|
* console.log(result.rows);
|
|
436
463
|
* ```
|
|
464
|
+
*
|
|
465
|
+
* @example
|
|
466
|
+
* ```typescript
|
|
467
|
+
* // Query multiple tables
|
|
468
|
+
* await reader.registerParquet(salesBlob, 'sales');
|
|
469
|
+
* await reader.registerParquet(customersBlob, 'customers');
|
|
470
|
+
* const result = await reader.query(`
|
|
471
|
+
* SELECT s.*, c.name
|
|
472
|
+
* FROM sales s
|
|
473
|
+
* JOIN customers c ON s.customer_id = c.id
|
|
474
|
+
* `);
|
|
475
|
+
* ```
|
|
437
476
|
*/
|
|
438
477
|
query(sql: string): Promise<QueryResult>;
|
|
439
478
|
/**
|
|
440
|
-
* Get all data from
|
|
479
|
+
* Get all data from a registered table
|
|
441
480
|
*
|
|
481
|
+
* @param tableName - Name of the table to query
|
|
442
482
|
* @param limit - Maximum number of rows to return (default: all)
|
|
443
483
|
* @returns Query result
|
|
444
484
|
*
|
|
445
485
|
* @example
|
|
446
486
|
* ```typescript
|
|
447
|
-
* const allData = await reader.getAll();
|
|
448
|
-
* const first100 = await reader.getAll(100);
|
|
487
|
+
* const allData = await reader.getAll('sales');
|
|
488
|
+
* const first100 = await reader.getAll('sales', 100);
|
|
449
489
|
* ```
|
|
450
490
|
*/
|
|
451
|
-
getAll(limit?: number): Promise<QueryResult>;
|
|
491
|
+
getAll(tableName: string, limit?: number): Promise<QueryResult>;
|
|
452
492
|
/**
|
|
453
493
|
* Get table schema information
|
|
454
494
|
*
|
|
495
|
+
* @param tableName - Name of the table to describe
|
|
455
496
|
* @returns Schema information
|
|
456
497
|
*
|
|
457
498
|
* @example
|
|
458
499
|
* ```typescript
|
|
459
|
-
* const schema = await reader.getSchema();
|
|
500
|
+
* const schema = await reader.getSchema('sales');
|
|
460
501
|
* console.log(schema.columns); // ['id', 'name', 'sales']
|
|
461
502
|
* console.log(schema.rows); // [['id', 'INTEGER'], ['name', 'VARCHAR'], ...]
|
|
462
503
|
* ```
|
|
463
504
|
*/
|
|
464
|
-
getSchema(): Promise<QueryResult>;
|
|
505
|
+
getSchema(tableName: string): Promise<QueryResult>;
|
|
465
506
|
/**
|
|
466
|
-
* Get row count
|
|
507
|
+
* Get row count for a table
|
|
467
508
|
*
|
|
509
|
+
* @param tableName - Name of the table to count
|
|
468
510
|
* @returns Number of rows in the table
|
|
469
511
|
*
|
|
470
512
|
* @example
|
|
471
513
|
* ```typescript
|
|
472
|
-
* const count = await reader.count();
|
|
514
|
+
* const count = await reader.count('sales');
|
|
473
515
|
* console.log(`Total rows: ${count}`);
|
|
474
516
|
* ```
|
|
475
517
|
*/
|
|
476
|
-
count(): Promise<number>;
|
|
518
|
+
count(tableName: string): Promise<number>;
|
|
477
519
|
/**
|
|
478
|
-
* Close and cleanup resources
|
|
520
|
+
* Close and cleanup all registered resources
|
|
479
521
|
*/
|
|
480
522
|
close(): Promise<void>;
|
|
481
523
|
}
|
|
@@ -483,32 +525,374 @@ declare class ParquetReader {
|
|
|
483
525
|
* Helper function to quickly read a Parquet blob and execute a query
|
|
484
526
|
*
|
|
485
527
|
* @param blob - Parquet file as Blob
|
|
486
|
-
* @param
|
|
528
|
+
* @param tableName - Name to use for the table in queries (default: 'data')
|
|
529
|
+
* @param sql - SQL query to execute (optional, defaults to SELECT * FROM tableName)
|
|
487
530
|
* @returns Query result
|
|
488
531
|
*
|
|
489
532
|
* @example
|
|
490
533
|
* ```typescript
|
|
491
534
|
* const blob = await client.getFile('data/sales.parquet');
|
|
492
|
-
* const result = await queryParquet(blob, 'SELECT product, SUM(amount) as total FROM
|
|
535
|
+
* const result = await queryParquet(blob, 'sales', 'SELECT product, SUM(amount) as total FROM sales GROUP BY product');
|
|
493
536
|
* console.log(result);
|
|
494
537
|
* ```
|
|
495
538
|
*/
|
|
496
|
-
declare function queryParquet(blob: Blob, sql?: string): Promise<QueryResult>;
|
|
539
|
+
declare function queryParquet(blob: Blob, tableName?: string, sql?: string): Promise<QueryResult>;
|
|
497
540
|
/**
|
|
498
541
|
* Helper function to read Parquet file and get all data
|
|
499
542
|
*
|
|
500
543
|
* @param blob - Parquet file as Blob
|
|
544
|
+
* @param tableName - Name to use for the table (default: 'data')
|
|
501
545
|
* @param limit - Maximum number of rows (optional)
|
|
502
546
|
* @returns Query result
|
|
503
547
|
*
|
|
504
548
|
* @example
|
|
505
549
|
* ```typescript
|
|
506
550
|
* const blob = await client.getFile('data/sales.parquet');
|
|
507
|
-
* const data = await readParquet(blob, 1000);
|
|
551
|
+
* const data = await readParquet(blob, 'sales', 1000);
|
|
508
552
|
* console.log(`Loaded ${data.rowCount} rows`);
|
|
509
553
|
* ```
|
|
510
554
|
*/
|
|
511
|
-
declare function readParquet(blob: Blob, limit?: number): Promise<QueryResult>;
|
|
555
|
+
declare function readParquet(blob: Blob, tableName?: string, limit?: number): Promise<QueryResult>;
|
|
556
|
+
//#endregion
|
|
557
|
+
//#region src/sdk.d.ts
|
|
558
|
+
/**
|
|
559
|
+
* OxySDK provides a unified interface for fetching data from Oxy and querying it with SQL.
|
|
560
|
+
* It combines OxyClient (for API calls) and ParquetReader (for SQL queries) into a single,
|
|
561
|
+
* easy-to-use interface.
|
|
562
|
+
*
|
|
563
|
+
* @example
|
|
564
|
+
* ```typescript
|
|
565
|
+
* // Create SDK instance
|
|
566
|
+
* const sdk = new OxySDK({ apiKey: 'your-key', projectId: 'your-project' });
|
|
567
|
+
*
|
|
568
|
+
* // Load a parquet file and query it
|
|
569
|
+
* await sdk.loadFile('data/sales.parquet', 'sales');
|
|
570
|
+
* const result = await sdk.query('SELECT * FROM sales WHERE amount > 1000');
|
|
571
|
+
* console.log(result.rows);
|
|
572
|
+
*
|
|
573
|
+
* // Clean up when done
|
|
574
|
+
* await sdk.close();
|
|
575
|
+
* ```
|
|
576
|
+
*/
|
|
577
|
+
declare class OxySDK {
|
|
578
|
+
private client;
|
|
579
|
+
private reader;
|
|
580
|
+
constructor(config: OxyConfig);
|
|
581
|
+
/**
|
|
582
|
+
* Creates an OxySDK instance asynchronously with support for postMessage authentication
|
|
583
|
+
*
|
|
584
|
+
* @param config - Optional configuration overrides
|
|
585
|
+
* @returns Promise resolving to OxySDK instance
|
|
586
|
+
*
|
|
587
|
+
* @example
|
|
588
|
+
* ```typescript
|
|
589
|
+
* // In an iframe - automatic postMessage auth
|
|
590
|
+
* const sdk = await OxySDK.create({
|
|
591
|
+
* parentOrigin: 'https://app.example.com',
|
|
592
|
+
* projectId: 'my-project-id'
|
|
593
|
+
* });
|
|
594
|
+
* ```
|
|
595
|
+
*/
|
|
596
|
+
static create(config?: Partial<OxyConfig>): Promise<OxySDK>;
|
|
597
|
+
/**
|
|
598
|
+
* Load a Parquet file from Oxy and register it for SQL queries
|
|
599
|
+
*
|
|
600
|
+
* @param filePath - Path to the parquet file in the app state directory
|
|
601
|
+
* @param tableName - Name to use for the table in SQL queries
|
|
602
|
+
*
|
|
603
|
+
* @example
|
|
604
|
+
* ```typescript
|
|
605
|
+
* await sdk.loadFile('data/sales.parquet', 'sales');
|
|
606
|
+
* await sdk.loadFile('data/customers.parquet', 'customers');
|
|
607
|
+
*
|
|
608
|
+
* const result = await sdk.query(`
|
|
609
|
+
* SELECT s.*, c.name
|
|
610
|
+
* FROM sales s
|
|
611
|
+
* JOIN customers c ON s.customer_id = c.id
|
|
612
|
+
* `);
|
|
613
|
+
* ```
|
|
614
|
+
*/
|
|
615
|
+
loadFile(filePath: string, tableName: string): Promise<void>;
|
|
616
|
+
/**
|
|
617
|
+
* Load multiple Parquet files at once
|
|
618
|
+
*
|
|
619
|
+
* @param files - Array of file paths and table names
|
|
620
|
+
*
|
|
621
|
+
* @example
|
|
622
|
+
* ```typescript
|
|
623
|
+
* await sdk.loadFiles([
|
|
624
|
+
* { filePath: 'data/sales.parquet', tableName: 'sales' },
|
|
625
|
+
* { filePath: 'data/customers.parquet', tableName: 'customers' },
|
|
626
|
+
* { filePath: 'data/products.parquet', tableName: 'products' }
|
|
627
|
+
* ]);
|
|
628
|
+
*
|
|
629
|
+
* const result = await sdk.query('SELECT * FROM sales');
|
|
630
|
+
* ```
|
|
631
|
+
*/
|
|
632
|
+
loadFiles(files: Array<{
|
|
633
|
+
filePath: string;
|
|
634
|
+
tableName: string;
|
|
635
|
+
}>): Promise<void>;
|
|
636
|
+
/**
|
|
637
|
+
* Load all data from an app's data container
|
|
638
|
+
*
|
|
639
|
+
* This fetches the app's data and registers all parquet files using their container keys as table names.
|
|
640
|
+
*
|
|
641
|
+
* @param appPath - Path to the app file
|
|
642
|
+
* @returns DataContainer with file references
|
|
643
|
+
*
|
|
644
|
+
* @example
|
|
645
|
+
* ```typescript
|
|
646
|
+
* // If app has data: { sales: { file_path: 'data/sales.parquet' } }
|
|
647
|
+
* const data = await sdk.loadAppData('dashboard.app.yml');
|
|
648
|
+
* // Now you can query the 'sales' table
|
|
649
|
+
* const result = await sdk.query('SELECT * FROM sales LIMIT 10');
|
|
650
|
+
* ```
|
|
651
|
+
*/
|
|
652
|
+
loadAppData(appPath: string): Promise<DataContainer | null>;
|
|
653
|
+
/**
|
|
654
|
+
* Execute a SQL query against loaded data
|
|
655
|
+
*
|
|
656
|
+
* @param sql - SQL query to execute
|
|
657
|
+
* @returns Query result with columns and rows
|
|
658
|
+
*
|
|
659
|
+
* @example
|
|
660
|
+
* ```typescript
|
|
661
|
+
* await sdk.loadFile('data/sales.parquet', 'sales');
|
|
662
|
+
*
|
|
663
|
+
* const result = await sdk.query('SELECT product, SUM(amount) as total FROM sales GROUP BY product');
|
|
664
|
+
* console.log(result.columns); // ['product', 'total']
|
|
665
|
+
* console.log(result.rows); // [['Product A', 1000], ['Product B', 2000]]
|
|
666
|
+
* console.log(result.rowCount); // 2
|
|
667
|
+
* ```
|
|
668
|
+
*/
|
|
669
|
+
query(sql: string): Promise<QueryResult>;
|
|
670
|
+
/**
|
|
671
|
+
* Get all data from a loaded table
|
|
672
|
+
*
|
|
673
|
+
* @param tableName - Name of the table
|
|
674
|
+
* @param limit - Maximum number of rows (optional)
|
|
675
|
+
* @returns Query result
|
|
676
|
+
*
|
|
677
|
+
* @example
|
|
678
|
+
* ```typescript
|
|
679
|
+
* await sdk.loadFile('data/sales.parquet', 'sales');
|
|
680
|
+
* const allData = await sdk.getAll('sales');
|
|
681
|
+
* const first100 = await sdk.getAll('sales', 100);
|
|
682
|
+
* ```
|
|
683
|
+
*/
|
|
684
|
+
getAll(tableName: string, limit?: number): Promise<QueryResult>;
|
|
685
|
+
/**
|
|
686
|
+
* Get schema information for a loaded table
|
|
687
|
+
*
|
|
688
|
+
* @param tableName - Name of the table
|
|
689
|
+
* @returns Schema information
|
|
690
|
+
*
|
|
691
|
+
* @example
|
|
692
|
+
* ```typescript
|
|
693
|
+
* await sdk.loadFile('data/sales.parquet', 'sales');
|
|
694
|
+
* const schema = await sdk.getSchema('sales');
|
|
695
|
+
* console.log(schema.columns); // ['column_name', 'column_type', ...]
|
|
696
|
+
* console.log(schema.rows); // [['id', 'INTEGER'], ['name', 'VARCHAR'], ...]
|
|
697
|
+
* ```
|
|
698
|
+
*/
|
|
699
|
+
getSchema(tableName: string): Promise<QueryResult>;
|
|
700
|
+
/**
|
|
701
|
+
* Get row count for a loaded table
|
|
702
|
+
*
|
|
703
|
+
* @param tableName - Name of the table
|
|
704
|
+
* @returns Number of rows
|
|
705
|
+
*
|
|
706
|
+
* @example
|
|
707
|
+
* ```typescript
|
|
708
|
+
* await sdk.loadFile('data/sales.parquet', 'sales');
|
|
709
|
+
* const count = await sdk.count('sales');
|
|
710
|
+
* console.log(`Total rows: ${count}`);
|
|
711
|
+
* ```
|
|
712
|
+
*/
|
|
713
|
+
count(tableName: string): Promise<number>;
|
|
714
|
+
/**
|
|
715
|
+
* Get direct access to the underlying OxyClient
|
|
716
|
+
*
|
|
717
|
+
* Useful for advanced operations like listing apps, getting displays, etc.
|
|
718
|
+
*
|
|
719
|
+
* @returns The OxyClient instance
|
|
720
|
+
*
|
|
721
|
+
* @example
|
|
722
|
+
* ```typescript
|
|
723
|
+
* const apps = await sdk.getClient().listApps();
|
|
724
|
+
* const displays = await sdk.getClient().getDisplays('my-app.app.yml');
|
|
725
|
+
* ```
|
|
726
|
+
*/
|
|
727
|
+
getClient(): OxyClient;
|
|
728
|
+
/**
|
|
729
|
+
* Get direct access to the underlying ParquetReader
|
|
730
|
+
*
|
|
731
|
+
* Useful for advanced operations like registering blobs directly.
|
|
732
|
+
*
|
|
733
|
+
* @returns The ParquetReader instance
|
|
734
|
+
*
|
|
735
|
+
* @example
|
|
736
|
+
* ```typescript
|
|
737
|
+
* const myBlob = new Blob([parquetData]);
|
|
738
|
+
* await sdk.getReader().registerParquet(myBlob, 'mydata');
|
|
739
|
+
* ```
|
|
740
|
+
*/
|
|
741
|
+
getReader(): ParquetReader;
|
|
742
|
+
/**
|
|
743
|
+
* Close and cleanup all resources
|
|
744
|
+
*
|
|
745
|
+
* This clears all loaded data and releases resources. Call this when you're done with the SDK.
|
|
746
|
+
*
|
|
747
|
+
* @example
|
|
748
|
+
* ```typescript
|
|
749
|
+
* const sdk = new OxySDK({ apiKey: 'key', projectId: 'project' });
|
|
750
|
+
* await sdk.loadFile('data/sales.parquet', 'sales');
|
|
751
|
+
* const result = await sdk.query('SELECT * FROM sales');
|
|
752
|
+
* await sdk.close(); // Clean up
|
|
753
|
+
* ```
|
|
754
|
+
*/
|
|
755
|
+
close(): Promise<void>;
|
|
756
|
+
}
|
|
757
|
+
//#endregion
|
|
758
|
+
//#region src/react.d.ts
|
|
759
|
+
/**
|
|
760
|
+
* Context value provided to child components
|
|
761
|
+
*/
|
|
762
|
+
interface OxyContextValue {
|
|
763
|
+
sdk: OxySDK | null;
|
|
764
|
+
isLoading: boolean;
|
|
765
|
+
error: Error | null;
|
|
766
|
+
}
|
|
767
|
+
/**
|
|
768
|
+
* Props for OxyProvider component
|
|
769
|
+
*/
|
|
770
|
+
interface OxyProviderProps {
|
|
771
|
+
children: ReactNode;
|
|
772
|
+
config?: Partial<OxyConfig>;
|
|
773
|
+
/**
|
|
774
|
+
* If true, uses async initialization (supports postMessage auth in iframes)
|
|
775
|
+
* If false, uses synchronous initialization with provided config
|
|
776
|
+
*/
|
|
777
|
+
useAsync?: boolean;
|
|
778
|
+
/**
|
|
779
|
+
* Called when SDK is successfully initialized
|
|
780
|
+
*/
|
|
781
|
+
onReady?: (sdk: OxySDK) => void;
|
|
782
|
+
/**
|
|
783
|
+
* Called when initialization fails
|
|
784
|
+
*/
|
|
785
|
+
onError?: (error: Error) => void;
|
|
786
|
+
}
|
|
787
|
+
/**
|
|
788
|
+
* Provider component that initializes and provides OxySDK to child components
|
|
789
|
+
*
|
|
790
|
+
* @example
|
|
791
|
+
* ```tsx
|
|
792
|
+
* // Synchronous initialization with config
|
|
793
|
+
* function App() {
|
|
794
|
+
* return (
|
|
795
|
+
* <OxyProvider config={{
|
|
796
|
+
* apiKey: 'your-key',
|
|
797
|
+
* projectId: 'your-project',
|
|
798
|
+
* baseUrl: 'https://api.oxy.tech'
|
|
799
|
+
* }}>
|
|
800
|
+
* <Dashboard />
|
|
801
|
+
* </OxyProvider>
|
|
802
|
+
* );
|
|
803
|
+
* }
|
|
804
|
+
* ```
|
|
805
|
+
*
|
|
806
|
+
* @example
|
|
807
|
+
* ```tsx
|
|
808
|
+
* // Async initialization (for iframe/postMessage auth)
|
|
809
|
+
* function App() {
|
|
810
|
+
* return (
|
|
811
|
+
* <OxyProvider
|
|
812
|
+
* useAsync
|
|
813
|
+
* config={{ parentOrigin: 'https://app.example.com' }}
|
|
814
|
+
* >
|
|
815
|
+
* <Dashboard />
|
|
816
|
+
* </OxyProvider>
|
|
817
|
+
* );
|
|
818
|
+
* }
|
|
819
|
+
* ```
|
|
820
|
+
*
|
|
821
|
+
* @example
|
|
822
|
+
* ```tsx
|
|
823
|
+
* // With environment variables
|
|
824
|
+
* import { createConfig } from '@oxy/sdk';
|
|
825
|
+
*
|
|
826
|
+
* function App() {
|
|
827
|
+
* return (
|
|
828
|
+
* <OxyProvider config={createConfig()}>
|
|
829
|
+
* <Dashboard />
|
|
830
|
+
* </OxyProvider>
|
|
831
|
+
* );
|
|
832
|
+
* }
|
|
833
|
+
* ```
|
|
834
|
+
*/
|
|
835
|
+
declare function OxyProvider({
|
|
836
|
+
children,
|
|
837
|
+
config,
|
|
838
|
+
useAsync,
|
|
839
|
+
onReady,
|
|
840
|
+
onError
|
|
841
|
+
}: OxyProviderProps): React.JSX.Element;
|
|
842
|
+
/**
|
|
843
|
+
* Hook to access OxySDK from child components
|
|
844
|
+
*
|
|
845
|
+
* @throws {Error} If used outside of OxyProvider
|
|
846
|
+
* @returns {OxyContextValue} The SDK instance, loading state, and error
|
|
847
|
+
*
|
|
848
|
+
* @example
|
|
849
|
+
* ```tsx
|
|
850
|
+
* function Dashboard() {
|
|
851
|
+
* const { sdk, isLoading, error } = useOxy();
|
|
852
|
+
*
|
|
853
|
+
* useEffect(() => {
|
|
854
|
+
* if (sdk) {
|
|
855
|
+
* sdk.loadAppData('dashboard.app.yml')
|
|
856
|
+
* .then(() => sdk.query('SELECT * FROM my_table'))
|
|
857
|
+
* .then(result => console.log(result));
|
|
858
|
+
* }
|
|
859
|
+
* }, [sdk]);
|
|
860
|
+
*
|
|
861
|
+
* if (isLoading) return <div>Loading SDK...</div>;
|
|
862
|
+
* if (error) return <div>Error: {error.message}</div>;
|
|
863
|
+
* if (!sdk) return null;
|
|
864
|
+
*
|
|
865
|
+
* return <div>Dashboard</div>;
|
|
866
|
+
* }
|
|
867
|
+
* ```
|
|
868
|
+
*/
|
|
869
|
+
declare function useOxy(): OxyContextValue;
|
|
870
|
+
/**
|
|
871
|
+
* Hook to access OxySDK that throws if not ready
|
|
872
|
+
*
|
|
873
|
+
* This is a convenience hook that returns the SDK directly or throws an error if not initialized.
|
|
874
|
+
* Use this when you know the SDK should be ready.
|
|
875
|
+
*
|
|
876
|
+
* @throws {Error} If used outside of OxyProvider or if SDK is not initialized
|
|
877
|
+
* @returns {OxySDK} The SDK instance
|
|
878
|
+
*
|
|
879
|
+
* @example
|
|
880
|
+
* ```tsx
|
|
881
|
+
* function DataTable() {
|
|
882
|
+
* const sdk = useOxySDK();
|
|
883
|
+
* const [data, setData] = useState(null);
|
|
884
|
+
*
|
|
885
|
+
* useEffect(() => {
|
|
886
|
+
* sdk.loadFile('data.parquet', 'data')
|
|
887
|
+
* .then(() => sdk.query('SELECT * FROM data LIMIT 100'))
|
|
888
|
+
* .then(setData);
|
|
889
|
+
* }, [sdk]);
|
|
890
|
+
*
|
|
891
|
+
* return <table>...</table>;
|
|
892
|
+
* }
|
|
893
|
+
* ```
|
|
894
|
+
*/
|
|
895
|
+
declare function useOxySDK(): OxySDK;
|
|
512
896
|
//#endregion
|
|
513
897
|
//#region src/auth/postMessage.d.ts
|
|
514
898
|
/**
|
|
@@ -541,5 +925,5 @@ declare function isInIframe(): boolean;
|
|
|
541
925
|
*/
|
|
542
926
|
declare function requestAuthFromParent(options?: PostMessageAuthOptions): Promise<PostMessageAuthResult>;
|
|
543
927
|
//#endregion
|
|
544
|
-
export { type AppDataResponse, type AppItem, type DataContainer, type DisplayData, type DisplayWithError, type FileReference, type OxyAuthRequestMessage, type OxyAuthResponseMessage, OxyClient, type OxyConfig, type
|
|
928
|
+
export { type AppDataResponse, type AppItem, type DataContainer, type DisplayData, type DisplayWithError, type FileReference, type OxyAuthRequestMessage, type OxyAuthResponseMessage, OxyClient, type OxyConfig, type OxyContextValue, OxyProvider, type OxyProviderProps, OxySDK, ParquetReader, PostMessageAuthInvalidOriginError, PostMessageAuthInvalidResponseError, PostMessageAuthNotInIframeError, type PostMessageAuthOptions, type PostMessageAuthResult, PostMessageAuthTimeoutError, type QueryResult, type TableData, createConfig, createConfigAsync, initializeDuckDB, isInIframe, queryParquet, readParquet, requestAuthFromParent, useOxy, useOxySDK };
|
|
545
929
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/config.ts","../src/types.ts","../src/client.ts","../src/parquet.ts","../src/auth/postMessage.ts"],"sourcesContent":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/config.ts","../src/types.ts","../src/client.ts","../src/parquet.ts","../src/sdk.ts","../src/react.tsx","../src/auth/postMessage.ts"],"sourcesContent":[],"mappings":"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"}
|