This commit is contained in:
2026-05-19 11:14:20 +02:00
parent 3f6d2e9f7f
commit 3da01156a0
22 changed files with 1137 additions and 308 deletions

View File

@@ -166,7 +166,8 @@
<div class="mb-3">
<label for="demoPipeline2ValidationProfileSelect" class="form-label">Validation profile</label>
<select id="demoPipeline2ValidationProfileSelect" class="form-select">
<option value="0.7.38_token_metadata_gap_prioritization" selected>0.7.38token metadata gap prioritization</option>
<option value="0.7.39_launch_surface_origin_baseline" selected>0.7.39launch surface origin baseline</option>
<option value="0.7.38_token_metadata_gap_prioritization">0.7.38 — token metadata gap prioritization</option>
<option value="0.7.37_token_metadata_catalog_enrichment">0.7.37 — token metadata/catalog enrichment</option>
<option value="0.7.36_meteora_family_consolidation">0.7.36 — Meteora family consolidation</option>
<option value="0.7.35_non_trade_fee_reward_admin">0.7.35 — non-trade fee/reward admin</option>

View File

@@ -0,0 +1,54 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
/**
* Local launch-origin diagnostic sample for the UI.
*/
export type DemoPipeline2LocalLaunchOriginDiagnosticSample = {
/**
* Launch attribution id.
*/
launchAttributionId: number,
/**
* Launch surface code.
*/
launchSurfaceCode: string,
/**
* Launch surface display name.
*/
launchSurfaceName: string,
/**
* Transaction signature.
*/
transactionSignature: string,
/**
* Decoded event id.
*/
decodedEventId: number,
/**
* Effective protocol recorded on the decoded event.
*/
protocolName: string,
/**
* Match kind used for attribution.
*/
matchKind: string,
/**
* Matched key value.
*/
matchedValue: string,
/**
* Optional pool id.
*/
poolId: number | null,
/**
* Optional pool address.
*/
poolAddress: string | null,
/**
* Optional pair id.
*/
pairId: number | null,
/**
* Optional pair symbol.
*/
pairSymbol: string | null, };

View File

@@ -3,6 +3,7 @@ import type { DemoPipeline2LocalDecodedEventDiagnosticSummary } from "./DemoPipe
import type { DemoPipeline2LocalDexDiagnosticSummary } from "./DemoPipeline2LocalDexDiagnosticSummary";
import type { DemoPipeline2LocalDuplicateDecodedEventTradeDiagnosticSample } from "./DemoPipeline2LocalDuplicateDecodedEventTradeDiagnosticSample";
import type { DemoPipeline2LocalEventClassificationDiagnosticSummary } from "./DemoPipeline2LocalEventClassificationDiagnosticSummary";
import type { DemoPipeline2LocalLaunchOriginDiagnosticSample } from "./DemoPipeline2LocalLaunchOriginDiagnosticSample";
import type { DemoPipeline2LocalMissingTradeEventDiagnosticSample } from "./DemoPipeline2LocalMissingTradeEventDiagnosticSample";
import type { DemoPipeline2LocalMissingTradeEventReasonSummary } from "./DemoPipeline2LocalMissingTradeEventReasonSummary";
import type { DemoPipeline2LocalMultiTradeSignaturePairDiagnosticSample } from "./DemoPipeline2LocalMultiTradeSignaturePairDiagnosticSample";
@@ -11,6 +12,7 @@ import type { DemoPipeline2LocalPairActionabilityDiagnosticSummary } from "./Dem
import type { DemoPipeline2LocalPairDiagnosticSummary } from "./DemoPipeline2LocalPairDiagnosticSummary";
import type { DemoPipeline2LocalPairGapDiagnosticSample } from "./DemoPipeline2LocalPairGapDiagnosticSample";
import type { DemoPipeline2LocalPairTradingReadinessDiagnosticSummary } from "./DemoPipeline2LocalPairTradingReadinessDiagnosticSummary";
import type { DemoPipeline2LocalPoolOriginDiagnosticSample } from "./DemoPipeline2LocalPoolOriginDiagnosticSample";
import type { DemoPipeline2LocalTokenMetadataGapDiagnosticSample } from "./DemoPipeline2LocalTokenMetadataGapDiagnosticSample";
/**
@@ -246,6 +248,14 @@ eventClassificationSummaries: Array<DemoPipeline2LocalEventClassificationDiagnos
* Missing trade events grouped by diagnostic reason.
*/
missingTradeEventReasonSummaries: Array<DemoPipeline2LocalMissingTradeEventReasonSummary>,
/**
* Samples of launch-origin attributions.
*/
launchOriginSamples: Array<DemoPipeline2LocalLaunchOriginDiagnosticSample>,
/**
* Samples of pool-origin rows and their optional launch linkage.
*/
poolOriginSamples: Array<DemoPipeline2LocalPoolOriginDiagnosticSample>,
/**
* Prioritized samples of tokens whose display metadata is still incomplete.
*/

