@dvmkit/sdk 0.1.1-rc.7 → 0.1.2-rc.7

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.
@@ -140,6 +140,7 @@ var PayoutReporter = class {
140
140
  ownsBatchStore;
141
141
  intervalMs;
142
142
  now;
143
+ lastX402SnapshotAt = 0;
143
144
  x402;
144
145
  tempo;
145
146
  timer = null;
@@ -572,6 +573,8 @@ var PayoutReporter = class {
572
573
  async snapshotX402() {
573
574
  const ctx = this.x402;
574
575
  if (!ctx) return;
576
+ const snapshotAt = Math.max(this.now(), this.lastX402SnapshotAt + 1);
577
+ this.lastX402SnapshotAt = snapshotAt;
575
578
  try {
576
579
  const pools = [];
577
580
  const wedged = [];
@@ -627,7 +630,7 @@ var PayoutReporter = class {
627
630
  items: pools.length,
628
631
  pools,
629
632
  wedged,
630
- snapshotAt: this.now()
633
+ snapshotAt
631
634
  });
632
635
  } catch (err) {
633
636
  warn("payout_pending_snapshot_failed", { rail: "x402", error: message(err) });
@@ -7226,6 +7226,10 @@ function parseAtomicAmount(value) {
7226
7226
  }
7227
7227
 
7228
7228
  // src/sdk/server/credit-drain-report.ts
7229
+ var CREDIT_DRAIN_REPAIR_KINDS = /* @__PURE__ */ new Set([
7230
+ "x402_settlement_reconciled",
7231
+ "tempo_close_reconciled"
7232
+ ]);
7229
7233
  async function commitTerminalDrain(wiring, transition, outerTx) {
7230
7234
  const { db, dvmId, enqueueCreditDrain } = wiring;
7231
7235
  if (outerTx) {
@@ -7263,9 +7267,22 @@ function drainReport(dvmId, drain) {
7263
7267
  creditCurrency: drain.currency,
7264
7268
  status: drain.status,
7265
7269
  drainedAt: drainedAt(drain),
7266
- ledgerSeq: drain.ledgerSeq
7270
+ ledgerSeq: drain.ledgerSeq,
7271
+ ...repairMetadata(drain)
7267
7272
  };
7268
7273
  }
7274
+ function repairMetadata(drain) {
7275
+ const repaired = drain.sentRef?.repaired;
7276
+ const repairKind = drain.sentRef?.repair_kind;
7277
+ if (repaired !== true && repairKind === void 0) return {};
7278
+ if (repaired !== true || !isCreditDrainRepairKind(repairKind)) {
7279
+ throw new Error(`invalid credit-drain repair metadata on ${drain.creditId}/${drain.drainId}`);
7280
+ }
7281
+ return { repaired: true, repairKind };
7282
+ }
7283
+ function isCreditDrainRepairKind(value) {
7284
+ return typeof value === "string" && CREDIT_DRAIN_REPAIR_KINDS.has(value);
7285
+ }
7269
7286
  function drainedAt(drain) {
7270
7287
  return drain.pickedUpAt ?? drain.sentAt ?? drain.createdAt;
7271
7288
  }
@@ -7317,7 +7334,7 @@ async function completeTempoChannelDrain(args) {
7317
7334
  tx_hash: args.reference,
7318
7335
  channel_id: args.channelId,
7319
7336
  ...settlementEvidence,
7320
- ...args.repaired ? { repaired: true } : {}
7337
+ ...args.repaired ? { repaired: true, repair_kind: "tempo_close_reconciled" } : {}
7321
7338
  },
7322
7339
  tx: innerTx
7323
7340
  });
@@ -7384,7 +7401,7 @@ async function completeX402ChannelDrain(args) {
7384
7401
  channel_id: args.channelId,
7385
7402
  ...settlementEvidence,
7386
7403
  ...args.transaction !== void 0 ? { transaction: args.transaction } : {},
7387
- ...args.repaired ? { repaired: true } : {}
7404
+ ...args.repaired ? { repaired: true, repair_kind: "x402_settlement_reconciled" } : {}
7388
7405
  },
7389
7406
  tx: innerTx
7390
7407
  }),
