Make premium claim windows manual close by default

This commit is contained in:
thePR0M3TH3AN committed 2026-07-04 16:34:23 -04:00
1 parent e0e7755cf5
commit 37d871431b
5 files changed
+83 -33

No files matched your search

+13 -7
View File
@@ -5633,11 +5633,11 @@
</details>
<details id="premiumPolicyAdminDetails" style="margin-top:12px;border-top:1px solid var(--line);padding-top:10px;display:none">
<summary style="font-weight:700;font-size:.82rem;cursor:pointer;color:var(--muted)">Premium policy admin</summary>
<p class="hint" style="margin:8px 0 6px">Publish the signed Premium 2.0 policy event used for epoch and claim-window stamping.</p>
<p class="hint" style="margin:8px 0 6px">Publish the signed Premium 2.0 policy event used for epoch and claim-window stamping. Leave claim days blank/0 to keep listings claimable until you manually close the epoch.</p>
<div style="display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px">
<div><label for="premiumPolicySoftgateEpoch">Softgate epoch</label><input id="premiumPolicySoftgateEpoch" type="text" value="2026-07" /></div>
<div><label for="premiumPolicyClaimEpoch">Claim epoch</label><input id="premiumPolicyClaimEpoch" type="text" value="2026-07" /></div>
<div><label for="premiumPolicyDefaultDays">Claim days</label><input id="premiumPolicyDefaultDays" type="number" min="7" max="180" step="1" value="90" /></div>
<div><label for="premiumPolicyDefaultDays">Claim days</label><input id="premiumPolicyDefaultDays" type="number" min="0" max="3650" step="1" value="0" placeholder="0 = manual close" /></div>
<div><label for="premiumPolicyEpochStatus">Epoch status</label><select id="premiumPolicyEpochStatus"><option value="active">Active</option><option value="legacy">Legacy</option><option value="closed">Closed</option></select></div>
</div>
<div class="buttonRow" style="margin:8px 0 0">
@@ -26300,15 +26300,20 @@
function buildPremiumPolicyFromAdminForm() {
const softgateEpoch = ($('premiumPolicySoftgateEpoch')?.value || '2026-07').trim();
const claimEpoch = ($('premiumPolicyClaimEpoch')?.value || softgateEpoch).trim();
const defaultClaimDays = Math.max(7, Math.min(180, Number($('premiumPolicyDefaultDays')?.value) || 90));
const rawClaimDays = ($('premiumPolicyDefaultDays')?.value || '').trim();
const parsedClaimDays = Number(rawClaimDays);
const defaultClaimDays = rawClaimDays === '' || parsedClaimDays === 0
? 0
: Math.max(1, Math.min(3650, parsedClaimDays || 0));
const status = ($('premiumPolicyEpochStatus')?.value || 'active').trim();
return {
v: 1,
activeSoftgateEpoch: softgateEpoch,
activeClaimEpoch: claimEpoch,
defaultClaimDays,
minClaimDays: 7,
maxClaimDays: 180,
claimWindow: defaultClaimDays === 0 ? 'manual' : 'fixed-days',
minClaimDays: defaultClaimDays === 0 ? 0 : 1,
maxClaimDays: 3650,
privateCopies: 'required',
firstUnlockDefault: 'allowed',
issuedAt: Math.floor(Date.now() / 1000),
@@ -26340,9 +26345,10 @@
const policy = loaded.policy || {};
if ($('premiumPolicySoftgateEpoch')) $('premiumPolicySoftgateEpoch').value = policy.activeSoftgateEpoch || '2026-07';
if ($('premiumPolicyClaimEpoch')) $('premiumPolicyClaimEpoch').value = policy.activeClaimEpoch || policy.activeSoftgateEpoch || '2026-07';
if ($('premiumPolicyDefaultDays')) $('premiumPolicyDefaultDays').value = String(policy.defaultClaimDays || 90);
if ($('premiumPolicyDefaultDays')) $('premiumPolicyDefaultDays').value = Number(policy.defaultClaimDays || 0) > 0 ? String(policy.defaultClaimDays) : '0';
if ($('premiumPolicyEpochStatus')) $('premiumPolicyEpochStatus').value = policy.epochs?.[policy.activeSoftgateEpoch]?.status || 'active';
statusEl.textContent = `Active policy: ${policy.activeSoftgateEpoch || 'unknown'} / claim ${policy.activeClaimEpoch || 'unknown'}.`;
const claimWindow = Number(policy.defaultClaimDays || 0) > 0 ? `${policy.defaultClaimDays} days` : 'manual close';
statusEl.textContent = `Active policy: ${policy.activeSoftgateEpoch || 'unknown'} / claim ${policy.activeClaimEpoch || 'unknown'} / ${claimWindow}.`;
} catch (err) {
statusEl.textContent = err?.message || 'No valid premium policy found.';
}
+15 -13
View File
@@ -55,13 +55,22 @@ export function buildPremiumPublishStamp(policy, {
if (supportedSoftgateEpochs.length && !supportedSoftgateEpochs.includes(softgateEpoch)) {
throw new Error(`Premium policy epoch ${softgateEpoch} is not supported by this client.`);
}
const minDays = Math.max(1, Number(policy.minClaimDays) || 1);
const maxDays = Math.max(minDays, Number(policy.maxClaimDays) || 180);
const requestedDays = Number(policy.defaultClaimDays) || 90;
const claimDays = Math.min(maxDays, Math.max(minDays, requestedDays));
const claimUntil = Number(now) + (claimDays * 86400);
const requestedDays = Number(policy.defaultClaimDays);
const manualClaimClose = requestedDays === 0 || policy.claimWindow === 'manual';
const minDays = manualClaimClose ? 0 : Math.max(1, Number(policy.minClaimDays) || 1);
const maxDays = manualClaimClose ? 0 : Math.max(minDays, Number(policy.maxClaimDays) || 180);
const claimDays = manualClaimClose ? 0 : Math.min(maxDays, Math.max(minDays, requestedDays || 90));
const claimUntil = claimDays > 0 ? Number(now) + (claimDays * 86400) : 0;
const premiumMode = PREMIUM_MODE_V15;
const postPurchaseAction = PRIVATE_SNAPSHOT_ACTION;
const tags = [
['premium-mode', premiumMode],
['softgate-epoch', softgateEpoch],
['claim-epoch', claimEpoch],
['claim-policy', postPurchaseAction],
['post-purchase-action', postPurchaseAction],
];
if (claimUntil) tags.splice(3, 0, ['claim-until', String(claimUntil)]);
return {
premiumMode,
softgateEpoch,
@@ -70,14 +79,7 @@ export function buildPremiumPublishStamp(policy, {
claimDays,
postPurchaseAction,
encryptedTag: epochConfig.softgateKdf || 'artstr-softgate-v1.5',
tags: [
['premium-mode', premiumMode],
['softgate-epoch', softgateEpoch],
['claim-epoch', claimEpoch],
['claim-until', String(claimUntil)],
['claim-policy', postPurchaseAction],
['post-purchase-action', postPurchaseAction],
],
tags,
envelopeSoftgate: {
claimEpoch,
claimUntil,