neozip-cli 0.75.2-beta → 0.80.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/CHANGELOG.md +30 -0
- package/DOCUMENTATION.md +9 -1
- package/README.md +22 -10
- package/dist/src/commands/mintTimestampProof.js +335 -0
- package/dist/src/commands/verifyEmail.js +146 -0
- package/dist/src/config/ConfigSetup.js +50 -20
- package/dist/src/config/ConfigStore.js +36 -3
- package/dist/src/index.js +1 -1
- package/dist/src/neolist.js +18 -10
- package/dist/src/neounzip.js +305 -60
- package/dist/src/neozip/blockchain.js +5 -5
- package/dist/src/neozip/createZip.js +207 -41
- package/dist/src/neozip/upgradeZip.js +182 -0
- package/dist/src/neozip.js +143 -8
- package/env.example +10 -0
- package/package.json +87 -81
- package/dist/neozipkit-bundles/blockchain.js +0 -13725
- package/dist/neozipkit-bundles/browser.js +0 -6186
- package/dist/neozipkit-bundles/core.js +0 -3839
- package/dist/neozipkit-bundles/node.js +0 -17730
- package/dist/neozipkit-wrappers/blockchain/core/contracts.js +0 -16
- package/dist/neozipkit-wrappers/blockchain/index.js +0 -2
- package/dist/neozipkit-wrappers/core/ZipDecompress.js +0 -2
- package/dist/neozipkit-wrappers/core/components/HashCalculator.js +0 -2
- package/dist/neozipkit-wrappers/core/components/Logger.js +0 -2
- package/dist/neozipkit-wrappers/core/constants/Errors.js +0 -2
- package/dist/neozipkit-wrappers/core/constants/Headers.js +0 -2
- package/dist/neozipkit-wrappers/core/encryption/ZipCrypto.js +0 -7
- package/dist/neozipkit-wrappers/core/index.js +0 -3
- package/dist/neozipkit-wrappers/index.js +0 -13
- package/dist/neozipkit-wrappers/node/index.js +0 -2
package/dist/src/neozip.js
CHANGED
|
@@ -67,10 +67,19 @@ const user_interaction_1 = require("./neozip/user-interaction");
|
|
|
67
67
|
const createZip_1 = require("./neozip/createZip");
|
|
68
68
|
const file_operations_1 = require("./neozip/file-operations");
|
|
69
69
|
// ConfigSetup is lazy-loaded only when needed (init/config commands)
|
|
70
|
-
const
|
|
70
|
+
const neozip_blockchain_1 = require("neozip-blockchain");
|
|
71
71
|
const ConfigStore_1 = require("./config/ConfigStore");
|
|
72
72
|
const exit_codes_1 = require("./exit-codes");
|
|
73
73
|
const version_1 = require("./version");
|
|
74
|
+
/**
|
|
75
|
+
* Resolve dynamic import path so ts-node loads .ts and compiled dist loads .js
|
|
76
|
+
*/
|
|
77
|
+
function resolveScriptPath(jsPath) {
|
|
78
|
+
if (typeof __filename !== 'undefined' && __filename.endsWith('.ts')) {
|
|
79
|
+
return jsPath.replace(/\.js$/, '.ts');
|
|
80
|
+
}
|
|
81
|
+
return jsPath;
|
|
82
|
+
}
|
|
74
83
|
/**
|
|
75
84
|
* Parse command line arguments
|
|
76
85
|
*/
|
|
@@ -85,6 +94,7 @@ function parseArgs(args) {
|
|
|
85
94
|
blockchainMint: false, // Force mint new token disabled by default
|
|
86
95
|
network: 'base-sepolia',
|
|
87
96
|
walletPasskey: process.env.NEOZIP_WALLET_PASSKEY,
|
|
97
|
+
timestampEmail: process.env.NEOZIP_TIMESTAMP_EMAIL,
|
|
88
98
|
compression: 'zstd',
|
|
89
99
|
blockSize: 128 * 1024, // 128KB default
|
|
90
100
|
enableProgress: true,
|
|
@@ -168,6 +178,17 @@ function parseArgs(args) {
|
|
|
168
178
|
case '--opentimestamp':
|
|
169
179
|
options.blockchainOts = true;
|
|
170
180
|
break;
|
|
181
|
+
case '-ts':
|
|
182
|
+
case '--timestamp':
|
|
183
|
+
options.blockchainZipstamp = true;
|
|
184
|
+
break;
|
|
185
|
+
case '--timestamp-email':
|
|
186
|
+
options.timestampEmail = args[++i];
|
|
187
|
+
if (!options.timestampEmail) {
|
|
188
|
+
console.error('Error: --timestamp-email requires an email address');
|
|
189
|
+
(0, exit_codes_1.exitZip)(exit_codes_1.ZIP_EXIT_CODES.PARAMETER_ERROR);
|
|
190
|
+
}
|
|
191
|
+
break;
|
|
171
192
|
case '-bt':
|
|
172
193
|
case '--blockchain-token':
|
|
173
194
|
options.blockchain = true;
|
|
@@ -185,8 +206,8 @@ function parseArgs(args) {
|
|
|
185
206
|
case '-n':
|
|
186
207
|
case '--network':
|
|
187
208
|
const network = args[++i];
|
|
188
|
-
if ((0,
|
|
189
|
-
const supportedNetworks = (0,
|
|
209
|
+
if ((0, neozip_blockchain_1.getChainIdByName)(network) === null) {
|
|
210
|
+
const supportedNetworks = (0, neozip_blockchain_1.getSupportedNetworkNames)();
|
|
190
211
|
console.error(`Error: Unsupported network: "${network}"`);
|
|
191
212
|
console.error(`Supported networks: ${supportedNetworks.join(', ')}`);
|
|
192
213
|
(0, exit_codes_1.exitZip)(exit_codes_1.ZIP_EXIT_CODES.PARAMETER_ERROR);
|
|
@@ -411,6 +432,12 @@ function parseArgs(args) {
|
|
|
411
432
|
break;
|
|
412
433
|
}
|
|
413
434
|
}
|
|
435
|
+
// -ots and -ts are mutually exclusive (choose Bitcoin OTS or Zipstamp)
|
|
436
|
+
if (options.blockchainOts && options.blockchainZipstamp) {
|
|
437
|
+
console.error('Error: Cannot use both -ots (OpenTimestamps) and -ts (Zipstamp) in the same run');
|
|
438
|
+
console.error(' Use -ots for Bitcoin timestamping or -ts for Zipstamp timestamping');
|
|
439
|
+
(0, exit_codes_1.exitZip)(exit_codes_1.ZIP_EXIT_CODES.PARAMETER_ERROR);
|
|
440
|
+
}
|
|
414
441
|
if (!archive) {
|
|
415
442
|
console.error('Error: Archive name is required');
|
|
416
443
|
showHelp();
|
|
@@ -450,6 +477,9 @@ Usage: neozip [options] <archive> <files...>
|
|
|
450
477
|
Configuration Commands:
|
|
451
478
|
neozip init Interactive wallet setup wizard
|
|
452
479
|
neozip config Show current configuration and manage settings (interactive menu)
|
|
480
|
+
neozip upgrade <archive> [output] [--wait] Upgrade pending Zipstamp timestamp to confirmed
|
|
481
|
+
neozip mint <archive> [output] Mint TimestampProofNFT from confirmed timestamped ZIP
|
|
482
|
+
neozip verify-email [--email <email>] [--set-default] Configure email for Zipstamp timestamping
|
|
453
483
|
|
|
454
484
|
Options:
|
|
455
485
|
-h, --help Show this help message
|
|
@@ -478,6 +508,8 @@ Options:
|
|
|
478
508
|
-bd, --blockchain-default Auto-select default token option (use existing or mint new)
|
|
479
509
|
-bm, --blockchain-mint Force mint new token (skip existing token selection)
|
|
480
510
|
-ots, --opentimestamp Enable OpenTimestamp proof on Bitcoin blockchain
|
|
511
|
+
-ts, --timestamp Enable Zipstamp timestamp (blockchain)
|
|
512
|
+
--timestamp-email <email> Email for Zipstamp server (some servers require verified email)
|
|
481
513
|
-n, --network <network> Blockchain network (base-sepolia, base-mainnet, default: base-sepolia)
|
|
482
514
|
-w, --wallet-key <key> Wallet private key (overrides NEOZIP_WALLET_PASSKEY)
|
|
483
515
|
-c Add one-line comments for files
|
|
@@ -509,9 +541,9 @@ Arguments:
|
|
|
509
541
|
<files...> Files and directories to compress
|
|
510
542
|
|
|
511
543
|
Examples:
|
|
512
|
-
neozip output/test.nzip file1.txt file2.txt
|
|
513
|
-
neozip output/simple.nzip ./data/
|
|
514
|
-
neozip -r output/recursive.nzip ./project/
|
|
544
|
+
neozip tests/output/test.nzip file1.txt file2.txt
|
|
545
|
+
neozip tests/output/simple.nzip ./data/
|
|
546
|
+
neozip -r tests/output/recursive.nzip ./project/
|
|
515
547
|
`);
|
|
516
548
|
}
|
|
517
549
|
/**
|
|
@@ -671,7 +703,7 @@ async function main() {
|
|
|
671
703
|
// Handle `neozip init` - interactive setup wizard
|
|
672
704
|
if (command === 'init') {
|
|
673
705
|
// Lazy-load ConfigSetup only when needed
|
|
674
|
-
const { ConfigSetup } = await import('./config/ConfigSetup.js');
|
|
706
|
+
const { ConfigSetup } = await import(resolveScriptPath('./config/ConfigSetup.js'));
|
|
675
707
|
const wizard = new ConfigSetup();
|
|
676
708
|
const success = await wizard.run();
|
|
677
709
|
process.exit(success ? exit_codes_1.ZIP_EXIT_CODES.SUCCESS : exit_codes_1.ZIP_EXIT_CODES.BAD_ARCHIVE_FORMAT);
|
|
@@ -679,10 +711,113 @@ async function main() {
|
|
|
679
711
|
// Handle `neozip config` - show interactive menu
|
|
680
712
|
if (command === 'config') {
|
|
681
713
|
// Lazy-load ConfigSetup only when needed
|
|
682
|
-
const { ConfigSetup } = await import('./config/ConfigSetup.js');
|
|
714
|
+
const { ConfigSetup } = await import(resolveScriptPath('./config/ConfigSetup.js'));
|
|
683
715
|
await ConfigSetup.showAndManage();
|
|
684
716
|
// showAndManage handles its own exit
|
|
685
717
|
}
|
|
718
|
+
// Handle `neozip verify-email` - configure email for Zipstamp timestamping
|
|
719
|
+
if (command === 'verify-email') {
|
|
720
|
+
const verifyArgs = args.slice(1);
|
|
721
|
+
let email;
|
|
722
|
+
let setDefaultOnly = false;
|
|
723
|
+
let debug = false;
|
|
724
|
+
for (let i = 0; i < verifyArgs.length; i++) {
|
|
725
|
+
const arg = verifyArgs[i];
|
|
726
|
+
if (arg === '--email' && verifyArgs[i + 1]) {
|
|
727
|
+
email = verifyArgs[++i];
|
|
728
|
+
}
|
|
729
|
+
else if (arg === '--set-default') {
|
|
730
|
+
setDefaultOnly = true;
|
|
731
|
+
}
|
|
732
|
+
else if (arg === '--debug') {
|
|
733
|
+
debug = true;
|
|
734
|
+
}
|
|
735
|
+
}
|
|
736
|
+
const { runVerifyEmail } = await import(resolveScriptPath('./commands/verifyEmail.js'));
|
|
737
|
+
const success = await runVerifyEmail({ email, setDefaultOnly, debug });
|
|
738
|
+
process.exit(success ? exit_codes_1.ZIP_EXIT_CODES.SUCCESS : exit_codes_1.ZIP_EXIT_CODES.BAD_ARCHIVE_FORMAT);
|
|
739
|
+
}
|
|
740
|
+
// Handle `neozip upgrade` - upgrade pending Zipstamp timestamp to confirmed
|
|
741
|
+
if (command === 'upgrade') {
|
|
742
|
+
const upgradeArgs = args.slice(1);
|
|
743
|
+
let inputPath = '';
|
|
744
|
+
let outputPath;
|
|
745
|
+
let wait = false;
|
|
746
|
+
let verbose = false;
|
|
747
|
+
let debug = false;
|
|
748
|
+
for (let i = 0; i < upgradeArgs.length; i++) {
|
|
749
|
+
const arg = upgradeArgs[i];
|
|
750
|
+
if (arg === '--wait') {
|
|
751
|
+
wait = true;
|
|
752
|
+
}
|
|
753
|
+
else if (arg === '-v' || arg === '--verbose') {
|
|
754
|
+
verbose = true;
|
|
755
|
+
}
|
|
756
|
+
else if (arg === '--debug') {
|
|
757
|
+
debug = true;
|
|
758
|
+
}
|
|
759
|
+
else if (!arg.startsWith('-')) {
|
|
760
|
+
if (!inputPath) {
|
|
761
|
+
inputPath = arg;
|
|
762
|
+
}
|
|
763
|
+
else if (!outputPath) {
|
|
764
|
+
outputPath = arg;
|
|
765
|
+
}
|
|
766
|
+
}
|
|
767
|
+
}
|
|
768
|
+
if (!inputPath) {
|
|
769
|
+
console.error('Error: neozip upgrade requires an input archive path');
|
|
770
|
+
console.error(' Usage: neozip upgrade <archive> [output] [--wait]');
|
|
771
|
+
(0, exit_codes_1.exitZip)(exit_codes_1.ZIP_EXIT_CODES.PARAMETER_ERROR);
|
|
772
|
+
}
|
|
773
|
+
const { upgradeZipForTimestamp } = await import(resolveScriptPath('./neozip/upgradeZip.js'));
|
|
774
|
+
await upgradeZipForTimestamp(inputPath, outputPath, { wait, verbose, debug });
|
|
775
|
+
(0, utils_1.log)('✓ Upgrade completed successfully', { verbose, quiet: false });
|
|
776
|
+
process.exit(exit_codes_1.ZIP_EXIT_CODES.SUCCESS);
|
|
777
|
+
}
|
|
778
|
+
// Handle `neozip mint` - mint TimestampProofNFT from confirmed timestamped ZIP
|
|
779
|
+
if (command === 'mint') {
|
|
780
|
+
const mintArgs = args.slice(1);
|
|
781
|
+
let inputPath = '';
|
|
782
|
+
let outputPath;
|
|
783
|
+
let walletKey;
|
|
784
|
+
let network;
|
|
785
|
+
let debug = false;
|
|
786
|
+
for (let i = 0; i < mintArgs.length; i++) {
|
|
787
|
+
const arg = mintArgs[i];
|
|
788
|
+
if (arg === '-w' || arg === '--wallet-key') {
|
|
789
|
+
walletKey = mintArgs[++i];
|
|
790
|
+
}
|
|
791
|
+
else if (arg === '-n' || arg === '--network') {
|
|
792
|
+
network = mintArgs[++i];
|
|
793
|
+
}
|
|
794
|
+
else if (arg === '--debug') {
|
|
795
|
+
debug = true;
|
|
796
|
+
}
|
|
797
|
+
else if (!arg.startsWith('-')) {
|
|
798
|
+
if (!inputPath) {
|
|
799
|
+
inputPath = arg;
|
|
800
|
+
}
|
|
801
|
+
else if (outputPath === undefined) {
|
|
802
|
+
outputPath = arg;
|
|
803
|
+
}
|
|
804
|
+
}
|
|
805
|
+
}
|
|
806
|
+
if (!inputPath) {
|
|
807
|
+
console.error('Error: neozip mint requires an input archive path');
|
|
808
|
+
console.error(' Usage: neozip mint <archive> [output] [-w <wallet-key>] [-n <network>]');
|
|
809
|
+
(0, exit_codes_1.exitZip)(exit_codes_1.ZIP_EXIT_CODES.PARAMETER_ERROR);
|
|
810
|
+
}
|
|
811
|
+
const { runMintTimestampProof } = await import(resolveScriptPath('./commands/mintTimestampProof.js'));
|
|
812
|
+
const success = await runMintTimestampProof({
|
|
813
|
+
inputPath,
|
|
814
|
+
outputPath,
|
|
815
|
+
walletKey,
|
|
816
|
+
network,
|
|
817
|
+
debug
|
|
818
|
+
});
|
|
819
|
+
process.exit(success ? exit_codes_1.ZIP_EXIT_CODES.SUCCESS : exit_codes_1.ZIP_EXIT_CODES.BAD_ARCHIVE_FORMAT);
|
|
820
|
+
}
|
|
686
821
|
}
|
|
687
822
|
let { archive, files, options } = parseArgs(args);
|
|
688
823
|
// If network not explicitly provided via CLI, use from ConfigStore (which reads from ENV or wallet.json)
|
package/env.example
CHANGED
|
@@ -55,6 +55,16 @@ NEOZIP_WALLET_PASSKEY=0x1234567890abcdef1234567890abcdef1234567890abcdef12345678
|
|
|
55
55
|
# - Arbitrum One: https://arb1.arbitrum.io/rpc
|
|
56
56
|
# - Ethereum Sepolia: https://rpc.sepolia.ethpandaops.io
|
|
57
57
|
|
|
58
|
+
# =============================================================================
|
|
59
|
+
# OPTIONAL: Zipstamp Timestamp Configuration
|
|
60
|
+
# =============================================================================
|
|
61
|
+
|
|
62
|
+
# Zipstamp server URL for Ethereum timestamping (default: https://zipstamp-dev.neozip.io)
|
|
63
|
+
# ZIPSTAMP_SERVER_URL=https://zipstamp-dev.neozip.io
|
|
64
|
+
|
|
65
|
+
# Email for Zipstamp server (some servers require verified email for stamping)
|
|
66
|
+
# NEOZIP_TIMESTAMP_EMAIL=your@email.com
|
|
67
|
+
|
|
58
68
|
# =============================================================================
|
|
59
69
|
# OPTIONAL: Debug Configuration
|
|
60
70
|
# =============================================================================
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "neozip-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.80.0",
|
|
4
|
+
"release_date": "2026-03-04",
|
|
4
5
|
"description": "A full-featured command-line ZIP application with NeoZipKit integration",
|
|
5
6
|
"main": "dist/src/index.js",
|
|
6
7
|
"bin": {
|
|
@@ -10,8 +11,6 @@
|
|
|
10
11
|
},
|
|
11
12
|
"files": [
|
|
12
13
|
"dist/src/**/*.js",
|
|
13
|
-
"dist/neozipkit-bundles/*.js",
|
|
14
|
-
"dist/neozipkit-wrappers/**/*.js",
|
|
15
14
|
"bin/",
|
|
16
15
|
"env.example",
|
|
17
16
|
"README.md",
|
|
@@ -25,94 +24,100 @@
|
|
|
25
24
|
"access": "public"
|
|
26
25
|
},
|
|
27
26
|
"scripts": {
|
|
28
|
-
"start": "npx ts-node src/neozip.ts output/calgary.nzip
|
|
29
|
-
"dev": "npx ts-node --inspect src/neozip.ts output/calgary.nzip
|
|
30
|
-
"build": "echo '🔨 Building TypeScript...' && tsc --pretty && echo '🧹 Removing neozipkit from dist (
|
|
27
|
+
"start": "npx ts-node src/neozip.ts tests/output/calgary.nzip tests/fixtures/calgary/*",
|
|
28
|
+
"dev": "npx ts-node --inspect src/neozip.ts tests/output/calgary.nzip tests/fixtures/calgary/*",
|
|
29
|
+
"build": "echo '🔨 Building TypeScript...' && tsc --pretty && echo '🧹 Removing neozipkit from dist (if present)...' && rm -rf dist/neozipkit && echo '✅ Build completed successfully!'",
|
|
31
30
|
"build:clean": "echo '🧹 Cleaning dist directory...' && rm -rf dist && echo '🔨 Building TypeScript...' && tsc --pretty && echo '✅ Clean build completed successfully!'",
|
|
32
|
-
"build:neozipkit": "echo '🔨 Building neozipkit...' && cd neozipkit && npm run build && cd .. && echo '✅ neozipkit build completed successfully!'",
|
|
33
|
-
"bundle:neozipkit": "echo '📦 Bundling neozipkit...' && node scripts/bundle-neozipkit.js",
|
|
34
|
-
"rebuild:neozipkit": "npm run build:neozipkit && npm run bundle:neozipkit && echo '✅ neozipkit rebuild and bundle completed successfully!'",
|
|
35
|
-
"build:all": "npm run rebuild:neozipkit && npm run build",
|
|
36
|
-
"dev:neozipkit": "echo '👀 Watching neozipkit for changes...' && cd ../neozipkit && npm run watch",
|
|
37
31
|
"type-check": "tsc --noEmit",
|
|
38
|
-
"clean": "rm -rf
|
|
32
|
+
"clean": "rm -rf dist/* tests/output/*",
|
|
39
33
|
"pack": "npm run build && echo '📦 Creating package tarball...' && npm pack && echo '✅ Package created successfully!'",
|
|
40
34
|
"pack:dry-run": "npm run build && echo '📦 Previewing package contents...' && npm pack --dry-run",
|
|
41
35
|
"pack:clean": "rm -f neozip-cli-*.tgz && echo '🧹 Cleaned up package tarballs'",
|
|
42
36
|
"package": "npm run build && npm run pack",
|
|
43
37
|
"prepublishOnly": "npm run build",
|
|
44
|
-
"neozip": "npx ts-node src/neozip.ts -b -T output/calgary.nzip
|
|
45
|
-
"neozip-sepolia": "npx ts-node src/neozip.ts -b -T --network sepolia-testnet output/calgary.nzip
|
|
46
|
-
"neozip-base-sepolia": "npx ts-node src/neozip.ts -b -T --network base-sepolia output/calgary.nzip
|
|
47
|
-
"neozip-base": "npx ts-node src/neozip.ts -b -T --network base-mainnet output/calgary.nzip
|
|
48
|
-
"neozip-arbitrum-sepolia": "npx ts-node src/neozip.ts -b -T --network arbitrum-sepolia output/calgary.nzip
|
|
49
|
-
"neozip-arbitrum": "npx ts-node src/neozip.ts -b -T --network arbitrum-one output/calgary.nzip
|
|
50
|
-
"neozip-deflate": "npx ts-node src/neozip.ts --deflate -T output/calgary.nzip
|
|
51
|
-
"neozip-inmem": "npx ts-node src/neozip.ts -b --in-memory -T output/calgary.nzip
|
|
52
|
-
"neozip-store": "npx ts-node src/neozip.ts --level 0 -T output/calgary-stored.nzip
|
|
53
|
-
"neozip-ots": "npx ts-node src/neozip.ts -ots -T output/calgary-ots.nzip
|
|
54
|
-
"neozip-
|
|
55
|
-
"neozip-
|
|
56
|
-
"neozip-
|
|
57
|
-
"neozip-sm": "npx ts-node src/neozip.ts -T output/
|
|
38
|
+
"neozip": "npx ts-node src/neozip.ts -b -T tests/output/calgary.nzip tests/fixtures/calgary/*",
|
|
39
|
+
"neozip-sepolia": "npx ts-node src/neozip.ts -b -T --network sepolia-testnet tests/output/calgary.nzip tests/fixtures/calgary/*",
|
|
40
|
+
"neozip-base-sepolia": "npx ts-node src/neozip.ts -b -T --network base-sepolia tests/output/calgary.nzip tests/fixtures/calgary/*",
|
|
41
|
+
"neozip-base": "npx ts-node src/neozip.ts -b -T --network base-mainnet tests/output/calgary.nzip tests/fixtures/calgary/*",
|
|
42
|
+
"neozip-arbitrum-sepolia": "npx ts-node src/neozip.ts -b -T --network arbitrum-sepolia tests/output/calgary.nzip tests/fixtures/calgary/*",
|
|
43
|
+
"neozip-arbitrum": "npx ts-node src/neozip.ts -b -T --network arbitrum-one tests/output/calgary.nzip tests/fixtures/calgary/*",
|
|
44
|
+
"neozip-deflate": "npx ts-node src/neozip.ts --deflate -T tests/output/calgary.nzip tests/fixtures/calgary/*",
|
|
45
|
+
"neozip-inmem": "npx ts-node src/neozip.ts -b --in-memory -T tests/output/calgary.nzip tests/fixtures/calgary/*",
|
|
46
|
+
"neozip-store": "npx ts-node src/neozip.ts --level 0 -T tests/output/calgary-stored.nzip tests/fixtures/calgary/*",
|
|
47
|
+
"neozip-ots": "npx ts-node src/neozip.ts -ots -T tests/output/calgary-ots.nzip tests/fixtures/calgary/*",
|
|
48
|
+
"neozip-stamp": "npx ts-node src/neozip.ts -ts -T tests/output/calgary-stamp.nzip tests/fixtures/calgary/*",
|
|
49
|
+
"neozip-mint": "node dist/src/neozip.js mint -o tests/output/calgary-stamp-upgrade.nzip tests/output/calgary-stamp-nft.nzip",
|
|
50
|
+
"neozip-encrypt": "npx ts-node src/neozip.ts --encrypt -P 'pass123' -T tests/output/calgary-encrypted.nzip tests/fixtures/calgary/*",
|
|
51
|
+
"neozip-encrypt-sm": "npx ts-node src/neozip.ts --encrypt -P 'pass123' -T tests/output/encrypted-sm.nzip tests/fixtures/test-sm/*",
|
|
52
|
+
"neozip-update": "node tests/scripts/test-update-option.js",
|
|
53
|
+
"neozip-sm": "npx ts-node src/neozip.ts -T tests/output/test-sm.nzip tests/fixtures/test-sm/*",
|
|
58
54
|
"neozip-init": "npx ts-node src/neozip.ts init",
|
|
59
55
|
"neozip-config": "npx ts-node src/neozip.ts config",
|
|
56
|
+
"verify-email": "node dist/src/neozip.js verify-email",
|
|
60
57
|
"neozip-help": "npx ts-node src/neozip.ts --help",
|
|
61
|
-
"neounzip": "npx ts-node src/neounzip.ts output/calgary.nzip -t",
|
|
62
|
-
"neounzip-inmem": "npx ts-node src/neounzip.ts --in-memory -l output/calgary.nzip -t",
|
|
63
|
-
"neounzip-bad": "npx ts-node src/neounzip.ts output/calgary-bad.nzip -t",
|
|
64
|
-
"neounzip-bad-inmem": "npx ts-node src/neounzip.ts --in-memory output/calgary-bad.nzip -t",
|
|
65
|
-
"neounzip-sm": "npx ts-node src/neounzip.ts -o output/test-sm.nzip",
|
|
66
|
-
"neounzip-skip-blockchain": "npx ts-node src/neounzip.ts --skip-blockchain output/calgary.nzip -t",
|
|
67
|
-
"neounzip-lg": "npx ts-node src/neounzip.ts output/large.nzip -t",
|
|
68
|
-
"neounzip-
|
|
69
|
-
"neounzip-
|
|
70
|
-
"neounzip-
|
|
71
|
-
"neounzip-
|
|
72
|
-
"neounzip-
|
|
73
|
-
"neounzip-decrypt
|
|
74
|
-
"neounzip-decrypt-
|
|
75
|
-
"neounzip-decrypt-
|
|
76
|
-
"neounzip-decrypt-
|
|
58
|
+
"neounzip": "npx ts-node src/neounzip.ts tests/output/calgary.nzip -t",
|
|
59
|
+
"neounzip-inmem": "npx ts-node src/neounzip.ts --in-memory -l tests/output/calgary.nzip -t",
|
|
60
|
+
"neounzip-bad": "npx ts-node src/neounzip.ts tests/output/calgary-bad.nzip -t",
|
|
61
|
+
"neounzip-bad-inmem": "npx ts-node src/neounzip.ts --in-memory tests/output/calgary-bad.nzip -t",
|
|
62
|
+
"neounzip-sm": "npx ts-node src/neounzip.ts -o tests/output/test-sm.nzip",
|
|
63
|
+
"neounzip-skip-blockchain": "npx ts-node src/neounzip.ts --skip-blockchain tests/output/calgary.nzip -t",
|
|
64
|
+
"neounzip-lg": "npx ts-node src/neounzip.ts tests/output/large.nzip -t",
|
|
65
|
+
"neounzip-stamp": "npx ts-node src/neounzip.ts tests/output/calgary-stamp.nzip -t",
|
|
66
|
+
"neounzip-stamp-upgrade": "npx ts-node src/neounzip.ts tests/output/calgary-stamp-upgrade.nzip -t",
|
|
67
|
+
"neounzip-ots": "npx ts-node src/neounzip.ts tests/output/calgary-ots.nzip -t",
|
|
68
|
+
"neounzip-ots-skip-blockchain": "npx ts-node src/neounzip.ts --skip-blockchain tests/output/calgary-ots.nzip -t",
|
|
69
|
+
"neounzip-streaming": "npx ts-node src/neounzip.ts --buffer-size 16384 --verbose tests/output/merged-test.nzip -t",
|
|
70
|
+
"neounzip-decrypt": "npx ts-node src/neounzip.ts --password 'pass123' tests/output/calgary-encrypted.nzip -t",
|
|
71
|
+
"neounzip-decrypt-inmem": "npx ts-node src/neounzip.ts --in-memory --password 'pass123' tests/output/calgary-encrypted.nzip -t",
|
|
72
|
+
"neounzip-decrypt-stored": "npx ts-node src/neounzip.ts --in-memory --password 'pass123' tests/output/calgary-encrypted-stored.nzip -t",
|
|
73
|
+
"neounzip-decrypt-sm": "npx ts-node src/neounzip.ts --password 'pass123' tests/output/encrypted-sm.nzip -t",
|
|
74
|
+
"neounzip-decrypt-sm-inmem": "npx ts-node src/neounzip.ts --in-memory --password 'pass123' tests/output/encrypted-sm.nzip -t",
|
|
75
|
+
"neounzip-decrypt-pkzip": "npx ts-node src/neounzip.ts --pkzip-decrypt --password 'legacy-test-123' tests/output/calgary-pkzip.nzip -t",
|
|
77
76
|
"neounzip-help": "npx ts-node src/neounzip.ts --help",
|
|
78
|
-
"neolist": "npx ts-node src/neolist.ts output/calgary.nzip",
|
|
79
|
-
"neolist-inmem": "npx ts-node src/neolist.ts --in-memory output/calgary.nzip",
|
|
80
|
-
"neolist-basic": "npx ts-node src/neolist.ts -b output/calgary.nzip",
|
|
81
|
-
"neolist-verbose": "npx ts-node src/neolist.ts -v output/calgary.nzip",
|
|
82
|
-
"neolist-demo": "npx ts-node src/neolist.ts output/calgary.nzip",
|
|
83
|
-
"neolist-short": "npx ts-node src/neolist.ts -s output/calgary.nzip",
|
|
84
|
-
"neolist-unix": "npx ts-node src/neolist.ts -u output/calgary.nzip",
|
|
85
|
-
"neolist-json": "npx ts-node src/neolist.ts -j output/calgary.nzip",
|
|
86
|
-
"neolist-zip64": "npx ts-node src/neolist.ts
|
|
77
|
+
"neolist": "npx ts-node src/neolist.ts tests/output/calgary.nzip",
|
|
78
|
+
"neolist-inmem": "npx ts-node src/neolist.ts --in-memory tests/output/calgary.nzip",
|
|
79
|
+
"neolist-basic": "npx ts-node src/neolist.ts -b tests/output/calgary.nzip",
|
|
80
|
+
"neolist-verbose": "npx ts-node src/neolist.ts -v tests/output/calgary.nzip",
|
|
81
|
+
"neolist-demo": "npx ts-node src/neolist.ts tests/output/calgary.nzip",
|
|
82
|
+
"neolist-short": "npx ts-node src/neolist.ts -s tests/output/calgary.nzip",
|
|
83
|
+
"neolist-unix": "npx ts-node src/neolist.ts -u tests/output/calgary.nzip",
|
|
84
|
+
"neolist-json": "npx ts-node src/neolist.ts -j tests/output/calgary.nzip",
|
|
85
|
+
"neolist-zip64": "npx ts-node src/neolist.ts tests/fixtures/calgary-zip64.zip",
|
|
86
|
+
"neolist-stamp": "npx ts-node src/neolist.ts tests/output/calgary-stamp.nzip",
|
|
87
|
+
"neolist-stamp-upgrade": "npx ts-node src/neolist.ts tests/output/calgary-stamp-upgrade.nzip",
|
|
87
88
|
"neolist-help": "npx ts-node src/neolist.ts --help",
|
|
88
|
-
"infozip-encrypt-zip": "zip -e -P 'pass123' -r
|
|
89
|
-
"infozip-encrypt-sm": "zip -e -P 'pass123' -0
|
|
90
|
-
"infozip-encrypt-stored": "zip -e -P 'pass123' -0
|
|
91
|
-
"infozip-decrypt-zip": "unzip -P 'pass123' -t
|
|
92
|
-
"infozip-decrypt-sm": "unzip -P 'pass123' -t
|
|
93
|
-
"test": "node
|
|
94
|
-
"test:verbose": "node
|
|
95
|
-
"test:help": "node
|
|
96
|
-
"test:comprehensive": "node
|
|
97
|
-
"test:neozip": "node
|
|
98
|
-
"test:neounzip": "node
|
|
99
|
-
"test:neolist": "node
|
|
89
|
+
"infozip-encrypt-zip": "zip -e -P 'pass123' -r tests/fixtures/infozip/calgary-encrypted.zip tests/fixtures/calgary/*",
|
|
90
|
+
"infozip-encrypt-sm": "zip -e -P 'pass123' -0 tests/fixtures/infozip/encrypted-sm.zip tests/fixtures/test-sm/*",
|
|
91
|
+
"infozip-encrypt-stored": "zip -e -P 'pass123' -0 tests/fixtures/infozip/calgary-encrypted-stored.zip tests/fixtures/calgary/bib",
|
|
92
|
+
"infozip-decrypt-zip": "unzip -P 'pass123' -t tests/fixtures/infozip/calgary-encrypted.zip",
|
|
93
|
+
"infozip-decrypt-sm": "unzip -P 'pass123' -t tests/fixtures/infozip/encrypted-sm.zip",
|
|
94
|
+
"test": "node tests/scripts/test-runner.js",
|
|
95
|
+
"test:verbose": "node tests/scripts/test-runner.js --verbose",
|
|
96
|
+
"test:help": "node tests/scripts/test-runner.js --help",
|
|
97
|
+
"test:comprehensive": "node tests/scripts/comprehensive/run-all-tests.js",
|
|
98
|
+
"test:neozip": "node tests/scripts/comprehensive/test-neozip-options.js",
|
|
99
|
+
"test:neounzip": "node tests/scripts/comprehensive/test-neounzip-options.js",
|
|
100
|
+
"test:neolist": "node tests/scripts/comprehensive/test-neolist-options.js",
|
|
100
101
|
"test:encryption": "npm run neozip-encrypt && npm run neounzip-decrypt && echo '✅ All encryption tests completed successfully!'",
|
|
101
|
-
"test:
|
|
102
|
-
"test:
|
|
103
|
-
"test:
|
|
104
|
-
"test:
|
|
105
|
-
"test:
|
|
106
|
-
"test:
|
|
107
|
-
"test:
|
|
108
|
-
"test:
|
|
109
|
-
"test:
|
|
110
|
-
"test:
|
|
111
|
-
"test:
|
|
112
|
-
"test:
|
|
113
|
-
"
|
|
114
|
-
"switch:neozipkit:
|
|
115
|
-
"switch:neozipkit:
|
|
102
|
+
"test:stamp": "echo '=== Testing Timestamp Support ===' && npm run neozip-ots && npm run neounzip-ots && echo '' && echo '--- Zipstamp (may fail if server unreachable) ---' && (npm run neozip-zipstamp && npm run neounzip-zipstamp && echo '✅ Zipstamp tests completed') || echo '⚠️ Zipstamp skipped (server may be unreachable)' && echo '' && echo '✅ Timestamp tests completed successfully!'",
|
|
103
|
+
"test:infozip-decrypt": "npx ts-node tests/scripts/test-infozip-decrypt.ts",
|
|
104
|
+
"test:comments": "node tests/scripts/comprehensive/test-comments-options.js",
|
|
105
|
+
"test:update": "node tests/scripts/test-update-option.js",
|
|
106
|
+
"test:symlinks": "echo '=== Testing Symbolic Links ===' && rm -rf tests/output/symlinks-temp && rm -rf tests/output/symlinks* 2>/dev/null; rm -rf tests/output/symlinks*.nzip 2>/dev/null; mkdir -p tests/output/symlinks-temp && echo 'This is the target file content' > tests/output/symlinks-temp/target.txt && ln -sf target.txt tests/output/symlinks-temp/symlink.txt && echo -e '\\n--- Original files ---' && ls -la tests/output/symlinks-temp/ && echo -e '\\n--- Creating ZIP with -y (store symlinks) ---' && npx ts-node src/neozip.ts -y tests/output/symlinks-test.nzip tests/output/symlinks-temp/* && echo -e '\\n--- Extracting with -y (restore symlinks) ---' && mkdir -p tests/output/symlinks && npx ts-node src/neounzip.ts -y tests/output/symlinks-test.nzip tests/output/symlinks/ && echo -e '\\n--- Extracted files ---' && ls -la tests/output/symlinks/tests/output/symlinks-temp/ 2>/dev/null || ls -la tests/output/symlinks/ && echo -e '\\n--- Testing symlink functionality ---' && (test -L tests/output/symlinks/tests/output/symlinks-temp/symlink.txt 2>/dev/null && cat tests/output/symlinks/tests/output/symlinks-temp/symlink.txt > /dev/null 2>&1 && echo '✅ PASS: Symlink test completed successfully') || (test -L tests/output/symlinks/symlink.txt 2>/dev/null && cat tests/output/symlinks/symlink.txt > /dev/null 2>&1 && echo '✅ PASS: Symlink test completed successfully') || echo '❌ FAIL: Symlink was not created or does not work' && echo -e '\\n--- Creating ZIP without -y (follow symlinks) ---' && npx ts-node src/neozip.ts tests/output/symlinks-follow.nzip tests/output/symlinks-temp/* && echo -e '\\n--- Extracting without -y (regular files) ---' && mkdir -p tests/output/symlinks-follow && npx ts-node src/neounzip.ts tests/output/symlinks-follow.nzip tests/output/symlinks-follow/ && echo -e '\\n--- Extracted files (no symlinks) ---' && ls -la tests/output/symlinks-follow/tests/output/symlinks-temp/ 2>/dev/null || ls -la tests/output/symlinks-follow/ && rm -rf tests/output/symlinks-temp && rm -rf tests/output/symlinks* 2>/dev/null; rm -rf tests/output/symlinks*.nzip 2>/dev/null",
|
|
107
|
+
"test:hardlinks": "echo '=== Testing Hard Links ===' && rm -rf tests/output/hardlinks-temp && rm -rf tests/output/hardlinks* 2>/dev/null; rm -rf tests/output/hardlinks*.nzip 2>/dev/null; mkdir -p tests/output/hardlinks-temp && echo 'This is the original file content for hard link testing' > tests/output/hardlinks-temp/original.txt && ln tests/output/hardlinks-temp/original.txt tests/output/hardlinks-temp/hardlink1.txt && ln tests/output/hardlinks-temp/original.txt tests/output/hardlinks-temp/hardlink2.txt && echo -e '\\n--- Original files (note same inode numbers) ---' && ls -li tests/output/hardlinks-temp/ && echo -e '\\n--- Creating ZIP with -H (detect hard links) ---' && npx ts-node src/neozip.ts -H tests/output/hardlinks-test.nzip tests/output/hardlinks-temp/* && echo -e '\\n--- Extracting with -H (restore hard links) ---' && mkdir -p tests/output/hardlinks && npx ts-node src/neounzip.ts -H tests/output/hardlinks-test.nzip tests/output/hardlinks/ && echo -e '\\n--- Extracted files (note same inode numbers) ---' && ls -li tests/output/hardlinks/tests/output/hardlinks-temp/ 2>/dev/null || ls -li tests/output/hardlinks/ && echo -e '\\n--- Testing hard link functionality ---' && HARD_LINK1=\"tests/output/hardlinks/tests/output/hardlinks-temp/hardlink1.txt\"; HARD_LINK2=\"tests/output/hardlinks/tests/output/hardlinks-temp/hardlink2.txt\"; ORIGINAL=\"tests/output/hardlinks/tests/output/hardlinks-temp/original.txt\"; test -f \"$HARD_LINK1\" || HARD_LINK1=\"tests/output/hardlinks/hardlink1.txt\"; test -f \"$HARD_LINK2\" || HARD_LINK2=\"tests/output/hardlinks/hardlink2.txt\"; test -f \"$ORIGINAL\" || ORIGINAL=\"tests/output/hardlinks/original.txt\"; (test -f \"$HARD_LINK1\" && test -f \"$ORIGINAL\" && echo 'Modified content' >> \"$HARD_LINK1\" 2>/dev/null && cat \"$ORIGINAL\" > /dev/null 2>&1 && echo '✅ PASS: Hard links test (with -H) completed') || echo '⚠️ WARN: Hard links extraction may have issues' && echo -e '\\n--- Creating ZIP without -H (store as copies) ---' && npx ts-node src/neozip.ts tests/output/hardlinks-copies.nzip tests/output/hardlinks-temp/* && echo -e '\\n--- Extracting without -H (separate files) ---' && mkdir -p tests/output/hardlinks-copies && npx ts-node src/neounzip.ts tests/output/hardlinks-copies.nzip tests/output/hardlinks-copies/ && echo -e '\\n--- Extracted files (different inodes) ---' && ls -li tests/output/hardlinks-copies/tests/output/hardlinks-temp/ 2>/dev/null || ls -li tests/output/hardlinks-copies/ && echo -e '\\n=== TEST SUMMARY ===' && (test -f tests/output/hardlinks-copies/tests/output/hardlinks-temp/original.txt 2>/dev/null || test -f tests/output/hardlinks-copies/original.txt 2>/dev/null) && echo '✅ PASS: Hard links test completed successfully' || echo '❌ FAIL: Some hard link tests failed' && rm -rf tests/output/hardlinks-temp && rm -rf tests/output/hardlinks* 2>/dev/null; rm -rf tests/output/hardlinks*.nzip 2>/dev/null",
|
|
108
|
+
"test:stdin": "echo '=== Testing Stdin Filenames ===' && mkdir -p tests/output/stdin-temp && echo 'Test file 1' > tests/output/stdin-temp/file1.txt && echo 'Test file 2' > tests/output/stdin-temp/file2.txt && echo 'Test file 3' > tests/output/stdin-temp/file3.txt && echo '' && echo '--- Testing stdin filenames with -@ ---' && printf 'tests/output/stdin-temp/file1.txt\\ntests/output/stdin-temp/file2.txt\\ntests/output/stdin-temp/file3.txt\\n' | npx ts-node src/neozip.ts -@ tests/output/test-stdin.zip && echo '' && echo '--- Verifying archive contents ---' && npx ts-node src/neolist.ts tests/output/test-stdin.zip && echo '' && echo '--- Testing with find command ---' && find tests/output/stdin-temp -name '*.txt' | npx ts-node src/neozip.ts -@ tests/output/test-stdin-find.zip && npx ts-node src/neolist.ts tests/output/test-stdin-find.zip && echo '' && echo '--- Cleanup ---' && rm -rf tests/output/stdin-temp tests/output/test-stdin.zip tests/output/test-stdin-find.zip && echo '✅ Stdin filenames test completed successfully!'",
|
|
109
|
+
"test:eocd": "npx ts-node tests/scripts/test-eocd-loading.ts",
|
|
110
|
+
"test:copy-entry": "npx ts-node tests/scripts/test-copy-entry-streaming.ts",
|
|
111
|
+
"test:tampered-zip": "npx ts-node tests/scripts/test-tampered-verification.ts",
|
|
112
|
+
"test:upgrade-zip": "echo '=== Testing ZIP Upgrade ===' && mkdir -p tests/output && echo '' && echo '--- Creating initial ZIP with Calgary corpus files (deflate compression) ---' && npx ts-node src/neozip.ts --deflate tests/output/test-upgrade.nzip tests/fixtures/calgary/bib tests/fixtures/calgary/book1 tests/fixtures/calgary/book2 && echo '' && echo '--- Upgrading ZIP for tokenization ---' && npx ts-node src/neozip.ts --upgrade tests/output/test-upgrade.nzip && echo '' && echo '--- Listing upgraded ZIP contents ---' && npx ts-node src/neolist.ts tests/output/test-upgrade-tokenized.nzip && echo '' && echo '--- Verifying upgraded ZIP with neounzip -t ---' && npx ts-node src/neounzip.ts -t tests/output/test-upgrade-tokenized.nzip && echo '' && echo '✅ ZIP upgrade test completed successfully!'",
|
|
113
|
+
"test:pre-verify": "echo '=== Testing Pre-Verify Option (-T) ===' && echo '' && echo '--- Testing pre-verify on tokenized ZIP ---' && npx ts-node src/neounzip.ts -T tests/output/test-upgrade-tokenized.nzip tests/output/preverify/ && echo '' && echo '--- Testing pre-verify on non-tokenized ZIP ---' && npx ts-node src/neozip.ts --deflate tests/output/test-preverify-nontoken.nzip tests/fixtures/calgary/bib tests/fixtures/calgary/book1 tests/fixtures/calgary/book2 && npx ts-node src/neounzip.ts -T tests/output/test-preverify-nontoken.nzip tests/output/preverify-nontoken/ && rm -rf tests/output/preverify* tests/output/test-preverify-nontoken.nzip 2>/dev/null && echo '' && echo '✅ Pre-verify test completed successfully!'",
|
|
114
|
+
"test:package": "node tests/scripts/test-package.js",
|
|
115
|
+
"switch:neozipkit:dev": "node scripts/switch-neozip-blockchain.js dev neozipkit",
|
|
116
|
+
"switch:neozipkit:prod": "node scripts/switch-neozip-blockchain.js prod neozipkit",
|
|
117
|
+
"switch:neozipkit:status": "node scripts/switch-neozip-blockchain.js status neozipkit",
|
|
118
|
+
"switch:neozip-blockchain:dev": "node scripts/switch-neozip-blockchain.js dev neozip-blockchain",
|
|
119
|
+
"switch:neozip-blockchain:prod": "node scripts/switch-neozip-blockchain.js prod neozip-blockchain",
|
|
120
|
+
"switch:neozip-blockchain:status": "node scripts/switch-neozip-blockchain.js status neozip-blockchain"
|
|
116
121
|
},
|
|
117
122
|
"keywords": [
|
|
118
123
|
"zip",
|
|
@@ -141,14 +146,15 @@
|
|
|
141
146
|
"minimatch": "^10.0.3",
|
|
142
147
|
"moment": "^2.29.4",
|
|
143
148
|
"moment-timezone": "^0.5.43",
|
|
149
|
+
"neozip-blockchain": "npm:neozip-blockchain@latest",
|
|
150
|
+
"neozipkit": "npm:neozipkit@latest",
|
|
144
151
|
"opentimestamps": "^0.4.9",
|
|
145
152
|
"ora": "^5.4.1",
|
|
146
153
|
"pako": "^2.1.0",
|
|
147
154
|
"ts-node": "^10.9.1",
|
|
148
155
|
"typescript": "^5.0.0",
|
|
149
156
|
"uuid": "^9.0.0",
|
|
150
|
-
"web3": "^4.0.0"
|
|
151
|
-
"neozipkit": "^0.3.1"
|
|
157
|
+
"web3": "^4.0.0"
|
|
152
158
|
},
|
|
153
159
|
"devDependencies": {
|
|
154
160
|
"@types/chalk": "^2.2.4",
|
|
@@ -170,5 +176,5 @@
|
|
|
170
176
|
"url": "https://github.com/NeoWareInc/neozip-support/issues"
|
|
171
177
|
},
|
|
172
178
|
"homepage": "https://github.com/NeoWareInc/neozip-cli#readme",
|
|
173
|
-
"packageManager": "yarn@
|
|
179
|
+
"packageManager": "yarn@4.12.0"
|
|
174
180
|
}
|