Corrects the API language
This commit is contained in:
parent
0d01f3e0b8
commit
4f36382a6c
@ -245,17 +245,19 @@ function unsubscribe_member_id(member_id, response) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get all members from the mailing list (handles pagination)
|
// Get all members from the mailing list (handles pagination)
|
||||||
|
// Uses correct Mailman 3 API endpoint: /3.1/lists/{list_id}/roster/member
|
||||||
function get_all_members(list_id_override) {
|
function get_all_members(list_id_override) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let members = [];
|
let members = [];
|
||||||
let page_token = null;
|
let page = 1;
|
||||||
|
const count = 50; // Members per page
|
||||||
let list_id = list_id_override || process.env.MAILMAN_LIST_ID;
|
let list_id = list_id_override || process.env.MAILMAN_LIST_ID;
|
||||||
|
|
||||||
function fetch_page() {
|
function fetch_page() {
|
||||||
let path = '/3.1/lists/' + list_id + '/members';
|
// Use CORRECT endpoint: /3.1/lists/{list_id}/roster/member
|
||||||
if (page_token) {
|
// with count/page pagination (not token-based)
|
||||||
path += '?token=' + encodeURIComponent(page_token);
|
let path = '/3.1/lists/' + encodeURIComponent(list_id) +
|
||||||
}
|
'/roster/member?count=' + count + '&page=' + page;
|
||||||
|
|
||||||
let mailman_options = {
|
let mailman_options = {
|
||||||
hostname: hostname,
|
hostname: hostname,
|
||||||
@ -270,22 +272,46 @@ function get_all_members(list_id_override) {
|
|||||||
res.on('data', (chunk) => { body += chunk; });
|
res.on('data', (chunk) => { body += chunk; });
|
||||||
res.on('end', () => {
|
res.on('end', () => {
|
||||||
try {
|
try {
|
||||||
let parsed = JSON.parse(body);
|
console.log('get_all_members status:', res.statusCode, 'page:', page);
|
||||||
if (parsed.entries) {
|
|
||||||
members = members.concat(parsed.entries.map(e => e.address || e.email));
|
if (res.statusCode !== 200) {
|
||||||
|
console.error('get_all_members error:', body);
|
||||||
|
reject(new Error('HTTP ' + res.statusCode + ': ' + body));
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
if (parsed.token) {
|
|
||||||
page_token = parsed.token;
|
let parsed = JSON.parse(body);
|
||||||
|
console.log('Entries found:', parsed.entries ? parsed.entries.length : 0,
|
||||||
|
'total_size:', parsed.total_size);
|
||||||
|
|
||||||
|
if (parsed.entries) {
|
||||||
|
// Extract emails - roster endpoint provides e.email directly
|
||||||
|
parsed.entries.forEach(e => {
|
||||||
|
if (e.email) {
|
||||||
|
members.push(e.email.toLowerCase());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if there are more pages
|
||||||
|
const totalPages = Math.ceil((parsed.total_size || 0) / count);
|
||||||
|
if (page < totalPages) {
|
||||||
|
page++;
|
||||||
fetch_page();
|
fetch_page();
|
||||||
} else {
|
} else {
|
||||||
|
console.log('Total members found:', members.length);
|
||||||
resolve(members);
|
resolve(members);
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
console.error('Parse error:', err);
|
||||||
reject(err);
|
reject(err);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
req.on('error', reject);
|
req.on('error', (err) => {
|
||||||
|
console.error('Request error:', err);
|
||||||
|
reject(err);
|
||||||
|
});
|
||||||
req.end();
|
req.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -7,7 +7,7 @@
|
|||||||
# ./test-subscribe-members.sh test.csv listname.atlists.coollists.org
|
# ./test-subscribe-members.sh test.csv listname.atlists.coollists.org
|
||||||
|
|
||||||
# Configuration
|
# Configuration
|
||||||
CONNECTOR_URL="https://mailman-connector.coollists.org"
|
CONNECTOR_URL="${CONNECTOR_URL:-https://mailman-connector.coollists.org}"
|
||||||
CONNECTOR_PASSWORD="${CONNECTOR_PASSWORD:-your_secret_password}"
|
CONNECTOR_PASSWORD="${CONNECTOR_PASSWORD:-your_secret_password}"
|
||||||
LIST_ID="${2:-listname.atlists.coollists.org}"
|
LIST_ID="${2:-listname.atlists.coollists.org}"
|
||||||
CSV_FILE="$1"
|
CSV_FILE="$1"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user