tis-nodejs-lts icon

Node.js LTS

Paquet d'installation silencieuse pour Node.js LTS

24.18.0-5
Development
Development

Les paquets PREPROD sont des paquets construits via LUTI. Ils restent généralement 5 jours en PREPROD, après quoi un deuxième scan VirusTotal est effectué pour vérifier que le status n'a pas changé.
Si le paquet réussit ce dernier contrôle, il est promu en PROD et publié sur le store.

  • package: tis-nodejs-lts
  • name: Node.js LTS
  • version: 24.18.0-5
  • categories: Development
  • maintainer: WAPT Team,Tranquil IT,Jimmy PELÉ,Pierre Cosson
  • editor: OpenJS Foundation
  • licence: opensource_free,cpe:/a:mit:x11_license,wapt_public
  • locale: all
  • target_os: windows
  • impacted_process: node
  • architecture: x64
  • signature_date:
  • size: 32.88 Mo
  • installed_size: 83.45 Mo
  • homepage : https://nodejs.org/

package           : tis-nodejs-lts
version           : 24.18.0-5
architecture      : x64
section           : base
priority          : optional
name              : Node.js LTS
categories        : Development
maintainer        : WAPT Team,Tranquil IT,Jimmy PELÉ,Pierre Cosson
description       : Node.js is an open-source, cross-platform, JavaScript runtime environment that executes JavaScript code outside a web browser. LTS version
depends           : 
conflicts         : 
maturity          : PREPROD
locale            : all
target_os         : windows
min_wapt_version  : 2.3
sources           : https://nodejs.org/en/download/current/
installed_size    : 83446606
impacted_process  : node
description_fr    : Node.js est un environnement d'exécution JavaScript open-source, multiplateforme, qui exécute du code JavaScript en dehors d'un navigateur Web. Version LTS
description_pl    : Node.js to open-source'owe, wieloplatformowe środowisko uruchomieniowe JavaScript, które wykonuje kod JavaScript poza przeglądarką internetową. Wersja LTS
description_de    : Node.js ist eine quelloffene, plattformübergreifende JavaScript-Laufzeitumgebung, die JavaScript-Code außerhalb eines Webbrowsers ausführt. LTS-Version
description_es    : Node.js es un entorno de ejecución de JavaScript de código abierto y multiplataforma que ejecuta código JavaScript fuera de un navegador web. Versión LTS
description_pt    : Node.js é um ambiente de código aberto, multi-plataforma, JavaScript runtime que executa o código JavaScript fora de um navegador web. Versão LTS
description_it    : Node.js è un ambiente runtime JavaScript open-source e multipiattaforma che esegue codice JavaScript al di fuori di un browser web. Versione LTS
description_nl    : Node.js is een open-source, cross-platform, JavaScript runtime omgeving die JavaScript code uitvoert buiten een web browser. LTS-versie
description_ru    : Node.js - это кроссплатформенная среда выполнения JavaScript с открытым исходным кодом, которая выполняет код JavaScript вне веб-браузера. Версия LTS
audit_schedule    : 
editor            : OpenJS Foundation
keywords          : javascript,js,node,open,code
licence           : opensource_free,cpe:/a:mit:x11_license,wapt_public
homepage          : https://nodejs.org/
package_uuid      : aca23e89-0c40-44c2-be5d-8a5eb5751e76
valid_from        : 
valid_until       : 
forced_install_on : 
changelog         : https://github.com/nodejs/node/blob/master/CHANGELOG.md
min_os_version    : 6.3
max_os_version    : 
icon_sha256sum    : 77ad7394671d64dc6a1045c837364be28fabdc7dfa7299d29b76fe1c4c2d7769
signer            : test
signer_fingerprint: b82fc8ef4a4475c0f69ac168176c2bfc58f572eb716c4eadd65e4785c155dd8e
signature_date    : 2026-06-24T02:05:28.000000
signed_attributes : package,version,architecture,section,priority,name,categories,maintainer,description,depends,conflicts,maturity,locale,target_os,min_wapt_version,sources,installed_size,impacted_process,description_fr,description_pl,description_de,description_es,description_pt,description_it,description_nl,description_ru,audit_schedule,editor,keywords,licence,homepage,package_uuid,valid_from,valid_until,forced_install_on,changelog,min_os_version,max_os_version,icon_sha256sum,signer,signer_fingerprint,signature_date,signed_attributes
signature         : ukGiuJs2hNZiDLnaRTX+nzn3EWjoGPvAPgMjtZnO+LAcYytEyLn8TPN94/UyZwhkm4daK3xTSVoZxumEmlWP3xHgLy7vecRaPlcIGUAZN/PKhPzyvnUUEORysRaThDqiAE0aS6Evx64gVeRY3x99ic7C/XQtSgx700Rna86r9Y4Sl0emwbyVmoK++vDLMAOlfSiIGt1dAe6Aw5GJpITrVOQLYtsXPp8VUZ2fCw/rav37P8inDr+aewte7bs2TSIT92DjYFtjIvt9pSRLXFenLVj+aToqS2El3vemtWzifJ8ZqP6x3LK4qD/mgAfejiB0XnSMkfFeX4wbzIETjHS6xw==

