@andrewkimjoseph/celina-sdk 0.2.11 → 0.3.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/README.md +3 -0
- package/build/abis/self-registry.d.ts +194 -0
- package/build/abis/self-registry.js +120 -0
- package/build/abis/self-registry.js.map +1 -0
- package/build/analytics/amplitude.d.ts +5 -0
- package/build/analytics/amplitude.js +56 -0
- package/build/analytics/amplitude.js.map +1 -0
- package/build/analytics/config.d.ts +7 -0
- package/build/analytics/config.js +30 -0
- package/build/analytics/config.js.map +1 -0
- package/build/analytics/mcp-tool-events.d.ts +5 -0
- package/build/analytics/mcp-tool-events.js +55 -0
- package/build/analytics/mcp-tool-events.js.map +1 -0
- package/build/analytics/wrap-service.d.ts +5 -0
- package/build/analytics/wrap-service.js +36 -0
- package/build/analytics/wrap-service.js.map +1 -0
- package/build/clients/carbon-rest.d.ts +17 -0
- package/build/clients/carbon-rest.js +59 -0
- package/build/clients/carbon-rest.js.map +1 -0
- package/build/clients/carbon-sdk.d.ts +31 -0
- package/build/clients/carbon-sdk.js +48 -0
- package/build/clients/carbon-sdk.js.map +1 -0
- package/build/clients/self-api.d.ts +82 -0
- package/build/clients/self-api.js +242 -0
- package/build/clients/self-api.js.map +1 -0
- package/build/config/carbon.d.ts +12 -0
- package/build/config/carbon.js +13 -0
- package/build/config/carbon.js.map +1 -0
- package/build/config/sdk-config.d.ts +14 -0
- package/build/config/sdk-config.js +16 -0
- package/build/config/sdk-config.js.map +1 -1
- package/build/config/self.d.ts +22 -0
- package/build/config/self.js +27 -0
- package/build/config/self.js.map +1 -0
- package/build/index.d.ts +16 -0
- package/build/index.js +27 -13
- package/build/index.js.map +1 -1
- package/build/services/carbon.service.d.ts +68 -0
- package/build/services/carbon.service.js +189 -0
- package/build/services/carbon.service.js.map +1 -0
- package/build/services/self-session-store.d.ts +19 -0
- package/build/services/self-session-store.js +28 -0
- package/build/services/self-session-store.js.map +1 -0
- package/build/services/self.service.d.ts +241 -0
- package/build/services/self.service.js +692 -0
- package/build/services/self.service.js.map +1 -0
- package/build/types/carbon.d.ts +31 -0
- package/build/types/carbon.js +2 -0
- package/build/types/carbon.js.map +1 -0
- package/build/utils/carbon-prepared-flow.d.ts +11 -0
- package/build/utils/carbon-prepared-flow.js +25 -0
- package/build/utils/carbon-prepared-flow.js.map +1 -0
- package/build/utils/carbon-rest-adapter.d.ts +8 -0
- package/build/utils/carbon-rest-adapter.js +72 -0
- package/build/utils/carbon-rest-adapter.js.map +1 -0
- package/build/utils/self-format.d.ts +28 -0
- package/build/utils/self-format.js +79 -0
- package/build/utils/self-format.js.map +1 -0
- package/build/utils/self-signing.d.ts +4 -0
- package/build/utils/self-signing.js +38 -0
- package/build/utils/self-signing.js.map +1 -0
- package/package.json +16 -2
- package/tests/README.md +72 -0
- package/tests/catalog/domains/blockchain.ts +91 -0
- package/tests/catalog/domains/carbon.ts +409 -0
- package/tests/catalog/domains/chain-ext.ts +219 -0
- package/tests/catalog/domains/defi.ts +264 -0
- package/tests/catalog/domains/self.ts +220 -0
- package/tests/catalog/domains/token.ts +74 -0
- package/tests/catalog/domains/transaction.ts +111 -0
- package/tests/catalog/index.ts +7 -0
- package/tests/catalog/operations.ts +48 -0
- package/tests/catalog/types.ts +27 -0
- package/tests/fixtures/mainnet.ts +93 -0
- package/tests/helpers/assert.ts +30 -0
- package/tests/helpers/env.ts +38 -0
- package/tests/helpers/gating.ts +36 -0
- package/tests/testing-entry.ts +22 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { SerializedPreparedFlow } from "../types/prepared.js";
|
|
2
|
+
/** Minimal Toolkit surface used for trade fallback. */
|
|
3
|
+
type CarbonToolkit = {
|
|
4
|
+
getTradeData: (sourceToken: string, targetToken: string, amount: string, isTradeByTarget: boolean) => Promise<{
|
|
5
|
+
tradeActions: unknown[];
|
|
6
|
+
totalSourceAmount: string;
|
|
7
|
+
totalTargetAmount: string;
|
|
8
|
+
}>;
|
|
9
|
+
composeTradeBySourceTransaction: (sourceToken: string, targetToken: string, tradeActions: unknown[], deadline: string, minReturn: string) => Promise<{
|
|
10
|
+
to?: string | null;
|
|
11
|
+
data?: string | null;
|
|
12
|
+
value?: bigint | null;
|
|
13
|
+
}>;
|
|
14
|
+
};
|
|
15
|
+
export declare class CarbonSdkClient {
|
|
16
|
+
private readonly rpcUrl;
|
|
17
|
+
private toolkit;
|
|
18
|
+
private initPromise;
|
|
19
|
+
constructor(rpcUrl: string);
|
|
20
|
+
getToolkit(): Promise<CarbonToolkit>;
|
|
21
|
+
private initialize;
|
|
22
|
+
getTradeQuoteFallback(sourceToken: string, targetToken: string, amount: string, isTradeByTarget: boolean): Promise<{
|
|
23
|
+
tradeData: {
|
|
24
|
+
tradeActions: unknown[];
|
|
25
|
+
totalSourceAmount: string;
|
|
26
|
+
totalTargetAmount: string;
|
|
27
|
+
};
|
|
28
|
+
}>;
|
|
29
|
+
prepareTradeFallback(from: `0x${string}`, sourceToken: string, targetToken: string, amount: string, isTradeByTarget: boolean, minReturnOrMaxInput: string, deadlineMinutes?: number): Promise<SerializedPreparedFlow>;
|
|
30
|
+
}
|
|
31
|
+
export {};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { JsonRpcProvider } from "ethers";
|
|
2
|
+
import { ContractsApi } from "@bancor/carbon-sdk/contracts-api";
|
|
3
|
+
import { initSyncedCache } from "@bancor/carbon-sdk/chain-cache";
|
|
4
|
+
import { CELO_CARBON_CONTRACTS, CELO_CHAIN_ID, } from "../config/carbon.js";
|
|
5
|
+
import { populatedTransactionToPreparedFlow } from "../utils/carbon-prepared-flow.js";
|
|
6
|
+
const MAX_BLOCK_AGE = 2000;
|
|
7
|
+
export class CarbonSdkClient {
|
|
8
|
+
rpcUrl;
|
|
9
|
+
toolkit = null;
|
|
10
|
+
initPromise = null;
|
|
11
|
+
constructor(rpcUrl) {
|
|
12
|
+
this.rpcUrl = rpcUrl;
|
|
13
|
+
}
|
|
14
|
+
async getToolkit() {
|
|
15
|
+
if (this.toolkit)
|
|
16
|
+
return this.toolkit;
|
|
17
|
+
if (!this.initPromise) {
|
|
18
|
+
this.initPromise = this.initialize();
|
|
19
|
+
}
|
|
20
|
+
this.toolkit = await this.initPromise;
|
|
21
|
+
return this.toolkit;
|
|
22
|
+
}
|
|
23
|
+
async initialize() {
|
|
24
|
+
const strategyMod = (await import("@bancor/carbon-sdk/strategy-management"));
|
|
25
|
+
const { Toolkit } = strategyMod;
|
|
26
|
+
const provider = new JsonRpcProvider(this.rpcUrl, CELO_CHAIN_ID, {
|
|
27
|
+
staticNetwork: true,
|
|
28
|
+
});
|
|
29
|
+
const api = new ContractsApi(provider, CELO_CARBON_CONTRACTS);
|
|
30
|
+
const { cache, startDataSync } = initSyncedCache(api.reader, undefined, MAX_BLOCK_AGE);
|
|
31
|
+
const toolkit = new Toolkit(api, cache);
|
|
32
|
+
await startDataSync();
|
|
33
|
+
return toolkit;
|
|
34
|
+
}
|
|
35
|
+
async getTradeQuoteFallback(sourceToken, targetToken, amount, isTradeByTarget) {
|
|
36
|
+
const toolkit = await this.getToolkit();
|
|
37
|
+
const tradeData = await toolkit.getTradeData(sourceToken, targetToken, amount, isTradeByTarget);
|
|
38
|
+
return { tradeData };
|
|
39
|
+
}
|
|
40
|
+
async prepareTradeFallback(from, sourceToken, targetToken, amount, isTradeByTarget, minReturnOrMaxInput, deadlineMinutes = 5) {
|
|
41
|
+
const toolkit = await this.getToolkit();
|
|
42
|
+
const tradeData = await toolkit.getTradeData(sourceToken, targetToken, amount, isTradeByTarget);
|
|
43
|
+
const deadline = String(Math.floor(Date.now() / 1000) + deadlineMinutes * 60);
|
|
44
|
+
const tx = await toolkit.composeTradeBySourceTransaction(sourceToken, targetToken, tradeData.tradeActions, deadline, minReturnOrMaxInput);
|
|
45
|
+
return populatedTransactionToPreparedFlow(from, tx, `Carbon swap ${sourceToken} → ${targetToken}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=carbon-sdk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"carbon-sdk.js","sourceRoot":"","sources":["../../src/clients/carbon-sdk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { type SelfRegistrationMode } from "../config/self.js";
|
|
2
|
+
export declare class SelfApiError extends Error {
|
|
3
|
+
constructor(message: string);
|
|
4
|
+
}
|
|
5
|
+
export declare class SelfExpiredSessionError extends Error {
|
|
6
|
+
constructor(message?: string);
|
|
7
|
+
}
|
|
8
|
+
export interface SelfRegistrationDisclosures {
|
|
9
|
+
minimumAge?: number;
|
|
10
|
+
ofac?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface SelfRegistrationResult {
|
|
13
|
+
agentId: number;
|
|
14
|
+
agentAddress: string;
|
|
15
|
+
credentials?: unknown;
|
|
16
|
+
txHash?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface SelfRefreshResult {
|
|
19
|
+
proofExpiresAt: Date;
|
|
20
|
+
}
|
|
21
|
+
export interface SelfRegistrationSession {
|
|
22
|
+
sessionToken: string;
|
|
23
|
+
stage: string;
|
|
24
|
+
deepLink: string;
|
|
25
|
+
scanUrl?: string;
|
|
26
|
+
agentAddress: string;
|
|
27
|
+
expiresAt: string;
|
|
28
|
+
timeRemainingMs?: number;
|
|
29
|
+
humanInstructions: string[];
|
|
30
|
+
waitForCompletion(opts?: {
|
|
31
|
+
timeoutMs?: number;
|
|
32
|
+
pollIntervalMs?: number;
|
|
33
|
+
}): Promise<SelfRegistrationResult>;
|
|
34
|
+
exportKey(): Promise<string>;
|
|
35
|
+
}
|
|
36
|
+
export interface SelfRefreshSession {
|
|
37
|
+
sessionToken: string;
|
|
38
|
+
stage: string;
|
|
39
|
+
deepLink: string;
|
|
40
|
+
scanUrl?: string;
|
|
41
|
+
expiresAt: string;
|
|
42
|
+
timeRemainingMs?: number;
|
|
43
|
+
humanInstructions: string[];
|
|
44
|
+
waitForCompletion(opts?: {
|
|
45
|
+
timeoutMs?: number;
|
|
46
|
+
pollIntervalMs?: number;
|
|
47
|
+
}): Promise<SelfRefreshResult>;
|
|
48
|
+
}
|
|
49
|
+
export interface SelfDeregistrationSession {
|
|
50
|
+
sessionToken: string;
|
|
51
|
+
stage: string;
|
|
52
|
+
deepLink: string;
|
|
53
|
+
scanUrl?: string;
|
|
54
|
+
expiresAt: string;
|
|
55
|
+
timeRemainingMs?: number;
|
|
56
|
+
humanInstructions: string[];
|
|
57
|
+
waitForCompletion(opts?: {
|
|
58
|
+
timeoutMs?: number;
|
|
59
|
+
pollIntervalMs?: number;
|
|
60
|
+
}): Promise<void>;
|
|
61
|
+
}
|
|
62
|
+
export declare function requestRegistration(opts: {
|
|
63
|
+
mode?: SelfRegistrationMode;
|
|
64
|
+
disclosures?: SelfRegistrationDisclosures;
|
|
65
|
+
humanAddress?: string;
|
|
66
|
+
agentName?: string;
|
|
67
|
+
agentDescription?: string;
|
|
68
|
+
apiBase?: string;
|
|
69
|
+
}): Promise<SelfRegistrationSession>;
|
|
70
|
+
export declare function requestDeregistration(opts: {
|
|
71
|
+
agentAddress: string;
|
|
72
|
+
disclosures?: SelfRegistrationDisclosures;
|
|
73
|
+
apiBase?: string;
|
|
74
|
+
}): Promise<SelfDeregistrationSession>;
|
|
75
|
+
export declare function requestProofRefresh(opts: {
|
|
76
|
+
agentId: number;
|
|
77
|
+
disclosures?: SelfRegistrationDisclosures;
|
|
78
|
+
apiBase?: string;
|
|
79
|
+
}): Promise<SelfRefreshSession>;
|
|
80
|
+
export declare function getAgentInfo(agentId: number, apiBase?: string): Promise<Record<string, unknown>>;
|
|
81
|
+
export declare function getAgentsForHuman(address: string, apiBase?: string): Promise<Record<string, unknown>>;
|
|
82
|
+
export declare function selfQrUrl(sessionToken: string, apiBase?: string): string;
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
import { SELF_API_BASE, SELF_API_NETWORK, SELF_CHAIN_ID, } from "../config/self.js";
|
|
2
|
+
const DEFAULT_POLL_INTERVAL_MS = 5000;
|
|
3
|
+
const DEFAULT_TIMEOUT_MS = 30 * 60 * 1000;
|
|
4
|
+
export class SelfApiError extends Error {
|
|
5
|
+
constructor(message) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = "SelfApiError";
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export class SelfExpiredSessionError extends Error {
|
|
11
|
+
constructor(message = "Session expired. Start a new registration flow.") {
|
|
12
|
+
super(message);
|
|
13
|
+
this.name = "SelfExpiredSessionError";
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function resolveApiBase(apiBase) {
|
|
17
|
+
return (apiBase ?? process.env.SELF_AGENT_API_BASE ?? SELF_API_BASE).replace(/\/+$/, "");
|
|
18
|
+
}
|
|
19
|
+
function sleep(ms) {
|
|
20
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
21
|
+
}
|
|
22
|
+
async function apiFetch(url, init) {
|
|
23
|
+
const res = await fetch(url, init);
|
|
24
|
+
const body = (await res.json());
|
|
25
|
+
if (!res.ok) {
|
|
26
|
+
const errorMsg = typeof body.error === "string" ? body.error : `HTTP ${res.status}`;
|
|
27
|
+
throw new SelfApiError(errorMsg);
|
|
28
|
+
}
|
|
29
|
+
return body;
|
|
30
|
+
}
|
|
31
|
+
function sessionAuthHeaders(sessionToken) {
|
|
32
|
+
return { Authorization: `Bearer ${sessionToken}` };
|
|
33
|
+
}
|
|
34
|
+
async function fetchSessionStatus(apiBase, path, sessionToken) {
|
|
35
|
+
return apiFetch(`${apiBase}${path}?token=${encodeURIComponent(sessionToken)}`, { headers: sessionAuthHeaders(sessionToken) });
|
|
36
|
+
}
|
|
37
|
+
function handleSessionStatusError(error, expiredMessage) {
|
|
38
|
+
if (error instanceof SelfApiError &&
|
|
39
|
+
error.message.toLowerCase().includes("expired")) {
|
|
40
|
+
throw new SelfExpiredSessionError(expiredMessage);
|
|
41
|
+
}
|
|
42
|
+
throw error;
|
|
43
|
+
}
|
|
44
|
+
function optionalScanUrl(data) {
|
|
45
|
+
return typeof data.scanUrl === "string" ? data.scanUrl : undefined;
|
|
46
|
+
}
|
|
47
|
+
function buildRegistrationSession(data, apiBase) {
|
|
48
|
+
let currentToken = String(data.sessionToken);
|
|
49
|
+
return {
|
|
50
|
+
sessionToken: currentToken,
|
|
51
|
+
stage: String(data.stage),
|
|
52
|
+
deepLink: String(data.deepLink),
|
|
53
|
+
scanUrl: optionalScanUrl(data),
|
|
54
|
+
agentAddress: String(data.agentAddress),
|
|
55
|
+
expiresAt: String(data.expiresAt),
|
|
56
|
+
timeRemainingMs: typeof data.timeRemainingMs === "number" ? data.timeRemainingMs : undefined,
|
|
57
|
+
humanInstructions: Array.isArray(data.humanInstructions)
|
|
58
|
+
? data.humanInstructions.map(String)
|
|
59
|
+
: [],
|
|
60
|
+
async waitForCompletion(opts) {
|
|
61
|
+
const timeout = opts?.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
62
|
+
const interval = opts?.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
|
|
63
|
+
const deadline = Date.now() + timeout;
|
|
64
|
+
while (Date.now() < deadline) {
|
|
65
|
+
await sleep(interval);
|
|
66
|
+
let status;
|
|
67
|
+
try {
|
|
68
|
+
status = await fetchSessionStatus(apiBase, "/api/agent/register/status", currentToken);
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
handleSessionStatusError(error, "Session expired. Start a new registration flow.");
|
|
72
|
+
}
|
|
73
|
+
currentToken = String(status.sessionToken);
|
|
74
|
+
if (status.stage === "completed") {
|
|
75
|
+
return {
|
|
76
|
+
agentId: Number(status.agentId),
|
|
77
|
+
agentAddress: String(status.agentAddress ?? data.agentAddress),
|
|
78
|
+
credentials: status.credentials,
|
|
79
|
+
txHash: typeof status.txHash === "string" ? status.txHash : undefined,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
if (status.stage === "failed") {
|
|
83
|
+
throw new SelfApiError("Registration failed on-chain.");
|
|
84
|
+
}
|
|
85
|
+
if (status.stage === "expired") {
|
|
86
|
+
throw new SelfExpiredSessionError();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
throw new SelfApiError(`Registration did not complete within ${timeout}ms. Call check_self_registration again to resume polling.`);
|
|
90
|
+
},
|
|
91
|
+
async exportKey() {
|
|
92
|
+
const result = await apiFetch(`${apiBase}/api/agent/register/export`, {
|
|
93
|
+
method: "POST",
|
|
94
|
+
headers: {
|
|
95
|
+
"Content-Type": "application/json",
|
|
96
|
+
...sessionAuthHeaders(currentToken),
|
|
97
|
+
},
|
|
98
|
+
body: JSON.stringify({ token: currentToken }),
|
|
99
|
+
});
|
|
100
|
+
return result.privateKey;
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
function buildRefreshSession(data, apiBase) {
|
|
105
|
+
let currentToken = String(data.sessionToken);
|
|
106
|
+
return {
|
|
107
|
+
sessionToken: currentToken,
|
|
108
|
+
stage: String(data.stage),
|
|
109
|
+
deepLink: String(data.deepLink),
|
|
110
|
+
scanUrl: optionalScanUrl(data),
|
|
111
|
+
expiresAt: String(data.expiresAt),
|
|
112
|
+
timeRemainingMs: typeof data.timeRemainingMs === "number" ? data.timeRemainingMs : undefined,
|
|
113
|
+
humanInstructions: Array.isArray(data.humanInstructions)
|
|
114
|
+
? data.humanInstructions.map(String)
|
|
115
|
+
: [],
|
|
116
|
+
async waitForCompletion(opts) {
|
|
117
|
+
const timeout = opts?.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
118
|
+
const interval = opts?.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
|
|
119
|
+
const deadline = Date.now() + timeout;
|
|
120
|
+
while (Date.now() < deadline) {
|
|
121
|
+
await sleep(interval);
|
|
122
|
+
let status;
|
|
123
|
+
try {
|
|
124
|
+
status = await fetchSessionStatus(apiBase, "/api/agent/refresh/status", currentToken);
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
handleSessionStatusError(error, "Proof refresh session expired. Call refresh_self_proof to start a new session.");
|
|
128
|
+
}
|
|
129
|
+
currentToken = String(status.sessionToken);
|
|
130
|
+
if (status.stage === "completed") {
|
|
131
|
+
const expiresAtRaw = status.proofExpiresAt;
|
|
132
|
+
const proofExpiresAt = typeof expiresAtRaw === "string" || typeof expiresAtRaw === "number"
|
|
133
|
+
? new Date(expiresAtRaw)
|
|
134
|
+
: new Date(Date.now() + 365 * 24 * 60 * 60 * 1000);
|
|
135
|
+
return { proofExpiresAt };
|
|
136
|
+
}
|
|
137
|
+
if (status.stage === "failed") {
|
|
138
|
+
throw new SelfApiError("Proof refresh failed on-chain.");
|
|
139
|
+
}
|
|
140
|
+
if (status.stage === "expired") {
|
|
141
|
+
throw new SelfExpiredSessionError("Proof refresh session expired. Call refresh_self_proof to start a new session.");
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
throw new SelfApiError(`Proof refresh did not complete within ${timeout}ms. Call check_self_registration again to resume polling.`);
|
|
145
|
+
},
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
function buildDeregistrationSession(data, apiBase) {
|
|
149
|
+
let currentToken = String(data.sessionToken);
|
|
150
|
+
return {
|
|
151
|
+
sessionToken: currentToken,
|
|
152
|
+
stage: String(data.stage),
|
|
153
|
+
deepLink: String(data.deepLink),
|
|
154
|
+
scanUrl: optionalScanUrl(data),
|
|
155
|
+
expiresAt: String(data.expiresAt),
|
|
156
|
+
timeRemainingMs: typeof data.timeRemainingMs === "number" ? data.timeRemainingMs : undefined,
|
|
157
|
+
humanInstructions: Array.isArray(data.humanInstructions)
|
|
158
|
+
? data.humanInstructions.map(String)
|
|
159
|
+
: [],
|
|
160
|
+
async waitForCompletion(opts) {
|
|
161
|
+
const timeout = opts?.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
162
|
+
const interval = opts?.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
|
|
163
|
+
const deadline = Date.now() + timeout;
|
|
164
|
+
while (Date.now() < deadline) {
|
|
165
|
+
await sleep(interval);
|
|
166
|
+
let status;
|
|
167
|
+
try {
|
|
168
|
+
status = await fetchSessionStatus(apiBase, "/api/agent/deregister/status", currentToken);
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
handleSessionStatusError(error, "Deregistration session expired. Call deregister_self_agent to start a new session.");
|
|
172
|
+
}
|
|
173
|
+
currentToken = String(status.sessionToken);
|
|
174
|
+
if (status.stage === "completed") {
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
if (status.stage === "failed") {
|
|
178
|
+
throw new SelfApiError("Deregistration failed on-chain.");
|
|
179
|
+
}
|
|
180
|
+
if (status.stage === "expired") {
|
|
181
|
+
throw new SelfExpiredSessionError("Deregistration session expired. Call deregister_self_agent to start a new session.");
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
throw new SelfApiError(`Deregistration did not complete within ${timeout}ms. Call check_self_registration again to resume polling.`);
|
|
185
|
+
},
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
export async function requestRegistration(opts) {
|
|
189
|
+
const base = resolveApiBase(opts.apiBase);
|
|
190
|
+
const payload = {
|
|
191
|
+
mode: opts.mode ?? "wallet-free",
|
|
192
|
+
network: SELF_API_NETWORK,
|
|
193
|
+
disclosures: opts.disclosures,
|
|
194
|
+
humanAddress: opts.humanAddress,
|
|
195
|
+
agentName: opts.agentName,
|
|
196
|
+
agentDescription: opts.agentDescription,
|
|
197
|
+
};
|
|
198
|
+
const data = await apiFetch(`${base}/api/agent/register`, {
|
|
199
|
+
method: "POST",
|
|
200
|
+
headers: { "Content-Type": "application/json" },
|
|
201
|
+
body: JSON.stringify(payload),
|
|
202
|
+
});
|
|
203
|
+
return buildRegistrationSession(data, base);
|
|
204
|
+
}
|
|
205
|
+
export async function requestDeregistration(opts) {
|
|
206
|
+
const base = resolveApiBase(opts.apiBase);
|
|
207
|
+
const data = await apiFetch(`${base}/api/agent/deregister`, {
|
|
208
|
+
method: "POST",
|
|
209
|
+
headers: { "Content-Type": "application/json" },
|
|
210
|
+
body: JSON.stringify({
|
|
211
|
+
network: SELF_API_NETWORK,
|
|
212
|
+
agentAddress: opts.agentAddress,
|
|
213
|
+
disclosures: opts.disclosures,
|
|
214
|
+
}),
|
|
215
|
+
});
|
|
216
|
+
return buildDeregistrationSession(data, base);
|
|
217
|
+
}
|
|
218
|
+
export async function requestProofRefresh(opts) {
|
|
219
|
+
const base = resolveApiBase(opts.apiBase);
|
|
220
|
+
const data = await apiFetch(`${base}/api/agent/refresh`, {
|
|
221
|
+
method: "POST",
|
|
222
|
+
headers: { "Content-Type": "application/json" },
|
|
223
|
+
body: JSON.stringify({
|
|
224
|
+
agentId: opts.agentId,
|
|
225
|
+
network: SELF_API_NETWORK,
|
|
226
|
+
disclosures: opts.disclosures,
|
|
227
|
+
}),
|
|
228
|
+
});
|
|
229
|
+
return buildRefreshSession(data, base);
|
|
230
|
+
}
|
|
231
|
+
export async function getAgentInfo(agentId, apiBase) {
|
|
232
|
+
const base = resolveApiBase(apiBase);
|
|
233
|
+
return apiFetch(`${base}/api/agent/info/${SELF_CHAIN_ID}/${agentId}`);
|
|
234
|
+
}
|
|
235
|
+
export async function getAgentsForHuman(address, apiBase) {
|
|
236
|
+
const base = resolveApiBase(apiBase);
|
|
237
|
+
return apiFetch(`${base}/api/agent/agents/${SELF_CHAIN_ID}/${address}`);
|
|
238
|
+
}
|
|
239
|
+
export function selfQrUrl(sessionToken, apiBase) {
|
|
240
|
+
return `${resolveApiBase(apiBase)}/scan/${sessionToken}`;
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=self-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"self-api.js","sourceRoot":"","sources":["../../src/clients/self-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Carbon DeFi on Celo mainnet — contract addresses and API defaults. */
|
|
2
|
+
export declare const CARBON_CHAIN: "celo";
|
|
3
|
+
export declare const DEFAULT_CARBON_REST_BASE_URL = "https://mcp.carbondefi.xyz";
|
|
4
|
+
/** Matches @bancor/carbon-sdk `ContractsConfig` for Celo (carbon-contracts deployments). */
|
|
5
|
+
export declare const CELO_CARBON_CONTRACTS: {
|
|
6
|
+
readonly carbonControllerAddress: "0x6619871118D144c1c28eC3b23036FC1f0829ed3a";
|
|
7
|
+
readonly voucherAddress: "0x5E994Ac7d65d81f51a76e0bB5a236C6fDA8dBF9A";
|
|
8
|
+
/** Multicall3 on Celo mainnet. */
|
|
9
|
+
readonly multiCallAddress: "0xcA11bde05977b3631167028862bE2a173976CA11";
|
|
10
|
+
readonly carbonBatcherAddress: "0xa977879684EecE2015AE879DC120c8a1C00718f7";
|
|
11
|
+
};
|
|
12
|
+
export declare const CELO_CHAIN_ID = 42220;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Carbon DeFi on Celo mainnet — contract addresses and API defaults. */
|
|
2
|
+
export const CARBON_CHAIN = "celo";
|
|
3
|
+
export const DEFAULT_CARBON_REST_BASE_URL = "https://mcp.carbondefi.xyz";
|
|
4
|
+
/** Matches @bancor/carbon-sdk `ContractsConfig` for Celo (carbon-contracts deployments). */
|
|
5
|
+
export const CELO_CARBON_CONTRACTS = {
|
|
6
|
+
carbonControllerAddress: "0x6619871118D144c1c28eC3b23036FC1f0829ed3a",
|
|
7
|
+
voucherAddress: "0x5E994Ac7d65d81f51a76e0bB5a236C6fDA8dBF9A",
|
|
8
|
+
/** Multicall3 on Celo mainnet. */
|
|
9
|
+
multiCallAddress: "0xcA11bde05977b3631167028862bE2a173976CA11",
|
|
10
|
+
carbonBatcherAddress: "0xa977879684EecE2015AE879DC120c8a1C00718f7",
|
|
11
|
+
};
|
|
12
|
+
export const CELO_CHAIN_ID = 42220;
|
|
13
|
+
//# sourceMappingURL=carbon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"carbon.js","sourceRoot":"","sources":["../../src/config/carbon.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAEzE,MAAM,CAAC,MAAM,YAAY,GAAG,MAAe,CAAC;AAE5C,MAAM,CAAC,MAAM,4BAA4B,GAAG,4BAA4B,CAAC;AAEzE,4FAA4F;AAC5F,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,uBAAuB,EAAE,4CAA4C;IACrE,cAAc,EAAE,4CAA4C;IAC5D,kCAAkC;IAClC,gBAAgB,EAAE,4CAA4C;IAC9D,oBAAoB,EAAE,4CAA4C;CAC1D,CAAC;AAEX,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC"}
|
|
@@ -4,6 +4,20 @@ export interface SdkConfig {
|
|
|
4
4
|
rpcUrl: string;
|
|
5
5
|
/** Ethereum mainnet RPC for ENS resolution (optional). */
|
|
6
6
|
ethRpcUrl?: string;
|
|
7
|
+
/** Carbon DeFi REST API base URL (default https://mcp.carbondefi.xyz). */
|
|
8
|
+
carbonRestBaseUrl?: string;
|
|
9
|
+
/** Enable @bancor/carbon-sdk fallback when REST fails (default true). */
|
|
10
|
+
carbonSdkFallback?: boolean;
|
|
11
|
+
/** Self Agent ID signing key (Node only; also reads `SELF_AGENT_PRIVATE_KEY`). */
|
|
12
|
+
selfAgentPrivateKey?: `0x${string}`;
|
|
13
|
+
/** Self Agent ID REST API base (default https://app.ai.self.xyz). */
|
|
14
|
+
selfApiBase?: string;
|
|
15
|
+
/** Amplitude read telemetry (default on; opt out with `false` or `CELINA_ANALYTICS_DISABLED=1`). */
|
|
16
|
+
analyticsEnabled?: boolean;
|
|
17
|
+
/** Override bundled Amplitude project API key. */
|
|
18
|
+
amplitudeApiKey?: string;
|
|
19
|
+
/** Amplitude `device_id` (default `celina-sdk`). */
|
|
20
|
+
analyticsDeviceId?: string;
|
|
7
21
|
}
|
|
8
22
|
/** Default Celo RPC when `rpcUrl` is omitted. */
|
|
9
23
|
export declare const DEFAULT_RPC_URL = "https://forno.celo.org";
|
|
@@ -5,9 +5,25 @@ export const DEFAULT_RPC_URL = "https://forno.celo.org";
|
|
|
5
5
|
* @param opts - Optional RPC overrides from `createCelinaClient(opts)`
|
|
6
6
|
*/
|
|
7
7
|
export function resolveSdkConfig(opts) {
|
|
8
|
+
const selfAgentPrivateKey = opts?.selfAgentPrivateKey ??
|
|
9
|
+
(typeof process !== "undefined"
|
|
10
|
+
? process.env.SELF_AGENT_PRIVATE_KEY
|
|
11
|
+
: undefined);
|
|
8
12
|
return {
|
|
9
13
|
rpcUrl: opts?.rpcUrl ?? DEFAULT_RPC_URL,
|
|
10
14
|
ethRpcUrl: opts?.ethRpcUrl,
|
|
15
|
+
carbonRestBaseUrl: opts?.carbonRestBaseUrl ??
|
|
16
|
+
process.env.CARBON_API_BASE_URL ??
|
|
17
|
+
"https://mcp.carbondefi.xyz",
|
|
18
|
+
carbonSdkFallback: opts?.carbonSdkFallback ?? true,
|
|
19
|
+
selfAgentPrivateKey,
|
|
20
|
+
selfApiBase: opts?.selfApiBase ??
|
|
21
|
+
(typeof process !== "undefined"
|
|
22
|
+
? process.env.SELF_AGENT_API_BASE
|
|
23
|
+
: undefined),
|
|
24
|
+
analyticsEnabled: opts?.analyticsEnabled,
|
|
25
|
+
amplitudeApiKey: opts?.amplitudeApiKey,
|
|
26
|
+
analyticsDeviceId: opts?.analyticsDeviceId,
|
|
11
27
|
};
|
|
12
28
|
}
|
|
13
29
|
//# sourceMappingURL=sdk-config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-config.js","sourceRoot":"","sources":["../../src/config/sdk-config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sdk-config.js","sourceRoot":"","sources":["../../src/config/sdk-config.ts"],"names":[],"mappings":"AAsBA,iDAAiD;AACjD,MAAM,CAAC,MAAM,eAAe,GAAG,wBAAwB,CAAC;AAExD;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAyB;IACxD,MAAM,mBAAmB,GACvB,IAAI,EAAE,mBAAmB;QACzB,CAAC,OAAO,OAAO,KAAK,WAAW;YAC7B,CAAC,CAAE,OAAO,CAAC,GAAG,CAAC,sBAAoD;YACnE,CAAC,CAAC,SAAS,CAAC,CAAC;IAEjB,OAAO;QACL,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,eAAe;QACvC,SAAS,EAAE,IAAI,EAAE,SAAS;QAC1B,iBAAiB,EACf,IAAI,EAAE,iBAAiB;YACvB,OAAO,CAAC,GAAG,CAAC,mBAAmB;YAC/B,4BAA4B;QAC9B,iBAAiB,EAAE,IAAI,EAAE,iBAAiB,IAAI,IAAI;QAClD,mBAAmB;QACnB,WAAW,EACT,IAAI,EAAE,WAAW;YACjB,CAAC,OAAO,OAAO,KAAK,WAAW;gBAC7B,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB;gBACjC,CAAC,CAAC,SAAS,CAAC;QAChB,gBAAgB,EAAE,IAAI,EAAE,gBAAgB;QACxC,eAAe,EAAE,IAAI,EAAE,eAAe;QACtC,iBAAiB,EAAE,IAAI,EAAE,iBAAiB;KAC3C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export declare const SELF_REGISTRY_ADDRESS: "0xaC3DF9ABf80d0F5c020C06B04Cced27763355944";
|
|
2
|
+
export declare const SELF_API_BASE = "https://app.ai.self.xyz";
|
|
3
|
+
/** Network value for Self lifecycle REST APIs (register, refresh, deregister). */
|
|
4
|
+
export declare const SELF_API_NETWORK = "mainnet";
|
|
5
|
+
/** Query param for Self demo/gated HTTP endpoints on Celo mainnet. */
|
|
6
|
+
export declare const SELF_DEMO_NETWORK = "celo-mainnet";
|
|
7
|
+
export declare const SELF_CHAIN_ID = 42220;
|
|
8
|
+
export declare function selfDemoUrl(path: string, network?: string): string;
|
|
9
|
+
export declare const SELF_SESSION_TTL_MS: number;
|
|
10
|
+
export declare const SELF_MAX_SESSIONS = 50;
|
|
11
|
+
export declare const SELF_DEFAULT_MAX_AGE_MS: number;
|
|
12
|
+
export declare const SELF_FETCH_MAX_BYTES: number;
|
|
13
|
+
/** Warning threshold for upcoming proof expiry (matches Self SDK isProofExpiringSoon). */
|
|
14
|
+
export declare const SELF_PROOF_EXPIRING_SOON_DAYS = 30;
|
|
15
|
+
export declare const SELF_HEADERS: {
|
|
16
|
+
readonly ADDRESS: "x-self-agent-address";
|
|
17
|
+
readonly SIGNATURE: "x-self-agent-signature";
|
|
18
|
+
readonly TIMESTAMP: "x-self-agent-timestamp";
|
|
19
|
+
readonly KEYTYPE: "x-self-agent-keytype";
|
|
20
|
+
readonly KEY: "x-self-agent-key";
|
|
21
|
+
};
|
|
22
|
+
export type SelfRegistrationMode = "linked" | "wallet-free" | "smartwallet" | "self-custody" | "ed25519" | "ed25519-linked";
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export const SELF_REGISTRY_ADDRESS = "0xaC3DF9ABf80d0F5c020C06B04Cced27763355944";
|
|
2
|
+
export const SELF_API_BASE = "https://app.ai.self.xyz";
|
|
3
|
+
/** Network value for Self lifecycle REST APIs (register, refresh, deregister). */
|
|
4
|
+
export const SELF_API_NETWORK = "mainnet";
|
|
5
|
+
/** Query param for Self demo/gated HTTP endpoints on Celo mainnet. */
|
|
6
|
+
export const SELF_DEMO_NETWORK = "celo-mainnet";
|
|
7
|
+
export const SELF_CHAIN_ID = 42220;
|
|
8
|
+
export function selfDemoUrl(path, network = SELF_DEMO_NETWORK) {
|
|
9
|
+
const base = SELF_API_BASE.replace(/\/+$/, "");
|
|
10
|
+
const normalizedPath = path.startsWith("/") ? path : `/${path}`;
|
|
11
|
+
const separator = normalizedPath.includes("?") ? "&" : "?";
|
|
12
|
+
return `${base}${normalizedPath}${separator}network=${network}`;
|
|
13
|
+
}
|
|
14
|
+
export const SELF_SESSION_TTL_MS = 10 * 60 * 1000;
|
|
15
|
+
export const SELF_MAX_SESSIONS = 50;
|
|
16
|
+
export const SELF_DEFAULT_MAX_AGE_MS = 5 * 60 * 1000;
|
|
17
|
+
export const SELF_FETCH_MAX_BYTES = 10 * 1024;
|
|
18
|
+
/** Warning threshold for upcoming proof expiry (matches Self SDK isProofExpiringSoon). */
|
|
19
|
+
export const SELF_PROOF_EXPIRING_SOON_DAYS = 30;
|
|
20
|
+
export const SELF_HEADERS = {
|
|
21
|
+
ADDRESS: "x-self-agent-address",
|
|
22
|
+
SIGNATURE: "x-self-agent-signature",
|
|
23
|
+
TIMESTAMP: "x-self-agent-timestamp",
|
|
24
|
+
KEYTYPE: "x-self-agent-keytype",
|
|
25
|
+
KEY: "x-self-agent-key",
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=self.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"self.js","sourceRoot":"","sources":["../../src/config/self.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAChC,4CAAqD,CAAC;AAExD,MAAM,CAAC,MAAM,aAAa,GAAG,yBAAyB,CAAC;AAEvD,kFAAkF;AAClF,MAAM,CAAC,MAAM,gBAAgB,GAAG,SAAS,CAAC;AAE1C,sEAAsE;AACtE,MAAM,CAAC,MAAM,iBAAiB,GAAG,cAAc,CAAC;AAEhD,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC;AAEnC,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,OAAO,GAAG,iBAAiB;IACnE,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC/C,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;IAChE,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC3D,OAAO,GAAG,IAAI,GAAG,cAAc,GAAG,SAAS,WAAW,OAAO,EAAE,CAAC;AAClE,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAElD,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAEpC,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAErD,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,GAAG,IAAI,CAAC;AAE9C,0FAA0F;AAC1F,MAAM,CAAC,MAAM,6BAA6B,GAAG,EAAE,CAAC;AAEhD,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,OAAO,EAAE,sBAAsB;IAC/B,SAAS,EAAE,wBAAwB;IACnC,SAAS,EAAE,wBAAwB;IACnC,OAAO,EAAE,sBAAsB;IAC/B,GAAG,EAAE,kBAAkB;CACf,CAAC"}
|
package/build/index.d.ts
CHANGED
|
@@ -12,6 +12,8 @@ import { NftService } from "./services/nft.service.js";
|
|
|
12
12
|
import { StakingService } from "./services/staking.service.js";
|
|
13
13
|
import { TokenService } from "./services/token.service.js";
|
|
14
14
|
import { TransactionService } from "./services/transaction.service.js";
|
|
15
|
+
import { CarbonService } from "./services/carbon.service.js";
|
|
16
|
+
import { SelfService } from "./services/self.service.js";
|
|
15
17
|
/** Optional RPC overrides when creating a Celina client. */
|
|
16
18
|
export type CelinaClientOptions = Partial<SdkConfig>;
|
|
17
19
|
/** Domain services for Celo mainnet reads and unsigned transaction preparation. */
|
|
@@ -42,6 +44,10 @@ export interface CelinaClient {
|
|
|
42
44
|
nft: NftService;
|
|
43
45
|
/** Generic read-only contract calls and gas estimates. */
|
|
44
46
|
contract: ContractService;
|
|
47
|
+
/** Carbon DeFi maker strategies and taker trades on Celo (SDK + REST). */
|
|
48
|
+
carbon: CarbonService;
|
|
49
|
+
/** Self Agent ID on Celo mainnet (ai.self.xyz + on-chain registry). */
|
|
50
|
+
self: SelfService;
|
|
45
51
|
}
|
|
46
52
|
/**
|
|
47
53
|
* Create a Celina client for Celo mainnet reads and unsigned tx preparation.
|
|
@@ -73,3 +79,13 @@ export type { ContractCallParams } from "./services/contract.service.js";
|
|
|
73
79
|
/** Aave V3 Celo pool address and supported asset symbols. */
|
|
74
80
|
export { AAVE_POOL, AAVE_SUPPORTED_SYMBOLS, resolveAaveAsset, } from "./config/aave.js";
|
|
75
81
|
export type { AaveAsset } from "./config/aave.js";
|
|
82
|
+
export type { CarbonPrepareResult, CarbonRestSuccess, } from "./types/carbon.js";
|
|
83
|
+
export type { CarbonWriteBody } from "./services/carbon.service.js";
|
|
84
|
+
export { CARBON_CHAIN, CELO_CARBON_CONTRACTS, DEFAULT_CARBON_REST_BASE_URL, } from "./config/carbon.js";
|
|
85
|
+
export { CarbonRestError } from "./clients/carbon-rest.js";
|
|
86
|
+
export { SelfService, type VerifySelfAgentParams, type VerifySelfRequestParams, type RegisterSelfAgentParams, } from "./services/self.service.js";
|
|
87
|
+
export { SelfApiError, SelfExpiredSessionError, } from "./clients/self-api.js";
|
|
88
|
+
export type { SelfRegistrationMode } from "./config/self.js";
|
|
89
|
+
export { selfDemoUrl, SELF_DEMO_NETWORK, SELF_HEADERS, } from "./config/self.js";
|
|
90
|
+
export { resolveSelfSessionLinks, formatSelfSessionLinksDisplay, type SelfSessionLinks, } from "./utils/self-format.js";
|
|
91
|
+
export { clearSelfSessionsForTests } from "./services/self-session-store.js";
|