@@ -18050,7 +18067,7 @@ async function createDVMServer(descriptor, opts) {
18050
18067
  await reporter.init();
18051
18068
  reporter.startRetryLoop();
18052
18069
  revenueReporter = reporter;
18053
- const { MemoryX402BatchStore, PayoutReporter } = await import("./payout-reporter-3UB5WRCV.js");
18070
+ const { MemoryX402BatchStore, PayoutReporter } = await import("./payout-reporter-RG6XNGPI.js");
18054
18071
  payoutReporter = new PayoutReporter({
18055
18072
  dvmId,
18056
18073
  db: opts.db,
@@ -1,7 +1,7 @@
1
1
  import { Hono, Context } from 'hono';
2
2
  import { Pool } from 'pg';
3
- import { X as JsonValue, bR as CreditLedgerLike, b_ as CreditInvoiceRecord, d3 as CreditDepositEnqueue, b$ as InvoiceSettlement, Z as ZodLike, a as DVMDescriptor, K as KVStore, o as JobStore, ah as CashuMode, at as MppxServer, aa as X402Config, p as PaymentMethod, cu as ClientCompatibilityGate, a2 as Message, ap as FundingMethod, Y as FundingReceipt, bT as CreditSnapshot, d4 as TopUpCapUnenforcedReason, _ as JobReceipt, cn as AppendOutgoingOptions, S as SDKJobContext, aQ as StepCache, v as ResponseContent, P as PaymentContent, J as JobRecord, a3 as MessageType, ac as X402Receipt, ab as X402ExactVersionSupport, d5 as X402SettlementIntent, aE as PaymentRequirementsV2, c6 as CreditLedgerQuerier, d6 as X402SettlementCursor, bV as X402SettlementStatus, d7 as X402SettlementWriteOff, bS as X402RefundSettlementGate, d8 as X402FacilitatorAuth, d9 as X402BatchSettlementConfig, cK as PostgresX402ChannelStorage, da as X402PayoutObserver, db as X402SettlementReconciliationReason, aC as PaymentRequirements, a1 as MppxCredential, aj as CreditDepositPayload, bU as DrawResult, cA as CreditLedgerError, a7 as ReceiptCredit, al as DrainReceiptEvent, ak as DrainReceipt, z as SignedRequestAudience, dc as CreditDrawReleaseEnqueue, cM as RevenueSkippedNoRailPayload, cs as ClientCompatibility, aF as PayoutReporter, R as ResolvedCreditConfig, g as CreditView } from './job-store-DOSfYnLX.js';
4
- import { F as FxFetcher, b as FxRateSnapshot } from './fx-H6K6qcH1.js';
3
+ import { X as JsonValue, bR as CreditLedgerLike, b_ as CreditInvoiceRecord, d3 as CreditDepositEnqueue, b$ as InvoiceSettlement, Z as ZodLike, a as DVMDescriptor, K as KVStore, o as JobStore, ah as CashuMode, at as MppxServer, aa as X402Config, p as PaymentMethod, cu as ClientCompatibilityGate, a2 as Message, ap as FundingMethod, Y as FundingReceipt, bT as CreditSnapshot, d4 as TopUpCapUnenforcedReason, _ as JobReceipt, cn as AppendOutgoingOptions, S as SDKJobContext, aQ as StepCache, v as ResponseContent, P as PaymentContent, J as JobRecord, a3 as MessageType, ac as X402Receipt, ab as X402ExactVersionSupport, d5 as X402SettlementIntent, aE as PaymentRequirementsV2, c6 as CreditLedgerQuerier, d6 as X402SettlementCursor, bV as X402SettlementStatus, d7 as X402SettlementWriteOff, bS as X402RefundSettlementGate, d8 as X402FacilitatorAuth, d9 as X402BatchSettlementConfig, cK as PostgresX402ChannelStorage, da as X402PayoutObserver, db as X402SettlementReconciliationReason, aC as PaymentRequirements, a1 as MppxCredential, aj as CreditDepositPayload, bU as DrawResult, cA as CreditLedgerError, a7 as ReceiptCredit, al as DrainReceiptEvent, ak as DrainReceipt, z as SignedRequestAudience, dc as CreditDrawReleaseEnqueue, cM as RevenueSkippedNoRailPayload, cs as ClientCompatibility, aF as PayoutReporter, R as ResolvedCreditConfig, g as CreditView } from './job-store-C53VQ5uu.js';
4
+ import { F as FxFetcher, b as FxRateSnapshot } from './fx-C-liI3oY.js';
5
5
  import { ProofLike, SerializedDLEQ } from '@cashu/cashu-ts';
6
6
  import { Challenge } from 'mppx';
7
7
  import { SettleResponse, SupportedResponse } from '@x402/core/types';
@@ -1,4 +1,4 @@
1
- import { C as Currency } from './job-store-DOSfYnLX.js';
1
+ import { C as Currency } from './job-store-C53VQ5uu.js';
2
2
 
3
3
  /**
4
4
  * Quote-time fx snapshot. Embedded in scribe's `lockedQuote` for within-job
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- import { C as Currency, Z as ZodLike, D as DVMConfig, a as DVMDescriptor } from './job-store-DOSfYnLX.js';
2
- export { A as ApprovalContent, b as ArtifactContent, c as CancelContent, d as CanonicalEnvelope, e as CreateSignedRequestVerifierOpts, f as CreditConfig, g as CreditView, h as DEFAULT_CREDIT_MAX, i as DEFAULT_CREDIT_MIN, j as DEFAULT_CREDIT_TTL_SECONDS, k as DVMRouteContext, I as IncomingMessage, l as InputType, m as InvalidCurrencyError, J as JobRecord, n as JobStatus, o as JobStore, K as KVStore, L as Logger, P as PaymentContent, p as PaymentMethod, q as PriceValue, r as ProgressContent, s as PromptOpts, Q as QuoteConfig, t as QuoteContext, u as QuoteResult, R as ResolvedCreditConfig, v as ResponseContent, S as SDKJobContext, w as SDKPaymentRequestOpts, x as SIGNED_REQUEST_AUTH_ID, y as SIGNED_REQUEST_STATEMENT_VERSION, z as SignedRequestAudience, B as SignedRequestDomain, E as SignedRequestError, F as SignedRequestFailure, G as SignedRequestReplayStore, H as SignedRequestSignOpts, M as SignedRequestStatementHeader, N as SignedRequestVerifier, U as UnsupportedCurrencyError, O as createSignedRequestVerifier, T as isZodSchema, V as signedRequestStatementHeader, W as validateCurrency } from './job-store-DOSfYnLX.js';
3
- export { C as CreateFxFetcherOpts, D as DEFAULT_FX_CURRENCIES, a as DEFAULT_FX_RATE_SOURCE, F as FxFetcher, b as FxRateSnapshot, c as FxRateUnavailableError, P as PlatformFxSource, d as createFxFetcher, f as fxRateFor, r as resolveFxSourceFromEnv } from './fx-H6K6qcH1.js';
4
- export { I as InvalidFxRateError, f as fiatToSatsCeil, a as formatFiat, b as formatUsd, r as roundUsd, s as satsToFiat } from './usd-Civ738b3.js';
1
+ import { C as Currency, Z as ZodLike, D as DVMConfig, a as DVMDescriptor } from './job-store-C53VQ5uu.js';
2
+ export { A as ApprovalContent, b as ArtifactContent, c as CancelContent, d as CanonicalEnvelope, e as CreateSignedRequestVerifierOpts, f as CreditConfig, g as CreditView, h as DEFAULT_CREDIT_MAX, i as DEFAULT_CREDIT_MIN, j as DEFAULT_CREDIT_TTL_SECONDS, k as DVMRouteContext, I as IncomingMessage, l as InputType, m as InvalidCurrencyError, J as JobRecord, n as JobStatus, o as JobStore, K as KVStore, L as Logger, P as PaymentContent, p as PaymentMethod, q as PriceValue, r as ProgressContent, s as PromptOpts, Q as QuoteConfig, t as QuoteContext, u as QuoteResult, R as ResolvedCreditConfig, v as ResponseContent, S as SDKJobContext, w as SDKPaymentRequestOpts, x as SIGNED_REQUEST_AUTH_ID, y as SIGNED_REQUEST_STATEMENT_VERSION, z as SignedRequestAudience, B as SignedRequestDomain, E as SignedRequestError, F as SignedRequestFailure, G as SignedRequestReplayStore, H as SignedRequestSignOpts, M as SignedRequestStatementHeader, N as SignedRequestVerifier, U as UnsupportedCurrencyError, O as createSignedRequestVerifier, T as isZodSchema, V as signedRequestStatementHeader, W as validateCurrency } from './job-store-C53VQ5uu.js';
3
+ export { C as CreateFxFetcherOpts, D as DEFAULT_FX_CURRENCIES, a as DEFAULT_FX_RATE_SOURCE, F as FxFetcher, b as FxRateSnapshot, c as FxRateUnavailableError, P as PlatformFxSource, d as createFxFetcher, f as fxRateFor, r as resolveFxSourceFromEnv } from './fx-C-liI3oY.js';
4
+ export { I as InvalidFxRateError, f as fiatToSatsCeil, a as formatFiat, b as formatUsd, r as roundUsd, s as satsToFiat } from './usd-gLcJB1ps.js';
5
5
  export { P as PinnedFetch, S as SSRFError, a as SSRFGuardOpts, b as SSRFReason, c as SSRFResolver, d as assertSafeUrl, e as createPinnedFetch } from './ssrf-DbFkpDv0.js';
6
6
  export { z } from 'zod';
7
7
  import '@cashu/cashu-ts';
@@ -1,16 +1,16 @@
1
- import { L as LightningTransactionListOptions, a as LightningTransactionSnapshot, b as LightningBackend, c as LightningPayment, d as LightningWalletInfo, C as CreatedInvoice, I as InvoiceStatus, A as AccumulatorPool, e as LockPubkey, f as AccumulatorQuerier, g as ConsumedCredentialStore, M as MintAmountBounds, h as MintHealthCheckResult } from '../credit-menu-BrTfAr7l.js';
2
- export { i as AppEnv, j as AttestationPayload, B as BuilderIdentityKeypair, k as CheckMintHealthOptions, l as CreditFundingReport, F as FiatDenomination, m as FiatDenominationFailure, n as FundOnlyRequest, o as IncomingPaymentOpts, J as JobCancelledError, p as MintHealthTracker, P as PAYMENT_PROOF_KEYS, q as PaymentErrorCode, r as PaymentErrorDetail, s as PaymentInfo, R as ReporterBannerOpts, t as ResolvedFx, u as RevenueBootCheckOpts, S as SDKServerOpts, v as ServerJob, w as ShortPayForfeit, T as TempoChannelReport, x as TempoObserverHealth, y as TempoSessionChannelMismatchError, U as UpfrontPaymentOpts, V as VerifiedIncomingPayment, z as VerifyIncomingSnapshot, X as X402BatchChannelObservation, D as X402FacilitatorHealth, E as X402SettlementEvidenceOutcome, G as X402SettlementRepair, H as X402SettlementRepairRefusal, K as X402SettlementRepaired, N as X402WedgedSettlement, O as X402WedgedSettlementPage, Q as X402_BATCH_SETTLEMENT_MAINNET_NETWORK, W as abortJob, Y as amountBoundsVerdict, Z as applyPaymentInfoToJob, _ as assertNutSupport, $ as assertRevenueReporterReady, a0 as buildAttestation, a1 as buildPaymentErrorResponse, a2 as canSwap, a3 as checkMintHealth, a4 as clearAccumulatorForDvm, a5 as createDVMServer, a6 as creditDepositPayload, a7 as derivedFundCreditId, a8 as devModeSkipsPaymentVerification, a9 as fromJobRecord, aa as fundedMicroFor, ab as generateIdentity, ac as hasPaymentProof, ad as hashCapabilities, ae as hashLockKey, af as implicitCreditId, ag as initWalletAccumulatorTable, ah as insertAccumulatorRows, ai as isDerivedCreditId, aj as isTerminal, ak as isYieldMessage, al as issueUpfrontChallenges, am as loadIdentitySecret, an as lockPubkeyStoreToLockPubkey, ao as msatsToFiatMicro, ap as paymentErrorBody, aq as pinAskFiat, ar as priceFiatMicro, as as processIncomingPayment, at as providerMessage, au as repairX402ExactSettlementEffect, av as resolveFxSnapshot, aw as resolvePriceFiat, ax as revenueReporterBannerState, ay as signAttestation, az as toCreditTerms, aA as toJobRecord, an as toLockPubkey, aB as unknownRouteNotFound, aC as verifyAttestation, aD as verifyIncomingPayment, aE as verifyTempoSessionManagementCredential, aF as verifyUpfrontPayment, aG as writeIdentity, aH as x402RequiredUsdcMicro, aI as x402SettledShare } from '../credit-menu-BrTfAr7l.js';
1
+ import { L as LightningTransactionListOptions, a as LightningTransactionSnapshot, b as LightningBackend, c as LightningPayment, d as LightningWalletInfo, C as CreatedInvoice, I as InvoiceStatus, A as AccumulatorPool, e as LockPubkey, f as AccumulatorQuerier, g as ConsumedCredentialStore, M as MintAmountBounds, h as MintHealthCheckResult } from '../credit-menu-BM4qCD5U.js';
2
+ export { i as AppEnv, j as AttestationPayload, B as BuilderIdentityKeypair, k as CheckMintHealthOptions, l as CreditFundingReport, F as FiatDenomination, m as FiatDenominationFailure, n as FundOnlyRequest, o as IncomingPaymentOpts, J as JobCancelledError, p as MintHealthTracker, P as PAYMENT_PROOF_KEYS, q as PaymentErrorCode, r as PaymentErrorDetail, s as PaymentInfo, R as ReporterBannerOpts, t as ResolvedFx, u as RevenueBootCheckOpts, S as SDKServerOpts, v as ServerJob, w as ShortPayForfeit, T as TempoChannelReport, x as TempoObserverHealth, y as TempoSessionChannelMismatchError, U as UpfrontPaymentOpts, V as VerifiedIncomingPayment, z as VerifyIncomingSnapshot, X as X402BatchChannelObservation, D as X402FacilitatorHealth, E as X402SettlementEvidenceOutcome, G as X402SettlementRepair, H as X402SettlementRepairRefusal, K as X402SettlementRepaired, N as X402WedgedSettlement, O as X402WedgedSettlementPage, Q as X402_BATCH_SETTLEMENT_MAINNET_NETWORK, W as abortJob, Y as amountBoundsVerdict, Z as applyPaymentInfoToJob, _ as assertNutSupport, $ as assertRevenueReporterReady, a0 as buildAttestation, a1 as buildPaymentErrorResponse, a2 as canSwap, a3 as checkMintHealth, a4 as clearAccumulatorForDvm, a5 as createDVMServer, a6 as creditDepositPayload, a7 as derivedFundCreditId, a8 as devModeSkipsPaymentVerification, a9 as fromJobRecord, aa as fundedMicroFor, ab as generateIdentity, ac as hasPaymentProof, ad as hashCapabilities, ae as hashLockKey, af as implicitCreditId, ag as initWalletAccumulatorTable, ah as insertAccumulatorRows, ai as isDerivedCreditId, aj as isTerminal, ak as isYieldMessage, al as issueUpfrontChallenges, am as loadIdentitySecret, an as lockPubkeyStoreToLockPubkey, ao as msatsToFiatMicro, ap as paymentErrorBody, aq as pinAskFiat, ar as priceFiatMicro, as as processIncomingPayment, at as providerMessage, au as repairX402ExactSettlementEffect, av as resolveFxSnapshot, aw as resolvePriceFiat, ax as revenueReporterBannerState, ay as signAttestation, az as toCreditTerms, aA as toJobRecord, an as toLockPubkey, aB as unknownRouteNotFound, aC as verifyAttestation, aD as verifyIncomingPayment, aE as verifyTempoSessionManagementCredential, aF as verifyUpfrontPayment, aG as writeIdentity, aH as x402RequiredUsdcMicro, aI as x402SettledShare } from '../credit-menu-BM4qCD5U.js';
3
3
  import { ProofLike, MeltQuoteBolt11Response, Proof, Wallet, SerializedDLEQ, MintQuoteBolt11Response, MintQuoteState, MintPreview, OutputDataLike, CounterSource, CounterRange } from '@cashu/cashu-ts';
4
- import { X as JsonValue, B as SignedRequestDomain, M as SignedRequestStatementHeader, Y as FundingReceipt, _ as JobReceipt$1, z as SignedRequestAudience, $ as PaymentRequired, a0 as X402Version, a1 as MppxCredential, a2 as Message, a3 as MessageType, a4 as MppxChallenge, a5 as X402_BATCH_SETTLEMENT_SCHEME, a6 as X402_EXACT_SCHEME, a7 as ReceiptCredit, C as Currency, a8 as X402Wallet, a9 as ResourceInfo, aa as X402Config, ab as X402ExactVersionSupport, ac as X402Receipt, L as Logger$1, ad as TransactionalPayoutHook, ae as CashuMeltCompleted, K as KVStore } from '../job-store-DOSfYnLX.js';
5
- export { af as BuildPaymentRequirementsOpts, ag as CapabilityDescriptor, ah as CashuMode, ai as CompleteContent, aj as CreditDepositPayload, ak as DrainReceipt, al as DrainReceiptEvent, am as ExactEvmPayload, an as ExactEvmPayloadAuthorization, ao as FundingLot, ap as FundingMethod, aq as LotDebit, ar as LotDepletion, as as MessageFrom, at as MppxServer, au as NON_CHANNEL_BITCOIN_RAILS, av as NonChannelBitcoinRail, aw as OutgoingMessage, ax as PaymentPayload, ay as PaymentPayloadV1, az as PaymentPayloadV2, aA as PaymentRequestContent, aB as PaymentRequiredV2, aC as PaymentRequirements, aD as PaymentRequirementsV1, aE as PaymentRequirementsV2, aF as PayoutReporter, aG as PostgresTempoSessionStore, aH as PromptContent, aI as RAIL_REFUNDABLE, aJ as ReceiptOutcome, aK as ReceiptPayment, aL as RevenueReporter, aM as SIGNED_ENVELOPE_FIELDS, aN as SIGNED_ENVELOPE_TYPES, aO as SettleResponse, aP as StaleJobReapable, aQ as StepCache, aR as StepRecord, aS as TextContent, aT as UnsignedDrainReceipt, aU as UnsignedFundingReceipt, aV as UnsignedJobReceipt, aW as VerifyResponse, aX as WorkingContent, aY as X402ResponseBody, aZ as X402SelfRelayRpcFailureReason, a_ as X402TrackedChannel, a$ as X402_DEFAULT_NETWORK, b0 as X402_V1_VERSION, b1 as X402_VERSION, b2 as _testing, b3 as buildPaymentRequiredV2, b4 as buildPaymentRequirements, b5 as caip2ToX402Network, b6 as canonicalRequestPath, b7 as canonicaliseForSigning, b8 as canonicalize, b9 as chainIdFromCaip2, ba as computeResultHash, bb as createDefaultReplayStore, bc as decodePayment, bd as decodePaymentRequiredHeader, be as depleteLots, bf as encodePayment, bg as encodePaymentRequiredHeader, bh as encodeSettleResponseHeader, bi as exactEvmAuthorization, bj as fifoOrder, bk as inKindDrawMsats, bl as isArtifactMessage, bm as isCancelMessage, bn as isCompleteMessage, bo as isDrainReceipt, bp as isFundingReceipt, bq as isInKindDepletion, br as isNonChannelBitcoinRail, bs as isPaymentRequestMessage, bt as isPromptMessage, bu as isSignedJobReceipt, bv as isStaleJobReapable, bw as isTextMessage, bx as isWorkingMessage, by as lotOwedSats, bz as netOwedSats, bA as paymentRequiredV2FromV1, bB as settleWithFacilitator, bC as signDrainReceipt, bD as signFundingReceipt, bE as signReceipt, bF as usdcContractByCaip2, bG as usdcContractFor, bH as usdcDomainNameFor, bI as usdcDomainVersionFor, bJ as verifyDrainReceipt, bK as verifyFundingReceipt, bL as verifyReceipt, bM as verifyWithFacilitator, bN as wrapMppx, bO as x402NetworkToCaip2 } from '../job-store-DOSfYnLX.js';
4
+ import { X as JsonValue, B as SignedRequestDomain, M as SignedRequestStatementHeader, Y as FundingReceipt, _ as JobReceipt$1, z as SignedRequestAudience, $ as PaymentRequired, a0 as X402Version, a1 as MppxCredential, a2 as Message, a3 as MessageType, a4 as MppxChallenge, a5 as X402_BATCH_SETTLEMENT_SCHEME, a6 as X402_EXACT_SCHEME, a7 as ReceiptCredit, C as Currency, a8 as X402Wallet, a9 as ResourceInfo, aa as X402Config, ab as X402ExactVersionSupport, ac as X402Receipt, L as Logger$1, ad as TransactionalPayoutHook, ae as CashuMeltCompleted, K as KVStore } from '../job-store-C53VQ5uu.js';
5
+ export { af as BuildPaymentRequirementsOpts, ag as CapabilityDescriptor, ah as CashuMode, ai as CompleteContent, aj as CreditDepositPayload, ak as DrainReceipt, al as DrainReceiptEvent, am as ExactEvmPayload, an as ExactEvmPayloadAuthorization, ao as FundingLot, ap as FundingMethod, aq as LotDebit, ar as LotDepletion, as as MessageFrom, at as MppxServer, au as NON_CHANNEL_BITCOIN_RAILS, av as NonChannelBitcoinRail, aw as OutgoingMessage, ax as PaymentPayload, ay as PaymentPayloadV1, az as PaymentPayloadV2, aA as PaymentRequestContent, aB as PaymentRequiredV2, aC as PaymentRequirements, aD as PaymentRequirementsV1, aE as PaymentRequirementsV2, aF as PayoutReporter, aG as PostgresTempoSessionStore, aH as PromptContent, aI as RAIL_REFUNDABLE, aJ as ReceiptOutcome, aK as ReceiptPayment, aL as RevenueReporter, aM as SIGNED_ENVELOPE_FIELDS, aN as SIGNED_ENVELOPE_TYPES, aO as SettleResponse, aP as StaleJobReapable, aQ as StepCache, aR as StepRecord, aS as TextContent, aT as UnsignedDrainReceipt, aU as UnsignedFundingReceipt, aV as UnsignedJobReceipt, aW as VerifyResponse, aX as WorkingContent, aY as X402ResponseBody, aZ as X402SelfRelayRpcFailureReason, a_ as X402TrackedChannel, a$ as X402_DEFAULT_NETWORK, b0 as X402_V1_VERSION, b1 as X402_VERSION, b2 as _testing, b3 as buildPaymentRequiredV2, b4 as buildPaymentRequirements, b5 as caip2ToX402Network, b6 as canonicalRequestPath, b7 as canonicaliseForSigning, b8 as canonicalize, b9 as chainIdFromCaip2, ba as computeResultHash, bb as createDefaultReplayStore, bc as decodePayment, bd as decodePaymentRequiredHeader, be as depleteLots, bf as encodePayment, bg as encodePaymentRequiredHeader, bh as encodeSettleResponseHeader, bi as exactEvmAuthorization, bj as fifoOrder, bk as inKindDrawMsats, bl as isArtifactMessage, bm as isCancelMessage, bn as isCompleteMessage, bo as isDrainReceipt, bp as isFundingReceipt, bq as isInKindDepletion, br as isNonChannelBitcoinRail, bs as isPaymentRequestMessage, bt as isPromptMessage, bu as isSignedJobReceipt, bv as isStaleJobReapable, bw as isTextMessage, bx as isWorkingMessage, by as lotOwedSats, bz as netOwedSats, bA as paymentRequiredV2FromV1, bB as settleWithFacilitator, bC as signDrainReceipt, bD as signFundingReceipt, bE as signReceipt, bF as usdcContractByCaip2, bG as usdcContractFor, bH as usdcDomainNameFor, bI as usdcDomainVersionFor, bJ as verifyDrainReceipt, bK as verifyFundingReceipt, bL as verifyReceipt, bM as verifyWithFacilitator, bN as wrapMppx, bO as x402NetworkToCaip2 } from '../job-store-C53VQ5uu.js';
6
6
  import { SimplePool } from 'nostr-tools/pool';
7
7
  import { Session } from 'mppx/tempo';
8
8
  import { Pool } from 'pg';
9
9
  export { Pool } from 'pg';
10
10
  import { PaymentRequired as PaymentRequired$1 } from '@x402/core/types';
11
11
  import { ClientChannelStorage, BatchSettlementClientContext, BatchSettlementEvmScheme } from '@x402/evm/batch-settlement/client';
12
- export { e as FX_CACHE_TTL_MS, g as FX_RETRY_COUNT, w as warmFxSnapshot } from '../fx-H6K6qcH1.js';
13
- export { c as InvalidUsdPriceError, p as parseUsdPrice } from '../usd-Civ738b3.js';
12
+ export { e as FX_CACHE_TTL_MS, g as FX_RETRY_COUNT, w as warmFxSnapshot } from '../fx-C-liI3oY.js';
13
+ export { c as InvalidUsdPriceError, p as parseUsdPrice } from '../usd-gLcJB1ps.js';
14
14
  import { Hono } from 'hono';
15
15
  import { Env, BlankSchema } from 'hono/types';
16
16
  import { Store } from 'mppx';
@@ -184,7 +184,7 @@ import {
184
184
  } from "../chunk-2ABMGUDS.js";
185
185
  import {
186
186
  PayoutReporter
187
- } from "../chunk-X3IKFWJA.js";
187
+ } from "../chunk-6BQM7TOW.js";
188
188
  import {
189
189
  PostgresTempoChargeStore
190
190
  } from "../chunk-JZWELPFH.js";
@@ -344,7 +344,7 @@ import {
344
344
  writeIdentity,
345
345
  x402RequiredUsdcMicro,
346
346
  x402SettledShare
347
- } from "../chunk-Y6W5ZZTW.js";
347
+ } from "../chunk-N4VTG3KH.js";
348
348
  import {
349
349
  X402_BATCH_SETTLEMENT_SCHEME,
350
350
  X402_DEFAULT_FACILITATOR,
@@ -1552,6 +1552,7 @@ declare class PayoutReporter implements PayoutTransport {
1552
1552
  private readonly ownsBatchStore;
1553
1553
  private readonly intervalMs;
1554
1554
  private readonly now;
1555
+ private lastX402SnapshotAt;
1555
1556
  private x402?;
1556
1557
  private tempo?;
1557
1558
  private timer;
@@ -1838,6 +1839,8 @@ interface CreditDrawReleasePayload {
1838
1839
  /** Required. When the hold reached `released` (epoch ms). */
1839
1840
  releasedAt: number;
1840
1841
  }
1842
+ /** Repair verbs that can finish a caller-facing credit reclaim. */
1843
+ type CreditDrainRepairKind = "x402_settlement_reconciled" | "tempo_close_reconciled";
1841
1844
  /**
1842
1845
  * JSON wire shape POSTed to the platform's `/_internal/credit-drain`
1843
1846
  * endpoint (internal-review). A drain is a **reclaim**: deposited money paid back to
@@ -1876,6 +1879,10 @@ interface CreditDrainPayload {
1876
1879
  drainedAt: number;
1877
1880
  /** Optional. Per-credit gap-free ledger sequence, for reconciling against the DVM's ledger. */
1878
1881
  ledgerSeq?: number;
1882
+ /** Set when an operator repair verb completed this reclaim. */
1883
+ repaired?: boolean;
1884
+ /** Required iff `repaired`; identifies the repair path that completed the reclaim. */
1885
+ repairKind?: CreditDrainRepairKind;
1879
1886
  }
1880
1887
  /**
1881
1888
  * Open Postgres transaction handle accepted by the reporter-owned outbox
@@ -3,7 +3,7 @@ import {
3
3
  PAYOUT_SNAPSHOT_INTERVAL_MS,
4
4
  PayoutReporter,
5
5
  PostgresX402BatchStore
6
- } from "./chunk-X3IKFWJA.js";
6
+ } from "./chunk-6BQM7TOW.js";
7
7
  import "./chunk-S3XAHZQY.js";
8
8
  export {
9
9
  MemoryX402BatchStore,
@@ -1,11 +1,11 @@
1
- import { ah as CashuMode, bP as CreditDrainEnqueue, R as ResolvedCreditConfig, bQ as DVMAuthScheme, B as SignedRequestDomain, bR as CreditLedgerLike, bS as X402RefundSettlementGate, bT as CreditSnapshot, bU as DrawResult, bV as X402SettlementStatus, bW as X402UnresolvedRefund, bX as GrownDrawResult, bY as DrawResolution, bZ as FundingRecord, Y as FundingReceipt, b_ as CreditInvoiceRecord, b$ as InvoiceSettlement, c0 as BlockedInvoiceCursor, c1 as InvoiceReconciliation, c2 as InvoiceWriteOff, c3 as DrawRecord, c4 as StalePendingDrawCursor, c5 as TempoCreditLossEvidence, c6 as CreditLedgerQuerier, c7 as TempoCreditLoss, c8 as X402CreditLossEvidence, c9 as X402CreditLoss, ca as DrainMethod, cb as DrainRequestResult, cc as BitcoinDepositLiability, ao as FundingLot, cd as CreditDrainRecord, ce as ChannelDrainCursor, cf as DrainWriteOff, cg as DrainReleaseResult, ch as DrainFulfilment, ci as DrainTransitionResult, cj as StreamableJobStore, ck as ReceiptIssuingStore, J as JobRecord, cl as RequestIdClaim, cm as RequestIdClaimResult, _ as JobReceipt, aw as OutgoingMessage, cn as AppendOutgoingOptions, co as PaymentCreditDelta, cp as VerifyAndCreditResult, cq as JobCounters, a2 as Message, K as KVStore, G as SignedRequestReplayStore, Z as ZodLike, a as DVMDescriptor } from '../job-store-DOSfYnLX.js';
2
- export { cr as CLIENT_COMPATIBILITY_HEADERS, d as CanonicalEnvelope, cs as ClientCompatibility, ct as ClientCompatibilityEnv, cu as ClientCompatibilityGate, cv as ClientCompatibilityRequirement, cw as ClientSemVer, e as CreateSignedRequestVerifierOpts, cx as CreditFundingBasis, cy as CreditInvoiceStatus, cz as CreditLedger, cA as CreditLedgerError, cB as CreditLedgerErrorCode, cC as CreditLedgerErrorDetails, cD as CreditLedgerPool, cE as CreditStatus, cF as DRAIN_DELIVERY_RESERVE_SATS, cG as DVM_PROTOCOL_VERSION, cH as DrainConflictReason, cI as DrawRailValue, cJ as DrawStatus, n as JobStatus, o as JobStore, cK as PostgresX402ChannelStorage, cL as ReplayStoreBackend, cM as RevenueSkippedNoRailPayload, cN as RevenueSkippedNoRailReason, x as SIGNED_REQUEST_AUTH_ID, y as SIGNED_REQUEST_STATEMENT_VERSION, cO as Secp256k1AuthOpts, z as SignedRequestAudience, E as SignedRequestError, F as SignedRequestFailure, H as SignedRequestSignOpts, M as SignedRequestStatementHeader, N as SignedRequestVerifier, cP as X402ChannelStorageOpts, cQ as X402RelayLockHolder, cR as X402RelaySubmissionLock, cS as X402RelaySubmissionLockError, cT as allocateDrawValue, cU as clientCompatibilityAttributes, cV as clientCompatibilityMiddleware, cW as clientUpgradeRequired, O as createSignedRequestVerifier, cX as isStreamableJobStore, cY as parseClientCapabilities, cZ as parseClientCompatibility, c_ as parseDvmClient, c$ as parseProtocolVersion, d0 as requireClientCompatibility, d1 as secp256k1Auth, d2 as signedRequestInput, V as signedRequestStatementHeader } from '../job-store-DOSfYnLX.js';
1
+ import { ah as CashuMode, bP as CreditDrainEnqueue, R as ResolvedCreditConfig, bQ as DVMAuthScheme, B as SignedRequestDomain, bR as CreditLedgerLike, bS as X402RefundSettlementGate, bT as CreditSnapshot, bU as DrawResult, bV as X402SettlementStatus, bW as X402UnresolvedRefund, bX as GrownDrawResult, bY as DrawResolution, bZ as FundingRecord, Y as FundingReceipt, b_ as CreditInvoiceRecord, b$ as InvoiceSettlement, c0 as BlockedInvoiceCursor, c1 as InvoiceReconciliation, c2 as InvoiceWriteOff, c3 as DrawRecord, c4 as StalePendingDrawCursor, c5 as TempoCreditLossEvidence, c6 as CreditLedgerQuerier, c7 as TempoCreditLoss, c8 as X402CreditLossEvidence, c9 as X402CreditLoss, ca as DrainMethod, cb as DrainRequestResult, cc as BitcoinDepositLiability, ao as FundingLot, cd as CreditDrainRecord, ce as ChannelDrainCursor, cf as DrainWriteOff, cg as DrainReleaseResult, ch as DrainFulfilment, ci as DrainTransitionResult, cj as StreamableJobStore, ck as ReceiptIssuingStore, J as JobRecord, cl as RequestIdClaim, cm as RequestIdClaimResult, _ as JobReceipt, aw as OutgoingMessage, cn as AppendOutgoingOptions, co as PaymentCreditDelta, cp as VerifyAndCreditResult, cq as JobCounters, a2 as Message, K as KVStore, G as SignedRequestReplayStore, Z as ZodLike, a as DVMDescriptor } from '../job-store-C53VQ5uu.js';
2
+ export { cr as CLIENT_COMPATIBILITY_HEADERS, d as CanonicalEnvelope, cs as ClientCompatibility, ct as ClientCompatibilityEnv, cu as ClientCompatibilityGate, cv as ClientCompatibilityRequirement, cw as ClientSemVer, e as CreateSignedRequestVerifierOpts, cx as CreditFundingBasis, cy as CreditInvoiceStatus, cz as CreditLedger, cA as CreditLedgerError, cB as CreditLedgerErrorCode, cC as CreditLedgerErrorDetails, cD as CreditLedgerPool, cE as CreditStatus, cF as DRAIN_DELIVERY_RESERVE_SATS, cG as DVM_PROTOCOL_VERSION, cH as DrainConflictReason, cI as DrawRailValue, cJ as DrawStatus, n as JobStatus, o as JobStore, cK as PostgresX402ChannelStorage, cL as ReplayStoreBackend, cM as RevenueSkippedNoRailPayload, cN as RevenueSkippedNoRailReason, x as SIGNED_REQUEST_AUTH_ID, y as SIGNED_REQUEST_STATEMENT_VERSION, cO as Secp256k1AuthOpts, z as SignedRequestAudience, E as SignedRequestError, F as SignedRequestFailure, H as SignedRequestSignOpts, M as SignedRequestStatementHeader, N as SignedRequestVerifier, cP as X402ChannelStorageOpts, cQ as X402RelayLockHolder, cR as X402RelaySubmissionLock, cS as X402RelaySubmissionLockError, cT as allocateDrawValue, cU as clientCompatibilityAttributes, cV as clientCompatibilityMiddleware, cW as clientUpgradeRequired, O as createSignedRequestVerifier, cX as isStreamableJobStore, cY as parseClientCapabilities, cZ as parseClientCompatibility, c_ as parseDvmClient, c$ as parseProtocolVersion, d0 as requireClientCompatibility, d1 as secp256k1Auth, d2 as signedRequestInput, V as signedRequestStatementHeader } from '../job-store-C53VQ5uu.js';
3
3
  import { Pool } from 'pg';
4
- import { aJ as CreditMenu, i as AppEnv, U as UpfrontPaymentOpts, s as PaymentInfo, aK as ReceiptIssuer, aL as LightningReceive, aM as TempoSettlementReadiness, aN as DVMHostOpts } from '../credit-menu-BrTfAr7l.js';
5
- export { aO as BuildCreditMenuArgs, aP as BuilderIdentity, aQ as CREDIT_ENVELOPE_KEYS, g as ConsumedCredentialStore, aR as CreateX402BatchSettlementServerOpts, aS as CreditEnvelope, aT as CreditEnvelopeError, aU as CreditFundCommitment, aV as CreditTerms, aW as DEFAULT_INVOICE_TTL_SECONDS, aX as DVMHost, aY as JobManager, aZ as JobManagerOpts, a_ as LightningReceiveConfig, a$ as MIN_INVOICE_TTL_SECONDS, b0 as MemoryConsumedCredentialStore, b1 as MemoryConsumedCredentialStoreOpts, b2 as MemoryProcessedPaymentStore, b3 as MemoryX402ExactSettlementStore, b4 as MountOpts, b5 as OwnerDisplay, b6 as PlatformReporterOpts, b7 as PostgresProcessedPaymentStore, b8 as PostgresX402ExactSettlementStore, b9 as PriceFiat, ba as ProcessedPaymentQuerier, bb as ProcessedPaymentRail, bc as ProcessedPaymentRecord, bd as ProcessedPaymentReplayError, be as ProcessedPaymentStore, bf as X402BatchAcceptance, bg as X402BatchFunding, bh as X402BatchRefusal, bi as X402BatchSettlementServer, bj as X402ExactAcceptance, bk as X402ExactIntentConflictError, bl as X402ExactSettlementAttempt, bm as X402ExactSettlementChainEvidence, bn as X402ExactSettlementEffect, bo as X402ExactSettlementEvidenceMissingError, bp as X402ExactSettlementEvidenceReader, bq as X402ExactSettlementIntent, br as X402ExactSettlementNotReadyError, bs as X402ExactSettlementServer, bt as X402ExactSettlementServerOpts, bu as X402ExactSettlementStatus, bv as X402ExactSettlementStore, bw as X402SettlementChainEvidence, bx as X402SettlementEvidenceReader, by as X402SettlementSubmissionError, bz as X402_BATCH_AUTO_SETTLEMENT, bA as X402_BATCH_MIN_WITHDRAW_DELAY_SECONDS, bB as X402_BATCH_SETTLEMENT_NETWORK, bC as attachCreditMenu, bD as buildCreditMenu, bE as createDVMHost, bF as createX402BatchSettlementServer, bG as creditEnvelopeIgnoreFields, bH as drawSettlementRef, bI as extractCreditEnvelope, bJ as fundingCommitment, bK as selectPrimaryCredit, bL as stripCreditEnvelope, bM as toCreditView } from '../credit-menu-BrTfAr7l.js';
4
+ import { aJ as CreditMenu, i as AppEnv, U as UpfrontPaymentOpts, s as PaymentInfo, aK as ReceiptIssuer, aL as LightningReceive, aM as TempoSettlementReadiness, aN as DVMHostOpts } from '../credit-menu-BM4qCD5U.js';
5
+ export { aO as BuildCreditMenuArgs, aP as BuilderIdentity, aQ as CREDIT_ENVELOPE_KEYS, g as ConsumedCredentialStore, aR as CreateX402BatchSettlementServerOpts, aS as CreditEnvelope, aT as CreditEnvelopeError, aU as CreditFundCommitment, aV as CreditTerms, aW as DEFAULT_INVOICE_TTL_SECONDS, aX as DVMHost, aY as JobManager, aZ as JobManagerOpts, a_ as LightningReceiveConfig, a$ as MIN_INVOICE_TTL_SECONDS, b0 as MemoryConsumedCredentialStore, b1 as MemoryConsumedCredentialStoreOpts, b2 as MemoryProcessedPaymentStore, b3 as MemoryX402ExactSettlementStore, b4 as MountOpts, b5 as OwnerDisplay, b6 as PlatformReporterOpts, b7 as PostgresProcessedPaymentStore, b8 as PostgresX402ExactSettlementStore, b9 as PriceFiat, ba as ProcessedPaymentQuerier, bb as ProcessedPaymentRail, bc as ProcessedPaymentRecord, bd as ProcessedPaymentReplayError, be as ProcessedPaymentStore, bf as X402BatchAcceptance, bg as X402BatchFunding, bh as X402BatchRefusal, bi as X402BatchSettlementServer, bj as X402ExactAcceptance, bk as X402ExactIntentConflictError, bl as X402ExactSettlementAttempt, bm as X402ExactSettlementChainEvidence, bn as X402ExactSettlementEffect, bo as X402ExactSettlementEvidenceMissingError, bp as X402ExactSettlementEvidenceReader, bq as X402ExactSettlementIntent, br as X402ExactSettlementNotReadyError, bs as X402ExactSettlementServer, bt as X402ExactSettlementServerOpts, bu as X402ExactSettlementStatus, bv as X402ExactSettlementStore, bw as X402SettlementChainEvidence, bx as X402SettlementEvidenceReader, by as X402SettlementSubmissionError, bz as X402_BATCH_AUTO_SETTLEMENT, bA as X402_BATCH_MIN_WITHDRAW_DELAY_SECONDS, bB as X402_BATCH_SETTLEMENT_NETWORK, bC as attachCreditMenu, bD as buildCreditMenu, bE as createDVMHost, bF as createX402BatchSettlementServer, bG as creditEnvelopeIgnoreFields, bH as drawSettlementRef, bI as extractCreditEnvelope, bJ as fundingCommitment, bK as selectPrimaryCredit, bL as stripCreditEnvelope, bM as toCreditView } from '../credit-menu-BM4qCD5U.js';
6
6
  import { Context } from 'hono';
7
7
  import { z } from 'zod';
8
- import { F as FxFetcher } from '../fx-H6K6qcH1.js';
8
+ import { F as FxFetcher } from '../fx-C-liI3oY.js';
9
9
  export { P as PinnedFetch, S as SSRFError, a as SSRFGuardOpts, b as SSRFReason, c as SSRFResolver, d as assertSafeUrl, e as createPinnedFetch } from '../ssrf-DbFkpDv0.js';
10
10
  import '@cashu/cashu-ts';
11
11
  import 'mppx';
@@ -74,7 +74,7 @@ import {
74
74
  unknownRouteNotFound,
75
75
  validateX402Env,
76
76
  withNwcPool
77
- } from "../chunk-Y6W5ZZTW.js";
77
+ } from "../chunk-N4VTG3KH.js";
78
78
  import {
79
79
  X402_DEFAULT_FACILITATOR,
80
80
  X402_DEFAULT_NETWORK,
@@ -1,4 +1,4 @@
1
- import { cj as StreamableJobStore, ck as ReceiptIssuingStore, J as JobRecord, cl as RequestIdClaim, cm as RequestIdClaimResult, _ as JobReceipt, aw as OutgoingMessage, cn as AppendOutgoingOptions, co as PaymentCreditDelta, cp as VerifyAndCreditResult, cq as JobCounters, a2 as Message, a3 as MessageType, K as KVStore, L as Logger, v as ResponseContent, P as PaymentContent, S as SDKJobContext } from '../job-store-DOSfYnLX.js';
1
+ import { cj as StreamableJobStore, ck as ReceiptIssuingStore, J as JobRecord, cl as RequestIdClaim, cm as RequestIdClaimResult, _ as JobReceipt, aw as OutgoingMessage, cn as AppendOutgoingOptions, co as PaymentCreditDelta, cp as VerifyAndCreditResult, cq as JobCounters, a2 as Message, a3 as MessageType, K as KVStore, L as Logger, v as ResponseContent, P as PaymentContent, S as SDKJobContext } from '../job-store-C53VQ5uu.js';
2
2
  import '@cashu/cashu-ts';
3
3
  import 'mppx';
4
4
  import '@x402/core/server';
@@ -1,4 +1,4 @@
1
- import { C as Currency } from './job-store-DOSfYnLX.js';
1
+ import { C as Currency } from './job-store-C53VQ5uu.js';
2
2
 
3
3
  /**
4
4
  * Thrown by `fiatToSatsCeil` / `satsToFiat` when the supplied `ratePerBtc` is
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dvmkit/sdk",
3
- "version": "0.1.1-rc.7",
3
+ "version": "0.1.2-rc.7",
4
4
  "description": "SDK for building accountless, pay-per-use Digital Vending Machines",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -89,6 +89,7 @@
89
89
  "eslint": "10.9.1",
90
90
  "globals": "17.11.0",
91
91
  "tsup": "8.5.1",
92
+ "tsx": "4.21.0",
92
93
  "typescript": "5.9.3",
93
94
  "typescript-eslint": "8.68.0",
94
95
  "vitest": "4.1.10",