# -*- coding: utf-8 -*-
from setuphelpers import *


def install():
    install_msi_if_needed(
        glob.glob("node-v*.msi")[0],
        properties="/quiet ADDLOCAL=ALL",
        timeout=600,
    )

# -*- coding: utf-8 -*-
from setuphelpers import *
from setupdevhelpers import *
import bs4 as BeautifulSoup
from urllib.parse import urlparse, urljoin
import waptlicences


def update_package():
    # Declaring local variables
    package_updated = False
    proxies = get_proxies()
    if not proxies:
        proxies = get_proxies_from_wapt_console()

    download_dict = {
        "windows-arm64": "-arm64.msi",
        "windows-x64": "-x64.msi",
        "windows-x86": "-x86.msi",
        "windows-all": "-x86.msi",
        "macos-x64": "-darwin-x64.tar.xz",
        "macos-arm": "-darwin-arm64.tar.xz",
        "linux-x64": "-linux-x64.tar.xz",
        "linux-arm64": "-linux-arm64.tar.xz ",
    }

    url = "https://nodejs.org/en/download"

    # Looking for last version
    print("URL used is: %s" % url)
    for bs_search in bs_find_all(url, "a", "href", proxies=proxies):
        if "nodejs.org/dist" in bs_search["href"]:
            url = bs_search["href"].rsplit("/", 1)[0]
            version = url.rsplit("/",1)[-1].replace("v","")
            break

    # Getting latest version information from official sources
    print("URL used is: %s" % url)
    links = bs_find_all(url,'a','href', proxies = proxies)
    to_download = download_dict[control.target_os + "-" + ensure_list(control.architecture)[0]]
    for link in links:
        if link['href'].endswith(to_download):
            download_url = url + "/" + link['href'].rsplit("/",1)[-1]
            latest_bin = link.text
            version = latest_bin.split("-")[1].replace("v", "")

    # Downloading latest binaries
    print("Latest %s version is: %s" % (control.name, version))
    print("Download URL is: %s" % download_url)
    if not isfile(latest_bin):
        print("Downloading: %s" % latest_bin)
        wget(download_url, latest_bin, proxies=proxies)
    else:
        print("Binary is present: %s" % latest_bin)

    for f in glob.glob(f'*{to_download}'):
        if f != latest_bin:
            remove_file(f)

    expected_issuer = "OpenJS Foundation"
    sign_name = waptlicences.check_msi_signature(latest_bin)[0]
    if sign_name != expected_issuer:
        error(f'Bad issuer {sign_name} != {expected_issuer}')


    # Checking version from file
    if get_os_name() == "Windows" and "windows" in control.target_os.lower():
        version_from_file = get_version_from_binary(latest_bin)
        if Version(version_from_file, 4) == Version(version, 4):
            print(f"INFO: Binary file version ({version_from_file}) corresponds to online version ({version})")
        else:
            error(f"ERROR: Binary file version ({version_from_file}) do NOT corresponds to online version ({version})")

    # Changing version of the package
    if Version(version, 4) > Version(control.get_software_version(), 4):
        print("Software version updated (from: %s to: %s)" % (control.get_software_version(), Version(version)))
        package_updated = True
    else:
        print("Software version up-to-date (%s)" % Version(version))
    control.set_software_version(version)
    control.save_control_to_wapt()

    # Validating or not update-package-sources
    return package_updated

    # # Changing version of the package and validating update-package-sources
    # return complete_control_version(control, version)


