{"id":31938977,"url":"https://github.com/clshortfuse/acmejs","last_synced_at":"2025-10-14T08:20:13.611Z","repository":{"id":181709250,"uuid":"606978133","full_name":"clshortfuse/acmejs","owner":"clshortfuse","description":"Zero-dependency ACME Client","archived":false,"fork":false,"pushed_at":"2024-10-17T16:04:10.000Z","size":108,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-10-19T23:34:20.670Z","etag":null,"topics":["acme","deno","js","letsencrypt","nodejs","web","zero-dependency"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/clshortfuse.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":"2023-02-27T03:39:35.000Z","updated_at":"2024-10-17T16:04:14.000Z","dependencies_parsed_at":"2024-05-04T00:28:22.194Z","dependency_job_id":"cd8daf4b-a94b-4e91-92e3-c65267f08a8c","html_url":"https://github.com/clshortfuse/acmejs","commit_stats":null,"previous_names":["clshortfuse/acmejs"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/clshortfuse/acmejs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clshortfuse%2Facmejs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clshortfuse%2Facmejs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clshortfuse%2Facmejs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clshortfuse%2Facmejs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/clshortfuse","download_url":"https://codeload.github.com/clshortfuse/acmejs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clshortfuse%2Facmejs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279018268,"owners_count":26086334,"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-10-14T02:00:06.444Z","response_time":60,"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","deno","js","letsencrypt","nodejs","web","zero-dependency"],"created_at":"2025-10-14T08:19:56.682Z","updated_at":"2025-10-14T08:20:13.605Z","avatar_url":"https://github.com/clshortfuse.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# acmejs\n\nZero-dependency ACME Client\n\n# Compatiblity\n\nUses:\n\n| Feature                                                                                            | Chrome | Firefox | Safari | NodeJS | Deno |\n| -------------------------------------------------------------------------------------------------- | -----: | ------: | -----: | -----: | ---: |\n| [SubtleCrypto](https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto)                      |     37 |      34 |     11 | 15.0.0 | 1.17 |\n| [Fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch)                                    |     42 |      39 |   10.1 | 18.0.0 |  1.0 |\n| [EventTarget](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/EventTarget)*           |     64 |      59 |     14 | 15.0.0 |  1.0 |\n| [BigInt](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt)† |     67 |      68 |     14 | 10.4.0 |  1.0 |\n|                                                                                                    |        |         |        |        |      |\n| Supported                                                                                          |     67 |      68 |     14 | 18.0.0 | 1.17 |\n\n*Used by helper functions\n\n†Used by helper ASN1 operations\n\nNotes:\n\n* Compatibility may be extended via polyfills (not included)\n* Deno does not support ECDSA P-521\n\n\n# Libraries\n\n* [ACMEClient](./lib/ACMEAgent.js)\n* [JOSE Functions](./lib/jose.js)\n* [JWA Functions](./lib/jwa.js)\n* [JWE Functions](./lib/jwe.js) (incomplete)\n* [JWK Functions](./lib/jwk.js)\n* [JWS Functions](./lib/jws.js)\n* [KeyStore](./lib/KeyStore.js)\n\n# Helpers\n\n* [JWK Import Functions](./helpers/jwkImporter.js)\n* [name.com DNS API](./lib/nameDotCom.js)\n* [Quick Certificate Order](./lib/quickOrder.js)\n\n# Utilities\n\n * [ASN1 Encoder/Decoder](./utils/asn1.js)\n * [Base64 Encoder/Decoder](./utils/base64.js)\n * [Bit Functions](./utils/bit.js)\n * [SubtleCrypto Wrapper](./utils/crypto.js)\n * [DNS Resolver](./utils/dns.js)\n * [PKCS1, PKCS8, PKCS10, SPKI, EC, PEM Functions](./utils/certificate.js)\n * [UTF-8 Decoder](./utils/utf8.js)\n\n# Usage\n\n\n# Quick Order with name.com (defaults to Lets Encrypt ACME);\n\n````js\nimport { buildEventTarget } from '@shortfuse/acmejs/helpers/nameDotCom.js';\nimport { getWildcardCertificate } from '@shortfuse/acmejs/helpers/quickOrder.js';\n\n// as JWK\nconst ACCOUNT_PRIVATE_KEY = {\n  alg: 'ES256',\n  kty: 'EC',\n  crv: 'P-256',\n  x: 'f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU',\n  y: 'x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0',\n  d: 'jpsQnnGQmL-YBIffH1136cspYG6-0iY7X1fCE9-E9LI',\n};\n\n// as PEM\nconst CSR_PRIVATE_KEY = `\n-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDD0tPV/du2vftjvXj1t/gXTK39\nsNBVrOAEb/jKzXae+Xa0H+3LhZaQIQNMfACiBSgIfZUvEGb+7TqXWQpoLoFR/R7MvGWcSk98JyrV\ntveD8ZmZYyItSY7m2hcasqAFiKyOouV5vzyRe87/lEyzzBpF3bQQ4IDaQu+K9Hj5fKuU6rrOeOhs\ndnJc+VdDQLScHxvMoLZ9Vtt+oK9J4/tOLwr4CG8khDlBURcBY6gPcLo3dPU09SW+6ctX2cX4mkXx\n6O/0mmdTmacr/vu50KdRMleFeZYOWPAEhhMfywybTuzBiPVIZVP8WFCSKNMbfi1S9A9PdBqnebww\nHhX3/hsEBt2BAgMBAAECggEABEI1P6nf6Zs7mJlyBDv+Pfl5rjL2cOqLy6TovvZVblMkCPpJyFuN\nIPDK2tK2i897ZaXfhPDBIKmllM2Hq6jZQKB110OAnTPDg0JxzMiIHPs32S1d/KilHjGff4Hjd4NX\np1l1Dp8BUPOllorR2TYm2x6dcCGFw9lhTr8O03Qp4hjn84VjGIWADYCk83mgS4nRsnHkdiqYnWx1\nAjKlY51yEK6RcrDMi0Th2RXrrINoC35sVv+APt2rkoMGi52RwTEseA1KZGFrxjq61ReJif6p2VXE\ncvHeX6CWLx014LGk43z6Q28P6HgeEVEfIjyqCUea5Du/mYb/QsRSCosXLxBqwQKBgQD1+fdC9ZiM\nrVI+km7Nx2CKBn8rJrDmUh5SbXn2MYJdrUd8bYNnZkCgKMgxVXsvJrbmVOrby2txOiqudZkk5mD3\nE5O/QZWPWQLgRu8ueYNpobAX9NRgNfZ7rZD+81vh5MfZiXfuZOuzv29iZhU0oqyZ9y75eHkLdrer\nNkwYOe5aUQKBgQDLzapDi1NxkBgsj9iiO4KUa7jvD4JjRqFy4Zhj/jbQvlvM0F/uFp7sxVcHGx4r\n11C+6iCbhX4u+Zuu0HGjT4d+hNXmgGyxR8fIUVxOlOtDkVJa5sOBZK73/9/MBeKusdmJPRhalZQf\nMUJRWIoEVDMhfg3tW/rBj5RYAtP2dTVUMQKBgDs8yr52dRmT+BWXoFWwaWB0NhYHSFz/c8v4D4Ip\n5DJ5M5kUqquxJWksySGQa40sbqnD05fBQovPLU48hfgr/zghn9hUjBcsoZOvoZR4sRw0UztBvA+7\njzOz1hKAOyWIulR6Vca0yUrNlJ6G5R56+sRNkiOETupi2dLCzcqb0PoxAoGAZyNHvTLvIZN4iGSr\njz5qkM4LIwBIThFadxbv1fq6pt0O/BGf2o+cEdq0diYlGK64cEVwBwSBnSg4vzlBqRIAUejLjwED\nAJyA4EE8Y5A9l04dzV7nJb5cRak6CrgXxay/mBJRFtaHxVlaZGxYPGSYE6UFS0+3EOmmevvDZQBf\n4qECgYEA0ZF6Vavz28+8wLO6SP3w8NmpHk7K9tGEvUfQ30SgDx4G7qPIgfPrbB4OP/E0qCfsIImi\n3sCPpjvUMQdVVZyPOIMuB+rV3ZOxkrzxEUOrpOpR48FZbL7RN90yRQsAsrp9e4iv8QwB3VxLe7X0\nTDqqnRyqrc/osGzuS2ZcHOKmCU8=\n-----END PRIVATE KEY-----\n`;\n\nconst NAME_DOT_COM_USERNAME = 'foo';\nconst NAME_DOT_COM_TOKEN = 'bar';\n\nconst certificate = await getWildcardCertificate({\n  tosAgreed: true,\n  domain: 'foo.com',\n  accountKey: ACCOUNT_PRIVATE_KEY,\n  email: 'admin@foo.com',\n  eventTarget: buildEventTarget(NAME_DOT_COM_USERNAME, NAME_DOT_COM_TOKEN),\n  countryName: 'US',\n  localityName: 'New York',\n  organizationName: 'Foo Products',\n  organizationalUnitName: 'IT',\n  stateOrProvinceName: 'NY',\n  csrKey: CSR_PRIVATE_KEY,\n  },\n});\n\nawait store('foo-com.crt', certificate);\n````\n\nSee [quickOrder.js](./helpers/quickOrder.js) source code for a working example.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclshortfuse%2Facmejs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fclshortfuse%2Facmejs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclshortfuse%2Facmejs/lists"}