@bytexbyte/nxtlinq-ai-agent-sdk 1.0.8 → 1.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.
- package/dist/api/nxtlinq-api.d.ts +3 -0
- package/dist/api/nxtlinq-api.d.ts.map +1 -0
- package/dist/api/nxtlinq-api.js +124 -0
- package/dist/components/ChatBot.d.ts +62 -0
- package/dist/components/ChatBot.d.ts.map +1 -0
- package/dist/components/ChatBot.js +843 -0
- package/dist/core/lib/useLocalStorage.d.ts +3 -0
- package/dist/core/lib/useLocalStorage.d.ts.map +1 -0
- package/dist/core/lib/useLocalStorage.js +18 -0
- package/dist/core/metakeepClient.d.ts +4 -0
- package/dist/core/metakeepClient.d.ts.map +1 -0
- package/dist/core/metakeepClient.js +11 -0
- package/dist/hooks/useNxtlinqAIT.d.ts +14 -0
- package/dist/hooks/useNxtlinqAIT.d.ts.map +1 -0
- package/dist/hooks/useNxtlinqAIT.js +98 -0
- package/dist/index.d.ts +114 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -138
- package/dist/types/ait-api.d.ts +127 -0
- package/dist/types/ait-api.d.ts.map +1 -0
- package/dist/types/ait-api.js +1 -0
- package/package.json +5 -5
- package/src/components/ChatBot.tsx +0 -1192
- package/src/core/metakeepClient.ts +0 -13
- package/src/hooks/useNxtlinqAIT.ts +0 -99
- package/src/index.ts +0 -557
- package/src/types/ait-api.ts +0 -103
- package/src/types/window.d.ts +0 -9
- package/tsconfig.json +0 -25
- package/tsup.config.ts +0 -15
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLocalStorage.d.ts","sourceRoot":"","sources":["../../../src/core/lib/useLocalStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAuB,MAAM,OAAO,CAAC;AAEtE,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAoBlH"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { useEffect, useState } from 'react';
|
|
2
|
+
export default function useLocalStorage(key, defaultValue) {
|
|
3
|
+
const [storedValue, setStoredValue] = useState(defaultValue);
|
|
4
|
+
const [isInitialized, setIsInitialized] = useState(false);
|
|
5
|
+
useEffect(() => {
|
|
6
|
+
const storageValue = localStorage.getItem(key);
|
|
7
|
+
if (storageValue) {
|
|
8
|
+
setStoredValue(JSON.parse(storageValue));
|
|
9
|
+
}
|
|
10
|
+
setIsInitialized(true);
|
|
11
|
+
}, [key]);
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
if (isInitialized) {
|
|
14
|
+
localStorage.setItem(key, JSON.stringify(storedValue));
|
|
15
|
+
}
|
|
16
|
+
}, [storedValue, isInitialized, key]);
|
|
17
|
+
return [storedValue, setStoredValue, isInitialized];
|
|
18
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metakeepClient.d.ts","sourceRoot":"","sources":["../../src/core/metakeepClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC,QAAA,MAAM,cAAc,UAQlB,CAAC;AAEH,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { MetaKeep } from 'metakeep';
|
|
2
|
+
const metakeepClient = new MetaKeep({
|
|
3
|
+
appId: 'e7d521f7-3eea-42d7-af42-4d8b962d9a6d',
|
|
4
|
+
chainId: 80002,
|
|
5
|
+
/* RPC node urls map */
|
|
6
|
+
rpcNodeUrls: {
|
|
7
|
+
// Update with your node API key
|
|
8
|
+
80002: 'https://rpc-amoy.polygon.technology'
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
export default metakeepClient;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { NxtlinqAITSDK } from '../index';
|
|
2
|
+
import { AITInfo, WalletInfo } from '../types/ait-api';
|
|
3
|
+
export declare function useNxtlinqAIT(sdk: NxtlinqAITSDK): {
|
|
4
|
+
walletAddress: string | null;
|
|
5
|
+
walletInfo: WalletInfo | null;
|
|
6
|
+
ait: AITInfo | null;
|
|
7
|
+
isLoading: boolean;
|
|
8
|
+
error: string | null;
|
|
9
|
+
connectWallet: () => Promise<void>;
|
|
10
|
+
verifyWallet: (token: string, method: string) => Promise<WalletInfo>;
|
|
11
|
+
signInWithWallet: () => Promise<string>;
|
|
12
|
+
generateAndRegisterAIT: (permissions: string[]) => Promise<AITInfo>;
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=useNxtlinqAIT.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useNxtlinqAIT.d.ts","sourceRoot":"","sources":["../../src/hooks/useNxtlinqAIT.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEvD,wBAAgB,aAAa,CAAC,GAAG,EAAE,aAAa;;;;;;;0BAoBX,MAAM,UAAU,MAAM;;0CA6BN,MAAM,EAAE;EA6C5D"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { useEffect, useState } from 'react';
|
|
2
|
+
export function useNxtlinqAIT(sdk) {
|
|
3
|
+
const [walletAddress, setWalletAddress] = useState(null);
|
|
4
|
+
const [walletInfo, setWalletInfo] = useState(null);
|
|
5
|
+
const [ait, setAit] = useState(null);
|
|
6
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
7
|
+
const [error, setError] = useState(null);
|
|
8
|
+
const connectWallet = async () => {
|
|
9
|
+
try {
|
|
10
|
+
setIsLoading(true);
|
|
11
|
+
setError(null);
|
|
12
|
+
const address = await sdk.connectWallet();
|
|
13
|
+
setWalletAddress(address);
|
|
14
|
+
}
|
|
15
|
+
catch (err) {
|
|
16
|
+
setError(err instanceof Error ? err.message : 'Failed to connect wallet');
|
|
17
|
+
}
|
|
18
|
+
finally {
|
|
19
|
+
setIsLoading(false);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
const verifyWallet = async (token, method) => {
|
|
23
|
+
try {
|
|
24
|
+
setIsLoading(true);
|
|
25
|
+
setError(null);
|
|
26
|
+
const info = await sdk.verifyWallet(token, method);
|
|
27
|
+
setWalletInfo(info);
|
|
28
|
+
return info;
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
setError(err instanceof Error ? err.message : 'Failed to verify wallet');
|
|
32
|
+
throw err;
|
|
33
|
+
}
|
|
34
|
+
finally {
|
|
35
|
+
setIsLoading(false);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
const signInWithWallet = async () => {
|
|
39
|
+
try {
|
|
40
|
+
setIsLoading(true);
|
|
41
|
+
setError(null);
|
|
42
|
+
const token = await sdk.signInWithWallet();
|
|
43
|
+
return token;
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
setError(err instanceof Error ? err.message : 'Failed to sign in with wallet');
|
|
47
|
+
throw err;
|
|
48
|
+
}
|
|
49
|
+
finally {
|
|
50
|
+
setIsLoading(false);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
const generateAndRegisterAIT = async (permissions) => {
|
|
54
|
+
try {
|
|
55
|
+
setIsLoading(true);
|
|
56
|
+
setError(null);
|
|
57
|
+
const aitInfo = await sdk.generateAndRegisterAIT(permissions);
|
|
58
|
+
setAit(aitInfo);
|
|
59
|
+
return aitInfo;
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
setError(err instanceof Error ? err.message : 'Failed to generate AIT');
|
|
63
|
+
throw err;
|
|
64
|
+
}
|
|
65
|
+
finally {
|
|
66
|
+
setIsLoading(false);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
useEffect(() => {
|
|
70
|
+
const loadData = async () => {
|
|
71
|
+
if (walletAddress) {
|
|
72
|
+
try {
|
|
73
|
+
const [walletInfo, aitInfo] = await Promise.all([
|
|
74
|
+
sdk.getWalletInfo(),
|
|
75
|
+
sdk.getAIT()
|
|
76
|
+
]);
|
|
77
|
+
setWalletInfo(walletInfo);
|
|
78
|
+
setAit(aitInfo);
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
console.error('Failed to load wallet info or AIT:', err);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
loadData();
|
|
86
|
+
}, [walletAddress, sdk]);
|
|
87
|
+
return {
|
|
88
|
+
walletAddress,
|
|
89
|
+
walletInfo,
|
|
90
|
+
ait,
|
|
91
|
+
isLoading,
|
|
92
|
+
error,
|
|
93
|
+
connectWallet,
|
|
94
|
+
verifyWallet,
|
|
95
|
+
signInWithWallet,
|
|
96
|
+
generateAndRegisterAIT
|
|
97
|
+
};
|
|
98
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { ethers } from 'ethers';
|
|
2
|
+
import { AITInfo, AITMetadata, PermissionGroup, PermissionOption, WalletInfo, CreateAITParams, CreateMetadataParams, VerifyWalletParams, SignInParams } from './types/ait-api';
|
|
3
|
+
export { ChatBot } from './components/ChatBot';
|
|
4
|
+
export type { Message, PresetMessage, ToolUse, ChatBotProps } from './components/ChatBot';
|
|
5
|
+
export type { AITInfo, AITMetadata, PermissionGroup, PermissionOption, WalletInfo, CreateAITParams, CreateMetadataParams, VerifyWalletParams, SignInParams };
|
|
6
|
+
export interface AITPermission {
|
|
7
|
+
hasPermission: boolean;
|
|
8
|
+
reason?: string;
|
|
9
|
+
permissions?: string[];
|
|
10
|
+
}
|
|
11
|
+
export interface AIT {
|
|
12
|
+
aitId: string;
|
|
13
|
+
controller: string;
|
|
14
|
+
metadata: AITMetadata;
|
|
15
|
+
metadataHash: string;
|
|
16
|
+
metadataCid: string;
|
|
17
|
+
signature: string;
|
|
18
|
+
}
|
|
19
|
+
export interface GenerateAITOptions {
|
|
20
|
+
hitAddress: string;
|
|
21
|
+
signer: ethers.Signer;
|
|
22
|
+
permissions: string[];
|
|
23
|
+
serviceId: string;
|
|
24
|
+
}
|
|
25
|
+
export interface MessageResponse {
|
|
26
|
+
reply: string;
|
|
27
|
+
timestamp: string;
|
|
28
|
+
}
|
|
29
|
+
export declare class NxtlinqAITSDK {
|
|
30
|
+
private serviceId;
|
|
31
|
+
private signer;
|
|
32
|
+
private walletAddress;
|
|
33
|
+
private api;
|
|
34
|
+
constructor(serviceId: string, apiKey: string, apiSecret: string);
|
|
35
|
+
connectWallet(): Promise<string>;
|
|
36
|
+
verifyWallet(token: string, method: string): Promise<WalletInfo>;
|
|
37
|
+
signInWithWallet(): Promise<string>;
|
|
38
|
+
generateAndRegisterAIT(permissions: string[]): Promise<AITInfo>;
|
|
39
|
+
getAIT(): Promise<AITInfo | null>;
|
|
40
|
+
getWalletInfo(): Promise<WalletInfo | null>;
|
|
41
|
+
createPermissionForm(permissionGroups: PermissionGroup[]): PermissionGroup[];
|
|
42
|
+
getSelectedPermissions(form: PermissionGroup[]): string[];
|
|
43
|
+
}
|
|
44
|
+
export declare class NxtlinqAIAgent {
|
|
45
|
+
private projectId;
|
|
46
|
+
private apiKey?;
|
|
47
|
+
private ait?;
|
|
48
|
+
private permissions;
|
|
49
|
+
private signer?;
|
|
50
|
+
private api;
|
|
51
|
+
constructor(projectId: string, apiKey: string, apiSecret: string);
|
|
52
|
+
setAIT(ait: AIT, signer?: ethers.Signer): void;
|
|
53
|
+
private hasPermission;
|
|
54
|
+
private checkAITPermission;
|
|
55
|
+
generateAIT(options: GenerateAITOptions): Promise<AIT>;
|
|
56
|
+
getAITInfo(serviceId: string, controller: string, signer?: ethers.Signer): Promise<AIT | null>;
|
|
57
|
+
sendMessage(message: string, toolName?: string): Promise<MessageResponse>;
|
|
58
|
+
}
|
|
59
|
+
export interface AITApi {
|
|
60
|
+
ait: {
|
|
61
|
+
getAITByServiceIdAndController: (params: {
|
|
62
|
+
serviceId: string;
|
|
63
|
+
controller: string;
|
|
64
|
+
}, token: string) => Promise<AITInfo | {
|
|
65
|
+
error: string;
|
|
66
|
+
}>;
|
|
67
|
+
createAIT: (params: CreateAITParams, token: string) => Promise<AITInfo | {
|
|
68
|
+
error: string;
|
|
69
|
+
}>;
|
|
70
|
+
};
|
|
71
|
+
wallet: {
|
|
72
|
+
verifyWallet: (params: VerifyWalletParams, token: string) => Promise<WalletInfo | {
|
|
73
|
+
error: string;
|
|
74
|
+
}>;
|
|
75
|
+
getWallet: (params: {
|
|
76
|
+
address: string;
|
|
77
|
+
}, token: string) => Promise<WalletInfo | {
|
|
78
|
+
error: string;
|
|
79
|
+
}>;
|
|
80
|
+
};
|
|
81
|
+
metadata: {
|
|
82
|
+
createMetadata: (metadata: CreateMetadataParams, token: string) => Promise<{
|
|
83
|
+
metadataCid: string;
|
|
84
|
+
} | {
|
|
85
|
+
error: string;
|
|
86
|
+
}>;
|
|
87
|
+
};
|
|
88
|
+
auth: {
|
|
89
|
+
getNonce: (params: {
|
|
90
|
+
address: string;
|
|
91
|
+
}) => Promise<{
|
|
92
|
+
code: string;
|
|
93
|
+
timestamp: number;
|
|
94
|
+
} | {
|
|
95
|
+
error: string;
|
|
96
|
+
}>;
|
|
97
|
+
signIn: (params: SignInParams) => Promise<{
|
|
98
|
+
accessToken: string;
|
|
99
|
+
} | {
|
|
100
|
+
error: string;
|
|
101
|
+
}>;
|
|
102
|
+
};
|
|
103
|
+
agent: {
|
|
104
|
+
sendMessage: (params: {
|
|
105
|
+
message: string;
|
|
106
|
+
projectId: string;
|
|
107
|
+
}) => Promise<{
|
|
108
|
+
reply: string;
|
|
109
|
+
} | {
|
|
110
|
+
error: string;
|
|
111
|
+
}>;
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,131 +1,6 @@
|
|
|
1
1
|
import { ethers } from 'ethers';
|
|
2
2
|
import stringify from 'json-stable-stringify';
|
|
3
|
-
|
|
4
|
-
const AIT_SERVICE_API_HOST = 'https://staging-ait-service.nxtlinq.ai';
|
|
5
|
-
export const createNxtlinqApi = (apiKey, apiSecret) => {
|
|
6
|
-
const getAuthHeader = () => {
|
|
7
|
-
const token = localStorage.getItem('nxtlinqAITServiceAccessToken');
|
|
8
|
-
return token ? { 'Authorization': `Bearer ${JSON.parse(token)}` } : {};
|
|
9
|
-
};
|
|
10
|
-
return {
|
|
11
|
-
ait: {
|
|
12
|
-
getAITByServiceIdAndController: async (params, token) => {
|
|
13
|
-
const response = await fetch(`${AIT_SERVICE_API_HOST}/api/ait/service/${params.serviceId}/controller/${params.controller}`, {
|
|
14
|
-
method: 'GET',
|
|
15
|
-
headers: {
|
|
16
|
-
'X-API-Key': apiKey,
|
|
17
|
-
'X-API-Secret': apiSecret,
|
|
18
|
-
...getAuthHeader()
|
|
19
|
-
}
|
|
20
|
-
});
|
|
21
|
-
return response.json();
|
|
22
|
-
},
|
|
23
|
-
createAIT: async (params, token) => {
|
|
24
|
-
const response = await fetch(`${AIT_SERVICE_API_HOST}/api/ait`, {
|
|
25
|
-
method: 'POST',
|
|
26
|
-
headers: {
|
|
27
|
-
'X-API-Key': apiKey,
|
|
28
|
-
'X-API-Secret': apiSecret,
|
|
29
|
-
'Content-Type': 'application/json',
|
|
30
|
-
...getAuthHeader()
|
|
31
|
-
},
|
|
32
|
-
body: JSON.stringify(params)
|
|
33
|
-
});
|
|
34
|
-
return response.json();
|
|
35
|
-
}
|
|
36
|
-
},
|
|
37
|
-
wallet: {
|
|
38
|
-
verifyWallet: async (params, token) => {
|
|
39
|
-
const response = await fetch(`${AIT_SERVICE_API_HOST}/api/wallet`, {
|
|
40
|
-
method: 'POST',
|
|
41
|
-
headers: {
|
|
42
|
-
'X-API-Key': apiKey,
|
|
43
|
-
'X-API-Secret': apiSecret,
|
|
44
|
-
'Content-Type': 'application/json',
|
|
45
|
-
...getAuthHeader()
|
|
46
|
-
},
|
|
47
|
-
body: JSON.stringify(params)
|
|
48
|
-
});
|
|
49
|
-
return response.json();
|
|
50
|
-
},
|
|
51
|
-
getWallet: async (params, token) => {
|
|
52
|
-
const response = await fetch(`${AIT_SERVICE_API_HOST}/api/wallet/address/${params.address}`, {
|
|
53
|
-
method: 'GET',
|
|
54
|
-
headers: {
|
|
55
|
-
'X-API-Key': apiKey,
|
|
56
|
-
'X-API-Secret': apiSecret,
|
|
57
|
-
...getAuthHeader()
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
return response.json();
|
|
61
|
-
}
|
|
62
|
-
},
|
|
63
|
-
metadata: {
|
|
64
|
-
createMetadata: async (metadata, token) => {
|
|
65
|
-
const response = await fetch(`${AIT_SERVICE_API_HOST}/api/metadata`, {
|
|
66
|
-
method: 'POST',
|
|
67
|
-
headers: {
|
|
68
|
-
'X-API-Key': apiKey,
|
|
69
|
-
'X-API-Secret': apiSecret,
|
|
70
|
-
'Content-Type': 'application/json',
|
|
71
|
-
...getAuthHeader()
|
|
72
|
-
},
|
|
73
|
-
body: JSON.stringify(metadata)
|
|
74
|
-
});
|
|
75
|
-
return response.json();
|
|
76
|
-
}
|
|
77
|
-
},
|
|
78
|
-
auth: {
|
|
79
|
-
getNonce: async (params) => {
|
|
80
|
-
const response = await fetch(`${AIT_SERVICE_API_HOST}/api/auth/address/${params.address}/nonce`, {
|
|
81
|
-
method: 'GET',
|
|
82
|
-
headers: {
|
|
83
|
-
'X-API-Key': apiKey,
|
|
84
|
-
'X-API-Secret': apiSecret,
|
|
85
|
-
...getAuthHeader()
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
return response.json();
|
|
89
|
-
},
|
|
90
|
-
signIn: async (params) => {
|
|
91
|
-
const response = await fetch(`${AIT_SERVICE_API_HOST}/api/auth`, {
|
|
92
|
-
method: 'POST',
|
|
93
|
-
headers: {
|
|
94
|
-
'X-API-Key': apiKey,
|
|
95
|
-
'X-API-Secret': apiSecret,
|
|
96
|
-
'Content-Type': 'application/json',
|
|
97
|
-
...getAuthHeader()
|
|
98
|
-
},
|
|
99
|
-
body: JSON.stringify(params)
|
|
100
|
-
});
|
|
101
|
-
return response.json();
|
|
102
|
-
}
|
|
103
|
-
},
|
|
104
|
-
agent: {
|
|
105
|
-
sendMessage: async (params) => {
|
|
106
|
-
try {
|
|
107
|
-
const response = await fetch(`${AI_AGENT_API_HOST}/api/agent/message`, {
|
|
108
|
-
method: 'POST',
|
|
109
|
-
headers: {
|
|
110
|
-
'X-API-Key': apiKey,
|
|
111
|
-
'X-API-Secret': apiSecret,
|
|
112
|
-
'Content-Type': 'application/json',
|
|
113
|
-
...getAuthHeader()
|
|
114
|
-
},
|
|
115
|
-
body: JSON.stringify(params)
|
|
116
|
-
});
|
|
117
|
-
if (!response.ok) {
|
|
118
|
-
throw new Error('发送消息失败');
|
|
119
|
-
}
|
|
120
|
-
return await response.json();
|
|
121
|
-
}
|
|
122
|
-
catch (error) {
|
|
123
|
-
return { error: error instanceof Error ? error.message : '发送消息失败' };
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
};
|
|
128
|
-
};
|
|
3
|
+
import { createNxtlinqApi } from './api/nxtlinq-api';
|
|
129
4
|
export { ChatBot } from './components/ChatBot';
|
|
130
5
|
export class NxtlinqAITSDK {
|
|
131
6
|
constructor(serviceId, apiKey, apiSecret) {
|
|
@@ -188,7 +63,7 @@ export class NxtlinqAITSDK {
|
|
|
188
63
|
}
|
|
189
64
|
const token = localStorage.getItem('nxtlinqAITServiceAccessToken');
|
|
190
65
|
if (!token) {
|
|
191
|
-
throw new Error('
|
|
66
|
+
throw new Error('Access token not found');
|
|
192
67
|
}
|
|
193
68
|
const timestamp = Math.floor(Date.now() / 1000);
|
|
194
69
|
const aitId = `did:polygon:ike-dashboard:${this.walletAddress}:${timestamp}`;
|
|
@@ -232,7 +107,7 @@ export class NxtlinqAITSDK {
|
|
|
232
107
|
}
|
|
233
108
|
const token = localStorage.getItem('nxtlinqAITServiceAccessToken');
|
|
234
109
|
if (!token) {
|
|
235
|
-
throw new Error('
|
|
110
|
+
throw new Error('Access token not found');
|
|
236
111
|
}
|
|
237
112
|
const response = await this.api.ait.getAITByServiceIdAndController({
|
|
238
113
|
serviceId: this.serviceId,
|
|
@@ -249,7 +124,7 @@ export class NxtlinqAITSDK {
|
|
|
249
124
|
}
|
|
250
125
|
const token = localStorage.getItem('nxtlinqAITServiceAccessToken');
|
|
251
126
|
if (!token) {
|
|
252
|
-
throw new Error('
|
|
127
|
+
throw new Error('Access token not found');
|
|
253
128
|
}
|
|
254
129
|
const response = await this.api.wallet.getWallet({ address: this.walletAddress }, token);
|
|
255
130
|
if ('error' in response) {
|
|
@@ -286,7 +161,7 @@ export class NxtlinqAIAgent {
|
|
|
286
161
|
}
|
|
287
162
|
async hasPermission(toolName) {
|
|
288
163
|
if (!this.ait) {
|
|
289
|
-
throw new Error('
|
|
164
|
+
throw new Error('Please connect wallet first to access permissions');
|
|
290
165
|
}
|
|
291
166
|
return this.permissions.includes(toolName);
|
|
292
167
|
}
|
|
@@ -295,7 +170,7 @@ export class NxtlinqAIAgent {
|
|
|
295
170
|
if (!this.ait) {
|
|
296
171
|
return {
|
|
297
172
|
hasPermission: false,
|
|
298
|
-
reason: '
|
|
173
|
+
reason: 'Please connect wallet first to access permissions'
|
|
299
174
|
};
|
|
300
175
|
}
|
|
301
176
|
if (!toolName) {
|
|
@@ -307,14 +182,14 @@ export class NxtlinqAIAgent {
|
|
|
307
182
|
const hasPermission = await this.hasPermission(toolName);
|
|
308
183
|
return {
|
|
309
184
|
hasPermission,
|
|
310
|
-
reason: hasPermission ? undefined : '
|
|
185
|
+
reason: hasPermission ? undefined : 'No permission to use this tool',
|
|
311
186
|
permissions: this.permissions
|
|
312
187
|
};
|
|
313
188
|
}
|
|
314
189
|
catch (error) {
|
|
315
190
|
return {
|
|
316
191
|
hasPermission: false,
|
|
317
|
-
reason: error instanceof Error ? error.message : '
|
|
192
|
+
reason: error instanceof Error ? error.message : 'Unknown error',
|
|
318
193
|
permissions: this.permissions
|
|
319
194
|
};
|
|
320
195
|
}
|
|
@@ -323,7 +198,7 @@ export class NxtlinqAIAgent {
|
|
|
323
198
|
const { hitAddress, signer, permissions, serviceId } = options;
|
|
324
199
|
const token = localStorage.getItem('nxtlinqAITServiceAccessToken');
|
|
325
200
|
if (!token) {
|
|
326
|
-
throw new Error('
|
|
201
|
+
throw new Error('Access token not found');
|
|
327
202
|
}
|
|
328
203
|
const timestamp = Math.floor(Date.now() / 1000);
|
|
329
204
|
const aitId = `did:polygon:ike-dashboard:${hitAddress}:${timestamp}`;
|
|
@@ -371,7 +246,7 @@ export class NxtlinqAIAgent {
|
|
|
371
246
|
async getAITInfo(serviceId, controller, signer) {
|
|
372
247
|
const token = localStorage.getItem('nxtlinqAITServiceAccessToken');
|
|
373
248
|
if (!token) {
|
|
374
|
-
throw new Error('
|
|
249
|
+
throw new Error('Access token not found');
|
|
375
250
|
}
|
|
376
251
|
const response = await this.api.ait.getAITByServiceIdAndController({
|
|
377
252
|
serviceId,
|
|
@@ -395,10 +270,10 @@ export class NxtlinqAIAgent {
|
|
|
395
270
|
async sendMessage(message, toolName) {
|
|
396
271
|
const permission = await this.checkAITPermission(toolName);
|
|
397
272
|
if (!permission.hasPermission) {
|
|
398
|
-
throw new Error(permission.reason || '
|
|
273
|
+
throw new Error(permission.reason || 'No permission to use this tool');
|
|
399
274
|
}
|
|
400
275
|
if (!this.ait || !this.signer) {
|
|
401
|
-
throw new Error('
|
|
276
|
+
throw new Error('Please connect wallet first to access permissions');
|
|
402
277
|
}
|
|
403
278
|
const timestamp = Math.floor(Date.now() / 1000);
|
|
404
279
|
const stringToSign = stringify({
|
|
@@ -413,7 +288,7 @@ export class NxtlinqAIAgent {
|
|
|
413
288
|
const signature = await this.signer.signMessage(stringToSign);
|
|
414
289
|
const response = await this.api.agent.sendMessage({
|
|
415
290
|
message,
|
|
416
|
-
|
|
291
|
+
projectId: this.projectId,
|
|
417
292
|
});
|
|
418
293
|
if ('error' in response) {
|
|
419
294
|
throw new Error(response.error);
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
export interface AIT {
|
|
2
|
+
aitId: string;
|
|
3
|
+
controller: string;
|
|
4
|
+
metadata: AITMetadata;
|
|
5
|
+
metadataHash: string;
|
|
6
|
+
metadataCid: string;
|
|
7
|
+
signature: string;
|
|
8
|
+
}
|
|
9
|
+
export interface AITMetadata {
|
|
10
|
+
model: string;
|
|
11
|
+
permissions: string[];
|
|
12
|
+
issuedBy: string;
|
|
13
|
+
serviceId?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface AITInfo {
|
|
16
|
+
aitId: string;
|
|
17
|
+
controller: string;
|
|
18
|
+
metadata: AITMetadata;
|
|
19
|
+
metadataHash: string;
|
|
20
|
+
metadataCid: string;
|
|
21
|
+
signature: string;
|
|
22
|
+
}
|
|
23
|
+
export interface WalletInfo {
|
|
24
|
+
id: string;
|
|
25
|
+
address: string;
|
|
26
|
+
verified: boolean;
|
|
27
|
+
method?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface PermissionGroup {
|
|
30
|
+
label: string;
|
|
31
|
+
options: PermissionOption[];
|
|
32
|
+
}
|
|
33
|
+
export interface PermissionOption {
|
|
34
|
+
label: string;
|
|
35
|
+
value: string;
|
|
36
|
+
isChecked: boolean;
|
|
37
|
+
}
|
|
38
|
+
export interface CreateAITParams {
|
|
39
|
+
aitId: string;
|
|
40
|
+
controller: string;
|
|
41
|
+
serviceId: string;
|
|
42
|
+
metadataHash: string;
|
|
43
|
+
metadataCid: string;
|
|
44
|
+
timestamp: number;
|
|
45
|
+
signature: string;
|
|
46
|
+
}
|
|
47
|
+
export interface CreateMetadataParams extends AITMetadata {
|
|
48
|
+
controller: string;
|
|
49
|
+
}
|
|
50
|
+
export interface VerifyWalletParams {
|
|
51
|
+
address: string;
|
|
52
|
+
token: string;
|
|
53
|
+
method: string;
|
|
54
|
+
timestamp: number;
|
|
55
|
+
}
|
|
56
|
+
export interface SignInParams {
|
|
57
|
+
address: string;
|
|
58
|
+
code: string;
|
|
59
|
+
timestamp: number;
|
|
60
|
+
signature: string;
|
|
61
|
+
}
|
|
62
|
+
export interface MessageContext {
|
|
63
|
+
aitId?: string;
|
|
64
|
+
walletAddress?: string | null;
|
|
65
|
+
}
|
|
66
|
+
export interface SendMessageParams {
|
|
67
|
+
message: string;
|
|
68
|
+
projectId?: string;
|
|
69
|
+
serviceId: string;
|
|
70
|
+
context: MessageContext;
|
|
71
|
+
}
|
|
72
|
+
export interface AITApi {
|
|
73
|
+
ait: {
|
|
74
|
+
getAITByServiceIdAndController: (params: {
|
|
75
|
+
serviceId: string;
|
|
76
|
+
controller: string;
|
|
77
|
+
}, token: string) => Promise<AITInfo | {
|
|
78
|
+
error: string;
|
|
79
|
+
}>;
|
|
80
|
+
createAIT: (params: CreateAITParams, token: string) => Promise<AITInfo | {
|
|
81
|
+
error: string;
|
|
82
|
+
}>;
|
|
83
|
+
};
|
|
84
|
+
wallet: {
|
|
85
|
+
verifyWallet: (params: VerifyWalletParams, token: string) => Promise<WalletInfo | {
|
|
86
|
+
error: string;
|
|
87
|
+
}>;
|
|
88
|
+
getWallet: (params: {
|
|
89
|
+
address: string;
|
|
90
|
+
}, token: string) => Promise<WalletInfo | {
|
|
91
|
+
error: string;
|
|
92
|
+
}>;
|
|
93
|
+
};
|
|
94
|
+
metadata: {
|
|
95
|
+
createMetadata: (metadata: CreateMetadataParams, token: string) => Promise<{
|
|
96
|
+
metadataCid: string;
|
|
97
|
+
} | {
|
|
98
|
+
error: string;
|
|
99
|
+
}>;
|
|
100
|
+
};
|
|
101
|
+
auth: {
|
|
102
|
+
getNonce: (params: {
|
|
103
|
+
address: string;
|
|
104
|
+
}) => Promise<{
|
|
105
|
+
code: string;
|
|
106
|
+
timestamp: number;
|
|
107
|
+
} | {
|
|
108
|
+
error: string;
|
|
109
|
+
}>;
|
|
110
|
+
signIn: (params: SignInParams) => Promise<{
|
|
111
|
+
accessToken: string;
|
|
112
|
+
} | {
|
|
113
|
+
error: string;
|
|
114
|
+
}>;
|
|
115
|
+
};
|
|
116
|
+
agent: {
|
|
117
|
+
sendMessage: (params: {
|
|
118
|
+
message: string;
|
|
119
|
+
projectId: string;
|
|
120
|
+
}) => Promise<{
|
|
121
|
+
reply: string;
|
|
122
|
+
} | {
|
|
123
|
+
error: string;
|
|
124
|
+
}>;
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=ait-api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ait-api.d.ts","sourceRoot":"","sources":["../../src/types/ait-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|