···
919
919
const handleRevokeList = async (e) => {
920
920
e.preventDefault();
921
921
if (!agent || !session || !selectedListUriForRevoke) {
922
922
-
setBulkRevokeStatus('Please select a list to restore.');
922
922
+
setBulkRevokeStatus('Please select a list to uncancel.');
923
923
return;
924
924
}
925
925
···
936
936
}
937
937
938
938
// Confirmation dialog
939
939
-
if (!window.confirm(`Are you sure you want to restore cancellations for all users found in ${sourceDescription}? This cannot be undone.`)) {
939
939
+
if (!window.confirm(`Are you sure you want to uncancel all users found in ${sourceDescription}? This cannot be undone.`)) {
940
940
return;
941
941
}
942
942
···
982
982
983
983
if (fetchedItems.length === 0 && selectedListUriForRevoke !== followsListUri) {
984
984
// Only show empty message if it wasn't the follows list (or if follows *was* empty)
985
985
-
setBulkRevokeStatus(`List "${selectedList.name}" is empty. No users to check for restoration.`);
985
985
+
setBulkRevokeStatus(`List "${selectedList.name}" is empty. No users to check for uncancellation.`);
986
986
setIsRevoking(false);
987
987
return;
988
988
}
···
1007
1007
);
1008
1008
1009
1009
totalToRevoke = cancellationsToRestore.length;
1010
1010
-
setBulkRevokeStatus(`Found ${totalToRevoke} existing cancellation(s) matching users in ${sourceDescription}. Starting restoration...`);
1010
1010
+
setBulkRevokeStatus(`Found ${totalToRevoke} existing cancellation(s) matching users in ${sourceDescription}. Starting uncancellation...`);
1011
1011
1012
1012
if (totalToRevoke === 0) {
1013
1013
setBulkRevokeStatus(`No existing cancellations match users in the ${sourceDescription}.`);
···
1020
1020
const cancellationRecord = cancellationsToRestore[i];
1021
1021
// Use handle from record value if available, fallback to subject DID
1022
1022
const handle = cancellationRecord.value?.handle || cancellationRecord.value?.subject || 'unknown';
1023
1023
-
setBulkRevokeProgress(`Restoring ${i + 1} of ${totalToRevoke}: @${handle}`);
1023
1023
+
setBulkRevokeProgress(`Uncanceling ${i + 1} of ${totalToRevoke}: @${handle}`);
1024
1024
1025
1025
try {
1026
1026
const parts = cancellationRecord.uri.split('/');
···
1033
1033
});
1034
1034
successCount++;
1035
1035
} catch (error) {
1036
1036
-
console.error(`Failed to restore @${handle} (URI: ${cancellationRecord.uri}):`, error);
1036
1036
+
console.error(`Failed to uncancel @${handle} (URI: ${cancellationRecord.uri}):`, error);
1037
1037
failureCount++;
1038
1038
errors.push(`@${handle}: ${error.message || 'Unknown error'}`);
1039
1039
}
1040
1040
}
1041
1041
1042
1042
// Final status message
1043
1043
-
let finalMessage = `Bulk restoration complete for ${sourceDescription}. \n`;
1044
1044
-
finalMessage += `Successfully restored: ${successCount}. \n`;
1043
1043
+
let finalMessage = `Bulk uncancellation complete for ${sourceDescription}. \n`;
1044
1044
+
finalMessage += `Successfully uncancelled: ${successCount}. \n`;
1045
1045
if (failureCount > 0) {
1046
1046
finalMessage += `Failed: ${failureCount}. \n`;
1047
1047
-
console.log("Bulk restoration errors:", errors);
1047
1047
+
console.log("Bulk uncancellation errors:", errors);
1048
1048
finalMessage += `Check console for details on failures.`;
1049
1049
}
1050
1050
setBulkRevokeStatus(finalMessage);
···
1052
1052
setSelectedListUriForRevoke(''); // Reset selection
1053
1053
1054
1054
} catch (error) {
1055
1055
-
console.error('Failed to fetch or process items for restoration:', error);
1056
1056
-
setBulkRevokeStatus(`Error during bulk restoration for ${sourceDescription}: ${error.message || 'Unknown error'}`);
1055
1055
+
console.error('Failed to fetch or process items for uncancellation:', error);
1056
1056
+
setBulkRevokeStatus(`Error during bulk uncancellation for ${sourceDescription}: ${error.message || 'Unknown error'}`);
1057
1057
} finally {
1058
1058
setIsRevoking(false);
1059
1059
setBulkRevokeProgress('');
···
1063
1063
// Handler for revoking by time range
1064
1064
const handleRevokeByTime = async () => {
1065
1065
if (!agent || !session || !revokeTimeRange) {
1066
1066
-
setBulkRevokeStatus('Cannot restore by time: Missing agent, session, or time range.');
1066
1066
+
setBulkRevokeStatus('Cannot uncancel by time: Missing agent, session, or time range.');
1067
1067
return;
1068
1068
}
1069
1069
···
1108
1108
},
1109
1109
false // Use agent method
1110
1110
);
1111
1111
-
console.log(`Fetched ${allCancellationRecords.length} total cancellation records for time-based restoration.`);
1111
1111
+
console.log(`Fetched ${allCancellationRecords.length} total cancellation records for time-based uncancellation.`);
1112
1112
1113
1113
// Filter the *complete* list based on creation time
1114
1114
cancellationsToRestore = allCancellationRecords.filter(record =>
···
1123
1123
}
1124
1124
1125
1125
// Confirmation dialog (now that we know the count)
1126
1126
-
if (!window.confirm(`Are you sure you want to restore ${count} cancellation(s) created in the last ${revokeTimeRange}? This cannot be undone.`)) {
1126
1126
+
if (!window.confirm(`Are you sure you want to uncancel ${count} cancellation(s) created in the last ${revokeTimeRange}? This cannot be undone.`)) {
1127
1127
setIsRevoking(false); // User cancelled
1128
1128
-
setBulkRevokeStatus('Time-based restoration cancelled.');
1128
1128
+
setBulkRevokeStatus('Time-based uncancellation cancelled.');
1129
1129
return;
1130
1130
}
1131
1131
1132
1132
-
setBulkRevokeStatus(`Starting restoration for ${count} record(s) created in the last ${revokeTimeRange}...`);
1132
1132
+
setBulkRevokeStatus(`Starting uncancellation for ${count} record(s) created in the last ${revokeTimeRange}...`);
1133
1133
1134
1134
// Iterate and restore each matching cancellation
1135
1135
for (let i = 0; i < cancellationsToRestore.length; i++) {
···
1137
1137
// Use handle from record value if available, fallback to subject DID
1138
1138
const handle = cancellationRecord.value?.handle || cancellationRecord.value?.subject || 'unknown';
1139
1139
const createdAtStr = cancellationRecord.value?.createdAt ? new Date(cancellationRecord.value.createdAt).toLocaleTimeString() : 'unknown time';
1140
1140
-
setBulkRevokeProgress(`Restoring ${i + 1} of ${count}: @${handle} (Created: ${createdAtStr})`);
1140
1140
+
setBulkRevokeProgress(`Uncanceling ${i + 1} of ${count}: @${handle} (Created: ${createdAtStr})`);
1141
1141
1142
1142
try {
1143
1143
const parts = cancellationRecord.uri.split('/');
···
1150
1150
});
1151
1151
successCount++;
1152
1152
} catch (error) {
1153
1153
-
console.error(`Failed to restore @${handle} (URI: ${cancellationRecord.uri}):`, error);
1153
1153
+
console.error(`Failed to uncancel @${handle} (URI: ${cancellationRecord.uri}):`, error);
1154
1154
failureCount++;
1155
1155
errors.push(`@${handle}: ${error.message || 'Unknown error'}`);
1156
1156
}
1157
1157
}
1158
1158
1159
1159
// Final status message
1160
1160
-
let finalMessage = `Time-based restoration complete (${revokeTimeRange}). \n`;
1161
1161
-
finalMessage += `Successfully restored: ${successCount}. \n`;
1160
1160
+
let finalMessage = `Time-based uncancellation complete (${revokeTimeRange}). \n`;
1161
1161
+
finalMessage += `Successfully uncancelled: ${successCount}. \n`;
1162
1162
if (failureCount > 0) {
1163
1163
finalMessage += `Failed: ${failureCount}. \n`;
1164
1164
-
console.log("Time-based restoration errors:", errors);
1164
1164
+
console.log("Time-based uncancellation errors:", errors);
1165
1165
finalMessage += `Check console for details on failures.`;
1166
1166
}
1167
1167
setBulkRevokeStatus(finalMessage);
1168
1168
fetchVerifications(); // Refresh the list of canceled accounts displayed in UI
1169
1169
1170
1170
} catch (error) {
1171
1171
-
console.error('Error during time-based restoration process:', error);
1172
1172
-
setBulkRevokeStatus(`Error during time-based restoration (${revokeTimeRange}): ${error.message || 'Unknown error'}`);
1171
1171
+
console.error('Error during time-based uncancellation process:', error);
1172
1172
+
setBulkRevokeStatus(`Error during time-based uncancellation (${revokeTimeRange}): ${error.message || 'Unknown error'}`);
1173
1173
} finally {
1174
1174
setIsRevoking(false);
1175
1175
setBulkRevokeProgress('');
···
1519
1519
required
1520
1520
className="canceler-list-select"
1521
1521
>
1522
1522
-
<option value="" disabled>{isFetchingLists ? "Loading lists..." : userLists.length === 0 ? "No lists found" : "-- Select list to restore --"}</option>
1522
1522
+
<option value="" disabled>{isFetchingLists ? "Loading lists..." : userLists.length === 0 ? "No lists found" : "-- Select list to uncancel --"}</option>
1523
1523
{userLists.map(list => (
1524
1524
<option key={list.uri} value={list.uri}>
1525
1525
{list.name} ({list.listItemCount || 0} members)
···
1527
1527
))}
1528
1528
</select>
1529
1529
<button type="submit" disabled={isRevoking || !selectedListUriForRevoke || isFetchingLists} className="canceler-revoke-button"> {/* Reuse revoke button style */}
1530
1530
-
{isRevoking ? 'Restoring List...' : 'Restore Selected List'}
1530
1530
+
{isRevoking ? 'Uncanceling List...' : 'Uncancel Selected List'}
1531
1531
</button>
1532
1532
</form>
1533
1533
</div>
1534
1534
) : ( /* revokeMode === 'time' */
1535
1535
<div className="canceler-time-revoke-wrapper">
1536
1536
-
<p>Select the time range to restore cancellations created within:</p>
1536
1536
+
<p>Select the time range to uncancel cancellations created within:</p>
1537
1537
<div className="canceler-time-range-selector">
1538
1538
<label>
1539
1539
<input type="radio" name="revokeTimeRange" value="30m" checked={revokeTimeRange === '30m'} onChange={(e) => setRevokeTimeRange(e.target.value)} disabled={isRevoking} />
···
1553
1553
disabled={isRevoking || !revokeTimeRange}
1554
1554
className="canceler-revoke-button"
1555
1555
>
1556
1556
-
{isRevoking ? 'Restoring by Time...' : 'Restore Selected Range'}
1556
1556
+
{isRevoking ? 'Uncanceling by Time...' : 'Uncancel Selected Range'}
1557
1557
</button>
1558
1558
</div>
1559
1559
)}
···
1612
1612
</div>
1613
1613
<div className="canceler-list-item-actions">
1614
1614
<button onClick={() => handleRevoke(verification)} disabled={isRevoking || isLoading} className="canceler-revoke-button">
1615
1615
-
{(isRevoking && revokeStatusMessage?.includes(verification.handle)) ? 'Restoring...' : 'Restore'}
1615
1615
+
{(isRevoking && revokeStatusMessage?.includes(verification.handle)) ? 'Uncancelling...' : 'Uncancel'}
1616
1616
</button>
1617
1617
</div>
1618
1618
</li>