{"id":23002498,"url":"https://github.com/firsttimeez/acme","last_synced_at":"2026-05-06T02:32:34.513Z","repository":{"id":267089770,"uuid":"900234007","full_name":"FirstTimeEZ/acme","owner":"FirstTimeEZ","description":"Automatically Create and Renew LetsEncrypt! SSL Certificates, including Wildcard Certificates for supported DNS Providers","archived":false,"fork":false,"pushed_at":"2024-12-20T03:41:24.000Z","size":116,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-09T09:49:55.421Z","etag":null,"topics":["acme","acme-ari","acme-v2","certificate","daemon","dns-01","encrypt","es6-class","es6-javascript","es6-module","http-01","lets","lets-encrypt","mixin","nodejs","npm","renewal","wildcard","wildcard-certificates"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/lets-encrypt-acme-client","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/FirstTimeEZ.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-12-08T08:28:12.000Z","updated_at":"2024-12-20T04:11:51.000Z","dependencies_parsed_at":"2024-12-08T09:36:10.887Z","dependency_job_id":null,"html_url":"https://github.com/FirstTimeEZ/acme","commit_stats":null,"previous_names":["firsttimeez/acme"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/FirstTimeEZ/acme","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FirstTimeEZ%2Facme","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FirstTimeEZ%2Facme/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FirstTimeEZ%2Facme/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FirstTimeEZ%2Facme/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FirstTimeEZ","download_url":"https://codeload.github.com/FirstTimeEZ/acme/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FirstTimeEZ%2Facme/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270347431,"owners_count":24568569,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-13T02:00:09.904Z","response_time":66,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["acme","acme-ari","acme-v2","certificate","daemon","dns-01","encrypt","es6-class","es6-javascript","es6-module","http-01","lets","lets-encrypt","mixin","nodejs","npm","renewal","wildcard","wildcard-certificates"],"created_at":"2024-12-15T07:11:13.016Z","updated_at":"2026-05-06T02:32:34.471Z","avatar_url":"https://github.com/FirstTimeEZ.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LetsEncrypt! ACME Client\n\nAutomatically Create and Renew `LetsEncrypt! SSL Certificates`, including `Wildcard Certificates` for supported `DNS Providers`\n\n### Getting Started\n\n```javascript\nimport LetsEncryptDaemon from 'lets-encrypt-acme-client';\n```\n\n#### Simple Usage Example\n\nCreate a `LetsEncryptDaemon` and then start the `Daemon`\n\n```javascript\nconst daemon = new LetsEncryptDaemon();\nawait daemon.startLetsEncryptDaemon(...); // You can only start this once, it will configure itself to run again.\ndaemon.checkChallengesMixin(...); // You must check the HTTP-01 Challenges for each LetsEncryptDaemon\n```\n\n#### Complete Example Usage\n\nThis most recent version of this package is implemented in [`SSL Server`](https://github.com/FirstTimeEZ/server-ssl) \n\nYou can use [`SSL Server`](https://github.com/FirstTimeEZ/server-ssl) to understand how it works if the `jsdoc` isn't enough information.\n\n--------\n\n### Wild Card Certificates\n\n| Supported DNS Providers |\n|-------------------------|\n| Cloud Flare  |\n\nYou can generate `Wild Card Certificates` if you are using a supported `DNS Provider`\n\n```\nlet dnsProvider = {\n    name: \"Cloud Flare\",\n    token: \"apiTokenWithDnsEditPermission\",\n    zone: \"zoneId\" // optional if it cant be found automatically.\n}\n```\n\n`DNS Providers` are used to complete `DNS-01` challenges\n\n--------\n\n### LetsEncrypt! Daemon\n\n`LetsEncryptDaemon` is the default exported class\n\n```javascript\nconst daemon = new LetsEncryptDaemon();\n```\n\n### Daemon\n\nThe `Daemon` runs periodically to `Create` or `Renew` the `Certificate`\n\n### Jsdoc\n\n```javascript\n/**\n * Starts the LetsEncrypt! Daemon to Manage a SSL Certificate\n *\n * @param {Array\u003cstring\u003e} fqdns - The fully qualified domain names as a SAN (e.g., [\"example.com\", \"www.example.com\"]), You must use a `dnsProvider` if you include a wild card\n * @param {string} sslPath - The path where your acme account, keys and generated certificate will be stored or loaded from\n * @param {function} certificateCallback - Callback that can be used to update the current certificate or trigger a restart etc.\n * @param {boolean} [optGenerateAnyway=false] - (optional) True to generate a new certificate before the recommended time.\n * @param {boolean} [optStaging=false] - (optional) True to use staging mode instead of production.\n * \n * @param {Object} dnsProvider - (optional) credentials for a supported dns provider if you want to use the `DNS-01` Challenge instead of `HTTP-01`\n * @example\n * const dnsProvider = {\n *     name: \"Cloud Flare\",\n *     token: \"dnsEditPermissionApiToken\",\n *   //zone: \"zoneId\", // if it cant be found automatically\n * }\n * @note\n * If you start this more than once nothing will happen\n */\n```\n\n#### Usage\n\n```javascript\nawait daemon.startLetsEncryptDaemon(fqdns, sslPath, certificateCallback, optGenerateAnyway = false, optStaging = false, dnsProvider = undefined)\n```\n\n### HTTP Mixin for `HTTP-01`\n\n`HTTP Mixin` that completes the `HTTP-01` Challenges created by the `Daemon`\n\nThis is not required if you are using a `DNS Provider`\n\n### Jsdoc\n\n```javascript\n/**\n * Node.js Middleware function to check and respond to ACME HTTP-01 challenges issued by this LetsEncryptDaemon inside the HTTP Server.\n *\n * @example\n * createServerHTTP(async (req, res) =\u003e {\n *     if (STATE.optLetsEncrypt \u0026\u0026 checkChallengesMixin(req, res)) { return; } \n *     // normal request redirect etc\n * }).listen(80);\n */\n```\n\n#### Usage\n\n```javascript\nif (daemon.checkChallengesMixin(req, res)) { return; } // Inside the HTTP Server\n```\n\n--------\n\n### Challenges\n\nThe `DNS-01` and `HTTP-01` challenges have been implemented","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffirsttimeez%2Facme","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffirsttimeez%2Facme","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffirsttimeez%2Facme/lists"}