def bs_index_of_to_dict(url, **kwargs):
    r"""Parse html "Index of" web page with BeautifulSoup and get a dict of the result

    Args:
        url (str): url of the web page to parse

    Return:
        result: a dict of the index URLs

    """
    result = {}
    for elem in bs_find_all(url, "a", "href"):
        if not "://" in elem["href"]:
            # absolute_link = urljoin(url, url + "/" + elem["href"] if not url.endswith("/") else url + elem["href"])
            absolute_link = url + "/" + elem["href"] if not url.endswith("/") else url + elem["href"]
        else:
            absolute_link = elem["href"]
        key = elem.text
        if key.endswith("..>"):  # if key.endswith("..>"):
            key = elem["href"]
        result[key] = absolute_link
    return result


def is_url(x):
    try:
        result = urlparse(x)
        return all([result.scheme, result.netloc])
    except:
        return False


def bs_find_all(url, element, attribute=None, value=None, user_agent=None, proxies=None, features="html.parser", **kwargs):
    """
    Parse an HTML or XML web page with BeautifulSoup and retrieve a list of all matching results.

    Args:
        url (str): URL of the web page or string to parse.
        element (str): Searched element.
        attribute (str): Selected attribute of the element.
        value (str): Value of the selected attribute.
        user_agent (str): Specify a user-agent if needed.
        proxies (dict): Specify proxies if needed.
        features (str): BeautifulSoup feature to use.
        **kwargs: Additional parameters for the requests library.

    Returns:
        list: List of bs4.element.Tag objects representing the matching elements.

    Examples:
        >>> bs_find_all('https://www.w3.org/', 'a', 'title', 'Open Web Platform testing')[0]['href']
        'https://web-platform-tests.org/'

        >>> bs_find_all('https://www.w3.org/', 'span', 'class', 'alt-logo')[0].string
        'W3C'

    .. versionadded:: 2.0

    .. versionchanged:: 2.5
        Function can now parse string content of a page or reparse a "bs_result". It is now possible to parse a specific attribute.

    """
    url = str(url)
    if is_url(url):
        if user_agent:
            page = requests.get(url, proxies=proxies, headers={"User-Agent": user_agent}, **kwargs).text
        else:
            page = requests.get(url, proxies=proxies, **kwargs).text
    else:
        page = url
    soup = BeautifulSoup.BeautifulSoup(page, features=features)
    if value:
        return soup.find_all(element, {attribute: value})
    elif attribute:
        return soup.find_all(element, attrs={attribute: True})
    else:
        return soup.find_all(element)

01ca7fe94636e5a08fcb73849d3b5df25d51e2c82f4dd1a08f01798b25899819 : WAPT/certificate.crt
830bbdc368c8bef50bb3420b34e1686e5c5dd8d38ac8a5df9249288a0b1e2ab7 : WAPT/control
77ad7394671d64dc6a1045c837364be28fabdc7dfa7299d29b76fe1c4c2d7769 : WAPT/icon.png
81498da8d4b485324f6b76f6a4348ec24453a3b619f8f3a4db1b872a1d06de51 : luti.json
e30cd4ca15529583afe0efc978f1ae3ab3a93c2400c222d0752d17900552ebb3 : node-v24.18.0-x64.msi
79bf5bafcf0bfb21bd7930739ca34e435b903eedfca3901892fe2ccab7e71792 : setup.py
90b54b6f0ca266fd6e00b916bc6c9e893170446a0ccf7ca11261b9258047112b : update_package.py