Some checks failed
deploy / deploy (push) Failing after 29s
Proof: npm test; npm run operator-dashboard:build; node --test test/near-intents-status.test.mjs test/environment-status-history.test.mjs test/operator-dashboard.test.mjs test/operator-dashboard-ui-static.test.mjs test/ops-sentinel-static.test.mjs; PYTHONPATH=. python3 test/repo_deployments_test.py; kubectl kustomize deploy/k8s/base. Assumptions: NEAR Intents public status page API remains the official upstream environmental-status source; status fingerprint changes are the durable boundary for saving environmental history. Still fake: This stores and displays official upstream status changes, but it does not create an alternate quote source or make NEAR quoting operational during an upstream pause.
267 lines
12 KiB
JavaScript
267 lines
12 KiB
JavaScript
function requireString(value, field) {
|
|
if (typeof value !== 'string' || value.length === 0) throw new Error(`Missing ${field}`);
|
|
}
|
|
|
|
function requireObject(value, field) {
|
|
if (!value || typeof value !== 'object' || Array.isArray(value)) throw new Error(`Missing ${field}`);
|
|
}
|
|
|
|
function requireOneOf(value, field, values) {
|
|
if (!values.includes(value)) throw new Error(`Unexpected ${field}: ${value}`);
|
|
}
|
|
|
|
function requireNumber(value, field) {
|
|
if (typeof value !== 'number' || !Number.isFinite(value)) throw new Error(`Missing ${field}`);
|
|
}
|
|
|
|
export function assertEventEnvelope(event) {
|
|
requireObject(event, 'event');
|
|
requireString(event.event_id, 'event.event_id');
|
|
requireString(event.event_type, 'event.event_type');
|
|
requireString(event.venue, 'event.venue');
|
|
if (event.source != null) requireString(event.source, 'event.source');
|
|
if (typeof event.schema_version !== 'number') throw new Error('Missing event.schema_version');
|
|
requireString(event.ingested_at, 'event.ingested_at');
|
|
requireObject(event.payload, 'event.payload');
|
|
return event;
|
|
}
|
|
|
|
export function assertNormalizedSwapDemand(event) {
|
|
assertEventEnvelope(event);
|
|
if (event.event_type !== 'swap_demand') throw new Error(`Unexpected event_type: ${event.event_type}`);
|
|
|
|
const payload = event.payload;
|
|
requireString(payload.quote_id, 'payload.quote_id');
|
|
requireString(payload.asset_in, 'payload.asset_in');
|
|
requireString(payload.asset_out, 'payload.asset_out');
|
|
requireString(payload.request_kind, 'payload.request_kind');
|
|
requireOneOf(payload.request_kind, 'payload.request_kind', ['exact_in', 'exact_out']);
|
|
if (payload.amount_in != null) requireString(payload.amount_in, 'payload.amount_in');
|
|
if (payload.amount_out != null) requireString(payload.amount_out, 'payload.amount_out');
|
|
if (payload.min_deadline_ms != null) requireString(payload.min_deadline_ms, 'payload.min_deadline_ms');
|
|
return event;
|
|
}
|
|
|
|
export function assertMarketPriceEvent(event) {
|
|
assertEventEnvelope(event);
|
|
if (event.event_type !== 'market_price') throw new Error(`Unexpected event_type: ${event.event_type}`);
|
|
|
|
const payload = event.payload;
|
|
requireString(payload.price_id, 'payload.price_id');
|
|
requireString(payload.pair, 'payload.pair');
|
|
requireString(payload.eur_per_btc, 'payload.eur_per_btc');
|
|
requireString(payload.btc_per_eure, 'payload.btc_per_eure');
|
|
requireString(payload.source_used, 'payload.source_used');
|
|
return event;
|
|
}
|
|
|
|
export function assertInventorySnapshotEvent(event) {
|
|
assertEventEnvelope(event);
|
|
if (event.event_type !== 'intent_inventory') throw new Error(`Unexpected event_type: ${event.event_type}`);
|
|
|
|
const payload = event.payload;
|
|
requireString(payload.inventory_id, 'payload.inventory_id');
|
|
requireString(payload.account_id, 'payload.account_id');
|
|
requireString(payload.reconciliation_status, 'payload.reconciliation_status');
|
|
requireObject(payload.spendable, 'payload.spendable');
|
|
return event;
|
|
}
|
|
|
|
export function assertLiquidityActionEvent(event) {
|
|
assertEventEnvelope(event);
|
|
if (event.event_type !== 'liquidity_action') throw new Error(`Unexpected event_type: ${event.event_type}`);
|
|
|
|
const payload = event.payload;
|
|
requireString(payload.liquidity_action_id, 'payload.liquidity_action_id');
|
|
requireString(payload.action_type, 'payload.action_type');
|
|
requireString(payload.status, 'payload.status');
|
|
return event;
|
|
}
|
|
|
|
export function assertFundingObservationEvent(event) {
|
|
assertEventEnvelope(event);
|
|
if (event.event_type !== 'funding_observation') {
|
|
throw new Error(`Unexpected event_type: ${event.event_type}`);
|
|
}
|
|
|
|
const payload = event.payload;
|
|
requireString(payload.funding_observation_id, 'payload.funding_observation_id');
|
|
requireString(payload.account_id, 'payload.account_id');
|
|
requireString(payload.asset_id, 'payload.asset_id');
|
|
requireString(payload.chain, 'payload.chain');
|
|
requireString(payload.funding_handle, 'payload.funding_handle');
|
|
requireString(payload.source, 'payload.source');
|
|
requireString(payload.tx_hash, 'payload.tx_hash');
|
|
requireString(payload.status, 'payload.status');
|
|
requireString(payload.amount, 'payload.amount');
|
|
requireNumber(payload.confirmations, 'payload.confirmations');
|
|
requireString(payload.first_seen_at, 'payload.first_seen_at');
|
|
requireString(payload.last_seen_at, 'payload.last_seen_at');
|
|
if (payload.credited_at != null) requireString(payload.credited_at, 'payload.credited_at');
|
|
if (payload.bridge_deposit_tx_hash != null) {
|
|
requireString(payload.bridge_deposit_tx_hash, 'payload.bridge_deposit_tx_hash');
|
|
}
|
|
return event;
|
|
}
|
|
|
|
export function assertOpsAlertEvent(event) {
|
|
assertEventEnvelope(event);
|
|
if (event.event_type !== 'ops_alert') throw new Error(`Unexpected event_type: ${event.event_type}`);
|
|
|
|
const payload = event.payload;
|
|
requireString(payload.alert_event_id, 'payload.alert_event_id');
|
|
requireString(payload.alert_code, 'payload.alert_code');
|
|
requireString(payload.status, 'payload.status');
|
|
requireOneOf(payload.status, 'payload.status', ['raised', 'cleared']);
|
|
requireString(payload.severity, 'payload.severity');
|
|
requireString(payload.reason, 'payload.reason');
|
|
requireString(payload.service_scope, 'payload.service_scope');
|
|
requireString(payload.raised_at, 'payload.raised_at');
|
|
if (payload.cleared_at != null) requireString(payload.cleared_at, 'payload.cleared_at');
|
|
requireObject(payload.details, 'payload.details');
|
|
return event;
|
|
}
|
|
|
|
export function assertEnvironmentStatusEvent(event) {
|
|
assertEventEnvelope(event);
|
|
if (event.event_type !== 'environment_status') {
|
|
throw new Error(`Unexpected event_type: ${event.event_type}`);
|
|
}
|
|
|
|
const payload = event.payload;
|
|
requireString(payload.environment_status_id, 'payload.environment_status_id');
|
|
requireString(payload.environment_key, 'payload.environment_key');
|
|
requireString(payload.source, 'payload.source');
|
|
requireString(payload.status, 'payload.status');
|
|
requireString(payload.label, 'payload.label');
|
|
requireString(payload.status_fingerprint, 'payload.status_fingerprint');
|
|
requireString(payload.observed_at, 'payload.observed_at');
|
|
requireString(payload.changed_at, 'payload.changed_at');
|
|
if (payload.previous_status_fingerprint != null) {
|
|
requireString(payload.previous_status_fingerprint, 'payload.previous_status_fingerprint');
|
|
}
|
|
if (payload.decisive_reason != null) requireString(payload.decisive_reason, 'payload.decisive_reason');
|
|
requireNumber(payload.current_incident_count, 'payload.current_incident_count');
|
|
if (!Array.isArray(payload.current_incidents)) throw new Error('Missing payload.current_incidents');
|
|
if (!Array.isArray(payload.affected_services)) throw new Error('Missing payload.affected_services');
|
|
return event;
|
|
}
|
|
|
|
export function assertTradeDecisionEvent(event) {
|
|
assertEventEnvelope(event);
|
|
if (event.event_type !== 'trade_decision') throw new Error(`Unexpected event_type: ${event.event_type}`);
|
|
|
|
const payload = event.payload;
|
|
requireString(payload.decision_id, 'payload.decision_id');
|
|
requireString(payload.quote_id, 'payload.quote_id');
|
|
requireString(payload.pair, 'payload.pair');
|
|
requireString(payload.direction, 'payload.direction');
|
|
requireString(payload.decision, 'payload.decision');
|
|
requireString(payload.decision_reason, 'payload.decision_reason');
|
|
return event;
|
|
}
|
|
|
|
export function assertExecuteTradeCommand(event) {
|
|
assertEventEnvelope(event);
|
|
if (event.event_type !== 'execute_trade') throw new Error(`Unexpected event_type: ${event.event_type}`);
|
|
|
|
const payload = event.payload;
|
|
requireString(payload.command_id, 'payload.command_id');
|
|
requireString(payload.idempotency_key, 'payload.idempotency_key');
|
|
requireString(payload.execution_key, 'payload.execution_key');
|
|
requireString(payload.quote_id, 'payload.quote_id');
|
|
requireString(payload.asset_in, 'payload.asset_in');
|
|
requireString(payload.asset_out, 'payload.asset_out');
|
|
if (payload.decision_id != null) requireString(payload.decision_id, 'payload.decision_id');
|
|
if (payload.request_kind != null) requireString(payload.request_kind, 'payload.request_kind');
|
|
if (payload.quote_output != null) requireObject(payload.quote_output, 'payload.quote_output');
|
|
if (payload.amount_in != null) requireString(payload.amount_in, 'payload.amount_in');
|
|
if (payload.amount_out != null) requireString(payload.amount_out, 'payload.amount_out');
|
|
return event;
|
|
}
|
|
|
|
export function assertTradeResult(event) {
|
|
assertEventEnvelope(event);
|
|
if (event.event_type !== 'trade_result') throw new Error(`Unexpected event_type: ${event.event_type}`);
|
|
|
|
const payload = event.payload;
|
|
requireString(payload.command_id, 'payload.command_id');
|
|
requireString(payload.idempotency_key, 'payload.idempotency_key');
|
|
requireString(payload.execution_key, 'payload.execution_key');
|
|
requireString(payload.quote_id, 'payload.quote_id');
|
|
requireString(payload.status, 'payload.status');
|
|
if (payload.decision_id != null) requireString(payload.decision_id, 'payload.decision_id');
|
|
if (payload.result_code != null) requireString(payload.result_code, 'payload.result_code');
|
|
return event;
|
|
}
|
|
|
|
export function assertIntentRequestPreflightEvent(event) {
|
|
assertEventEnvelope(event);
|
|
if (event.event_type !== 'intent_request_preflight') {
|
|
throw new Error(`Unexpected event_type: ${event.event_type}`);
|
|
}
|
|
|
|
const payload = event.payload;
|
|
requireString(payload.request_id, 'payload.request_id');
|
|
requireString(payload.idempotency_key, 'payload.idempotency_key');
|
|
requireString(payload.state, 'payload.state');
|
|
requireOneOf(payload.state, 'payload.state', ['draft', 'blocked']);
|
|
requireString(payload.reason_code, 'payload.reason_code');
|
|
requireString(payload.source_asset_id, 'payload.source_asset_id');
|
|
requireString(payload.destination_asset_id, 'payload.destination_asset_id');
|
|
requireString(payload.source_amount_units, 'payload.source_amount_units');
|
|
requireString(payload.min_destination_amount_units, 'payload.min_destination_amount_units');
|
|
requireNumber(payload.slippage_bps, 'payload.slippage_bps');
|
|
requireString(payload.signer_account_id, 'payload.signer_account_id');
|
|
requireString(payload.verifier_contract, 'payload.verifier_contract');
|
|
requireString(payload.created_at, 'payload.created_at');
|
|
requireObject(payload.lifecycle, 'payload.lifecycle');
|
|
return event;
|
|
}
|
|
|
|
export function assertIntentRequestSubmissionResultEvent(event) {
|
|
assertEventEnvelope(event);
|
|
if (event.event_type !== 'intent_request_submission_result') {
|
|
throw new Error(`Unexpected event_type: ${event.event_type}`);
|
|
}
|
|
|
|
const payload = event.payload;
|
|
requireString(payload.request_id, 'payload.request_id');
|
|
requireString(payload.idempotency_key, 'payload.idempotency_key');
|
|
requireString(payload.submission_id, 'payload.submission_id');
|
|
requireString(payload.status, 'payload.status');
|
|
requireOneOf(payload.status, 'payload.status', [
|
|
'submit_requested',
|
|
'accepted_by_relay',
|
|
'failed',
|
|
'blocked',
|
|
]);
|
|
requireString(payload.result_code, 'payload.result_code');
|
|
requireString(payload.submitted_at, 'payload.submitted_at');
|
|
requireObject(payload.lifecycle, 'payload.lifecycle');
|
|
return event;
|
|
}
|
|
|
|
export function assertIntentRequestOutcomeEvent(event) {
|
|
assertEventEnvelope(event);
|
|
if (event.event_type !== 'intent_request_outcome') {
|
|
throw new Error(`Unexpected event_type: ${event.event_type}`);
|
|
}
|
|
|
|
const payload = event.payload;
|
|
requireString(payload.request_id, 'payload.request_id');
|
|
requireString(payload.idempotency_key, 'payload.idempotency_key');
|
|
requireString(payload.outcome_status, 'payload.outcome_status');
|
|
requireOneOf(payload.outcome_status, 'payload.outcome_status', [
|
|
'draft',
|
|
'blocked',
|
|
'failed',
|
|
'awaiting_settlement',
|
|
'not_filled',
|
|
'completed',
|
|
]);
|
|
requireString(payload.outcome_source, 'payload.outcome_source');
|
|
requireString(payload.outcome_reason, 'payload.outcome_reason');
|
|
requireString(payload.attribution_status, 'payload.attribution_status');
|
|
return event;
|
|
}
|