feat: handle `tls.Server.prototype.setOptions()` deprecation
Maintainer thường phản hồi trong vòng 2 ngày
@vespa7 đang làm issue này rồi.
Từ ngày 19/11/2025.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 30/100
- Loại issue
- Tính năng
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Đình trệ
- Công nghệ
- node.js, typescript
- Lĩnh vực
- tooling
Hướng nghiên cứu
Bắt đầu bằng việc đọc tài liệu tham chiếu DEP0122 và Node.js PR 57339, sau đó so sánh tám mẫu sử dụng setOptions trong issue này. Xác định các phép chuyển đổi được codemod hỗ trợ, bao gồm các import, lời gọi được nối chuỗi, lời gọi lặp lại và các nhánh điều kiện; công việc hoàn tất khi mỗi mẫu được liệt kê đều được chuyển đổi sang secure-context API mà không để lại các lời gọi đã lỗi thời.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Description
Since tls.Server.prototype.setOptions() is deprecated (DEP0122) and has reached End-of-Life status, we should provide a codemod to replace it.
- The codemod should replace all instances of
server.setOptions()withserver.setSecureContext(). - The codemod should handle different usage patterns and parameter formats.
- The codemod should update the implementation to use the modern secure context API instead of the deprecated options method.
- If there are mixed usage patterns, the codemod should provide appropriate replacements based on context.
Additional Information
Note that tls.Server.prototype.setOptions() was removed in Node.js v24.0.0 and users should use Server.prototype.setSecureContext() instead. The setOptions() method was deprecated because it was less secure and didn't provide the same level of control over the TLS context as the newer setSecureContext() method.
The setOptions() method allowed setting various TLS options on an existing server, but this pattern has been superseded by the more explicit and secure setSecureContext() approach which requires creating a proper secure context.
Examples
Case 1: Basic setOptions usage
Before:
const tls = require('node:tls');
const server = tls.createServer();
server.setOptions({
key: fs.readFileSync('server-key.pem'),
cert: fs.readFileSync('server-cert.pem')
});
After:
const tls = require('node:tls');
const server = tls.createServer();
const secureContext = tls.createSecureContext({
key: fs.readFileSync('server-key.pem'),
cert: fs.readFileSync('server-cert.pem')
});
server.setSecureContext(secureContext);
Case 2: setOptions with cipher configuration
Before:
const { createServer } = require('node:tls');
const server = createServer();
server.setOptions({
key: privateKey,
cert: certificate,
ciphers: 'ECDHE-RSA-AES128-GCM-SHA256:!RC4'
});
After:
const { createServer, createSecureContext } = require('node:tls');
const server = createServer();
const secureContext = createSecureContext({
key: privateKey,
cert: certificate,
ciphers: 'ECDHE-RSA-AES128-GCM-SHA256:!RC4'
});
server.setSecureContext(secureContext);
Case 3: setOptions with CA configuration
Before:
import { createServer } from 'node:tls';
const server = createServer();
server.setOptions({
key: serverKey,
cert: serverCert,
ca: [caCert],
requestCert: true,
rejectUnauthorized: true
});
After:
import { createServer, createSecureContext } from 'node:tls';
const server = createServer();
const secureContext = createSecureContext({
key: serverKey,
cert: serverCert,
ca: [caCert],
requestCert: true,
rejectUnauthorized: true
});
server.setSecureContext(secureContext);
Case 4: Multiple setOptions calls
Before:
const tls = require('node:tls');
const server = tls.createServer();
server.setOptions({ key: key1, cert: cert1 });
server.setOptions({ ciphers: 'HIGH' });
After:
const tls = require('node:tls');
const server = tls.createServer();
const secureContext = tls.createSecureContext({
key: key1,
cert: cert1,
ciphers: 'HIGH'
});
server.setSecureContext(secureContext);
Case 5: setOptions with PFX
Before:
const { createServer } = require('node:tls');
const server = createServer();
server.setOptions({
pfx: fs.readFileSync('server.pfx'),
passphrase: 'secret'
});
After:
const { createServer, createSecureContext } = require('node:tls');
const server = createServer();
const secureContext = createSecureContext({
pfx: fs.readFileSync('server.pfx'),
passphrase: 'secret'
});
server.setSecureContext(secureContext);
Case 6: setOptions with protocol version constraints
Before:
import * as tls from 'node:tls';
const server = tls.createServer();
server.setOptions({
key: serverKey,
cert: serverCert,
minVersion: 'TLSv1.2',
maxVersion: 'TLSv1.3'
});
After:
import * as tls from 'node:tls';
const server = tls.createServer();
const secureContext = tls.createSecureContext({
key: serverKey,
cert: serverCert,
minVersion: 'TLSv1.2',
maxVersion: 'TLSv1.3'
});
server.setSecureContext(secureContext);
Case 7: Chained method calls
Before:
const server = require('node:tls').createServer();
server.setOptions(options).listen(443);
After:
const tls = require('node:tls');
const server = tls.createServer();
const secureContext = tls.createSecureContext(options);
server.setSecureContext(secureContext);
server.listen(443);
Case 8: setOptions in conditional logic
Before:
const server = tls.createServer();
if (useCustomCerts) {
server.setOptions({
key: customKey,
cert: customCert
});
} else {
server.setOptions(defaultOptions);
}
After:
const server = tls.createServer();
if (useCustomCerts) {
const secureContext = tls.createSecureContext({
key: customKey,
cert: customCert
});
server.setSecureContext(secureContext);
} else {
const secureContext = tls.createSecureContext(defaultOptions);
server.setSecureContext(secureContext);
}
Refs
- Ngôn ngữ chính
- TypeScript
- Star
- 85
- Fork
- 58
- Merge trung bình
- 2 ngày 4 giờ
- Pull request đã merge (30 ngày)
- 6
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Không có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của nodejs/userland-migrations
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 25/100
nodejs/userland-migrations#562 · 4 reaction ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 35/100
nodejs/userland-migrations#561 · 1 bình luận · 1 reaction ·
Maintainer thường phản hồi trong vòng 2 ngày
-
good first issue human help wanted
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 48/100
nodejs/userland-migrations#560 · 1 reaction ·
Maintainer thường phản hồi trong vòng 2 ngày
-
good first issue human help wanted
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 48/100
nodejs/userland-migrations#559 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
good first issue human help wanted
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 48/100
nodejs/userland-migrations#558 ·
Maintainer thường phản hồi trong vòng 2 ngày
Tất cả issue của nodejs/userland-migrations
Issue tương tự
-
area:models enhancement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
Maintainer thường phản hồi trong vòng 1 ngày
-
bug frontend ui
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Recording drops clicks on links, filters and checkboxes that share a form with a search fieldCó thể đã có người làm @columbia11 đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
Tencent/BrowserSkill#657 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
NousResearch/hermes-agent#151711 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 65/100
Maintainer thường phản hồi trong vòng 2 ngày