node-opcua-pki 6.22.1 → 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/install_prerequisite.ts +1 -1
- package/bin/pki.ts +1 -1
- package/dist/bin/install_prerequisite.d.ts +2 -0
- package/dist/bin/install_prerequisite.js +6 -0
- package/dist/bin/install_prerequisite.js.map +1 -0
- package/dist/bin/pki.d.ts +2 -0
- package/dist/bin/pki.js +4 -0
- package/dist/bin/pki.js.map +1 -0
- package/dist/lib/ca/backends/native_ca_backend.d.ts +49 -0
- package/dist/lib/ca/backends/native_ca_backend.js +365 -0
- package/dist/lib/ca/backends/native_ca_backend.js.map +1 -0
- package/dist/lib/ca/backends/openssl_ca_backend.d.ts +47 -0
- package/dist/lib/ca/backends/openssl_ca_backend.js +398 -0
- package/dist/lib/ca/backends/openssl_ca_backend.js.map +1 -0
- package/dist/lib/ca/certificate_authority.d.ts +62 -0
- package/dist/lib/ca/certificate_authority.js +91 -0
- package/dist/lib/ca/certificate_authority.js.map +1 -0
- package/dist/lib/ca/core/ca_backend.d.ts +89 -0
- package/dist/lib/ca/core/ca_backend.js +24 -0
- package/dist/lib/ca/core/ca_backend.js.map +1 -0
- package/dist/lib/ca/core/ca_database.d.ts +91 -0
- package/dist/lib/ca/core/ca_database.js +267 -0
- package/dist/lib/ca/core/ca_database.js.map +1 -0
- package/dist/{core-BwqSJPHc.d.mts → lib/ca/core/certificate_authority_core.d.ts} +45 -394
- package/dist/lib/ca/core/certificate_authority_core.js +1300 -0
- package/dist/lib/ca/core/certificate_authority_core.js.map +1 -0
- package/dist/lib/ca/core/index.d.ts +17 -0
- package/dist/lib/ca/core/index.js +25 -0
- package/dist/lib/ca/core/index.js.map +1 -0
- package/dist/lib/ca/crypto_create_CA.d.ts +1 -0
- package/dist/lib/ca/crypto_create_CA.js +821 -0
- package/dist/lib/ca/crypto_create_CA.js.map +1 -0
- package/dist/lib/ca/index.d.ts +1 -0
- package/dist/lib/ca/index.js +2 -0
- package/dist/lib/ca/index.js.map +1 -0
- package/dist/lib/ca/templates/ca_config_template.cnf.d.ts +2 -0
- package/dist/lib/ca/templates/ca_config_template.cnf.js +170 -0
- package/dist/lib/ca/templates/ca_config_template.cnf.js.map +1 -0
- package/dist/lib/core.d.ts +33 -0
- package/dist/lib/core.js +56 -0
- package/dist/lib/core.js.map +1 -0
- package/dist/lib/index.d.ts +11 -0
- package/dist/lib/index.js +37 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/misc/applicationurn.d.ts +1 -0
- package/dist/lib/misc/applicationurn.js +40 -0
- package/dist/lib/misc/applicationurn.js.map +1 -0
- package/dist/lib/misc/hostname.d.ts +8 -0
- package/dist/lib/misc/hostname.js +82 -0
- package/dist/lib/misc/hostname.js.map +1 -0
- package/dist/lib/misc/subject.d.ts +2 -0
- package/dist/lib/misc/subject.js +2 -0
- package/dist/lib/misc/subject.js.map +1 -0
- package/dist/{index.d.ts → lib/pki/certificate_manager.d.ts} +24 -248
- package/dist/lib/pki/certificate_manager.js +2302 -0
- package/dist/lib/pki/certificate_manager.js.map +1 -0
- package/dist/lib/pki/templates/simple_config_template.cnf.d.ts +2 -0
- package/dist/lib/pki/templates/simple_config_template.cnf.js +74 -0
- package/dist/lib/pki/templates/simple_config_template.cnf.js.map +1 -0
- package/dist/lib/pki/toolbox_pfx.d.ts +127 -0
- package/dist/lib/pki/toolbox_pfx.js +248 -0
- package/dist/lib/pki/toolbox_pfx.js.map +1 -0
- package/dist/lib/toolbox/common.d.ts +150 -0
- package/dist/lib/toolbox/common.js +82 -0
- package/dist/lib/toolbox/common.js.map +1 -0
- package/dist/lib/toolbox/common2.d.ts +25 -0
- package/dist/lib/toolbox/common2.js +97 -0
- package/dist/lib/toolbox/common2.js.map +1 -0
- package/dist/lib/toolbox/config.d.ts +5 -0
- package/dist/lib/toolbox/config.js +28 -0
- package/dist/lib/toolbox/config.js.map +1 -0
- package/dist/lib/toolbox/debug.d.ts +5 -0
- package/dist/lib/toolbox/debug.js +35 -0
- package/dist/lib/toolbox/debug.js.map +1 -0
- package/dist/lib/toolbox/display.d.ts +4 -0
- package/dist/lib/toolbox/display.js +56 -0
- package/dist/lib/toolbox/display.js.map +1 -0
- package/dist/lib/toolbox/index.d.ts +5 -0
- package/dist/lib/toolbox/index.js +28 -0
- package/dist/lib/toolbox/index.js.map +1 -0
- package/dist/lib/toolbox/with_openssl/_create_random_file.d.ts +4 -0
- package/dist/lib/toolbox/with_openssl/_create_random_file.js +50 -0
- package/dist/lib/toolbox/with_openssl/_create_random_file.js.map +1 -0
- package/dist/lib/toolbox/with_openssl/_env.d.ts +58 -0
- package/dist/lib/toolbox/with_openssl/_env.js +126 -0
- package/dist/lib/toolbox/with_openssl/_env.js.map +1 -0
- package/dist/lib/toolbox/with_openssl/create_certificate_signing_request.d.ts +5 -0
- package/dist/lib/toolbox/with_openssl/create_certificate_signing_request.js +72 -0
- package/dist/lib/toolbox/with_openssl/create_certificate_signing_request.js.map +1 -0
- package/dist/lib/toolbox/with_openssl/create_private_key.d.ts +5 -0
- package/dist/lib/toolbox/with_openssl/create_private_key.js +92 -0
- package/dist/lib/toolbox/with_openssl/create_private_key.js.map +1 -0
- package/dist/lib/toolbox/with_openssl/create_self_signed_certificate.d.ts +5 -0
- package/dist/lib/toolbox/with_openssl/create_self_signed_certificate.js +135 -0
- package/dist/lib/toolbox/with_openssl/create_self_signed_certificate.js.map +1 -0
- package/dist/lib/toolbox/with_openssl/execute_openssl.d.ts +67 -0
- package/dist/lib/toolbox/with_openssl/execute_openssl.js +246 -0
- package/dist/lib/toolbox/with_openssl/execute_openssl.js.map +1 -0
- package/dist/lib/toolbox/with_openssl/index.d.ts +5 -0
- package/dist/lib/toolbox/with_openssl/index.js +30 -0
- package/dist/lib/toolbox/with_openssl/index.js.map +1 -0
- package/dist/lib/toolbox/with_openssl/install_prerequisite.d.ts +7 -0
- package/dist/lib/toolbox/with_openssl/install_prerequisite.js +358 -0
- package/dist/lib/toolbox/with_openssl/install_prerequisite.js.map +1 -0
- package/dist/lib/toolbox/with_openssl/toolbox.d.ts +53 -0
- package/dist/lib/toolbox/with_openssl/toolbox.js +190 -0
- package/dist/lib/toolbox/with_openssl/toolbox.js.map +1 -0
- package/dist/lib/toolbox/without_openssl/create_certificate_signing_request.d.ts +5 -0
- package/dist/lib/toolbox/without_openssl/create_certificate_signing_request.js +69 -0
- package/dist/lib/toolbox/without_openssl/create_certificate_signing_request.js.map +1 -0
- package/dist/lib/toolbox/without_openssl/create_self_signed_certificate.d.ts +3 -0
- package/dist/lib/toolbox/without_openssl/create_self_signed_certificate.js +78 -0
- package/dist/lib/toolbox/without_openssl/create_self_signed_certificate.js.map +1 -0
- package/dist/lib/toolbox/without_openssl/index.d.ts +2 -0
- package/dist/lib/toolbox/without_openssl/index.js +25 -0
- package/dist/lib/toolbox/without_openssl/index.js.map +1 -0
- package/package.json +11 -30
- package/dist/bin/install_prerequisite.mjs +0 -18
- package/dist/bin/install_prerequisite.mjs.map +0 -1
- package/dist/bin/pki.mjs +0 -5932
- package/dist/bin/pki.mjs.map +0 -1
- package/dist/chunk-EQ4DGI4M.mjs +0 -1917
- package/dist/chunk-EQ4DGI4M.mjs.map +0 -1
- package/dist/chunk-GCHH54PS.mjs +0 -30
- package/dist/chunk-GCHH54PS.mjs.map +0 -1
- package/dist/core-BwqSJPHc.d.ts +0 -1041
- package/dist/core.d.mts +0 -2
- package/dist/core.d.ts +0 -2
- package/dist/core.js +0 -1902
- package/dist/core.js.map +0 -1
- package/dist/core.mjs +0 -21
- package/dist/core.mjs.map +0 -1
- package/dist/index.d.mts +0 -1003
- package/dist/index.js +0 -5009
- package/dist/index.js.map +0 -1
- package/dist/index.mjs +0 -3145
- package/dist/index.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install_prerequisite.js","sourceRoot":"","sources":["../../../../lib/toolbox/with_openssl/install_prerequisite.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { Filename } from "../common.js";
|
|
2
|
+
import { type ExecuteOptions } from "./execute_openssl.js";
|
|
3
|
+
/**
|
|
4
|
+
* Render an OpenSSL config template (`$ENV::NAME` substitution, `{{#NAME}}`
|
|
5
|
+
* conditional blocks) to a temporary file and return its path.
|
|
6
|
+
*
|
|
7
|
+
* `envOverrides`, when given, is consulted before the global env registry
|
|
8
|
+
* for every key it names — the substituted value never depends on whatever
|
|
9
|
+
* `setEnv()` calls other, possibly-concurrent code made before or after this
|
|
10
|
+
* call. Pass it for any value the caller has already computed locally (as
|
|
11
|
+
* every `CertificateAuthority` operation now does for `ALTNAME` /
|
|
12
|
+
* `CDP_URL` / `AIA_VALUE`); omit it, as every other caller does, to keep
|
|
13
|
+
* reading the shared registry exactly as before.
|
|
14
|
+
*/
|
|
15
|
+
export declare function generateStaticConfig(configPath: string, options?: ExecuteOptions, envOverrides?: Readonly<Record<string, string>>): string;
|
|
16
|
+
/**
|
|
17
|
+
* Remove a rendered temp config produced by {@link generateStaticConfig}.
|
|
18
|
+
* `configFile` is whatever that function returned (relative to
|
|
19
|
+
* `options.cwd` when a cwd was given, absolute otherwise). Every caller of
|
|
20
|
+
* `generateStaticConfig` is expected to pair it with this in a `finally`,
|
|
21
|
+
* or the `<name>.<pid>-<n>.tmp` files accumulate next to the real config
|
|
22
|
+
* forever.
|
|
23
|
+
*/
|
|
24
|
+
export declare function cleanupStaticConfig(configFile: string, options?: ExecuteOptions): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* calculate the public key from private key
|
|
27
|
+
* openssl rsa -pubout -in private_key.pem -passin env:...
|
|
28
|
+
*
|
|
29
|
+
* `-passin` is always emitted (empty for a plaintext key) so an encrypted
|
|
30
|
+
* key without a passphrase fails fast instead of hanging on a TTY prompt.
|
|
31
|
+
*
|
|
32
|
+
* @method getPublicKeyFromPrivateKey
|
|
33
|
+
* @param privateKeyFilename: the existing file with the private key
|
|
34
|
+
* @param publicKeyFilename: the file where to store the public key
|
|
35
|
+
* @param passphrase: decrypts `privateKeyFilename` if it is an encrypted PKCS#8 key
|
|
36
|
+
*/
|
|
37
|
+
export declare function getPublicKeyFromPrivateKey(privateKeyFilename: string, publicKeyFilename: string, passphrase?: string): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* extract public key from a certificate
|
|
40
|
+
* openssl x509 -pubkey -in certificate.pem -nottext
|
|
41
|
+
*
|
|
42
|
+
* @method getPublicKeyFromCertificate
|
|
43
|
+
* @param certificateFilename
|
|
44
|
+
* @param publicKeyFilename
|
|
45
|
+
*/
|
|
46
|
+
export declare function getPublicKeyFromCertificate(certificateFilename: string, publicKeyFilename: string): Promise<void>;
|
|
47
|
+
export declare function x509Date(date?: Date): string;
|
|
48
|
+
/**
|
|
49
|
+
* @param certificate - the certificate file in PEM format, file must exist
|
|
50
|
+
*/
|
|
51
|
+
export declare function dumpCertificate(certificate: Filename): Promise<string>;
|
|
52
|
+
export declare function toDer(certificatePem: string): Promise<string>;
|
|
53
|
+
export declare function fingerprint(certificatePem: string): Promise<string>;
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------------------------------------------------
|
|
2
|
+
// node-opcua-pki
|
|
3
|
+
// ---------------------------------------------------------------------------------------------------------------------
|
|
4
|
+
// Copyright (c) 2014-2026 - Etienne Rossignon - etienne.rossignon (at) gadz.org
|
|
5
|
+
// Copyright (c) 2022-2026 - Sterfive.com
|
|
6
|
+
// ---------------------------------------------------------------------------------------------------------------------
|
|
7
|
+
//
|
|
8
|
+
// This project is licensed under the terms of the MIT license.
|
|
9
|
+
//
|
|
10
|
+
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
|
|
11
|
+
// documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
|
|
12
|
+
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
|
|
13
|
+
// permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
14
|
+
//
|
|
15
|
+
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
|
|
16
|
+
// Software.
|
|
17
|
+
//
|
|
18
|
+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
|
19
|
+
// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
20
|
+
// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
21
|
+
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
|
+
// ---------------------------------------------------------------------------------------------------------------------
|
|
23
|
+
import assert from "node:assert";
|
|
24
|
+
import fs from "node:fs";
|
|
25
|
+
import path from "node:path";
|
|
26
|
+
import { makePath } from "../common2.js";
|
|
27
|
+
import { g_config } from "../config.js";
|
|
28
|
+
import { getEnv, getEnvironmentVarNames, hasEnv } from "./_env.js";
|
|
29
|
+
import { execute_openssl, passinArg } from "./execute_openssl.js";
|
|
30
|
+
function openssl_require2DigitYearInDate() {
|
|
31
|
+
// istanbul ignore next
|
|
32
|
+
if (!g_config.opensslVersion) {
|
|
33
|
+
throw new Error("openssl_require2DigitYearInDate : openssl version is not known:" + " please call ensure_openssl_installed()");
|
|
34
|
+
}
|
|
35
|
+
return g_config.opensslVersion.match(/OpenSSL 0\.9/);
|
|
36
|
+
}
|
|
37
|
+
g_config.opensslVersion = "";
|
|
38
|
+
let _counter = 0;
|
|
39
|
+
/**
|
|
40
|
+
* Strip Mustache-style conditional blocks from an OpenSSL config template.
|
|
41
|
+
*
|
|
42
|
+
* {{#KEY}}...{{/KEY}}
|
|
43
|
+
*
|
|
44
|
+
* The block content is **kept** (markers removed) iff `KEY` resolves to a
|
|
45
|
+
* non-empty value — from `envOverrides` if it names the key, otherwise from
|
|
46
|
+
* the global registry (see {@link exportedEnvVars}) — and stripped
|
|
47
|
+
* (including the markers and the trailing newline) otherwise.
|
|
48
|
+
*
|
|
49
|
+
* Used to drive opt-in extensions like CRL Distribution Points and
|
|
50
|
+
* Authority Information Access: the same template serves the
|
|
51
|
+
* extension-set case (URL configured) and the extension-omitted case
|
|
52
|
+
* (no URL configured).
|
|
53
|
+
*/
|
|
54
|
+
function stripConditionalBlocks(template, envOverrides) {
|
|
55
|
+
return template.replace(/\{\{#([A-Z_][A-Z0-9_]*)\}\}([\s\S]*?)\{\{\/\1\}\}\r?\n?/g, (_match, key, content) => {
|
|
56
|
+
const keep = envOverrides && Object.prototype.hasOwnProperty.call(envOverrides, key)
|
|
57
|
+
? envOverrides[key] !== ""
|
|
58
|
+
: hasEnv(key) && getEnv(key) !== "";
|
|
59
|
+
return keep ? content : "";
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Render an OpenSSL config template (`$ENV::NAME` substitution, `{{#NAME}}`
|
|
64
|
+
* conditional blocks) to a temporary file and return its path.
|
|
65
|
+
*
|
|
66
|
+
* `envOverrides`, when given, is consulted before the global env registry
|
|
67
|
+
* for every key it names — the substituted value never depends on whatever
|
|
68
|
+
* `setEnv()` calls other, possibly-concurrent code made before or after this
|
|
69
|
+
* call. Pass it for any value the caller has already computed locally (as
|
|
70
|
+
* every `CertificateAuthority` operation now does for `ALTNAME` /
|
|
71
|
+
* `CDP_URL` / `AIA_VALUE`); omit it, as every other caller does, to keep
|
|
72
|
+
* reading the shared registry exactly as before.
|
|
73
|
+
*/
|
|
74
|
+
export function generateStaticConfig(configPath, options, envOverrides) {
|
|
75
|
+
const prePath = options?.cwd || "";
|
|
76
|
+
const originalFilename = !path.isAbsolute(configPath) ? path.join(prePath, configPath) : configPath;
|
|
77
|
+
let staticConfig = fs.readFileSync(originalFilename, { encoding: "utf8" });
|
|
78
|
+
// Strip conditional blocks first so unset placeholders never reach
|
|
79
|
+
// the env-var substitution pass below.
|
|
80
|
+
staticConfig = stripConditionalBlocks(staticConfig, envOverrides);
|
|
81
|
+
// Substituted values go through the function form of String.replace: the
|
|
82
|
+
// string form interprets `$`-sequences (`$&`, `$$`, "$`", `$'`) in the
|
|
83
|
+
// VALUE as replacement patterns, so a subject CN or CDP/OCSP URL
|
|
84
|
+
// containing `$&` would re-insert the `$ENV::NAME` literal into the
|
|
85
|
+
// rendered config and every openssl call on it would fail with
|
|
86
|
+
// "variable has no value".
|
|
87
|
+
for (const envVar of getEnvironmentVarNames()) {
|
|
88
|
+
if (envOverrides && Object.prototype.hasOwnProperty.call(envOverrides, envVar.key)) {
|
|
89
|
+
continue; // overridden below
|
|
90
|
+
}
|
|
91
|
+
staticConfig = staticConfig.replace(new RegExp(envVar.pattern, "gi"), () => getEnv(envVar.key));
|
|
92
|
+
}
|
|
93
|
+
if (envOverrides) {
|
|
94
|
+
for (const [key, value] of Object.entries(envOverrides)) {
|
|
95
|
+
staticConfig = staticConfig.replace(new RegExp(`\\$ENV\\:\\:${key}`, "gi"), () => value);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const staticConfigPath = `${configPath}.${process.pid}-${_counter++}.tmp`;
|
|
99
|
+
const temporaryConfigPath = !path.isAbsolute(configPath) ? path.join(prePath, staticConfigPath) : staticConfigPath;
|
|
100
|
+
fs.writeFileSync(temporaryConfigPath, staticConfig);
|
|
101
|
+
if (options?.cwd) {
|
|
102
|
+
return path.relative(options.cwd, temporaryConfigPath);
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
return temporaryConfigPath;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Remove a rendered temp config produced by {@link generateStaticConfig}.
|
|
110
|
+
* `configFile` is whatever that function returned (relative to
|
|
111
|
+
* `options.cwd` when a cwd was given, absolute otherwise). Every caller of
|
|
112
|
+
* `generateStaticConfig` is expected to pair it with this in a `finally`,
|
|
113
|
+
* or the `<name>.<pid>-<n>.tmp` files accumulate next to the real config
|
|
114
|
+
* forever.
|
|
115
|
+
*/
|
|
116
|
+
export async function cleanupStaticConfig(configFile, options) {
|
|
117
|
+
await fs.promises.rm(path.resolve(options?.cwd ?? "", configFile), { force: true });
|
|
118
|
+
}
|
|
119
|
+
const n = makePath;
|
|
120
|
+
/**
|
|
121
|
+
* calculate the public key from private key
|
|
122
|
+
* openssl rsa -pubout -in private_key.pem -passin env:...
|
|
123
|
+
*
|
|
124
|
+
* `-passin` is always emitted (empty for a plaintext key) so an encrypted
|
|
125
|
+
* key without a passphrase fails fast instead of hanging on a TTY prompt.
|
|
126
|
+
*
|
|
127
|
+
* @method getPublicKeyFromPrivateKey
|
|
128
|
+
* @param privateKeyFilename: the existing file with the private key
|
|
129
|
+
* @param publicKeyFilename: the file where to store the public key
|
|
130
|
+
* @param passphrase: decrypts `privateKeyFilename` if it is an encrypted PKCS#8 key
|
|
131
|
+
*/
|
|
132
|
+
export async function getPublicKeyFromPrivateKey(privateKeyFilename, publicKeyFilename, passphrase) {
|
|
133
|
+
assert(fs.existsSync(privateKeyFilename));
|
|
134
|
+
const passin = passinArg(passphrase);
|
|
135
|
+
await execute_openssl(["rsa", "-pubout", "-in", n(privateKeyFilename), "-out", n(publicKeyFilename), ...passin.args], {
|
|
136
|
+
env: passin.env
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* extract public key from a certificate
|
|
141
|
+
* openssl x509 -pubkey -in certificate.pem -nottext
|
|
142
|
+
*
|
|
143
|
+
* @method getPublicKeyFromCertificate
|
|
144
|
+
* @param certificateFilename
|
|
145
|
+
* @param publicKeyFilename
|
|
146
|
+
*/
|
|
147
|
+
export async function getPublicKeyFromCertificate(certificateFilename, publicKeyFilename) {
|
|
148
|
+
assert(fs.existsSync(certificateFilename));
|
|
149
|
+
// no shell, so no `>` redirection: capture stdout and write it ourselves
|
|
150
|
+
const output = await execute_openssl(["x509", "-pubkey", "-in", n(certificateFilename)], {});
|
|
151
|
+
await fs.promises.writeFile(publicKeyFilename, output);
|
|
152
|
+
}
|
|
153
|
+
export function x509Date(date) {
|
|
154
|
+
date = date || new Date();
|
|
155
|
+
const Y = date.getUTCFullYear();
|
|
156
|
+
const M = date.getUTCMonth() + 1;
|
|
157
|
+
const D = date.getUTCDate();
|
|
158
|
+
const h = date.getUTCHours();
|
|
159
|
+
const m = date.getUTCMinutes();
|
|
160
|
+
const s = date.getUTCSeconds();
|
|
161
|
+
function w(s, l) {
|
|
162
|
+
return `${s}`.padStart(l, "0");
|
|
163
|
+
}
|
|
164
|
+
if (openssl_require2DigitYearInDate()) {
|
|
165
|
+
// for example: on MacOS , where openssl 0.98 is installed by default
|
|
166
|
+
return `${w(Y, 2) + w(M, 2) + w(D, 2) + w(h, 2) + w(m, 2) + w(s, 2)}Z`;
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
// for instance when openssl version is greater than 1.0.0
|
|
170
|
+
return `${w(Y, 4) + w(M, 2) + w(D, 2) + w(h, 2) + w(m, 2) + w(s, 2)}Z`;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* @param certificate - the certificate file in PEM format, file must exist
|
|
175
|
+
*/
|
|
176
|
+
export async function dumpCertificate(certificate) {
|
|
177
|
+
assert(fs.existsSync(certificate));
|
|
178
|
+
return await execute_openssl(["x509", "-in", n(certificate), "-text", "-noout"], {});
|
|
179
|
+
}
|
|
180
|
+
export async function toDer(certificatePem) {
|
|
181
|
+
assert(fs.existsSync(certificatePem));
|
|
182
|
+
const certificateDer = certificatePem.replace(".pem", ".der");
|
|
183
|
+
return await execute_openssl(["x509", "-outform", "der", "-in", certificatePem, "-out", certificateDer], {});
|
|
184
|
+
}
|
|
185
|
+
export async function fingerprint(certificatePem) {
|
|
186
|
+
// openssl x509 -in my_certificate.pem -hash -dates -noout -fingerprint
|
|
187
|
+
assert(fs.existsSync(certificatePem));
|
|
188
|
+
return await execute_openssl(["x509", "-fingerprint", "-noout", "-in", certificatePem], {});
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=toolbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolbox.js","sourceRoot":"","sources":["../../../../lib/toolbox/with_openssl/toolbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type CreateCertificateSigningRequestWithConfigOptions } from "../common.js";
|
|
2
|
+
/**
|
|
3
|
+
* create a certificate signing request
|
|
4
|
+
*/
|
|
5
|
+
export declare function createCertificateSigningRequestAsync(certificateSigningRequestFilename: string, params: CreateCertificateSigningRequestWithConfigOptions): Promise<void>;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------------------------------------------------
|
|
2
|
+
// node-opcua-pki
|
|
3
|
+
// ---------------------------------------------------------------------------------------------------------------------
|
|
4
|
+
// Copyright (c) 2022-2026 Sterfive.com
|
|
5
|
+
// ---------------------------------------------------------------------------------------------------------------------
|
|
6
|
+
//
|
|
7
|
+
// This project is licensed under the terms of the MIT license.
|
|
8
|
+
//
|
|
9
|
+
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
|
|
10
|
+
// documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
|
|
11
|
+
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
|
|
12
|
+
// permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
13
|
+
//
|
|
14
|
+
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
|
|
15
|
+
// Software.
|
|
16
|
+
//
|
|
17
|
+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
|
18
|
+
// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
19
|
+
// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
20
|
+
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
21
|
+
// ---------------------------------------------------------------------------------------------------------------------
|
|
22
|
+
import assert from "node:assert";
|
|
23
|
+
import fs from "node:fs";
|
|
24
|
+
import { coercePrivateKeyPem, createCertificateSigningRequest, pemToPrivateKey, Subject } from "node-opcua-crypto";
|
|
25
|
+
import { isOpaqueSigner } from "../common.js";
|
|
26
|
+
import { display, displaySubtitle } from "../display.js";
|
|
27
|
+
/**
|
|
28
|
+
* create a certificate signing request
|
|
29
|
+
*/
|
|
30
|
+
export async function createCertificateSigningRequestAsync(certificateSigningRequestFilename, params) {
|
|
31
|
+
assert(params);
|
|
32
|
+
assert(params.rootDir);
|
|
33
|
+
assert(params.configFile);
|
|
34
|
+
assert(params.privateKey);
|
|
35
|
+
if (typeof params.privateKey === "string") {
|
|
36
|
+
assert(fs.existsSync(params.privateKey), `Private key must exist${params.privateKey}`);
|
|
37
|
+
}
|
|
38
|
+
// assert(fs.existsSync(params.configFile), "config file must exist " + params.configFile);
|
|
39
|
+
assert(fs.existsSync(params.rootDir), "RootDir key must exist");
|
|
40
|
+
assert(typeof certificateSigningRequestFilename === "string");
|
|
41
|
+
const subject = params.subject ? new Subject(params.subject).toString() : undefined;
|
|
42
|
+
displaySubtitle("- Creating a Certificate Signing Request with subtile");
|
|
43
|
+
// an opaque signer is handed to the CSR primitive as-is: the
|
|
44
|
+
// proof-of-possession signature and the embedded public key both come
|
|
45
|
+
// from the signer, and there is no PEM to coerce
|
|
46
|
+
const privateKey = isOpaqueSigner(params.privateKey)
|
|
47
|
+
? params.privateKey
|
|
48
|
+
: await pemToPrivateKey(typeof params.privateKey === "string"
|
|
49
|
+
? await fs.promises.readFile(params.privateKey, "utf-8")
|
|
50
|
+
: coercePrivateKeyPem(params.privateKey));
|
|
51
|
+
const { csr } = await createCertificateSigningRequest({
|
|
52
|
+
privateKey,
|
|
53
|
+
dns: params.dns,
|
|
54
|
+
ip: params.ip,
|
|
55
|
+
subject,
|
|
56
|
+
applicationUri: params.applicationUri,
|
|
57
|
+
purpose: params.purpose
|
|
58
|
+
});
|
|
59
|
+
await fs.promises.writeFile(certificateSigningRequestFilename, csr, "utf-8");
|
|
60
|
+
display(`- privateKey ${typeof params.privateKey === "string"
|
|
61
|
+
? params.privateKey
|
|
62
|
+
: isOpaqueSigner(params.privateKey)
|
|
63
|
+
? "<opaque-signer>"
|
|
64
|
+
: "<in-memory>"}`);
|
|
65
|
+
display(`- certificateSigningRequestFilename ${certificateSigningRequestFilename}`);
|
|
66
|
+
// to verify that the CSR is correct:
|
|
67
|
+
// openssl req -in ./tmp/without_openssl.csr -noout -verify
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=create_certificate_signing_request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create_certificate_signing_request.js","sourceRoot":"","sources":["../../../../lib/toolbox/without_openssl/create_certificate_signing_request.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { type CreateSelfSignCertificateWithConfigParam } from "../common.js";
|
|
2
|
+
export declare function createSelfSignedCertificateAsync(certificate: string, params: CreateSelfSignCertificateWithConfigParam): Promise<void>;
|
|
3
|
+
export declare function createSelfSignedCertificate(certificate: string, params: CreateSelfSignCertificateWithConfigParam): Promise<void>;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------------------------------------------------
|
|
2
|
+
// node-opcua-pki
|
|
3
|
+
// ---------------------------------------------------------------------------------------------------------------------
|
|
4
|
+
// Copyright (c) 2022-2026 Sterfive.com
|
|
5
|
+
// ---------------------------------------------------------------------------------------------------------------------
|
|
6
|
+
//
|
|
7
|
+
// This project is licensed under the terms of the MIT license.
|
|
8
|
+
//
|
|
9
|
+
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
|
|
10
|
+
// documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
|
|
11
|
+
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
|
|
12
|
+
// permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
13
|
+
//
|
|
14
|
+
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
|
|
15
|
+
// Software.
|
|
16
|
+
//
|
|
17
|
+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
|
18
|
+
// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
19
|
+
// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
20
|
+
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
21
|
+
// ---------------------------------------------------------------------------------------------------------------------
|
|
22
|
+
import assert from "node:assert";
|
|
23
|
+
import fs from "node:fs";
|
|
24
|
+
import { CertificatePurpose, coercePrivateKeyPem, createSelfSignedCertificate as createSelfSignedCertificate1, pemToPrivateKey, Subject } from "node-opcua-crypto";
|
|
25
|
+
import { adjustDate, isOpaqueSigner } from "../common.js";
|
|
26
|
+
import { displayTitle } from "../display.js";
|
|
27
|
+
export async function createSelfSignedCertificateAsync(certificate, params) {
|
|
28
|
+
params.purpose = params.purpose || CertificatePurpose.ForApplication;
|
|
29
|
+
assert(params.purpose, "Please provide a Certificate Purpose");
|
|
30
|
+
/**
|
|
31
|
+
* note: due to a limitation of openssl ,
|
|
32
|
+
* it is not possible to control the startDate of the certificate validity
|
|
33
|
+
* to achieve this the certificateAuthority tool shall be used.
|
|
34
|
+
*/
|
|
35
|
+
assert(fs.existsSync(params.configFile));
|
|
36
|
+
assert(fs.existsSync(params.rootDir));
|
|
37
|
+
if (typeof params.privateKey === "string") {
|
|
38
|
+
assert(fs.existsSync(params.privateKey));
|
|
39
|
+
}
|
|
40
|
+
if (!params.subject) {
|
|
41
|
+
throw Error("Missing subject");
|
|
42
|
+
}
|
|
43
|
+
assert(typeof params.applicationUri === "string");
|
|
44
|
+
assert(Array.isArray(params.dns));
|
|
45
|
+
// xx no key size in self-signed assert(params.keySize == 2048 || params.keySize == 4096);
|
|
46
|
+
// processAltNames(params);
|
|
47
|
+
adjustDate(params);
|
|
48
|
+
assert(Object.prototype.hasOwnProperty.call(params, "validity"));
|
|
49
|
+
let subject = new Subject(params.subject);
|
|
50
|
+
subject = subject.toString();
|
|
51
|
+
// xx const certificateRequestFilename = certificate + ".csr";
|
|
52
|
+
const purpose = params.purpose;
|
|
53
|
+
displayTitle("Generate a certificate request");
|
|
54
|
+
// an opaque signer is handed to the primitive as-is: the public half
|
|
55
|
+
// comes from getPublicKey() and signing routes through the signer
|
|
56
|
+
// (node-opcua-crypto >= 5.10.1); there is no PEM to coerce
|
|
57
|
+
const privateKey = isOpaqueSigner(params.privateKey)
|
|
58
|
+
? params.privateKey
|
|
59
|
+
: await pemToPrivateKey(typeof params.privateKey === "string"
|
|
60
|
+
? await fs.promises.readFile(params.privateKey, "utf-8")
|
|
61
|
+
: coercePrivateKeyPem(params.privateKey));
|
|
62
|
+
const { cert } = await createSelfSignedCertificate1({
|
|
63
|
+
privateKey,
|
|
64
|
+
notBefore: params.startDate,
|
|
65
|
+
notAfter: params.endDate,
|
|
66
|
+
validity: params.validity,
|
|
67
|
+
dns: params.dns,
|
|
68
|
+
ip: params.ip,
|
|
69
|
+
subject,
|
|
70
|
+
applicationUri: params.applicationUri,
|
|
71
|
+
purpose
|
|
72
|
+
});
|
|
73
|
+
await fs.promises.writeFile(certificate, cert, "utf-8");
|
|
74
|
+
}
|
|
75
|
+
export async function createSelfSignedCertificate(certificate, params) {
|
|
76
|
+
await createSelfSignedCertificateAsync(certificate, params);
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=create_self_signed_certificate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create_self_signed_certificate.js","sourceRoot":"","sources":["../../../../lib/toolbox/without_openssl/create_self_signed_certificate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------------------------------------------------
|
|
2
|
+
// node-opcua-pki
|
|
3
|
+
// ---------------------------------------------------------------------------------------------------------------------
|
|
4
|
+
// Copyright (c) 2014-2026 - Etienne Rossignon - etienne.rossignon (at) gadz.org
|
|
5
|
+
// Copyright (c) 2022-2026 - Sterfive.com
|
|
6
|
+
// ---------------------------------------------------------------------------------------------------------------------
|
|
7
|
+
//
|
|
8
|
+
// This project is licensed under the terms of the MIT license.
|
|
9
|
+
//
|
|
10
|
+
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
|
|
11
|
+
// documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
|
|
12
|
+
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
|
|
13
|
+
// permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
14
|
+
//
|
|
15
|
+
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
|
|
16
|
+
// Software.
|
|
17
|
+
//
|
|
18
|
+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
|
19
|
+
// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
20
|
+
// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
21
|
+
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
|
+
// ---------------------------------------------------------------------------------------------------------------------
|
|
23
|
+
export * from "./create_certificate_signing_request.js";
|
|
24
|
+
export * from "./create_self_signed_certificate.js";
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/toolbox/without_openssl/index.ts"],"names":[],"mappings":"AAAA,wHAAwH;AACxH,iBAAiB;AACjB,wHAAwH;AACxH,gFAAgF;AAChF,yCAAyC;AACzC,wHAAwH;AACxH,EAAE;AACF,gEAAgE;AAChE,EAAE;AACF,+GAA+G;AAC/G,sHAAsH;AACtH,kHAAkH;AAClH,mGAAmG;AACnG,EAAE;AACF,uHAAuH;AACvH,YAAY;AACZ,EAAE;AACF,uHAAuH;AACvH,wHAAwH;AACxH,mHAAmH;AACnH,mHAAmH;AACnH,wHAAwH;AAExH,cAAc,yCAAyC,CAAC;AACxD,cAAc,qCAAqC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,38 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "node-opcua-pki",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "7.0.0",
|
|
4
4
|
"description": "PKI management for node-opcua",
|
|
5
|
-
"type": "
|
|
6
|
-
"main": "./dist/index.js",
|
|
7
|
-
"types": "./dist/index.d.ts",
|
|
8
|
-
"//main": "main/types are the pre-'exports' fallback, used only by resolvers that ignore the exports map. They are deliberately left as the CommonJS pair, matching \"type\": \"commonjs\", so that path behaves exactly as it did before - do not 'fix' one without the other.",
|
|
9
|
-
"//exports": "types are declared PER CONDITION on purpose. A single shared \"types\" key is resolved for BOTH import and require; since this package is \"type\": \"commonjs\", a bare .d.ts is a CommonJS module, so an ESM consumer got CJS types describing the real .mjs it imports. attw reports that as FalseCJS ('Masquerading as CJS'); it was present in 6.18.0. The .d.mts file already existed - tsup emits it from dts:true with format esm+cjs - the map simply never pointed at it.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/lib/index.js",
|
|
7
|
+
"types": "./dist/lib/index.d.ts",
|
|
10
8
|
"exports": {
|
|
11
|
-
".":
|
|
12
|
-
|
|
13
|
-
"types": "./dist/index.d.mts",
|
|
14
|
-
"default": "./dist/index.mjs"
|
|
15
|
-
},
|
|
16
|
-
"require": {
|
|
17
|
-
"types": "./dist/index.d.ts",
|
|
18
|
-
"default": "./dist/index.js"
|
|
19
|
-
}
|
|
20
|
-
},
|
|
21
|
-
"./core": {
|
|
22
|
-
"import": {
|
|
23
|
-
"types": "./dist/core.d.mts",
|
|
24
|
-
"default": "./dist/core.mjs"
|
|
25
|
-
},
|
|
26
|
-
"require": {
|
|
27
|
-
"types": "./dist/core.d.ts",
|
|
28
|
-
"default": "./dist/core.js"
|
|
29
|
-
}
|
|
30
|
-
},
|
|
9
|
+
".": "./dist/lib/index.js",
|
|
10
|
+
"./core": "./dist/lib/core.js",
|
|
31
11
|
"./package.json": "./package.json"
|
|
32
12
|
},
|
|
33
13
|
"bin": {
|
|
34
|
-
"pki": "./dist/bin/pki.
|
|
35
|
-
"node-opcua-pki": "./dist/bin/pki.
|
|
14
|
+
"pki": "./dist/bin/pki.js",
|
|
15
|
+
"node-opcua-pki": "./dist/bin/pki.js"
|
|
36
16
|
},
|
|
37
17
|
"files": [
|
|
38
18
|
"dist",
|
|
@@ -64,8 +44,9 @@
|
|
|
64
44
|
"chokidar": "4.0.3",
|
|
65
45
|
"command-line-args": "^6.0.2",
|
|
66
46
|
"command-line-usage": "^7.0.4",
|
|
67
|
-
"node-opcua-crypto": "
|
|
47
|
+
"node-opcua-crypto": "6.0.0",
|
|
68
48
|
"yauzl": "^3.4.0"
|
|
69
49
|
},
|
|
70
|
-
"
|
|
50
|
+
"//scheme": "ESM-only, unbundled tsc build matching the node-opcua monorepo scheme (dist mirrors lib/ + bin/, no CJS). String export targets carry no 'require' condition, so require('node-opcua-pki') resolves here on Node 22.12+ (require of an ES module; the graph has no top-level await) and fails with ERR_REQUIRE_ESM on older Node.",
|
|
51
|
+
"gitHead": "cda842be3eb60e53823fd8d0d6c8193f5d685440"
|
|
71
52
|
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
__commonJS,
|
|
4
|
-
init_esm_shims
|
|
5
|
-
} from "../chunk-GCHH54PS.mjs";
|
|
6
|
-
|
|
7
|
-
// packages/node-opcua-pki/bin/install_prerequisite.ts
|
|
8
|
-
import { install_prerequisite } from "node-opcua-pki";
|
|
9
|
-
var require_install_prerequisite = __commonJS({
|
|
10
|
-
"packages/node-opcua-pki/bin/install_prerequisite.ts"() {
|
|
11
|
-
init_esm_shims();
|
|
12
|
-
install_prerequisite().catch((err) => {
|
|
13
|
-
console.log("err = ", err.message);
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
});
|
|
17
|
-
export default require_install_prerequisite();
|
|
18
|
-
//# sourceMappingURL=install_prerequisite.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../bin/install_prerequisite.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { install_prerequisite } from \"node-opcua-pki\";\n\ninstall_prerequisite().catch((err: Error) => {\n console.log(\"err = \", err.message);\n});\n"],"mappings":";;;;;;;AACA,SAAS,4BAA4B;AADrC;AAAA;AAAA;AAGA,yBAAqB,EAAE,MAAM,CAAC,QAAe;AACzC,cAAQ,IAAI,UAAU,IAAI,OAAO;AAAA,IACrC,CAAC;AAAA;AAAA;","names":[]}
|