@candledottv/agent-sdk 0.6.10 → 0.6.12
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 +8 -1
- package/dist/client.d.ts +176 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +261 -19
- package/dist/lab.d.ts +85 -0
- package/dist/lab.d.ts.map +1 -0
- package/dist/token-clusters.d.ts +36 -0
- package/dist/token-clusters.d.ts.map +1 -0
- package/dist/token-pages.d.ts +22 -1
- package/dist/token-pages.d.ts.map +1 -1
- package/dist/token-pages.types.d.ts +38 -0
- package/dist/token-pages.types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type { AcceptedJob, AgentDirectoryEntry, AgentDirectoryPage, AgentDirectorySort, AgentFeeAmount, AgentFeeClaimOptions, AgentFeeClaimResult, AgentFeeIncome, AgentFeeReason, AgentFeesOptions, AgentFeesPage, AgentFeeToken, AgentHoldingOrigin, AgentLeaderboardEntry, AgentPost, AgentPostsPage, AgentPostToken, AgentPostTokenRef, AgentProfile, AgentPublicHolding, AgentPublicRecord, AgentRecordTotals, AgentRewardClaim, AgentTierInfo, AtomicBundleLegRole, AtomicBundleLegSigner, AtomicBundleResponseLeg, AtomicDryRunFill, AtomicDryRunResult, AtomicFirstBuyRequest, AtomicLaunchPayer, BaseAssetKey, BuildAtomicLaunchRequest, BuildAtomicLaunchResult, BuildSelfLaunchAtomicResult, BuildSelfLaunchHoodResult, BuildSelfLaunchRequest, BuildSelfLaunchResult, BuildSelfLaunchSolanaResult, BuildTradeBuiltResult, BuildTradeRequest, BuildTradeResult, CandleClientOptions, CandleFees, CandlePerps, CandlePerpsWithdraw, CandleWallets, Chain, CloseEmptyAccountsBatch, CloseEmptyAccountsFailure, CloseEmptyAccountsJob, CloseEmptyAccountsJobOptions, CloseEmptyAccountsPreview, CloseEmptyAccountsRequest, CloseEmptyAccountsResult, CloseEmptyAccountsUnresolved, ConfirmSelfLaunchRequest, ConfirmSelfLaunchResult, ConfirmTradeRequest, ConfirmTradeResult, CreateAgentPostRequest, CurveTerms, DryRunResult, EmptyTokenAccount, EmptyTokenAccountSkipReason, EvmSignTransactionParams, ExecutedTradeResult, FeedBucket, FeedResult, FeedToken, HoodTradeArtifacts, ImportWalletResult, LaunchAtomicFirstBuyRequest, LaunchAtomicPayer, LaunchAtomicRequest, LaunchAtomicResult, LaunchCurve, LaunchCurveTerms, LaunchGraduationPreview, LaunchJob, LaunchPreset, LaunchPreviewFeeLine, LaunchPreviewTerms, LaunchRequest, LaunchResult, LaunchTier, LinkedSwapRequest, LinkedSwapResult, LinkedWalletRow, ListAgentPostsOptions, ListAgentsOptions, ListWalletsResult, MarketState, MigrationStatus, OwnAgentProfile, OwnAgentProfilePatch, PerpsAccountStatus, PerpsActionResult, PerpsBuild, PerpsCancelParams, PerpsCloseParams, PerpsConfig, PerpsDepositBuild, PerpsDepositParams, PerpsDepositResult, PerpsLeverageParams, PerpsMarginParams, PerpsModifyParams, PerpsOpenParams, PerpsOrderRecord, PerpsOrders, PerpsPositions, PerpsReduceOnlyResult, PerpsReplay, PerpsReplayResult, PerpsRiskSettingsResult, PerpsRiskWrite, PerpsRiskWriteResult, PerpsScheduleCancelParams, PerpsSetupResult, PerpsSide, PerpsStreamFrame, PerpsStreamSocketOptions, PerpsStreamWebSocket, PerpsWalletRef, PerpsWithdrawBuildRequest, PerpsWithdrawParams, PerpsWithdrawResult, PerpsWithdrawStatus, PoolFee, PortfolioHoodSection, PortfolioHoodTeeWallet, PortfolioHoodToken, PortfolioHoodWallet, PortfolioPrice, PortfolioResult, PortfolioSolanaTeeWallet, PortfolioSolanaToken, PortfolioSolanaWallet, PortfolioUnpricedReason, PresetsPayload, PreviewCloseEmptyAccountsRequest, ProfileBoardPnl, ProfileChainPnl, ProfileClosedPosition, ProfileClosedSummary, ProfileOpenPosition, ProfilePnlEngineFields, ProfilePnlResult, ProfilePnlSummaryRow, ProfileTradeRow, ProfileTradesOptions, ProfileTradesResult, ProfileWalletPnl, ProfileWalletRow, ProfileWalletScope, ProfileWalletsResult, QuoteBreakdown, QuotePair, QuotePairsPayload, QuoteResult, ResolvedLaunch, SelfBalancesOptions, SelfBalancesResult, SelfLaunchDryRunResult, SelfLaunchRequest, SelfWallet, SelfWalletBalance, SignLinkedTransactionParams, SignLinkedTransactionResult, SkippedEmptyTokenAccount, SolanaTradeArtifacts, SpendLimit, SpendLimitsResult, SubmitAtomicLaunchRequest, SubmitAtomicLaunchResult, SubmitTradeRequest, SwapRequest, SwapResult, SwapSettlement, SwapSettlementLeg, SwapSettlementState, TokenCard, TokenCardFact, TokenCardFacts, TokenCardSameName, TokenCardSameNameCandidate, TokenEvent, TokenEventGroup, TokenEventGroupVisibility, TokenEventKind, TokenEventsPage, TokenEventWallet, TradeFee, TradeJob, TradePayer, TradeRace, TradeRequest, TradeRoute, TradeRouteHop, TradeSide, VerifyResult, WalletKind, } from "./client";
|
|
1
|
+
export type { AcceptedJob, AgentDirectoryEntry, AgentDirectoryPage, AgentDirectorySort, AgentFeeAmount, AgentFeeClaimOptions, AgentFeeClaimResult, AgentFeeIncome, AgentFeeReason, AgentFeesOptions, AgentFeesPage, AgentFeeToken, AgentHoldingOrigin, AgentLeaderboardEntry, AgentPerpPosition, AgentPosition, AgentPositions, AgentPositionsKind, AgentPost, AgentPostsPage, AgentPostToken, AgentPostTokenRef, AgentProfile, AgentPublicHolding, AgentPublicRecord, AgentRecordTotals, AgentRewardClaim, AgentSpotPosition, AgentTierInfo, AtomicBundleLegRole, AtomicBundleLegSigner, AtomicBundleResponseLeg, AtomicDryRunFill, AtomicDryRunResult, AtomicFirstBuyRequest, AtomicLaunchPayer, BaseAssetKey, BuildAtomicLaunchRequest, BuildAtomicLaunchResult, BuildSelfLaunchAtomicResult, BuildSelfLaunchHoodResult, BuildSelfLaunchRequest, BuildSelfLaunchResult, BuildSelfLaunchSolanaResult, BuildTradeBuiltResult, BuildTradeRequest, BuildTradeResult, CandleClientOptions, CandleFees, CandlePerps, CandlePerpsWithdraw, CandleWallets, Chain, CloseEmptyAccountsBatch, CloseEmptyAccountsFailure, CloseEmptyAccountsJob, CloseEmptyAccountsJobOptions, CloseEmptyAccountsPreview, CloseEmptyAccountsRequest, CloseEmptyAccountsResult, CloseEmptyAccountsUnresolved, ConfirmSelfLaunchRequest, ConfirmSelfLaunchResult, ConfirmTradeRequest, ConfirmTradeResult, CreateAgentPostRequest, CurveTerms, DryRunResult, EditTokenMetadataRequest, EmptyTokenAccount, EmptyTokenAccountSkipReason, EvmSignTransactionParams, ExecutedTradeResult, FeedBucket, FeedResult, FeedToken, GetAgentPositionsOptions, HoodTradeArtifacts, ImportWalletResult, LaunchAtomicFirstBuyRequest, LaunchAtomicPayer, LaunchAtomicRequest, LaunchAtomicResult, LaunchCurve, LaunchCurveTerms, LaunchGraduationPreview, LaunchJob, LaunchPreset, LaunchPreviewFeeLine, LaunchPreviewTerms, LaunchRequest, LaunchResult, LaunchTier, LinkedSwapRequest, LinkedSwapResult, LinkedWalletRow, ListAgentPostsOptions, ListAgentsOptions, ListWalletsResult, MarketState, MigrationStatus, OwnAgentProfile, OwnAgentProfilePatch, PerpsAccountStatus, PerpsActionResult, PerpsBuild, PerpsCancelParams, PerpsCloseParams, PerpsConfig, PerpsDepositBuild, PerpsDepositParams, PerpsDepositResult, PerpsLeverageParams, PerpsMarginParams, PerpsModifyParams, PerpsOpenParams, PerpsOrderRecord, PerpsOrders, PerpsPositions, PerpsReduceOnlyResult, PerpsReplay, PerpsReplayResult, PerpsRiskSettingsResult, PerpsRiskWrite, PerpsRiskWriteResult, PerpsScheduleCancelParams, PerpsSetupResult, PerpsSide, PerpsStreamFrame, PerpsStreamSocketOptions, PerpsStreamWebSocket, PerpsWalletRef, PerpsWithdrawBuildRequest, PerpsWithdrawParams, PerpsWithdrawResult, PerpsWithdrawStatus, PoolFee, PortfolioHoodSection, PortfolioHoodTeeWallet, PortfolioHoodToken, PortfolioHoodWallet, PortfolioPrice, PortfolioResult, PortfolioSolanaTeeWallet, PortfolioSolanaToken, PortfolioSolanaWallet, PortfolioUnpricedReason, PresetsPayload, PreviewCloseEmptyAccountsRequest, ProfileBoardPnl, ProfileChainPnl, ProfileClosedPosition, ProfileClosedSummary, ProfileOpenPosition, ProfilePnlEngineFields, ProfilePnlResult, ProfilePnlSummaryRow, ProfileTradeRow, ProfileTradesOptions, ProfileTradesResult, ProfileWalletPnl, ProfileWalletRow, ProfileWalletScope, ProfileWalletsResult, QuoteBreakdown, QuotePair, QuotePairsPayload, QuoteResult, ResolvedLaunch, SelfBalancesOptions, SelfBalancesResult, SelfLaunchDryRunResult, SelfLaunchRequest, SelfWallet, SelfWalletBalance, SignLinkedTransactionParams, SignLinkedTransactionResult, SkippedEmptyTokenAccount, SolanaTradeArtifacts, SpendLimit, SpendLimitsResult, SubmitAtomicLaunchRequest, SubmitAtomicLaunchResult, SubmitTradeRequest, SwapRequest, SwapResult, SwapSettlement, SwapSettlementLeg, SwapSettlementState, TokenCard, TokenCardFact, TokenCardFacts, TokenCardSameName, TokenCardSameNameCandidate, TokenEvent, TokenEventGroup, TokenEventGroupVisibility, TokenEventKind, TokenEventsPage, TokenEventWallet, TokenMetadataEditResult, TokenMetadataHistory, TokenMetadataHistoryItem, TokenMetadataSocialKey, TokenMetadataSocials, TradeFee, TradeJob, TradePayer, TradeRace, TradeRequest, TradeRoute, TradeRouteHop, TradeSide, VerifyResult, WalletKind, } from "./client";
|
|
2
2
|
export { CandleClient, CrossOriginRedirectError, perpsDepositProblem } from "./client";
|
|
3
3
|
export type { BridgeErrorCode, CandleErrorPayload, CandleRoutingDetail, OperationIds, SelfLaunchFeeOutcome, SelfLaunchOutcomeErrorArgs, SolanaRpcErrorData, } from "./errors";
|
|
4
4
|
export { BRIDGE_ERROR_CODES, CandleApiError, CandleOperationError, isSolanaRpcErrorData, JsonRpcError, operationIds, SelfLaunchOutcomeError, type SignedTradeLeg, TradeLandedFeeLegError, TradeLandedUnconfirmedError, TradeLegOutcomeError, } from "./errors";
|
|
@@ -9,12 +9,14 @@ export type { HyperliquidPerpsPosition, HyperliquidPnlFigures, HyperliquidPnlSec
|
|
|
9
9
|
export { effectivePerpsRisk, HYPERLIQUID_RISK_DEFAULTS, type HyperliquidInfoFetcher, HyperliquidReadError, hyperliquidRiskReport, type PerpsAccountLine, type PerpsAccountReport, type PerpsPortfolioAccount, type PerpsPortfolioSection, type PerpsPositionRow, type PerpsRecentFigures, type PerpsRiskDriver, type PerpsRiskLevel, type PerpsRiskReport, type PerpsRiskSettings, type PerpsRiskThresholds, type PerpsRiskThresholdsReport, type PerpsWatchEvent, perpsPortfolioSection, perpsRiskExitCode, perpsRiskStep, readPerpsRisk, watchPerpsRisk, } from "./hyperliquid-risk";
|
|
10
10
|
export { CANDLE_PERPS_WITHDRAW_PINS, type PerpsWithdrawAuthorization, type PerpsWithdrawBuild, type PerpsWithdrawPins, parseSendAssetAmount, parseWithdrawAmount, verifyWithdrawMapping, verifyWithdrawSendAsset, type WithdrawCheck, } from "./hyperliquid-withdraw";
|
|
11
11
|
export { KeychainSecretStore } from "./keychain-secret-store";
|
|
12
|
+
export { createLabClient, LAB_CALL_TIMEOUT_MS, LAB_DEFAULT_URL, LAB_PATH, LAB_REPLAY_INTERVAL_MS, LAB_REPLAY_TIMEOUT_MS, type LabAnswer, type LabClient, type LabClientOptions, type LabJobId, type LabRecord, type LabRefusal, type LabReplayInput, type LabReplayJob, type LabReplayStarted, type LabStatus, } from "./lab";
|
|
12
13
|
export { PERPS_HISTORY_DEFAULT_LIMIT, PERPS_HISTORY_MAX_LIMIT, type PerpsFillRow, type PerpsFillsPage, type PerpsFundingPage, type PerpsFundingRow, PerpsHistoryError, type PerpsHistoryOptions, type PerpsHistoryWarning, readPerpsHistoryPage, } from "./perps-history";
|
|
13
14
|
export { type AgentPlansResult, formatPlanBps, PLAN_CAPABILITY_LABELS, PLAN_CAPABILITY_NOTE, type PlanCapabilities, type PlanLimits, type PlanName, type PlanPrice, type PlanTable, type PlanTableEntry, planLabel, planPromotionLine, planTableMarkdown, planTableRows, } from "./plans";
|
|
14
15
|
export { createQuantKeyClient, newClientTurnId, QUANT_AGENT_PATH, QUANT_CALL_TIMEOUT_MS, QUANT_DEFAULT_MAX_TEXT_CHARS, QUANT_POLL_TIMEOUT_MS, type QuantAnswer, type QuantEventsPage, type QuantHistoryItem, type QuantHistoryPage, type QuantKeyClient, type QuantKeyClientOptions, type QuantKeyStatus, type QuantRefusal, type QuantTurnEvent, type QuantTurnStarted, quantCodePoints, quantRefusalCode, } from "./quant";
|
|
15
16
|
export type { SecretStore } from "./secret-store";
|
|
16
17
|
export { EncryptedFileSecretStore, InMemorySecretStore } from "./secret-store";
|
|
17
18
|
export type * from "./staking";
|
|
19
|
+
export { CLUSTER_CAVEAT, CLUSTER_LABEL, CLUSTER_MESSAGE, CLUSTER_REASONS, type ClusterAnalysis, type ClusterReason, type ClusterResult, } from "./token-clusters";
|
|
18
20
|
export type * from "./token-pages";
|
|
19
21
|
export { TokenPageError } from "./token-pages";
|
|
20
22
|
export * from "./token-pages.types";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -4389,6 +4389,88 @@ async function readPerpsHistoryPage(req) {
|
|
|
4389
4389
|
return kind === "fills" ? { ...envelope, fills: page } : { ...envelope, funding: page };
|
|
4390
4390
|
}
|
|
4391
4391
|
|
|
4392
|
+
// src/token-clusters.ts
|
|
4393
|
+
var CLUSTER_REASONS = [
|
|
4394
|
+
"disabled",
|
|
4395
|
+
"invalid_config",
|
|
4396
|
+
"unsupported_chain",
|
|
4397
|
+
"invalid_mint",
|
|
4398
|
+
"key_missing",
|
|
4399
|
+
"gate_uncalibrated",
|
|
4400
|
+
"market_data_missing",
|
|
4401
|
+
"market_data_stale",
|
|
4402
|
+
"token_too_new",
|
|
4403
|
+
"gate_not_met",
|
|
4404
|
+
"not_indexed",
|
|
4405
|
+
"empty_analysis",
|
|
4406
|
+
"invalid_response",
|
|
4407
|
+
"timeout",
|
|
4408
|
+
"upstream_unavailable",
|
|
4409
|
+
"upstream_4xx",
|
|
4410
|
+
"upstream_5xx",
|
|
4411
|
+
"rate_limited",
|
|
4412
|
+
"quota_exhausted",
|
|
4413
|
+
"budget_exhausted",
|
|
4414
|
+
"budget_unavailable",
|
|
4415
|
+
"request_in_progress",
|
|
4416
|
+
"transport_error",
|
|
4417
|
+
"internal_unavailable"
|
|
4418
|
+
];
|
|
4419
|
+
var CLUSTER_MESSAGE = "Cluster analysis not available for this token";
|
|
4420
|
+
var CLUSTER_LABEL = "Third-party cluster analysis";
|
|
4421
|
+
var CLUSTER_CAVEAT = "Third-party estimates of linked wallets. Exchange, pool and service wallets may be grouped together. These figures do not establish common ownership, insider conduct or wrongdoing.";
|
|
4422
|
+
function clusterUnavailable(mint, reason, retryAt) {
|
|
4423
|
+
return {
|
|
4424
|
+
status: "unavailable",
|
|
4425
|
+
mint,
|
|
4426
|
+
reason,
|
|
4427
|
+
message: CLUSTER_MESSAGE,
|
|
4428
|
+
...retryAt !== undefined && Number.isFinite(retryAt) ? { retryAt: new Date(retryAt).toISOString() } : {}
|
|
4429
|
+
};
|
|
4430
|
+
}
|
|
4431
|
+
function readClusterResult(value, mint) {
|
|
4432
|
+
if (!value || typeof value !== "object")
|
|
4433
|
+
return null;
|
|
4434
|
+
const v = value;
|
|
4435
|
+
if (v.mint !== mint)
|
|
4436
|
+
return null;
|
|
4437
|
+
if (v.status === "unavailable" && CLUSTER_REASONS.includes(v.reason)) {
|
|
4438
|
+
const retry = v.retryAt === undefined ? undefined : typeof v.retryAt === "string" ? Date.parse(v.retryAt) : NaN;
|
|
4439
|
+
if (retry !== undefined && !Number.isFinite(retry))
|
|
4440
|
+
return null;
|
|
4441
|
+
return clusterUnavailable(mint, v.reason, retry);
|
|
4442
|
+
}
|
|
4443
|
+
if (v.status !== "available" || v.chain !== "solana" || v.source !== "third_party" || !["hit", "miss"].includes(v.cache) || typeof v.fetchedAt !== "string" || typeof v.expiresAt !== "string" || !Number.isFinite(Date.parse(v.fetchedAt)) || !(Date.parse(v.expiresAt) > Date.parse(v.fetchedAt)))
|
|
4444
|
+
return null;
|
|
4445
|
+
const a = v.analysis;
|
|
4446
|
+
const percent = (n) => typeof n === "number" && Number.isFinite(n) && n >= 0 && n <= 100;
|
|
4447
|
+
if (!a || !percent(a.clusterSupplyPct) || !Array.isArray(a.clusters) || !a.clusters.length || a.clusters.length > 100)
|
|
4448
|
+
return null;
|
|
4449
|
+
let addresses = 0;
|
|
4450
|
+
for (const c of a.clusters) {
|
|
4451
|
+
if (!c || !percent(c.supplyPct) || c.supplyPct > a.clusterSupplyPct + 0.01 || !Array.isArray(c.addresses) || !Array.isArray(c.tags) || c.tags.length > 32 || c.tags.some((t) => typeof t !== "string" || t.length > 100) || c.addresses.some((x) => typeof x !== "string" || !/^[1-9A-HJ-NP-Za-km-z]{32,44}$/.test(x)))
|
|
4452
|
+
return null;
|
|
4453
|
+
addresses += c.addresses.length;
|
|
4454
|
+
}
|
|
4455
|
+
if (addresses > 1000 || a.clusterSupplyPct === 0 && a.clusters.every((c) => c.supplyPct === 0))
|
|
4456
|
+
return null;
|
|
4457
|
+
return {
|
|
4458
|
+
status: "available",
|
|
4459
|
+
chain: "solana",
|
|
4460
|
+
mint,
|
|
4461
|
+
source: "third_party",
|
|
4462
|
+
label: CLUSTER_LABEL,
|
|
4463
|
+
caveat: CLUSTER_CAVEAT,
|
|
4464
|
+
fetchedAt: v.fetchedAt,
|
|
4465
|
+
expiresAt: v.expiresAt,
|
|
4466
|
+
cache: v.cache,
|
|
4467
|
+
analysis: {
|
|
4468
|
+
clusterSupplyPct: a.clusterSupplyPct,
|
|
4469
|
+
clusters: a.clusters.map((c) => ({ supplyPct: c.supplyPct, addresses: [...c.addresses], tags: [...c.tags] }))
|
|
4470
|
+
}
|
|
4471
|
+
};
|
|
4472
|
+
}
|
|
4473
|
+
|
|
4392
4474
|
// src/token-pages.ts
|
|
4393
4475
|
class TokenPageError extends CandleApiError {
|
|
4394
4476
|
idempotencyKey;
|
|
@@ -4485,6 +4567,13 @@ function createTokenPagesClient(io) {
|
|
|
4485
4567
|
}
|
|
4486
4568
|
const sectionPath = (section) => `/sections/${encodeURIComponent(section)}`;
|
|
4487
4569
|
return {
|
|
4570
|
+
updates: (token, options) => request("GET", path(token, `/updates${query(options)}`), false),
|
|
4571
|
+
postUpdate: (token, body, options) => write("POST", path(token, "/updates"), body, options),
|
|
4572
|
+
deletePost: (token, id, options) => write("DELETE", path(token, `/posts/${encodeURIComponent(id)}`), {}, options),
|
|
4573
|
+
comments: (token, options) => request("GET", path(token, `/comments${query(options)}`), false),
|
|
4574
|
+
postComment: (token, body, options) => write("POST", path(token, "/comments"), body, options),
|
|
4575
|
+
seen: (token) => request("GET", path(token, "/seen"), true),
|
|
4576
|
+
markSeen: (token, visibleUpdateSequence, options) => write("POST", path(token, "/seen"), { visibleUpdateSequence }, options),
|
|
4488
4577
|
about: (token) => request("GET", path(token), false),
|
|
4489
4578
|
capabilities: (token) => request("GET", path(token, "/capabilities"), true),
|
|
4490
4579
|
burns: (token, options) => request("GET", path(token, `/burns${query(options)}`), false),
|
|
@@ -4715,6 +4804,7 @@ function isAtomicSubmitOutcome(value) {
|
|
|
4715
4804
|
return false;
|
|
4716
4805
|
}
|
|
4717
4806
|
var DEFAULT_MAX_RETRIES = 3;
|
|
4807
|
+
var CLUSTER_READ_TIMEOUT_MS = 12000;
|
|
4718
4808
|
var DEFAULT_POLL_MS = 2000;
|
|
4719
4809
|
var DEFAULT_WAIT_TIMEOUT_MS = 180000;
|
|
4720
4810
|
function isLoopbackHost(hostname) {
|
|
@@ -4986,9 +5076,43 @@ class CandleClient {
|
|
|
4986
5076
|
const body = await this.requestJson("GET", `/api/v1/tokens/${chain}/${encodeURIComponent(mint)}/card${query}`);
|
|
4987
5077
|
return body.card;
|
|
4988
5078
|
}
|
|
5079
|
+
async editTokenMetadata(request, opts = {}) {
|
|
5080
|
+
this.requireKey("editTokenMetadata()");
|
|
5081
|
+
const body = {
|
|
5082
|
+
...request.description !== undefined ? { description: request.description } : {},
|
|
5083
|
+
...request.socials !== undefined ? { socials: request.socials } : {}
|
|
5084
|
+
};
|
|
5085
|
+
const res = await this.fetchImpl(`${this.apiUrl}/api/v1/tokens/${request.chain}/${encodeURIComponent(request.mint)}/metadata`, {
|
|
5086
|
+
method: "PATCH",
|
|
5087
|
+
headers: { ...this.headers({ json: true }), "Idempotency-Key": opts.idempotencyKey ?? crypto.randomUUID() },
|
|
5088
|
+
body: JSON.stringify(body)
|
|
5089
|
+
});
|
|
5090
|
+
return (await this.parseResponse(res)).payload;
|
|
5091
|
+
}
|
|
5092
|
+
async tokenMetadataHistory(params) {
|
|
5093
|
+
const query = new URLSearchParams({
|
|
5094
|
+
...params.limit !== undefined ? { limit: String(params.limit) } : {},
|
|
5095
|
+
...params.cursor !== undefined ? { cursor: params.cursor } : {}
|
|
5096
|
+
}).toString();
|
|
5097
|
+
const body = await this.requestJson("GET", `/api/v1/tokens/${params.chain}/${encodeURIComponent(params.mint)}/metadata/history${query ? `?${query}` : ""}`);
|
|
5098
|
+
return body.payload;
|
|
5099
|
+
}
|
|
4989
5100
|
async verify(chain, mint) {
|
|
4990
5101
|
return this.requestJson("GET", `/api/v1/verify/${chain}/${encodeURIComponent(mint)}`);
|
|
4991
5102
|
}
|
|
5103
|
+
async getTokenClusters(mint, opts = {}) {
|
|
5104
|
+
const chain = opts.chain ?? "solana";
|
|
5105
|
+
try {
|
|
5106
|
+
const res = await this.fetchImpl(`${this.apiUrl}/api/v1/tokens/${encodeURIComponent(mint)}/clusters?chain=${encodeURIComponent(chain)}`, { method: "GET", cache: "no-store", signal: AbortSignal.timeout(CLUSTER_READ_TIMEOUT_MS) });
|
|
5107
|
+
noteLatestSdkVersion(res.headers?.get?.("x-candle-sdk-latest") ?? null);
|
|
5108
|
+
if (res.ok) {
|
|
5109
|
+
const body = JSON.parse(await res.text());
|
|
5110
|
+
if (body?.success === true)
|
|
5111
|
+
return readClusterResult(body.data, mint) ?? clusterUnavailable(mint, "transport_error");
|
|
5112
|
+
}
|
|
5113
|
+
} catch {}
|
|
5114
|
+
return clusterUnavailable(mint, "transport_error");
|
|
5115
|
+
}
|
|
4992
5116
|
async getOwnProfile() {
|
|
4993
5117
|
this.requireKey("getOwnProfile()");
|
|
4994
5118
|
return this.requestJson("GET", "/api/v1/agent/keys/self/public-profile");
|
|
@@ -5028,6 +5152,13 @@ class CandleClient {
|
|
|
5028
5152
|
const body = await this.requestJson("GET", `/api/v1/agent/records/${encodeURIComponent(profileId)}/posts${params.size ? `?${params}` : ""}`);
|
|
5029
5153
|
return { posts: body.posts, cursor: body.cursor ?? null };
|
|
5030
5154
|
}
|
|
5155
|
+
async getAgentPositions(profileId, options = {}) {
|
|
5156
|
+
const params = new URLSearchParams;
|
|
5157
|
+
if (options.kind !== undefined)
|
|
5158
|
+
params.set("kind", options.kind);
|
|
5159
|
+
const { success: _success, ...positions } = await this.requestJson("GET", `/api/v1/agent/records/${encodeURIComponent(profileId)}/positions${params.size ? `?${params}` : ""}`);
|
|
5160
|
+
return positions;
|
|
5161
|
+
}
|
|
5031
5162
|
async getAgentProfile(idOrWallet) {
|
|
5032
5163
|
const body = await this.requestJson("GET", `/api/v1/users/${encodeURIComponent(idOrWallet)}/agent`);
|
|
5033
5164
|
return body.agent;
|
|
@@ -6629,7 +6760,7 @@ function generateClientLaunchId() {
|
|
|
6629
6760
|
function generateClientTradeId() {
|
|
6630
6761
|
return generateSdkId();
|
|
6631
6762
|
}
|
|
6632
|
-
var SDK_VERSION = "0.6.
|
|
6763
|
+
var SDK_VERSION = "0.6.12";
|
|
6633
6764
|
var sdkUpdateWarned = false;
|
|
6634
6765
|
function noteLatestSdkVersion(value) {
|
|
6635
6766
|
if (sdkUpdateWarned || !value || !/^\d+\.\d+\.\d+$/.test(value))
|
|
@@ -6754,6 +6885,107 @@ class KeychainSecretStore {
|
|
|
6754
6885
|
await this.exec("secret-tool", ["clear", "service", SERVICE, "account", ref]);
|
|
6755
6886
|
}
|
|
6756
6887
|
}
|
|
6888
|
+
// src/lab.ts
|
|
6889
|
+
var LAB_DEFAULT_URL = "https://api.hacc.fun";
|
|
6890
|
+
var LAB_PATH = "/v1/strategy-lab";
|
|
6891
|
+
var LAB_CALL_TIMEOUT_MS = 1e4;
|
|
6892
|
+
var LAB_REPLAY_INTERVAL_MS = 5000;
|
|
6893
|
+
var LAB_REPLAY_TIMEOUT_MS = 660000;
|
|
6894
|
+
function record(value) {
|
|
6895
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
6896
|
+
}
|
|
6897
|
+
function transportRefusal(code, message) {
|
|
6898
|
+
return { ok: false, refusal: { status: 0, code, message } };
|
|
6899
|
+
}
|
|
6900
|
+
function query(values) {
|
|
6901
|
+
const search = new URLSearchParams;
|
|
6902
|
+
for (const [key, value] of Object.entries(values))
|
|
6903
|
+
if (value !== undefined)
|
|
6904
|
+
search.set(key, String(value));
|
|
6905
|
+
return search.size ? `?${search}` : "";
|
|
6906
|
+
}
|
|
6907
|
+
function createLabClient(options) {
|
|
6908
|
+
const base = new URL(options.apiUrl ?? LAB_DEFAULT_URL);
|
|
6909
|
+
if (base.protocol !== "https:" || base.username || base.password || base.search || base.hash) {
|
|
6910
|
+
throw new Error("The lab needs an HTTPS CANDLE_HACC_URL without credentials, query or fragment.");
|
|
6911
|
+
}
|
|
6912
|
+
const root = base.toString().replace(/\/+$/, "");
|
|
6913
|
+
const doFetch = options.fetch ?? globalThis.fetch;
|
|
6914
|
+
const callMs = options.callTimeoutMs ?? LAB_CALL_TIMEOUT_MS;
|
|
6915
|
+
const now = options.now ?? Date.now;
|
|
6916
|
+
const sleep3 = options.sleep ?? ((ms) => new Promise((resolve2) => setTimeout(resolve2, ms)));
|
|
6917
|
+
async function call(method, path, valid = () => true, body, timeoutMs = callMs) {
|
|
6918
|
+
const controller = new AbortController;
|
|
6919
|
+
let timedOut = false;
|
|
6920
|
+
const timer = setTimeout(() => {
|
|
6921
|
+
timedOut = true;
|
|
6922
|
+
controller.abort();
|
|
6923
|
+
}, timeoutMs);
|
|
6924
|
+
try {
|
|
6925
|
+
const response = await doFetch(`${root}${LAB_PATH}${path}`, {
|
|
6926
|
+
method,
|
|
6927
|
+
redirect: "error",
|
|
6928
|
+
signal: controller.signal,
|
|
6929
|
+
headers: {
|
|
6930
|
+
authorization: `Bearer ${options.apiKey}`,
|
|
6931
|
+
accept: "application/json",
|
|
6932
|
+
...body !== undefined ? { "content-type": "application/json" } : {}
|
|
6933
|
+
},
|
|
6934
|
+
...body !== undefined ? { body: JSON.stringify(body) } : {}
|
|
6935
|
+
});
|
|
6936
|
+
const received = await response.json().catch(() => {
|
|
6937
|
+
return;
|
|
6938
|
+
});
|
|
6939
|
+
if (timedOut)
|
|
6940
|
+
return transportRefusal("TIMEOUT", "The lab request timed out.");
|
|
6941
|
+
if (!response.ok) {
|
|
6942
|
+
return {
|
|
6943
|
+
ok: false,
|
|
6944
|
+
refusal: {
|
|
6945
|
+
status: response.status,
|
|
6946
|
+
code: record(received) && typeof received.code === "string" ? received.code : `HTTP_${response.status}`,
|
|
6947
|
+
message: record(received) && typeof received.error === "string" ? received.error : `Lab request failed (${response.status}).`,
|
|
6948
|
+
body: received
|
|
6949
|
+
}
|
|
6950
|
+
};
|
|
6951
|
+
}
|
|
6952
|
+
if (!record(received) || !valid(received)) {
|
|
6953
|
+
return transportRefusal("BAD_RESPONSE", "The lab returned an unreadable response.");
|
|
6954
|
+
}
|
|
6955
|
+
return { ok: true, status: response.status, body: received };
|
|
6956
|
+
} catch {
|
|
6957
|
+
return transportRefusal(timedOut ? "TIMEOUT" : "NETWORK_ERROR", timedOut ? "The lab request timed out." : "Could not reach the lab.");
|
|
6958
|
+
} finally {
|
|
6959
|
+
clearTimeout(timer);
|
|
6960
|
+
}
|
|
6961
|
+
}
|
|
6962
|
+
const jobPath = (id) => `/replay/${encodeURIComponent(String(id))}`;
|
|
6963
|
+
const validId = (id) => typeof id === "string" && id.length > 0 || typeof id === "number" && Number.isSafeInteger(id) && id > 0;
|
|
6964
|
+
const validJob = (body) => validId(body.job_id) && typeof body.status === "string";
|
|
6965
|
+
return {
|
|
6966
|
+
status: () => call("GET", "/status", (b) => typeof b.plan === "string" && typeof b.allowed === "boolean" && record(b.replays)),
|
|
6967
|
+
replay: (body) => call("POST", "/replay", (b) => validId(b.job_id), body),
|
|
6968
|
+
replayGet: (id) => call("GET", jobPath(id), validJob),
|
|
6969
|
+
replayCancel: (id) => call("POST", `${jobPath(id)}/cancel`),
|
|
6970
|
+
runners: (q = {}) => call("GET", `/runners${query(q)}`),
|
|
6971
|
+
edges: (q = {}) => call("GET", `/edges${query(q)}`),
|
|
6972
|
+
async waitForReplay(id, wait = {}) {
|
|
6973
|
+
const intervalMs = wait.intervalMs ?? LAB_REPLAY_INTERVAL_MS;
|
|
6974
|
+
const timeoutMs = wait.timeoutMs ?? LAB_REPLAY_TIMEOUT_MS;
|
|
6975
|
+
if (!Number.isFinite(intervalMs) || intervalMs <= 0 || !Number.isFinite(timeoutMs) || timeoutMs <= 0) {
|
|
6976
|
+
throw new Error("Replay polling interval and timeout must be positive finite numbers.");
|
|
6977
|
+
}
|
|
6978
|
+
const deadline = now() + timeoutMs;
|
|
6979
|
+
while (now() < deadline) {
|
|
6980
|
+
const answer = await call("GET", jobPath(id), validJob, undefined, Math.min(callMs, deadline - now()));
|
|
6981
|
+
if (!answer.ok || !["pending", "running"].includes(answer.body.status))
|
|
6982
|
+
return answer;
|
|
6983
|
+
await sleep3(Math.min(intervalMs, Math.max(0, deadline - now())));
|
|
6984
|
+
}
|
|
6985
|
+
return transportRefusal("REPLAY_TIMEOUT", `Replay ${id} is still pending or running. Read it with candle lab replay get ${id}.`);
|
|
6986
|
+
}
|
|
6987
|
+
};
|
|
6988
|
+
}
|
|
6757
6989
|
// src/plans.ts
|
|
6758
6990
|
var PLAN_CAPABILITY_NOTE = "A capability marked yes is what the plan allows. It is subject to the deployment's own switches (perps and own-wallet bridges each have one) and to the wallet, scopes and setup the feature needs. Every plan can launch a token from its embedded wallet, with an optional dev buy (same transaction on Solana; best-effort follow-up on Hood), through the headless launch; the two launch rows are additional routes, not the only ones.";
|
|
6759
6991
|
var PLAN_CAPABILITY_LABELS = {
|
|
@@ -6842,28 +7074,28 @@ function newClientTurnId() {
|
|
|
6842
7074
|
return crypto.randomUUID();
|
|
6843
7075
|
}
|
|
6844
7076
|
function quantRefusalCode(body) {
|
|
6845
|
-
const
|
|
6846
|
-
if (typeof
|
|
6847
|
-
return
|
|
6848
|
-
const inner = asRecord(
|
|
7077
|
+
const record2 = asRecord(body);
|
|
7078
|
+
if (typeof record2?.code === "string")
|
|
7079
|
+
return record2.code;
|
|
7080
|
+
const inner = asRecord(record2?.error);
|
|
6849
7081
|
return typeof inner?.code === "string" ? inner.code : undefined;
|
|
6850
7082
|
}
|
|
6851
7083
|
function asRecord(value) {
|
|
6852
7084
|
return value !== null && typeof value === "object" && !Array.isArray(value) ? value : undefined;
|
|
6853
7085
|
}
|
|
6854
7086
|
function refusalOf(status, body) {
|
|
6855
|
-
const
|
|
6856
|
-
const relayCode = typeof
|
|
7087
|
+
const record2 = asRecord(body) ?? {};
|
|
7088
|
+
const relayCode = typeof record2.code === "string" ? record2.code : undefined;
|
|
6857
7089
|
const code = quantRefusalCode(body) ?? `HTTP_${status}`;
|
|
6858
7090
|
const refusal = { code, status, shape: relayCode !== undefined ? "relay" : "envelope" };
|
|
6859
|
-
if (typeof
|
|
6860
|
-
refusal.retryable =
|
|
6861
|
-
if (typeof
|
|
6862
|
-
refusal.resetsAt =
|
|
6863
|
-
if (typeof
|
|
6864
|
-
refusal.turnId =
|
|
6865
|
-
if (typeof
|
|
6866
|
-
refusal.limit =
|
|
7091
|
+
if (typeof record2.retryable === "boolean")
|
|
7092
|
+
refusal.retryable = record2.retryable;
|
|
7093
|
+
if (typeof record2.resetsAt === "string" || typeof record2.resetsAt === "number")
|
|
7094
|
+
refusal.resetsAt = record2.resetsAt;
|
|
7095
|
+
if (typeof record2.turnId === "string")
|
|
7096
|
+
refusal.turnId = record2.turnId;
|
|
7097
|
+
if (typeof record2.limit === "number")
|
|
7098
|
+
refusal.limit = record2.limit;
|
|
6867
7099
|
return refusal;
|
|
6868
7100
|
}
|
|
6869
7101
|
function parseStatus(body) {
|
|
@@ -6998,12 +7230,12 @@ function createQuantKeyClient(options) {
|
|
|
6998
7230
|
}),
|
|
6999
7231
|
cancel: (turnId) => call("POST", `${turnPath(turnId)}/cancel`, (body) => asRecord(body) ?? {}, { timeoutMs: callMs }),
|
|
7000
7232
|
history: (input = {}) => {
|
|
7001
|
-
const
|
|
7233
|
+
const query2 = new URLSearchParams;
|
|
7002
7234
|
if (input.before !== undefined)
|
|
7003
|
-
|
|
7235
|
+
query2.set("before", input.before);
|
|
7004
7236
|
if (input.limit !== undefined)
|
|
7005
|
-
|
|
7006
|
-
const encoded =
|
|
7237
|
+
query2.set("limit", String(input.limit));
|
|
7238
|
+
const encoded = query2.toString();
|
|
7007
7239
|
const suffix = encoded ? `?${encoded}` : "";
|
|
7008
7240
|
return call("GET", `/history${suffix}`, parseHistory, { timeoutMs: callMs });
|
|
7009
7241
|
}
|
|
@@ -7208,6 +7440,7 @@ export {
|
|
|
7208
7440
|
encryptWalletKeyForImport,
|
|
7209
7441
|
effectivePerpsRisk,
|
|
7210
7442
|
createQuantKeyClient,
|
|
7443
|
+
createLabClient,
|
|
7211
7444
|
TradeLegOutcomeError,
|
|
7212
7445
|
TradeLandedUnconfirmedError,
|
|
7213
7446
|
TradeLandedFeeLegError,
|
|
@@ -7229,6 +7462,11 @@ export {
|
|
|
7229
7462
|
PERPS_FUNDING_HISTORY_MAX_MS,
|
|
7230
7463
|
PERPS_FLATTEN_MAX_STEPS,
|
|
7231
7464
|
PERPS_CANDLE_INTERVALS,
|
|
7465
|
+
LAB_REPLAY_TIMEOUT_MS,
|
|
7466
|
+
LAB_REPLAY_INTERVAL_MS,
|
|
7467
|
+
LAB_PATH,
|
|
7468
|
+
LAB_DEFAULT_URL,
|
|
7469
|
+
LAB_CALL_TIMEOUT_MS,
|
|
7232
7470
|
KeychainSecretStore,
|
|
7233
7471
|
JsonRpcError,
|
|
7234
7472
|
InMemorySecretStore,
|
|
@@ -7242,6 +7480,10 @@ export {
|
|
|
7242
7480
|
CandleOperationError,
|
|
7243
7481
|
CandleClient,
|
|
7244
7482
|
CandleApiError,
|
|
7483
|
+
CLUSTER_REASONS,
|
|
7484
|
+
CLUSTER_MESSAGE,
|
|
7485
|
+
CLUSTER_LABEL,
|
|
7486
|
+
CLUSTER_CAVEAT,
|
|
7245
7487
|
CANDLE_PERPS_WITHDRAW_PINS,
|
|
7246
7488
|
CANDLE_HYPERLIQUID_BUILDER_ADDRESS,
|
|
7247
7489
|
BRIDGE_ERROR_CODES
|
package/dist/lab.d.ts
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependency-free hacc strategy lab client (BE-2038, strategy lab spec R18).
|
|
3
|
+
* The CLI carries a byte-identical copy. Copy changes verbatim:
|
|
4
|
+
* `cp packages/sdk/src/lab.ts packages/cli/src/lab.ts`.
|
|
5
|
+
* Bodies, including refusals and older results without a lead card, are kept unchanged.
|
|
6
|
+
*/
|
|
7
|
+
export declare const LAB_DEFAULT_URL = "https://api.hacc.fun";
|
|
8
|
+
export declare const LAB_PATH = "/v1/strategy-lab";
|
|
9
|
+
export declare const LAB_CALL_TIMEOUT_MS = 10000;
|
|
10
|
+
export declare const LAB_REPLAY_INTERVAL_MS = 5000;
|
|
11
|
+
export declare const LAB_REPLAY_TIMEOUT_MS = 660000;
|
|
12
|
+
export type LabRecord = Record<string, unknown>;
|
|
13
|
+
export type LabJobId = string | number;
|
|
14
|
+
export interface LabStatus extends LabRecord {
|
|
15
|
+
plan: string;
|
|
16
|
+
allowed: boolean;
|
|
17
|
+
replays: {
|
|
18
|
+
cap: number | null;
|
|
19
|
+
used: number | null;
|
|
20
|
+
resets_at: string;
|
|
21
|
+
};
|
|
22
|
+
active_job_id: LabJobId | null;
|
|
23
|
+
}
|
|
24
|
+
export interface LabReplayInput {
|
|
25
|
+
definition: LabRecord;
|
|
26
|
+
from: string;
|
|
27
|
+
to: string;
|
|
28
|
+
asset_ids?: number[];
|
|
29
|
+
cost?: {
|
|
30
|
+
fee_bps_per_side?: number;
|
|
31
|
+
slippage_bps_per_side?: number;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export interface LabReplayStarted extends LabRecord {
|
|
35
|
+
job_id: LabJobId;
|
|
36
|
+
}
|
|
37
|
+
export interface LabReplayJob extends LabReplayStarted {
|
|
38
|
+
status: string;
|
|
39
|
+
error?: string | null;
|
|
40
|
+
result?: LabRecord | null;
|
|
41
|
+
}
|
|
42
|
+
export interface LabRefusal {
|
|
43
|
+
status: number;
|
|
44
|
+
code: string;
|
|
45
|
+
message: string;
|
|
46
|
+
/** The server's complete body, retained for machine output and future additive fields. */
|
|
47
|
+
body?: unknown;
|
|
48
|
+
}
|
|
49
|
+
export type LabAnswer<T> = {
|
|
50
|
+
ok: true;
|
|
51
|
+
status: number;
|
|
52
|
+
body: T;
|
|
53
|
+
} | {
|
|
54
|
+
ok: false;
|
|
55
|
+
refusal: LabRefusal;
|
|
56
|
+
};
|
|
57
|
+
export interface LabClientOptions {
|
|
58
|
+
apiKey: string;
|
|
59
|
+
/** Pass CANDLE_HACC_URL here; it must be HTTPS, including for local servers. */
|
|
60
|
+
apiUrl?: string;
|
|
61
|
+
fetch?: typeof fetch;
|
|
62
|
+
callTimeoutMs?: number;
|
|
63
|
+
now?: () => number;
|
|
64
|
+
sleep?: (ms: number) => Promise<void>;
|
|
65
|
+
}
|
|
66
|
+
export interface LabClient {
|
|
67
|
+
status(): Promise<LabAnswer<LabStatus>>;
|
|
68
|
+
replay(body: LabReplayInput): Promise<LabAnswer<LabReplayStarted>>;
|
|
69
|
+
replayGet(id: LabJobId): Promise<LabAnswer<LabReplayJob>>;
|
|
70
|
+
replayCancel(id: LabJobId): Promise<LabAnswer<LabRecord>>;
|
|
71
|
+
runners(q?: {
|
|
72
|
+
hours?: number;
|
|
73
|
+
min_wallets?: number;
|
|
74
|
+
}): Promise<LabAnswer<LabRecord>>;
|
|
75
|
+
edges(q?: {
|
|
76
|
+
days?: number;
|
|
77
|
+
min_n?: number;
|
|
78
|
+
}): Promise<LabAnswer<LabRecord>>;
|
|
79
|
+
waitForReplay(id: LabJobId, options?: {
|
|
80
|
+
intervalMs?: number;
|
|
81
|
+
timeoutMs?: number;
|
|
82
|
+
}): Promise<LabAnswer<LabReplayJob>>;
|
|
83
|
+
}
|
|
84
|
+
export declare function createLabClient(options: LabClientOptions): LabClient;
|
|
85
|
+
//# sourceMappingURL=lab.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lab.d.ts","sourceRoot":"","sources":["../src/lab.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/** Public protocol for the optional cluster read. Unavailable never contains numeric analysis. */
|
|
2
|
+
export declare const CLUSTER_REASONS: readonly ["disabled", "invalid_config", "unsupported_chain", "invalid_mint", "key_missing", "gate_uncalibrated", "market_data_missing", "market_data_stale", "token_too_new", "gate_not_met", "not_indexed", "empty_analysis", "invalid_response", "timeout", "upstream_unavailable", "upstream_4xx", "upstream_5xx", "rate_limited", "quota_exhausted", "budget_exhausted", "budget_unavailable", "request_in_progress", "transport_error", "internal_unavailable"];
|
|
3
|
+
export type ClusterReason = (typeof CLUSTER_REASONS)[number];
|
|
4
|
+
export declare const CLUSTER_MESSAGE = "Cluster analysis not available for this token";
|
|
5
|
+
export declare const CLUSTER_LABEL = "Third-party cluster analysis";
|
|
6
|
+
export declare const CLUSTER_CAVEAT = "Third-party estimates of linked wallets. Exchange, pool and service wallets may be grouped together. These figures do not establish common ownership, insider conduct or wrongdoing.";
|
|
7
|
+
export interface ClusterAnalysis {
|
|
8
|
+
clusterSupplyPct: number;
|
|
9
|
+
clusters: {
|
|
10
|
+
supplyPct: number;
|
|
11
|
+
addresses: string[];
|
|
12
|
+
tags: string[];
|
|
13
|
+
}[];
|
|
14
|
+
}
|
|
15
|
+
export type ClusterResult = {
|
|
16
|
+
status: "available";
|
|
17
|
+
chain: "solana";
|
|
18
|
+
mint: string;
|
|
19
|
+
source: "third_party";
|
|
20
|
+
label: typeof CLUSTER_LABEL;
|
|
21
|
+
caveat: string;
|
|
22
|
+
fetchedAt: string;
|
|
23
|
+
expiresAt: string;
|
|
24
|
+
cache: "hit" | "miss";
|
|
25
|
+
analysis: ClusterAnalysis;
|
|
26
|
+
} | {
|
|
27
|
+
status: "unavailable";
|
|
28
|
+
mint: string;
|
|
29
|
+
reason: ClusterReason;
|
|
30
|
+
message: typeof CLUSTER_MESSAGE;
|
|
31
|
+
retryAt?: string;
|
|
32
|
+
};
|
|
33
|
+
export declare function clusterUnavailable(mint: string, reason: ClusterReason, retryAt?: number): ClusterResult;
|
|
34
|
+
/** Construct only protocol fields; malformed/unknown server output is a client availability failure. */
|
|
35
|
+
export declare function readClusterResult(value: unknown, mint: string): ClusterResult | null;
|
|
36
|
+
//# sourceMappingURL=token-clusters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-clusters.d.ts","sourceRoot":"","sources":["../src/token-clusters.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,eAAO,MAAM,eAAe,scAyBlB,CAAA;AACV,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAA;AAC5D,eAAO,MAAM,eAAe,kDAAkD,CAAA;AAC9E,eAAO,MAAM,aAAa,iCAAiC,CAAA;AAC3D,eAAO,MAAM,cAAc,yLAC6J,CAAA;AACxL,MAAM,WAAW,eAAe;IAC9B,gBAAgB,EAAE,MAAM,CAAA;IACxB,QAAQ,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAA;CACvE;AACD,MAAM,MAAM,aAAa,GACrB;IACE,MAAM,EAAE,WAAW,CAAA;IACnB,KAAK,EAAE,QAAQ,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,aAAa,CAAA;IACrB,KAAK,EAAE,OAAO,aAAa,CAAA;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,KAAK,GAAG,MAAM,CAAA;IACrB,QAAQ,EAAE,eAAe,CAAA;CAC1B,GACD;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,OAAO,eAAe,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AACrH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,aAAa,CAQvG;AAED,wGAAwG;AACxG,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAuDpF"}
|
package/dist/token-pages.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CandleApiError } from "./errors";
|
|
2
|
-
import type { AboutBurnHistory, AboutCapabilities, AboutHistory, AboutSection, AboutToken, ClaimResult, CreatorChallenge, FlagReason, FlagResult, TokenAbout } from "./token-pages.types";
|
|
2
|
+
import type { AboutBurnHistory, AboutCapabilities, AboutComments, AboutHistory, AboutSection, AboutSeen, AboutToken, AboutUpdates, ClaimResult, CreatorChallenge, FlagReason, FlagResult, TokenAbout } from "./token-pages.types";
|
|
3
3
|
export type TokenPageClaim = {
|
|
4
4
|
kind: "holder" | "creator";
|
|
5
5
|
challengeId?: string;
|
|
@@ -52,6 +52,27 @@ export declare class TokenPageError extends CandleApiError {
|
|
|
52
52
|
}
|
|
53
53
|
/** The API remains the authoritative validator, including strict bodies and fresh eligibility. */
|
|
54
54
|
export interface CandleTokenPages {
|
|
55
|
+
updates(token: AboutToken, options?: TokenPagePagination): Promise<AboutUpdates>;
|
|
56
|
+
postUpdate(token: AboutToken, body: {
|
|
57
|
+
text: string;
|
|
58
|
+
}, options?: TokenPageWriteOptions): Promise<TokenPageWriteResult<{
|
|
59
|
+
id: string;
|
|
60
|
+
sequence: string;
|
|
61
|
+
}>>;
|
|
62
|
+
deletePost(token: AboutToken, id: string, options?: TokenPageWriteOptions): Promise<TokenPageWriteResult<{
|
|
63
|
+
id: string;
|
|
64
|
+
deleted: true;
|
|
65
|
+
}>>;
|
|
66
|
+
/** Public newest-first comments with tombstones; sends no key. */
|
|
67
|
+
comments(token: AboutToken, options?: TokenPagePagination): Promise<AboutComments>;
|
|
68
|
+
/** An immutable comment under the 0.5% editing gate. Never pushed; delete it with `deletePost`. */
|
|
69
|
+
postComment(token: AboutToken, body: {
|
|
70
|
+
text: string;
|
|
71
|
+
}, options?: TokenPageWriteOptions): Promise<TokenPageWriteResult<{
|
|
72
|
+
id: string;
|
|
73
|
+
}>>;
|
|
74
|
+
seen(token: AboutToken): Promise<AboutSeen>;
|
|
75
|
+
markSeen(token: AboutToken, visibleUpdateSequence: string, options?: TokenPageWriteOptions): Promise<TokenPageWriteResult<AboutSeen>>;
|
|
55
76
|
about(token: AboutToken): Promise<TokenAbout>;
|
|
56
77
|
capabilities(token: AboutToken): Promise<AboutCapabilities>;
|
|
57
78
|
burns(token: AboutToken, options?: TokenPagePagination): Promise<AboutBurnHistory>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-pages.d.ts","sourceRoot":"","sources":["../src/token-pages.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"token-pages.d.ts","sourceRoot":"","sources":["../src/token-pages.ts"],"names":[],"mappings":"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"}
|