xynginc 1.0.98 → 1.0.99

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/README.md CHANGED
@@ -1,65 +1,72 @@
1
- # XyNginC
1
+ # XyNginC (XNCP)
2
2
 
3
- This project uses code developed by NEHONIX (www.nehonix.com) under the NEHONIX Open Source License (NOSL) v1.0.
3
+ XyPriss Nginx Controller (XNCP) is an enterprise-grade infrastructure controller providing automated reverse proxy configuration, Let's Encrypt SSL/TLS lifecycle management, and systemd service orchestration for the XyPriss web ecosystem.
4
4
 
5
- XyPriss Nginx Controller – Simplifies Nginx and SSL management.
6
-
7
- [![xfpm version](https://badge.fury.io/js/%40xypriss%2Fxynginc.svg)](https://www.npmjs.com/package/xynginc)
5
+ [![xfpm version](https://badge.fury.io/js/xynginc.svg)](https://www.npmjs.com/package/xynginc)
8
6
  [![License: NOSL](https://img.shields.io/badge/License-NOSL-blue.svg)](https://dll.nehonix.com/licenses/NOSL)
7
+ [![Go Core](https://img.shields.io/badge/Go%20Core-go--ed--1.1.9-00ADD8?logo=go&logoColor=white)](https://github.com/Nehonix-Team/xynginc/releases)
9
8
 
10
- ## Overview
9
+ ---
11
10
 
12
- XyNginC (XyPriss Nginx Controller) automates Nginx reverse proxy configuration, SSL certificate management, and provides optimized, production-ready configs for security, performance, and best practices. It eliminates manual Nginx editing, simplifying XyPriss deployment to just a few lines of TypeScript. Check out the [demo project on GitHub](https://github.com/iDevo-ll/XYNC-Demo).
11
+ ## 1. Architectural Overview
13
12
 
14
- > [!IMPORTANT]
15
- > XyNginC is a plugin **exclusively designed for XyPriss projects**. It is not intended for use outside the XyPriss ecosystem, in development environments, or on non-Linux systems. For the best integration experience, **XFPM** (XyPriss Fast Package Manager) is required — see [Installation](#installation).
13
+ XyNginC eliminates manual web server configuration by bridging application-level declarations in XyPriss directly with Linux system-level primitives. The architecture is composed of two primary layers:
16
14
 
17
- > [!CAUTION]
18
- > XyNginC only runs on **Linux production servers** (VPS or Dedicated). Supported architectures: **x64**, **arm64**, and **ia32**. Windows and macOS are not supported.
15
+ 1. **TypeScript Controller Plugin**: Integrates into the XyPriss lifecycle, validates domain declarations, enforces security boundaries, and prevents execution conflicts in multi-tenant or multi-server topologies.
16
+ 2. **Native Go Engine (`core-go`)**: A compiled binary that interacts directly with host system utilities (`nginx`, `certbot`, `ufw`, `systemd`). It executes operations with deterministic speed, zero runtime overhead, and strict isolation.
19
17
 
20
- ## Key Features
18
+ ```mermaid
19
+ graph TD
20
+ A[XyPriss Application Server] -->|TypeScript API / Zero-Trust| B(XyNginC Plugin Wrapper)
21
+ B -->|Encrypted IPC / Temp Configuration| C(XyNginC Native Go Engine)
22
+ C -->|Configuration & Service Reload| D[Nginx Reverse Proxy & Headers-More]
23
+ C -->|ACME Automation| E[Let's Encrypt SSL / Certbot]
24
+ C -->|Process Supervision| F[Linux Systemd Daemon]
25
+ ```
21
26
 
22
- - **Automated Reverse Proxy**: Maps domains to local ports seamlessly.
23
- - **One-Command SSL**: Integrated Let's Encrypt and Certbot support for automatic HTTPS.
24
- - **Automatic Nginx Reload**: Applies configuration changes without manual service restarts.
25
- - **Multi-Domain Support**: Manages multiple domains and subdomains within a single configuration.
26
- - **Optimized Configuration**: Generates production-ready Nginx configuration files via dynamic GitHub template fetching.
27
- - **High Performance**: Core logic executed via a Go-based CLI for speed and reliability.
28
- - **Type Safety**: Full TypeScript support with comprehensive type definitions.
27
+ ---
29
28
 
30
- ## Installation
29
+ ## 2. Core Capabilities
31
30
 
32
- For detailed installation instructions, please refer to the [Installation Guide](docs/INSTALLATION.md).
33
- For building from source (custom architectures), see the [Build Guide](docs/BUILD_FROM_SOURCE.md).
31
+ - **Automated Reverse Proxy**: Generates hardened Nginx virtual host declarations matching local application ports.
32
+ - **Automated TLS Lifecycle**: Manages certificate issuance and HTTP-01 challenge completion via Certbot without service interruption.
33
+ - **Production Hardening**: Implements CIS and OWASP-aligned configuration baselines, HTTP/2 termination, and connection pooling.
34
+ - **Header Obfuscation**: Integrates `libnginx-mod-http-headers-more-filter` to strip default web server identification tokens and enforce `Server: NEHONIX/XNCP`.
35
+ - **Systemd Process Supervision**: Provides one-command deployment to transform XyPriss applications into self-healing, auto-restarting systemd daemons.
36
+ - **Multi-Server Deduplication**: Synchronizes state across multiple sub-instances sharing identical domain configurations to prevent redundant Nginx reloads.
37
+ - **Firewall Integration**: Optionally verifies and provisions access rules on active Uncomplicated Firewall (UFW) configurations.
34
38
 
35
- XyNginC is exclusively designed for **XyPriss projects running in production on Linux**. We strongly recommend using Ubuntu on a Virtual Private Server (VPS) for the best security and stability.
39
+ ---
36
40
 
37
- ### Prerequisites
41
+ ## 3. System Requirements & Compatibility
38
42
 
39
- Before installing XyNginC, you need **XFPM** the official package manager for the XyPriss ecosystem.
43
+ - **Operating System**: Linux (Ubuntu 22.04+, Debian 11+ recommended).
44
+ - **Architectures**: x86_64 (`amd64`), ARM64 (`aarch64`), x86 (`386`).
45
+ - **Runtimes**: Bun (v1.2+), Node.js (v18.0+).
46
+ - **Package Manager**: XFPM (XyPriss Fast Package Manager).
40
47
 
41
- ```bash
42
- curl -fsSL https://raw.githubusercontent.com/Nehonix-Team/XFPM/master/scripts/install.sh | sudo bash
43
- ```
48
+ > [!IMPORTANT]
49
+ > XyNginC is designed specifically for Linux server environments in production. Windows and macOS are not supported for production deployments.
44
50
 
45
- ```bash
46
- xfpm --version
47
- ```
51
+ ---
48
52
 
49
- ### Install XyNginC
53
+ ## 4. Installation
54
+
55
+ XyNginC is distributed through the official XyPriss registry using XFPM:
50
56
 
51
57
  ```bash
52
58
  xfpm install xynginc
53
59
  ```
54
60
 
55
- > [!NOTE]
56
- > The installation requires `sudo` privileges to place the binary in `/usr/local/bin` and configure system permissions.
61
+ The package registers two CLI aliases in the workspace environment: `xynginc` and `xncp`.
62
+
63
+ ---
57
64
 
58
- ## Quick Start
65
+ ## 5. Integration
59
66
 
60
- ### Basic Configuration
67
+ ### Basic Server Declaration
61
68
 
62
- Integrate XyNginC into your XyPriss server:
69
+ Register XyNginC within the server initialization pipeline:
63
70
 
64
71
  ```typescript
65
72
  import { createServer } from "xypriss";
@@ -72,11 +79,22 @@ const app = createServer({
72
79
  domains: [
73
80
  {
74
81
  domain: "api.example.com",
75
- port: 3000,
82
+ port: 8088,
76
83
  ssl: true,
77
- email: "admin@example.com",
84
+ email: "ops@example.com",
85
+ maxBodySize: "25M",
86
+ },
87
+ {
88
+ domain: "auth.example.com",
89
+ port: 8089,
90
+ ssl: true,
91
+ email: "ops@example.com",
78
92
  },
79
93
  ],
94
+ installRequirements: true,
95
+ autoReload: true,
96
+ autoFixFirewall: true,
97
+ sudoPassword: process.env.SUDO_PASSWORD,
80
98
  }),
81
99
  ],
82
100
  },
@@ -85,249 +103,160 @@ const app = createServer({
85
103
  app.start();
86
104
  ```
87
105
 
88
- ### Multiple Domains Configuration
106
+ ---
89
107
 
90
- Configure multiple environments or services simultaneously:
108
+ ## 6. Process Supervision & Service Management
91
109
 
92
- ```typescript
93
- XNCP({
94
- domains: [
95
- {
96
- domain: "api.example.com",
97
- port: 3000,
98
- ssl: true,
99
- email: "admin@example.com",
100
- },
101
- {
102
- domain: "admin.example.com",
103
- port: 3001,
104
- ssl: true,
105
- email: "admin@example.com",
106
- },
107
- {
108
- domain: "dev.example.com",
109
- port: 3002,
110
- ssl: false,
111
- },
112
- ],
113
- autoReload: true,
114
- });
115
- ```
110
+ XyNginC includes dedicated systemd management commands to ensure persistent execution, crash resilience, and automatic startup upon system boot.
116
111
 
117
- ### Dynamic Management
112
+ ### Service Deployment
118
113
 
119
- Manage domains programmatically at runtime:
114
+ From the root directory of your project:
120
115
 
121
- ```typescript
122
- app.start(async () => {
123
- // Add a new domain
124
- await app.xynginc.addDomain(
125
- "new.example.com",
126
- 4000,
127
- true,
128
- "admin@example.com",
129
- );
130
-
131
- // List configured domains
132
- const domains = await app.xynginc.listDomains();
133
- console.log("Configured domains:", domains);
134
-
135
- // Validate XCNP configuration
136
- const isValid = await app.xynginc.test();
137
-
138
- // Reload XyNginC service
139
- await app.xynginc.reload();
140
-
141
- // Remove a domain
142
- await app.xynginc.removeDomain("old.example.com");
143
- });
116
+ ```bash
117
+ sudo xfpmx xncp service install
144
118
  ```
145
119
 
146
- ## API Reference
147
-
148
- ### Plugin Options
149
-
150
- ```typescript
151
- interface XyNginCPluginOptions {
152
- /** List of domains to configure */
153
- domains: Array<{
154
- domain: string; // Domain name (e.g., api.example.com)
155
- port: number; // Local port to proxy (e.g., 3000)
156
- ssl?: boolean; // Enable SSL via Let's Encrypt
157
- email?: string; // Email for Let's Encrypt registration (required if ssl=true)
158
- }>;
120
+ The installer automatically:
121
+ 1. Detects the execution runtime (`bun` or `node`).
122
+ 2. Detects the project entrypoint (`src/server.ts`, `server.ts`, `dist/index.js`).
123
+ 3. Discovers and binds the local `.env` configuration (`EnvironmentFile`).
124
+ 4. Configures process execution under the non-root owner (`SUDO_USER` or `ubuntu`).
125
+ 5. Enforces resource limits (`LimitNOFILE=65535`, `LimitNPROC=4096`).
126
+ 6. Configures auto-restart policies (`Restart=always`, `RestartSec=5s`).
127
+ 7. Enables and immediately launches the service unit via systemd.
159
128
 
160
- /** Automatically reload Nginx after configuration changes (default: true) */
161
- autoReload?: boolean;
129
+ ### Service Operations
162
130
 
163
- /** Custom path to the xynginc binary - recommended */
164
- binaryPath?: string;
131
+ ```bash
132
+ # List all services managed by XyNginC
133
+ xfpmx xncp service list # or: xfpmx xncp services
165
134
 
166
- /** Automatically download the binary if missing (default: true) */
167
- autoDownload?: boolean;
135
+ # Display service status and Nginx health
136
+ xfpmx xncp service status [service-name]
168
137
 
169
- /** Specific GitHub release version to download (default: "latest") */
170
- version?: string;
138
+ # Follow live application log output
139
+ xfpmx xncp logs -f
171
140
 
172
- /** Password to execute sudo commands silently in background environments like PM2 */
173
- sudoPassword?: string;
141
+ # Restart, stop, or start service
142
+ sudo xfpmx xncp service restart [service-name]
143
+ sudo xfpmx xncp service stop [service-name]
144
+ sudo xfpmx xncp service start [service-name]
174
145
 
175
- /** Automatically open Port 80 and 443 in the firewall (UFW) if they are blocked (default: false) */
176
- autoFixFirewall?: boolean;
177
- }
146
+ # Uninstall and deregister service unit
147
+ sudo xfpmx xncp service uninstall [service-name]
178
148
  ```
179
149
 
180
- ### Server Methods
181
-
182
- The following methods are exposed on `server.xynginc` after the plugin is registered:
183
-
184
- ```typescript
185
- // Add a domain configuration
186
- await server.xynginc.addDomain(
187
- domain: string,
188
- port: number,
189
- ssl: boolean,
190
- email?: string
191
- ): Promise<void>
192
-
193
- // Remove a domain configuration
194
- await server.xynginc.removeDomain(domain: string): Promise<void>
150
+ ---
195
151
 
196
- // List all configured domains
197
- await server.xynginc.listDomains(): Promise<string[]>
152
+ ## 7. Command-Line Interface Reference
198
153
 
199
- // Reload XyNginC service
200
- await server.xynginc.reload(): Promise<void>
201
-
202
- // Test XyNginC configuration validity
203
- await server.xynginc.test(): Promise<boolean>
204
-
205
- // Get status of managed sites
206
- await server.xynginc.status(): Promise<string>
207
- ```
208
-
209
- ## CLI Usage
210
-
211
- The `xynginc` command-line interface allows for direct management without the XyPriss application context.
154
+ The CLI can be invoked globally as `xynginc` / `xncp` or locally via `xfpmx xncp`:
212
155
 
213
156
  ```bash
214
- # Check prerequisites
215
- sudo xynginc check
216
-
217
- # Add a domain
218
- sudo xynginc add --domain api.example.com --port 3000 --ssl --email admin@example.com
219
-
220
- # List domains
157
+ # Infrastructure Diagnostics & Setup
158
+ sudo xynginc check # Verify system dependencies
159
+ sudo xynginc install # Install missing system requirements
160
+
161
+ # Service Supervision
162
+ sudo xynginc service install [name] # Provision and start systemd service
163
+ xynginc service list # List all managed background services (alias: services)
164
+ sudo xynginc service start [name] # Start managed service
165
+ sudo xynginc service stop [name] # Stop managed service
166
+ sudo xynginc service restart [name] # Restart managed service
167
+ xynginc service status [name] # Inspect unit status and reverse proxy state
168
+ xynginc service logs [name] -f # Stream live service logs
169
+ sudo xynginc service uninstall [name] # Remove service unit
170
+
171
+ # Direct Aliases
172
+ xynginc services # List all background services
173
+ xynginc logs -f # Stream logs of default service
174
+
175
+ # Virtual Host Management
176
+ sudo xynginc add --domain example.com --port 8080 --ssl --email ops@example.com
177
+ sudo xynginc remove example.com
221
178
  sudo xynginc list
222
179
 
223
- # Apply configuration from a JSON file
224
- sudo xynginc apply --config config.json
225
-
226
- # Test Nginx configuration
227
- sudo xynginc test
228
-
229
- # Reload Nginx
230
- sudo xynginc reload
231
-
232
- # Remove a domain
233
- sudo xynginc remove api.example.com
234
-
235
- # View status
236
- sudo xynginc status
180
+ # Server Validation & Maintenance
181
+ sudo xynginc test # Validate current Nginx syntax
182
+ sudo xynginc reload # Safely reload Nginx configuration
183
+ sudo xynginc clean # Purge conflicting or broken virtual hosts
184
+ sudo xynginc restore <backup_id> # Revert to a previous configuration backup
237
185
  ```
238
186
 
239
- ### Configuration File Example
240
-
241
- ```json
242
- {
243
- "domains": [
244
- {
245
- "domain": "api.example.com",
246
- "port": 3000,
247
- "ssl": true,
248
- "email": "admin@example.com"
249
- }
250
- ],
251
- "auto_reload": true,
252
- "autofix_firewall": true
253
- }
254
- ```
255
-
256
- ## Architecture
257
-
258
- The system operates through a three-tier architecture:
187
+ ### Options for `service install`
259
188
 
260
- 1. **XyPriss Application**: The XyPriss application running the server.
261
- 2. **XyNginC Plugin**: A TypeScript wrapper that interfaces with the application and executes the underlying Go binary.
262
- 3. **XyNginC Go Binary**: A high-performance Go-based CLI tool that performs system-level operations (Nginx configuration, Certbot execution). It dynamically fetches the latest config templates from GitHub (`Nehonix-Team/xynginc`) to guarantee up-to-date and optimized Nginx setups.
189
+ | Parameter | Alias | Description | Default |
190
+ |---|---|---|---|
191
+ | `--name` | `-n` | Systemd service unit identifier | `name` in `package.json` |
192
+ | `--runtime` | `-r` | Absolute path to runtime binary | Auto-detected (`bun`/`node`) |
193
+ | `--entrypoint` | `-e` | Path to server bootstrap file | Auto-detected (`src/server.ts`...) |
194
+ | `--user` | `-u` | Linux system user for process execution | `SUDO_USER` / current user |
195
+ | `--env-file` | | Path to environment file | Auto-detected `.env` in directory |
263
196
 
264
- ## Security Considerations
197
+ ---
265
198
 
266
- XyNginC requires elevated privileges to perform the following actions:
199
+ ## 8. TypeScript Plugin Options
267
200
 
268
- - Writing to `/etc/nginx/sites-available/`
269
- - Creating symbolic links in `/etc/nginx/sites-enabled/`
270
- - Executing `certbot` for SSL certificate generation
271
- - Reloading the Nginx service
272
-
273
- > [!WARNING]
274
- > XyNginC requires elevated privileges to manage Nginx and firewall rules. Always review the commands being executed and restrict sudo access to only what is necessary.
275
-
276
- - **Sudoers**: We recommend configuring `sudoers` to allow specific commands for the user.
277
- - **Sudo Password**: If your application runs in the background (e.g. using PM2), you can use the `sudoPassword` option or the `SUDO_PASSWORD` environment variable.
278
- - **Reassurance**: The password is used **only** to execute the local `xynginc` binary and system commands like `ufw` or `service`. It is never stored, logged, or transmitted outside of your server.
279
- - **Firewall**: The `autoFixFirewall` option allows XyNginC to automatically detect and open Port 80/443 if `ufw` is active. This is useful for automated SSL validation.
280
-
281
- ## Troubleshooting
201
+ ```typescript
202
+ interface XyNginCDomainConfig {
203
+ domain: string; // Target host (e.g., "api.example.com")
204
+ port: number; // Local listener port
205
+ ssl?: boolean; // Enable Let's Encrypt TLS (default: false)
206
+ email?: string; // Registration email for ACME notifications
207
+ maxBodySize?: string; // Client request limit, e.g., "50M" (default: "10M")
208
+ }
282
209
 
283
- ### Binary Not Found
210
+ interface XyNginCPluginOptions {
211
+ domains: XyNginCDomainConfig[];
212
+ installRequirements?: boolean; // Provision system dependencies if missing (default: false)
213
+ autoReload?: boolean; // Reload Nginx upon successful configuration (default: true)
214
+ autoFixFirewall?: boolean; // Provision UFW rules for 80/443 (default: false)
215
+ sudoPassword?: string; // Password for non-interactive privilege escalation
216
+ binaryPath?: string; // Custom path to xynginc Go binary
217
+ autoDownload?: boolean; // Automatically retrieve binary if not present (default: true)
218
+ version?: string; // Specific Go core release tag (default: "latest")
219
+ }
220
+ ```
284
221
 
285
- If the binary fails to download automatically:
222
+ ---
286
223
 
287
- ```bash
288
- # Manually trigger with XFPM
289
- xfpm run postinstall
290
-
291
- # Or specify the path manually in options
292
- XNCP({
293
- binaryPath: "/usr/local/bin/xynginc",
294
- autoDownload: false,
295
- })
296
- ```
224
+ ## 9. Programmatic Server API
297
225
 
298
- ### Permission Denied
226
+ When registered, XyNginC attaches management methods directly to `server.xynginc`:
299
227
 
300
- If you encounter permission errors:
228
+ ```typescript
229
+ // Dynamically register a domain at runtime
230
+ await server.xynginc.addDomain(domain, port, ssl, email, maxBodySize);
301
231
 
302
- ```bash
303
- # Run with sudo
304
- sudo node server.js
305
- ```
232
+ // Unregister a domain and remove virtual host
233
+ await server.xynginc.removeDomain(domain);
306
234
 
307
- ### Certbot Failure
235
+ // Query configured domain inventory
236
+ const domains: string[] = await server.xynginc.listDomains();
308
237
 
309
- If SSL generation fails:
238
+ // Execute Nginx configuration test
239
+ const isSyntacticallyValid: boolean = await server.xynginc.test();
310
240
 
311
- 1. Verify DNS propagation: `dig api.example.com`
312
- 2. Ensure firewall allows traffic on ports 80 and 443:
241
+ // Trigger safe service reload
242
+ await server.xynginc.reload();
313
243
 
314
- ```bash
315
- sudo ufw allow 80
316
- sudo ufw allow 443
244
+ // Retrieve aggregate infrastructure status
245
+ const summary: string = await server.xynginc.status();
317
246
  ```
318
247
 
319
- > [!NOTE]
320
- > Certbot requires ports 80 and 443 to be publicly accessible for domain validation. Make sure your cloud provider's security groups also allow this traffic, not just UFW.
248
+ ---
321
249
 
322
- ## Contributing
250
+ ## 10. Security & Compliance Specifications
323
251
 
324
- Contributions are welcome. Please follow the standard pull request process.
252
+ - **Privilege Separation**: Application services execute strictly under unprivileged user accounts. Privilege escalation via `sudo` is scoped exclusively to configuration files and service reloads.
253
+ - **Secure File Passing**: Configurations are passed to the Go core via transient, restricted-permission files (`/tmp/.xynginc-config-*.json`) that are deleted immediately after parsing to prevent sensitive data leakage.
254
+ - **Signature Integrity**: Distributed with an official cryptographic manifest (`xypriss.plugin.xsig`) validated by the XyPriss runtime against unauthorized modification.
255
+ - **Network Boundaries**: Nginx reverse proxy templates restrict upstream listeners to loopback interfaces (`127.0.0.1`) by default, preventing direct public exposure of internal microservices.
325
256
 
326
- 1. Clone the repository
327
- 2. Install dependencies
328
- 3. Build the Go CLI and TypeScript package (`xfpm run build:all`)
329
- 4. Run tests
257
+ ---
330
258
 
331
- ## License
259
+ ## 11. License
332
260
 
333
- NOSL
261
+ This software is licensed under the **NEHONIX Open Source License (NOSL) v1.0**.
262
+ Copyright © 2025-2026 [NEHONIX](https://www.nehonix.com). All rights reserved.
package/bin/xynginc ADDED
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xynginc",
3
- "version": "1.0.98",
3
+ "version": "1.0.99",
4
4
  "description": "XyPriss Nginx Controller - Automatic Nginx & SSL management for XyPriss servers",
5
5
  "author": "Seth Eleazar - iDevo",
6
6
  "license": "NOSL",
@@ -14,7 +14,8 @@
14
14
  "xypriss.config.jsonc"
15
15
  ],
16
16
  "bin": {
17
- "xynginc": "./bin/xynginc"
17
+ "xynginc": "./bin/xynginc",
18
+ "xncp": "./bin/xynginc"
18
19
  },
19
20
  "engines": {
20
21
  "node": ">=18.0.0"
@@ -1,11 +1,11 @@
1
1
  --- XYPRISS SIGNATURE (G3) ---
2
- Manifest: xynginc@1.0.98
2
+ Manifest: xynginc@1.0.99
3
3
  Min-Engine: 1.0.81
4
- Fingerprint: sha256:bcb7ff347f32fadda4fb97221c8a3a345c829487b96f5b4f9917ce339d3db7c3
4
+ Fingerprint: sha256:460ca9bd2d503063a12a86c92d768deb5085da7f6da8607afec24e326f9c7a53
5
5
  Identity: ed25519:0e2e1accdbba45480979305256d50d368ae6cc2c0d7ee378c5f1999ae834cf58
6
6
  Privileges: XHS.HOOK.LIFECYCLE.REGISTER,XHS.HOOK.LIFECYCLE.SERVER_START,XHS.HOOK.LIFECYCLE.SERVER_STOP,XHS.HOOK.LIFECYCLE.SERVER_READY
7
- Expires: 2027-09-13T22:31:28Z
7
+ Expires: 2027-09-14T06:50:38Z
8
8
  Revision: sha256:none
9
9
  --- BEGIN CRYPTOGRAPHIC PROOF ---
10
- base64:j6PuNC2NVNLHyuV9b5cK00aMbERt84Zo8yu2q0P13IDLd/cYnAdCVgwwiSJVZE9mY6fRTtdVC0L0P70ISwfWDg==
10
+ base64:HdYiyjSlrYZS7CRh9xojf0E91Kt7oo452cEWgdd1BceBpDfHX1XB253auA058m6MDxnAJPgqU+6Vm/1Ml1cTAQ==
11
11
  --- END XYPRISS SIGNATURE ---