@dvmkit/sdk 0.2.0-rc.9 → 0.3.0-rc.9
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 +2 -0
- package/dist/{chunk-V7EVFLAK.js → chunk-2D75MNNG.js} +154 -523
- package/dist/{chunk-BIFLRKMO.js → chunk-2KGG5ORW.js} +1 -1
- package/dist/{chunk-5URG56JJ.js → chunk-A4CM2BD3.js} +18 -2
- package/dist/{chunk-FT6HTUM4.js → chunk-AJNFXR7J.js} +1 -1
- package/dist/{chunk-S3XAHZQY.js → chunk-COYKJRMM.js} +24 -3
- package/dist/{chunk-UP2F5RRT.js → chunk-D7YQYLLM.js} +1 -4
- package/dist/{chunk-OMIQMMME.js → chunk-FPOLJRBF.js} +3 -3
- package/dist/{chunk-QP53RWAD.js → chunk-HHTL3ZFT.js} +9 -6
- package/dist/{chunk-PCUQZDZA.js → chunk-LTAIBLS2.js} +537 -321
- package/dist/{chunk-JDT5LCJC.js → chunk-MD3H3BF7.js} +1 -1
- package/dist/{chunk-KSQEFVFJ.js → chunk-MMCE7XSR.js} +1 -1
- package/dist/{chunk-MRAGS5VP.js → chunk-N5B66UOS.js} +4 -16
- package/dist/{chunk-2ATUAUAO.js → chunk-O6D72KYA.js} +2 -2
- package/dist/{chunk-KXCKFIJI.js → chunk-QX52F6IB.js} +1 -1
- package/dist/{chunk-PHHAYRQV.js → chunk-U5VNEALI.js} +23 -10
- package/dist/{chunk-JLXYOV4Y.js → chunk-V5ZRATJH.js} +1 -1
- package/dist/{chunk-6GRIKOFB.js → chunk-VA7GT6C6.js} +5 -16
- package/dist/{chunk-O2X2CCKH.js → chunk-VIVXB4CD.js} +1 -1
- package/dist/{chunk-L67WTZX2.js → chunk-XMDQOXHO.js} +10 -33
- package/dist/{chunk-QT4ONTST.js → chunk-XRLKGCAW.js} +1 -1
- package/dist/{chunk-KMZXTBLA.js → chunk-XZ7LW4S5.js} +0 -1
- package/dist/{chunk-XQXJKJ3P.js → chunk-YO56VCTQ.js} +0 -4
- package/dist/{credit-ledger-5ZEJRI46.js → credit-ledger-MHA652TV.js} +2 -2
- package/dist/{credit-menu-D4Gcdgc4.d.ts → credit-menu-BlCL7gZx.d.ts} +175 -533
- package/dist/{fx-B0SLBe5x.d.ts → fx-DhyT1Cjh.d.ts} +1 -1
- package/dist/index.d.ts +5 -17
- package/dist/internal/caller.d.ts +109 -698
- package/dist/internal/caller.js +10 -12
- package/dist/internal/server.d.ts +17 -42
- package/dist/internal/server.js +16 -15
- package/dist/{job-store-B2uZvga4.d.ts → job-store-D3CcZp_g.d.ts} +6 -10
- package/dist/{lightning-backend-CQBnQgsT.d.ts → lightning-backend-BhsyrBLa.d.ts} +1 -15
- package/dist/{memory-credit-ledger-ZOH6C3N4.js → memory-credit-ledger-BYBATRN3.js} +3 -3
- package/dist/{mpp-secret-state-WNAQQ6K4.js → mpp-secret-state-B5GCILVH.js} +1 -1
- package/dist/{mpp-setup-IOJBF7DB.js → mpp-setup-MPP3ST5X.js} +1 -1
- package/dist/{payout-reporter-5PIRYFVQ.js → payout-reporter-KEMUXEUO.js} +2 -2
- package/dist/{postgres-consumed-credential-store-ISRHBMOU.js → postgres-consumed-credential-store-6N2V5MJN.js} +1 -1
- package/dist/postgres-job-store-VE2JRUEC.js +7 -0
- package/dist/postgres-kv-store-DXGTKXLU.js +7 -0
- package/dist/{postgres-replay-store-IZFLTTAC.js → postgres-replay-store-ZF4JNZOW.js} +2 -2
- package/dist/{processed-payment-store-FIDI3RNH.js → processed-payment-store-GKMAWOM3.js} +2 -2
- package/dist/revenue-reporter-O75BGYFK.js +7 -0
- package/dist/server/index.d.ts +37 -140
- package/dist/server/index.js +64 -127
- package/dist/{step-cache-CXg7ziML.d.ts → step-cache-v2yhyhSZ.d.ts} +359 -1112
- package/dist/{tempo-charge-store-76TDAF34.js → tempo-charge-store-SDTUNTKA.js} +2 -2
- package/dist/{tempo-lifecycle-DXM7QXJQ.js → tempo-lifecycle-G5SB4HFC.js} +4 -4
- package/dist/{tempo-session-store-2JNOKJGX.js → tempo-session-store-WF3VZXNF.js} +2 -2
- package/dist/{tempo-wallet-O67H5M4N.js → tempo-wallet-ZFNUDFVO.js} +1 -1
- package/dist/testing/index.d.ts +2 -2
- package/dist/testing/index.js +2 -2
- package/dist/{usd-BNDg1715.d.ts → usd-Cu9G6xv2.d.ts} +1 -1
- package/dist/{x402-7S2EFINY.js → x402-CI6PSHNO.js} +4 -4
- package/package.json +2 -2
- package/dist/postgres-job-store-OGQ6IT4U.js +0 -7
- package/dist/postgres-kv-store-D5E2EZ24.js +0 -7
- package/dist/revenue-reporter-NNCNRY4C.js +0 -7
|
@@ -66,8 +66,24 @@ function msatsToUsdCents(msats, btcPriceUsd) {
|
|
|
66
66
|
return Math.round(usd * 100);
|
|
67
67
|
}
|
|
68
68
|
function msatsToUsdc(msats, btcUsdRate) {
|
|
69
|
-
|
|
70
|
-
|
|
69
|
+
if (!Number.isSafeInteger(msats) || msats < 0) {
|
|
70
|
+
throw new RangeError("msats must be a non-negative safe integer");
|
|
71
|
+
}
|
|
72
|
+
if (!Number.isFinite(btcUsdRate) || btcUsdRate <= 0) {
|
|
73
|
+
throw new RangeError("BTC/USD rate must be finite and positive");
|
|
74
|
+
}
|
|
75
|
+
const [mantissa, exponent = "0"] = btcUsdRate.toString().split("e");
|
|
76
|
+
const decimalPlaces = mantissa.split(".")[1]?.length ?? 0;
|
|
77
|
+
const shift = Number(exponent) - decimalPlaces;
|
|
78
|
+
let numerator = BigInt(msats) * BigInt(mantissa.replace(".", ""));
|
|
79
|
+
let denominator = 100000n;
|
|
80
|
+
if (shift > 0) numerator *= 10n ** BigInt(shift);
|
|
81
|
+
else if (shift < 0) denominator *= 10n ** BigInt(-shift);
|
|
82
|
+
const micro = (numerator + denominator - 1n) / denominator;
|
|
83
|
+
if (micro > BigInt(Number.MAX_SAFE_INTEGER)) {
|
|
84
|
+
throw new RangeError("USDC micro-unit amount exceeds the safe integer range");
|
|
85
|
+
}
|
|
86
|
+
return Number(micro);
|
|
71
87
|
}
|
|
72
88
|
function usdcToMsats(usdc, btcUsdRate) {
|
|
73
89
|
return usdToMsats(usdc, btcUsdRate);
|
|
@@ -1,26 +1,47 @@
|
|
|
1
1
|
// src/sdk/server/init-lock.ts
|
|
2
|
+
import { AsyncLocalStorage } from "async_hooks";
|
|
2
3
|
var SDK_INIT_ADVISORY_LOCK = 17320927;
|
|
3
4
|
async function withSdkInitLock(db, fn) {
|
|
5
|
+
const context = activeInits.getStore();
|
|
6
|
+
if (context?.get(db)?.active) return fn();
|
|
4
7
|
assertPoolFitsLock(db);
|
|
5
8
|
let holder = holders.get(db);
|
|
6
9
|
if (holder) {
|
|
7
10
|
holder.refs += 1;
|
|
8
11
|
} else {
|
|
9
|
-
holder = { refs: 1, acquired: acquire(db) };
|
|
12
|
+
holder = { refs: 1, acquired: acquire(db), tail: Promise.resolve() };
|
|
10
13
|
holders.set(db, holder);
|
|
11
14
|
}
|
|
15
|
+
const predecessor = holder.tail;
|
|
16
|
+
let finishTurn;
|
|
17
|
+
holder.tail = new Promise((resolve) => {
|
|
18
|
+
finishTurn = resolve;
|
|
19
|
+
});
|
|
12
20
|
let guardedFailed = false;
|
|
13
21
|
try {
|
|
14
22
|
await holder.acquired;
|
|
15
|
-
|
|
23
|
+
await predecessor;
|
|
24
|
+
const token = { active: true };
|
|
25
|
+
const nextContext = new Map(context);
|
|
26
|
+
nextContext.set(db, token);
|
|
27
|
+
try {
|
|
28
|
+
return await activeInits.run(nextContext, fn);
|
|
29
|
+
} finally {
|
|
30
|
+
token.active = false;
|
|
31
|
+
}
|
|
16
32
|
} catch (err) {
|
|
17
33
|
guardedFailed = true;
|
|
18
34
|
throw err;
|
|
19
35
|
} finally {
|
|
20
|
-
|
|
36
|
+
try {
|
|
37
|
+
await releaseHolder(db, holder, guardedFailed);
|
|
38
|
+
} finally {
|
|
39
|
+
finishTurn();
|
|
40
|
+
}
|
|
21
41
|
}
|
|
22
42
|
}
|
|
23
43
|
var holders = /* @__PURE__ */ new WeakMap();
|
|
44
|
+
var activeInits = new AsyncLocalStorage();
|
|
24
45
|
function assertPoolFitsLock(db) {
|
|
25
46
|
const max = db.options?.max;
|
|
26
47
|
if (max === void 0 || max >= 2) return;
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "./chunk-YG7G4DPZ.js";
|
|
5
5
|
import {
|
|
6
6
|
withSdkInitLock
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-COYKJRMM.js";
|
|
8
8
|
import {
|
|
9
9
|
withPostgresTransactionRecovery
|
|
10
10
|
} from "./chunk-C3MTFLC6.js";
|
|
@@ -18,7 +18,6 @@ var PostgresTempoSessionStore = class {
|
|
|
18
18
|
}
|
|
19
19
|
pool;
|
|
20
20
|
acceptance = new AsyncLocalStorage();
|
|
21
|
-
/** Create the channel table under the SDK-wide migration lock. */
|
|
22
21
|
async init() {
|
|
23
22
|
await withSdkInitLock(this.pool, async () => {
|
|
24
23
|
await this.pool.query(`
|
|
@@ -47,7 +46,6 @@ var PostgresTempoSessionStore = class {
|
|
|
47
46
|
);
|
|
48
47
|
});
|
|
49
48
|
}
|
|
50
|
-
/** Read one channel snapshot. */
|
|
51
49
|
async get(key) {
|
|
52
50
|
const client = this.acceptance.getStore()?.client;
|
|
53
51
|
const { rows } = await (client ?? this.pool).query(
|
|
@@ -60,7 +58,6 @@ var PostgresTempoSessionStore = class {
|
|
|
60
58
|
async put(key, value) {
|
|
61
59
|
await this.update(key, () => ({ op: "set", value, result: void 0 }));
|
|
62
60
|
}
|
|
63
|
-
/** Delete one channel snapshot. */
|
|
64
61
|
async delete(key) {
|
|
65
62
|
await this.update(key, () => ({ op: "delete", result: void 0 }));
|
|
66
63
|
}
|
|
@@ -2,19 +2,19 @@ import {
|
|
|
2
2
|
connectedTempoAccount,
|
|
3
3
|
tempoBalanceCheckHint,
|
|
4
4
|
tempoTokenReference
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-VIVXB4CD.js";
|
|
6
6
|
import {
|
|
7
7
|
fundingReachableAt,
|
|
8
8
|
listCredits,
|
|
9
9
|
maxAdvertisedMicro,
|
|
10
10
|
normalizeCreditEndpoint,
|
|
11
11
|
withinAdvertisedTolerance
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-MMCE7XSR.js";
|
|
13
13
|
import {
|
|
14
14
|
costAnchor,
|
|
15
15
|
formatUsd,
|
|
16
16
|
formatUsdcMicrounits
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-A4CM2BD3.js";
|
|
18
18
|
import {
|
|
19
19
|
DvmError,
|
|
20
20
|
IDENTITIES_FILE,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
withSdkInitLock
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-COYKJRMM.js";
|
|
4
4
|
|
|
5
5
|
// src/sdk/server/postgres-job-store.ts
|
|
6
6
|
import { createHash } from "crypto";
|
|
@@ -1053,10 +1053,13 @@ var PostgresJobStore = class {
|
|
|
1053
1053
|
);
|
|
1054
1054
|
}
|
|
1055
1055
|
cancelStaleJob(jobId, expectedActivityBefore, reason, terminalStatus) {
|
|
1056
|
-
return this.terminateJob(jobId, reason, terminalStatus, expectedActivityBefore);
|
|
1056
|
+
return this.terminateJob(jobId, reason, terminalStatus, expectedActivityBefore, null);
|
|
1057
1057
|
}
|
|
1058
1058
|
cancelJob(jobId, reason) {
|
|
1059
|
-
return this.terminateJob(jobId, reason, "cancelled", null);
|
|
1059
|
+
return this.terminateJob(jobId, reason, "cancelled", null, "caller");
|
|
1060
|
+
}
|
|
1061
|
+
cancelJobForHosting(jobId, reason) {
|
|
1062
|
+
return this.terminateJob(jobId, reason, "cancelled", null, "provider");
|
|
1060
1063
|
}
|
|
1061
1064
|
async getCounters(jobId) {
|
|
1062
1065
|
const { rows } = await this.pool.query(
|
|
@@ -1209,7 +1212,7 @@ var PostgresJobStore = class {
|
|
|
1209
1212
|
* machine running the handler wakes as soon as the terminal status is
|
|
1210
1213
|
* visible.
|
|
1211
1214
|
*/
|
|
1212
|
-
async terminateJob(jobId, reason, terminalStatus, expectedActivityBefore) {
|
|
1215
|
+
async terminateJob(jobId, reason, terminalStatus, expectedActivityBefore, endedBy) {
|
|
1213
1216
|
const staleOnly = expectedActivityBefore !== null;
|
|
1214
1217
|
const client = await this.pool.connect();
|
|
1215
1218
|
try {
|
|
@@ -1241,7 +1244,7 @@ var PostgresJobStore = class {
|
|
|
1241
1244
|
);
|
|
1242
1245
|
await client.query(
|
|
1243
1246
|
`UPDATE jobs SET
|
|
1244
|
-
ended_by =
|
|
1247
|
+
ended_by = COALESCE($7::text, CASE WHEN status = 'awaiting-input' THEN 'caller' ELSE 'provider' END),
|
|
1245
1248
|
terminal_at_ms = $5,
|
|
1246
1249
|
caller_wait_ms = caller_wait_ms + CASE WHEN status = 'awaiting-input'
|
|
1247
1250
|
THEN GREATEST(0, $5 - COALESCE(awaiting_input_at_ms, last_activity_at)) ELSE 0 END,
|
|
@@ -1253,7 +1256,7 @@ var PostgresJobStore = class {
|
|
|
1253
1256
|
next_seq = $4 + 1,
|
|
1254
1257
|
last_activity_at = $5
|
|
1255
1258
|
WHERE id = $1`,
|
|
1256
|
-
[jobId, reason, JSON.stringify([cancelMsg]), nextSeq, now, terminalStatus,
|
|
1259
|
+
[jobId, reason, JSON.stringify([cancelMsg]), nextSeq, now, terminalStatus, endedBy]
|
|
1257
1260
|
);
|
|
1258
1261
|
await client.query("SELECT pg_notify('job_messages', $1)", [jobId]);
|
|
1259
1262
|
await client.query("COMMIT");
|