@aerostack/react 0.1.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.
@@ -0,0 +1,8 @@
1
+ {
2
+ "extends": "../tsconfig.json",
3
+ "compilerOptions": {
4
+ "rootDir": "../src",
5
+ "module": "nodenext",
6
+ "moduleResolution": "nodenext"
7
+ }
8
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "extends": "./build.json",
3
+ "include": [
4
+ "../src/**/*.ts",
5
+ "../src/**/*.cts",
6
+ "../src/**/*.tsx",
7
+ "../src/**/*.json"
8
+ ],
9
+ "exclude": [
10
+ "../src/**/*.mts",
11
+ "../src/package.json"
12
+ ],
13
+ "compilerOptions": {
14
+ "outDir": "../.tshy-build/commonjs"
15
+ }
16
+ }
package/.tshy/esm.json ADDED
@@ -0,0 +1,15 @@
1
+ {
2
+ "extends": "./build.json",
3
+ "include": [
4
+ "../src/**/*.ts",
5
+ "../src/**/*.mts",
6
+ "../src/**/*.tsx",
7
+ "../src/**/*.json"
8
+ ],
9
+ "exclude": [
10
+ "../src/package.json"
11
+ ],
12
+ "compilerOptions": {
13
+ "outDir": "../.tshy-build/esm"
14
+ }
15
+ }
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "@aerostack/react",
3
+ "version": "0.1.0",
4
+ "author": "Aerostack",
5
+ "type": "module",
6
+ "tshy": {
7
+ "exports": {
8
+ ".": "./src/index.ts",
9
+ "./package.json": "./package.json"
10
+ }
11
+ },
12
+ "sideEffects": false,
13
+ "scripts": {
14
+ "build": "tshy",
15
+ "lint": "eslint --cache --max-warnings=0 src",
16
+ "prepublishOnly": "npm run build"
17
+ },
18
+ "peerDependencies": {
19
+ "react": "^18.0.0 || ^19.0.0",
20
+ "react-dom": "^18.0.0 || ^19.0.0"
21
+ },
22
+ "devDependencies": {
23
+ "@eslint/js": "^9.26.0",
24
+ "@types/react": "^18.0.0 || ^19.0.0",
25
+ "@types/react-dom": "^18.0.0 || ^19.0.0",
26
+ "eslint": "^9.26.0",
27
+ "globals": "^15.14.0",
28
+ "react": "^18.3.1",
29
+ "react-dom": "^18.3.1",
30
+ "tshy": "^2.0.0",
31
+ "typescript": "~5.8.3",
32
+ "typescript-eslint": "^8.26.0"
33
+ },
34
+ "dependencies": {
35
+ "@aerostack/sdk-web": "*"
36
+ },
37
+ "exports": {
38
+ ".": {
39
+ "import": {
40
+ "types": "./dist/esm/index.d.ts",
41
+ "default": "./dist/esm/index.js"
42
+ },
43
+ "require": {
44
+ "types": "./dist/commonjs/index.d.ts",
45
+ "default": "./dist/commonjs/index.js"
46
+ }
47
+ },
48
+ "./package.json": "./package.json"
49
+ },
50
+ "main": "./dist/commonjs/index.js",
51
+ "types": "./dist/commonjs/index.d.ts",
52
+ "module": "./dist/esm/index.js"
53
+ }
@@ -0,0 +1,48 @@
1
+ import React, { createContext, useContext, useMemo } from 'react';
2
+ import { SDK } from '@aerostack/sdk-web';
3
+
4
+ export interface AerostackContextType {
5
+ sdk: SDK;
6
+ projectId: string;
7
+ }
8
+
9
+ const AerostackContext = createContext<AerostackContextType | null>(null);
10
+
11
+ export interface AerostackProviderProps {
12
+ projectId: string;
13
+ baseUrl?: string;
14
+ children: React.ReactNode;
15
+ }
16
+
17
+ export const AerostackProvider: React.FC<AerostackProviderProps> = ({
18
+ projectId,
19
+ baseUrl = 'https://api.aerostack.ai/v1',
20
+ children,
21
+ }) => {
22
+ const sdk = useMemo(() => {
23
+ return new SDK({
24
+ serverURL: baseUrl,
25
+ // In web context, we might not have global security at init
26
+ // but we set it up for public access via projectId header if needed
27
+ });
28
+ }, [baseUrl]);
29
+
30
+ const value = useMemo(() => ({
31
+ sdk,
32
+ projectId,
33
+ }), [sdk, projectId]);
34
+
35
+ return (
36
+ <AerostackContext.Provider value={value}>
37
+ {children}
38
+ </AerostackContext.Provider>
39
+ );
40
+ };
41
+
42
+ export const useAerostack = () => {
43
+ const context = useContext(AerostackContext);
44
+ if (!context) {
45
+ throw new Error('useAerostack must be used within an AerostackProvider');
46
+ }
47
+ return context;
48
+ };
@@ -0,0 +1,37 @@
1
+ import { useState, useCallback } from 'react';
2
+ import { useAerostack } from '../context.js';
3
+
4
+ export interface ChatMessage {
5
+ role: 'user' | 'assistant' | 'system';
6
+ content: string;
7
+ }
8
+
9
+ export const useAI = () => {
10
+ const { sdk } = useAerostack();
11
+ const [loading, setLoading] = useState(false);
12
+ const [error, setError] = useState<Error | null>(null);
13
+
14
+ const chat = useCallback(async (messages: ChatMessage[], options?: any) => {
15
+ try {
16
+ setLoading(true);
17
+ setError(null);
18
+ const result = await sdk.ai.aiChat({
19
+ messages,
20
+ ...options,
21
+ });
22
+ return result.response;
23
+ } catch (err) {
24
+ const error = err instanceof Error ? err : new Error('AI chat failed');
25
+ setError(error);
26
+ throw error;
27
+ } finally {
28
+ setLoading(false);
29
+ }
30
+ }, [sdk]);
31
+
32
+ return {
33
+ chat,
34
+ loading,
35
+ error,
36
+ };
37
+ };
@@ -0,0 +1,59 @@
1
+ import { useState, useEffect, useCallback } from 'react';
2
+ import { useAerostack } from '../context.js';
3
+
4
+ export interface User {
5
+ id: string;
6
+ email: string;
7
+ name?: string;
8
+ [key: string]: any;
9
+ }
10
+
11
+ export const useAuth = () => {
12
+ const { sdk } = useAerostack();
13
+ const [user, setUser] = useState<User | null>(null);
14
+ const [loading, setLoading] = useState(true);
15
+ const [error, setError] = useState<Error | null>(null);
16
+
17
+ const refreshUser = useCallback(async () => {
18
+ try {
19
+ setLoading(true);
20
+ // Logic to fetch current user session from sdk.authentication
21
+ // const session = await sdk.authentication.getSession();
22
+ // setUser(session.user);
23
+ } catch (err) {
24
+ setError(err instanceof Error ? err : new Error('Failed to fetch user'));
25
+ } finally {
26
+ setLoading(false);
27
+ }
28
+ }, [sdk]);
29
+
30
+ useEffect(() => {
31
+ refreshUser();
32
+ }, [refreshUser]);
33
+
34
+ const signIn = async (credentials: any) => {
35
+ const result = await sdk.authentication.authSignin(credentials);
36
+ // setUser(result.user);
37
+ return result;
38
+ };
39
+
40
+ const signUp = async (credentials: any) => {
41
+ const result = await sdk.authentication.authSignup(credentials);
42
+ return result;
43
+ };
44
+
45
+ const signOut = async () => {
46
+ // await sdk.authentication.signOut();
47
+ setUser(null);
48
+ };
49
+
50
+ return {
51
+ user,
52
+ loading,
53
+ error,
54
+ signIn,
55
+ signUp,
56
+ signOut,
57
+ refreshUser,
58
+ };
59
+ };
@@ -0,0 +1,44 @@
1
+ import { useState, useCallback } from 'react';
2
+ import { useAerostack } from '../context.js';
3
+
4
+ export const useCache = () => {
5
+ const { sdk } = useAerostack();
6
+ const [loading, setLoading] = useState(false);
7
+ const [error, setError] = useState<Error | null>(null);
8
+
9
+ const get = useCallback(async (key: string) => {
10
+ try {
11
+ setLoading(true);
12
+ setError(null);
13
+ const result = await sdk.cache.cacheGet({ key });
14
+ return result.value;
15
+ } catch (err) {
16
+ const error = err instanceof Error ? err : new Error('Cache get failed');
17
+ setError(error);
18
+ throw error;
19
+ } finally {
20
+ setLoading(false);
21
+ }
22
+ }, [sdk]);
23
+
24
+ const set = useCallback(async (key: string, value: any, ttl?: number) => {
25
+ try {
26
+ setLoading(true);
27
+ setError(null);
28
+ await sdk.cache.cacheSet({ key, value, ttl });
29
+ } catch (err) {
30
+ const error = err instanceof Error ? err : new Error('Cache set failed');
31
+ setError(error);
32
+ throw error;
33
+ } finally {
34
+ setLoading(false);
35
+ }
36
+ }, [sdk]);
37
+
38
+ return {
39
+ get,
40
+ set,
41
+ loading,
42
+ error,
43
+ };
44
+ };
@@ -0,0 +1,29 @@
1
+ import { useState, useCallback } from 'react';
2
+ import { useAerostack } from '../context.js';
3
+
4
+ export const useDb = () => {
5
+ const { sdk } = useAerostack();
6
+ const [loading, setLoading] = useState(false);
7
+ const [error, setError] = useState<Error | null>(null);
8
+
9
+ const query = useCallback(async (sql: string, params?: any[]) => {
10
+ try {
11
+ setLoading(true);
12
+ setError(null);
13
+ const result = await sdk.database.dbQuery({ sql, params });
14
+ return result; // result is already DBQueryResult
15
+ } catch (err) {
16
+ const error = err instanceof Error ? err : new Error('Database query failed');
17
+ setError(error);
18
+ throw error;
19
+ } finally {
20
+ setLoading(false);
21
+ }
22
+ }, [sdk]);
23
+
24
+ return {
25
+ query,
26
+ loading,
27
+ error,
28
+ };
29
+ };
package/src/index.ts ADDED
@@ -0,0 +1,8 @@
1
+ export * from './context.js';
2
+ export * from './hooks/useAuth.js';
3
+ export * from './hooks/useDb.js';
4
+ export * from './hooks/useAI.js';
5
+ export * from './hooks/useCache.js';
6
+
7
+ // Re-export core types for convenience
8
+ export type { SDK } from '@aerostack/sdk-web';
package/tsconfig.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "compilerOptions": {
3
+ "incremental": false,
4
+ "target": "ES2020",
5
+ "lib": [
6
+ "ES2022",
7
+ "DOM",
8
+ "DOM.Iterable"
9
+ ],
10
+ "jsx": "react-jsx",
11
+ "module": "Node16",
12
+ "moduleResolution": "Node16",
13
+ "allowJs": true,
14
+ "declaration": true,
15
+ "declarationMap": true,
16
+ "sourceMap": true,
17
+ "outDir": ".",
18
+ "strict": true,
19
+ "isolatedModules": true,
20
+ "esModuleInterop": true,
21
+ "skipLibCheck": true,
22
+ "forceConsistentCasingInFileNames": true
23
+ },
24
+ "include": [
25
+ "src"
26
+ ],
27
+ "exclude": [
28
+ "node_modules"
29
+ ]
30
+ }