View File

@@ -0,0 +1,46 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
/**
* Local pool-origin diagnostic sample for the UI.
*/
export type DemoPipeline2LocalPoolOriginDiagnosticSample = {
/**
* Pool-origin id.
*/
poolOriginId: number,
/**
* Effective DEX code attached to the pool.
*/
dexCode: string,
/**
* Pool id.
*/
poolId: number,
/**
* Pool address.
*/
poolAddress: string,
/**
* Optional pair id.
*/
pairId: number | null,
/**
* Optional pair symbol.
*/
pairSymbol: string | null,
/**
* Optional launch surface code.
*/
launchSurfaceCode: string | null,
/**
* Founding transaction signature.
*/
foundingSignature: string,
/**
* Founding effective protocol.
*/
foundingProtocolName: string,
/**
* Founding decoded event kind.
*/
foundingEventKind: string, };

View File

@@ -15,6 +15,7 @@ import type { DemoPipeline2PairCandlesRequest } from "./bindings/DemoPipeline2Pa
import type { DemoPipeline2PairCandlesPayload } from "./bindings/DemoPipeline2PairCandlesPayload.ts";
import type { DemoPipeline2LocalDiagnosticsPayload } from "./bindings/DemoPipeline2LocalDiagnosticsPayload.ts";
import type { DemoPipeline2LocalValidationPayload } from "./bindings/DemoPipeline2LocalValidationPayload.ts";
import type { DemoPipeline2LocalValidationRequest } from "./bindings/DemoPipeline2LocalValidationRequest.ts";
import type { DemoPipeline2ProgramInstructionDiscriminatorSummaryRequest } from "./bindings/DemoPipeline2ProgramInstructionDiscriminatorSummaryRequest.ts";
import type { DemoPipeline2ProgramInstructionDiscriminatorSummaryPayload } from "./bindings/DemoPipeline2ProgramInstructionDiscriminatorSummaryPayload.ts";
import { DemoPipeline2ProtocolCandidateSummaryRequest } from './bindings/DemoPipeline2ProtocolCandidateSummaryRequest.ts';
@@ -363,6 +364,7 @@ document.addEventListener("DOMContentLoaded", async () => {
const replayLocalPipelineButton = document.querySelector<HTMLButtonElement>("#demoPipeline2ReplayLocalPipelineButton");
const diagnoseLocalPipelineButton = document.querySelector<HTMLButtonElement>("#demoPipeline2DiagnoseLocalPipelineButton");
const validateLocalPipelineButton = document.querySelector<HTMLButtonElement>("#demoPipeline2ValidateLocalPipelineButton");
const validationProfileSelect = document.querySelector<HTMLSelectElement>("#demoPipeline2ValidationProfileSelect");
const discriminatorProgramIdInput = document.querySelector<HTMLInputElement>("#demoPipeline2DiscriminatorProgramIdInput");
const discriminatorLimitInput = document.querySelector<HTMLInputElement>("#demoPipeline2DiscriminatorLimitInput");
@@ -409,6 +411,7 @@ document.addEventListener("DOMContentLoaded", async () => {
!replayLocalPipelineButton ||
!diagnoseLocalPipelineButton ||
!validateLocalPipelineButton ||
!validationProfileSelect ||
!discriminatorProgramIdInput ||
!discriminatorLimitInput ||
!loadDiscriminatorSummariesButton ||
@@ -653,11 +656,19 @@ document.addEventListener("DOMContentLoaded", async () => {
});
validateLocalPipelineButton.addEventListener("click", async () => {
appendLogLine(logTextarea, "[ui] validating local pipeline");
const request: DemoPipeline2LocalValidationRequest = {
profileCode: validationProfileSelect.value,
};
appendLogLine(
logTextarea,
`[ui] validating local pipeline with '${request.profileCode}' profile`,
);
try {
const payload = await invoke<DemoPipeline2LocalValidationPayload>(
"demo_pipeline2_validate_local_pipeline",
{ request },
);
localValidationTextarea.value = payload.validationJson;