@tempoxyz/patron 0.0.27 → 0.0.28
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/dist/bin.js +3 -3
- package/dist/chunks/{-PBBSDRMM.js → -5Q7V7W7W.js} +41 -25
- package/dist/chunks/{chunk-WZRGCKEK.js → chunk-EISHX7Q3.js} +54 -32
- package/dist/chunks/chunk-EKFENOVR.js +15456 -0
- package/dist/chunks/{chunk-F5CY5O7O.js → chunk-EV7OA6GK.js} +19226 -34511
- package/dist/chunks/{chunk-HVTTV2A5.js → chunk-HQ2ZLUTT.js} +1 -1
- package/dist/chunks/chunk-OQXACACU.js +37 -0
- package/dist/chunks/{hook-3CYJEB2M.js → hook-N2SVXVUR.js} +6 -6
- package/dist/chunks/{hook-process-QQPBFRY6.js → hook-process-IMQMGXBT.js} +4 -4
- package/dist/chunks/{wallet-OJP2JREM.js → wallet-6TDMXRWW.js} +5 -3
- package/package.json +1 -1
- package/dist/chunks/chunk-MZJEM2SE.js +0 -163
- package/dist/chunks/chunk-O64T22EK.js +0 -54
package/dist/bin.js
CHANGED
|
@@ -4,14 +4,14 @@ const require = __patronCreateRequire(import.meta.url)
|
|
|
4
4
|
|
|
5
5
|
// src/bin.ts
|
|
6
6
|
if (process.argv[2] === "hook") {
|
|
7
|
-
const { runHookProcess } = await import("./chunks/hook-process-
|
|
7
|
+
const { runHookProcess } = await import("./chunks/hook-process-IMQMGXBT.js");
|
|
8
8
|
await runHookProcess().catch(() => void 0);
|
|
9
9
|
process.exit(0);
|
|
10
10
|
} else if (process.argv[2] === "pay") {
|
|
11
|
-
const { runPayProcess } = await import("./chunks/hook-process-
|
|
11
|
+
const { runPayProcess } = await import("./chunks/hook-process-IMQMGXBT.js");
|
|
12
12
|
await runPayProcess().catch(() => void 0);
|
|
13
13
|
process.exit(0);
|
|
14
14
|
} else {
|
|
15
|
-
const { run } = await import("./chunks/-
|
|
15
|
+
const { run } = await import("./chunks/-5Q7V7W7W.js");
|
|
16
16
|
process.exitCode = await run(process.argv.slice(2));
|
|
17
17
|
}
|
|
@@ -3,8 +3,6 @@ const require = __patronCreateRequire(import.meta.url)
|
|
|
3
3
|
import {
|
|
4
4
|
FileTokenStore,
|
|
5
5
|
LINK_TOKEN_STEP,
|
|
6
|
-
LeaderboardResponse,
|
|
7
|
-
PatronInfo,
|
|
8
6
|
STARTER_TOKENS,
|
|
9
7
|
budgetTokens,
|
|
10
8
|
buyTokens,
|
|
@@ -17,7 +15,6 @@ import {
|
|
|
17
15
|
loadIssuer,
|
|
18
16
|
needsRefill,
|
|
19
17
|
parseUsd,
|
|
20
|
-
profileMessage,
|
|
21
18
|
purchasableTokens,
|
|
22
19
|
readJsonObject,
|
|
23
20
|
redeem,
|
|
@@ -29,26 +26,20 @@ import {
|
|
|
29
26
|
withPatronStatus,
|
|
30
27
|
withoutPatronHandlers,
|
|
31
28
|
writeJsonObject
|
|
32
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-EKFENOVR.js";
|
|
33
30
|
import {
|
|
34
31
|
startRefill
|
|
35
32
|
} from "./chunk-TV5VLFTD.js";
|
|
36
33
|
import {
|
|
37
|
-
DEFAULT_MONTHLY_BUDGET_USD,
|
|
38
|
-
MAX_TOKENS_PER_PAGE,
|
|
39
|
-
MIN_TOKENS_PER_PAGE,
|
|
40
|
-
PACK_SIZE,
|
|
41
|
-
TOKEN_PRICE_UNITS,
|
|
42
|
-
clampTokensPerPage,
|
|
43
|
-
formatUsd,
|
|
44
|
-
normalizePayee,
|
|
45
34
|
resolveSettings,
|
|
46
|
-
settingsFor
|
|
47
|
-
|
|
48
|
-
} from "./chunk-WZRGCKEK.js";
|
|
35
|
+
settingsFor
|
|
36
|
+
} from "./chunk-OQXACACU.js";
|
|
49
37
|
import {
|
|
50
38
|
AGENT_IDS,
|
|
39
|
+
LeaderboardResponse,
|
|
40
|
+
PatronInfo,
|
|
51
41
|
ensureHome,
|
|
42
|
+
profileMessage,
|
|
52
43
|
readConfig,
|
|
53
44
|
readJson,
|
|
54
45
|
readUsage,
|
|
@@ -56,11 +47,20 @@ import {
|
|
|
56
47
|
updateUsage,
|
|
57
48
|
writeConfig,
|
|
58
49
|
writePrivateFile
|
|
59
|
-
} from "./chunk-
|
|
50
|
+
} from "./chunk-EV7OA6GK.js";
|
|
60
51
|
import {
|
|
52
|
+
DEFAULT_MONTHLY_BUDGET_USD,
|
|
53
|
+
MAX_TOKENS_PER_PAGE,
|
|
54
|
+
MIN_TOKENS_PER_PAGE,
|
|
55
|
+
PACK_SIZE,
|
|
56
|
+
TOKEN_PRICE_UNITS,
|
|
57
|
+
clampTokensPerPage,
|
|
58
|
+
formatUsd,
|
|
59
|
+
normalizePayee,
|
|
60
|
+
tokensToUnits,
|
|
61
61
|
tryLock,
|
|
62
62
|
withLock
|
|
63
|
-
} from "./chunk-
|
|
63
|
+
} from "./chunk-EISHX7Q3.js";
|
|
64
64
|
import "./chunk-GTMLTZRN.js";
|
|
65
65
|
|
|
66
66
|
// src/index.ts
|
|
@@ -700,10 +700,10 @@ async function linkRefillFailedAt(home) {
|
|
|
700
700
|
var REFILL_LOCK_STALE_MS = 5 * 60 * 1e3;
|
|
701
701
|
var defaultOpenWallet = async (settings, config, issuer, maxUnits) => {
|
|
702
702
|
if (config.wallet === "link") {
|
|
703
|
-
const { openLinkWallet } = await import("./wallet-
|
|
703
|
+
const { openLinkWallet } = await import("./wallet-6TDMXRWW.js");
|
|
704
704
|
return openLinkWallet(config, maxUnits);
|
|
705
705
|
}
|
|
706
|
-
const { openWallet } = await import("./wallet-
|
|
706
|
+
const { openWallet } = await import("./wallet-6TDMXRWW.js");
|
|
707
707
|
return openWallet(settings, config.wallet, issuer, maxUnits);
|
|
708
708
|
};
|
|
709
709
|
async function buyWithinBudget(settings, config, wanted, openWallet = defaultOpenWallet) {
|
|
@@ -861,6 +861,19 @@ function defaults() {
|
|
|
861
861
|
stdout: process.stdout
|
|
862
862
|
};
|
|
863
863
|
}
|
|
864
|
+
var REFRESHES_STABLE_COPY = /* @__PURE__ */ new Set([
|
|
865
|
+
"status",
|
|
866
|
+
"pause",
|
|
867
|
+
"resume",
|
|
868
|
+
"budget",
|
|
869
|
+
"per-page",
|
|
870
|
+
"tip",
|
|
871
|
+
"name"
|
|
872
|
+
]);
|
|
873
|
+
async function refreshStableCli(deps) {
|
|
874
|
+
const config = await readConfig(deps.settings.home).catch(() => void 0);
|
|
875
|
+
if (config) await installStableCli(deps.settings.home).catch(() => void 0);
|
|
876
|
+
}
|
|
864
877
|
async function run(argv, overrides = {}) {
|
|
865
878
|
const base = { ...defaults(), ...overrides };
|
|
866
879
|
let shared;
|
|
@@ -873,6 +886,8 @@ async function run(argv, overrides = {}) {
|
|
|
873
886
|
};
|
|
874
887
|
const [command, ...args] = argv;
|
|
875
888
|
try {
|
|
889
|
+
if (command !== void 0 && REFRESHES_STABLE_COPY.has(command))
|
|
890
|
+
await refreshStableCli(deps);
|
|
876
891
|
switch (command) {
|
|
877
892
|
case void 0:
|
|
878
893
|
await main(deps);
|
|
@@ -1069,7 +1084,7 @@ async function tempoSignIn(deps, budgetUnits, issuer) {
|
|
|
1069
1084
|
deps,
|
|
1070
1085
|
deps.settings.privateKey ? "Using PATRON_PRIVATE_KEY" : "Signing in with Tempo Wallet"
|
|
1071
1086
|
);
|
|
1072
|
-
const { signIn } = await import("./wallet-
|
|
1087
|
+
const { signIn } = await import("./wallet-6TDMXRWW.js");
|
|
1073
1088
|
const account = await signIn(deps.settings, {
|
|
1074
1089
|
budgetUnits,
|
|
1075
1090
|
issuer,
|
|
@@ -1181,9 +1196,9 @@ async function changeBudget(deps, input) {
|
|
|
1181
1196
|
if (budget === void 0 || budget < 1e-3)
|
|
1182
1197
|
throw new UsageError("Usage: patron budget <usd>, such as patron budget 10");
|
|
1183
1198
|
} else budget = await askBudget(deps, config.monthlyBudgetUsd);
|
|
1184
|
-
if (config.wallet === "tempo" && budget
|
|
1199
|
+
if (config.wallet === "tempo" && budget >= config.monthlyBudgetUsd) {
|
|
1185
1200
|
step(deps, "Approve the new spending limit in Tempo Wallet");
|
|
1186
|
-
const { authorizeBudget } = await import("./wallet-
|
|
1201
|
+
const { authorizeBudget } = await import("./wallet-6TDMXRWW.js");
|
|
1187
1202
|
const issuer = await loadIssuer(settings.home, settings.gatewayUrl, {
|
|
1188
1203
|
fetch: deps.fetch
|
|
1189
1204
|
});
|
|
@@ -1237,8 +1252,9 @@ async function tip(deps, url, amount = "0.10") {
|
|
|
1237
1252
|
throw new Error(
|
|
1238
1253
|
`This tip needs ${tokensUsd(missing)} more than this month's budget allows. Raise it with patron budget <usd>.`
|
|
1239
1254
|
);
|
|
1240
|
-
|
|
1241
|
-
|
|
1255
|
+
const amount2 = Math.max(missing, purchasableTokens(config, usage, PACK_SIZE));
|
|
1256
|
+
step(deps, `Adding ${tokensUsd(amount2)} to your balance`);
|
|
1257
|
+
await buyWithinBudget(settings, config, amount2, deps.openWallet);
|
|
1242
1258
|
}
|
|
1243
1259
|
const issuer = await loadIssuer(settings.home, settings.gatewayUrl, {
|
|
1244
1260
|
fetch: deps.fetch
|
|
@@ -1300,7 +1316,7 @@ async function setName(deps, name) {
|
|
|
1300
1316
|
const issuer = await loadIssuer(settings.home, settings.gatewayUrl, {
|
|
1301
1317
|
fetch: deps.fetch
|
|
1302
1318
|
});
|
|
1303
|
-
const open = deps.openWallet ?? (async (s, c, i, max) => (await import("./wallet-
|
|
1319
|
+
const open = deps.openWallet ?? (async (s, c, i, max) => (await import("./wallet-6TDMXRWW.js")).openWallet(s, c.wallet, i, max));
|
|
1304
1320
|
const wallet = await open(settings, config, issuer, 0n);
|
|
1305
1321
|
await setProfile(settings.gatewayUrl, wallet, name, deps.fetch);
|
|
1306
1322
|
await writeConfig(settings.home, { ...config, name });
|
|
@@ -797,6 +797,10 @@ var TOKEN_PRICE_UNITS = 1000n;
|
|
|
797
797
|
var PACK_SIZE = 1e3;
|
|
798
798
|
var MAX_TOKENS_PER_PURCHASE = 5e3;
|
|
799
799
|
var DEFAULT_MONTHLY_BUDGET_USD = 5;
|
|
800
|
+
function accessKeyLimitUnits(budgetUnits) {
|
|
801
|
+
if (budgetUnits <= 0n) return 0n;
|
|
802
|
+
return budgetUnits + 50000n + budgetUnits / 100n;
|
|
803
|
+
}
|
|
800
804
|
var MIN_TOKENS_PER_PAGE = 1;
|
|
801
805
|
var MAX_TOKENS_PER_PAGE = 10;
|
|
802
806
|
var DEFAULT_TOKENS_PER_PAGE = 1;
|
|
@@ -956,36 +960,6 @@ function normalizePayee(input) {
|
|
|
956
960
|
return normalizeDomain(trimmed);
|
|
957
961
|
}
|
|
958
962
|
|
|
959
|
-
// src/settings.ts
|
|
960
|
-
import { homedir } from "node:os";
|
|
961
|
-
import { join } from "node:path";
|
|
962
|
-
var DEFAULT_GATEWAY_URL = "https://patron-gateway.tempo-dev.workers.dev";
|
|
963
|
-
var DEFAULT_RELAY_URL = "https://patron-relay.tempo-dev.workers.dev";
|
|
964
|
-
function resolveSettings(env = process.env) {
|
|
965
|
-
const key = env.PATRON_PRIVATE_KEY?.trim();
|
|
966
|
-
const privateKey = key && /^0x[0-9a-fA-F]{64}$/.test(key) ? key : void 0;
|
|
967
|
-
return {
|
|
968
|
-
gatewayUrl: env.PATRON_GATEWAY_URL || DEFAULT_GATEWAY_URL,
|
|
969
|
-
home: env.PATRON_HOME || join(homedir(), ".patron"),
|
|
970
|
-
network: env.PATRON_NETWORK === "testnet" ? "testnet" : "mainnet",
|
|
971
|
-
overridden: {
|
|
972
|
-
gatewayUrl: Boolean(env.PATRON_GATEWAY_URL),
|
|
973
|
-
network: Boolean(env.PATRON_NETWORK),
|
|
974
|
-
relayUrl: Boolean(env.PATRON_RELAY_URL)
|
|
975
|
-
},
|
|
976
|
-
relayUrl: env.PATRON_RELAY_URL || DEFAULT_RELAY_URL,
|
|
977
|
-
...privateKey ? { privateKey } : {}
|
|
978
|
-
};
|
|
979
|
-
}
|
|
980
|
-
function settingsFor(settings, saved) {
|
|
981
|
-
return {
|
|
982
|
-
...settings,
|
|
983
|
-
gatewayUrl: settings.overridden.gatewayUrl || !saved.gatewayUrl ? settings.gatewayUrl : saved.gatewayUrl,
|
|
984
|
-
network: settings.overridden.network ? settings.network : saved.network,
|
|
985
|
-
relayUrl: settings.overridden.relayUrl || !saved.relayUrl ? settings.relayUrl : saved.relayUrl
|
|
986
|
-
};
|
|
987
|
-
}
|
|
988
|
-
|
|
989
963
|
// ../protocol/src/encoding.ts
|
|
990
964
|
function toBase64Url(bytes) {
|
|
991
965
|
let binary = "";
|
|
@@ -1190,11 +1164,59 @@ function tokensToUnits(tokens) {
|
|
|
1190
1164
|
return BigInt(tokens) * TOKEN_PRICE_UNITS;
|
|
1191
1165
|
}
|
|
1192
1166
|
|
|
1167
|
+
// src/lock.ts
|
|
1168
|
+
import { open, rm, stat } from "node:fs/promises";
|
|
1169
|
+
async function withLock(path, fn, options = {}) {
|
|
1170
|
+
const deadline = Date.now() + (options.timeoutMs ?? 3e3);
|
|
1171
|
+
const staleMs = options.staleMs ?? 1e4;
|
|
1172
|
+
for (; ; ) {
|
|
1173
|
+
try {
|
|
1174
|
+
const handle = await open(path, "wx", 384);
|
|
1175
|
+
await handle.close();
|
|
1176
|
+
break;
|
|
1177
|
+
} catch (error) {
|
|
1178
|
+
if (error.code !== "EEXIST") throw error;
|
|
1179
|
+
const age = await stat(path).then(
|
|
1180
|
+
(stats) => Date.now() - stats.mtimeMs,
|
|
1181
|
+
() => 0
|
|
1182
|
+
);
|
|
1183
|
+
if (age > staleMs) {
|
|
1184
|
+
await rm(path, { force: true });
|
|
1185
|
+
continue;
|
|
1186
|
+
}
|
|
1187
|
+
if (Date.now() > deadline) throw new Error(`Patron state is busy: ${path}`);
|
|
1188
|
+
await new Promise((resolve) => setTimeout(resolve, 10 + Math.random() * 20));
|
|
1189
|
+
}
|
|
1190
|
+
}
|
|
1191
|
+
try {
|
|
1192
|
+
return await fn();
|
|
1193
|
+
} finally {
|
|
1194
|
+
await rm(path, { force: true });
|
|
1195
|
+
}
|
|
1196
|
+
}
|
|
1197
|
+
async function tryLock(path, staleMs) {
|
|
1198
|
+
try {
|
|
1199
|
+
const handle = await open(path, "wx", 384);
|
|
1200
|
+
await handle.close();
|
|
1201
|
+
} catch (error) {
|
|
1202
|
+
if (error.code !== "EEXIST") throw error;
|
|
1203
|
+
const age = await stat(path).then(
|
|
1204
|
+
(stats) => Date.now() - stats.mtimeMs,
|
|
1205
|
+
() => 0
|
|
1206
|
+
);
|
|
1207
|
+
if (age <= staleMs) return void 0;
|
|
1208
|
+
await rm(path, { force: true });
|
|
1209
|
+
return tryLock(path, staleMs);
|
|
1210
|
+
}
|
|
1211
|
+
return () => rm(path, { force: true });
|
|
1212
|
+
}
|
|
1213
|
+
|
|
1193
1214
|
export {
|
|
1194
1215
|
TOKEN_PRICE_UNITS,
|
|
1195
1216
|
PACK_SIZE,
|
|
1196
1217
|
MAX_TOKENS_PER_PURCHASE,
|
|
1197
1218
|
DEFAULT_MONTHLY_BUDGET_USD,
|
|
1219
|
+
accessKeyLimitUnits,
|
|
1198
1220
|
MIN_TOKENS_PER_PAGE,
|
|
1199
1221
|
MAX_TOKENS_PER_PAGE,
|
|
1200
1222
|
clampTokensPerPage,
|
|
@@ -1206,6 +1228,6 @@ export {
|
|
|
1206
1228
|
isExcludedByDefault,
|
|
1207
1229
|
formatUsd,
|
|
1208
1230
|
tokensToUnits,
|
|
1209
|
-
|
|
1210
|
-
|
|
1231
|
+
withLock,
|
|
1232
|
+
tryLock
|
|
1211
1233
|
};
|