@tempoxyz/patron 0.0.27 → 0.0.29

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.
@@ -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
- resolveSettings,
1210
- settingsFor
1231
+ withLock,
1232
+ tryLock
1211
1233
  };
@@ -3,7 +3,7 @@ const require = __patronCreateRequire(import.meta.url)
3
3
  import {
4
4
  isExcludedByDefault,
5
5
  normalizePayee
6
- } from "./chunk-WZRGCKEK.js";
6
+ } from "./chunk-EISHX7Q3.js";
7
7
 
8
8
  // src/hook-input.ts
9
9
  var HOOK_TIMEOUT_MS = 2e3;
@@ -0,0 +1,37 @@
1
+ import { createRequire as __patronCreateRequire } from 'node:module'
2
+ const require = __patronCreateRequire(import.meta.url)
3
+
4
+ // src/settings.ts
5
+ import { homedir } from "node:os";
6
+ import { join } from "node:path";
7
+ var DEFAULT_GATEWAY_URL = "https://patron-gateway.tempo-dev.workers.dev";
8
+ var DEFAULT_RELAY_URL = "https://patron-relay.tempo-dev.workers.dev";
9
+ function resolveSettings(env = process.env) {
10
+ const key = env.PATRON_PRIVATE_KEY?.trim();
11
+ const privateKey = key && /^0x[0-9a-fA-F]{64}$/.test(key) ? key : void 0;
12
+ return {
13
+ gatewayUrl: env.PATRON_GATEWAY_URL || DEFAULT_GATEWAY_URL,
14
+ home: env.PATRON_HOME || join(homedir(), ".patron"),
15
+ network: env.PATRON_NETWORK === "testnet" ? "testnet" : "mainnet",
16
+ overridden: {
17
+ gatewayUrl: Boolean(env.PATRON_GATEWAY_URL),
18
+ network: Boolean(env.PATRON_NETWORK),
19
+ relayUrl: Boolean(env.PATRON_RELAY_URL)
20
+ },
21
+ relayUrl: env.PATRON_RELAY_URL || DEFAULT_RELAY_URL,
22
+ ...privateKey ? { privateKey } : {}
23
+ };
24
+ }
25
+ function settingsFor(settings, saved) {
26
+ return {
27
+ ...settings,
28
+ gatewayUrl: settings.overridden.gatewayUrl || !saved.gatewayUrl ? settings.gatewayUrl : saved.gatewayUrl,
29
+ network: settings.overridden.network ? settings.network : saved.network,
30
+ relayUrl: settings.overridden.relayUrl || !saved.relayUrl ? settings.relayUrl : saved.relayUrl
31
+ };
32
+ }
33
+
34
+ export {
35
+ resolveSettings,
36
+ settingsFor
37
+ };