border-customs 0.8.1 → 0.8.2
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 +190 -10
- package/dist/assets/gitleaks-defaults-v8.30.1.toml +24 -0
- package/dist/assets/package-lock.json +69 -12
- package/dist/assets/residue-src/crates.ts +60 -31
- package/dist/assets/residue-src/npm.ts +35 -8
- package/dist/assets/residue-src/pypi.ts +31 -11
- package/dist/assets/residue-src/rubygems.ts +43 -20
- package/dist/index.js +2249 -3784
- package/package.json +9 -6
- package/plugin/border.ts +33 -9
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "border-customs",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.2",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "border-customs",
|
|
9
|
-
"version": "0.8.
|
|
9
|
+
"version": "0.8.2",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@opencode-ai/plugin": "^1.17.4",
|
|
13
12
|
"@secretlint/core": "13.0.5",
|
|
14
13
|
"@secretlint/secretlint-rule-no-dotenv": "13.0.5",
|
|
15
14
|
"@secretlint/secretlint-rule-no-homedir": "13.0.5",
|
|
16
|
-
"@secretlint/secretlint-rule-pattern": "13.0.5",
|
|
17
15
|
"@secretlint/secretlint-rule-preset-recommend": "13.0.5",
|
|
16
|
+
"@textlint/regexp-string-matcher": "2.0.2",
|
|
18
17
|
"publint": "0.3.24",
|
|
19
18
|
"yaml": "2.9.0",
|
|
20
19
|
"zod": "4.5.4"
|
|
@@ -23,6 +22,8 @@
|
|
|
23
22
|
"border": "dist/index.js"
|
|
24
23
|
},
|
|
25
24
|
"devDependencies": {
|
|
25
|
+
"@opencode-ai/plugin": "^1.19.4",
|
|
26
|
+
"@secretlint/secretlint-rule-pattern": "13.0.5",
|
|
26
27
|
"@types/node": "22.19.0",
|
|
27
28
|
"esbuild": "0.25.12",
|
|
28
29
|
"secretlint": "13.0.5",
|
|
@@ -30,13 +31,14 @@
|
|
|
30
31
|
"verdaccio": "6.10.2"
|
|
31
32
|
},
|
|
32
33
|
"engines": {
|
|
33
|
-
"node": ">=22.
|
|
34
|
+
"node": ">=22.22.2"
|
|
34
35
|
}
|
|
35
36
|
},
|
|
36
37
|
"node_modules/@ai-sdk/provider": {
|
|
37
38
|
"version": "3.0.8",
|
|
38
39
|
"resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-3.0.8.tgz",
|
|
39
40
|
"integrity": "sha512-oGMAgGoQdBXbZqNG0Ze56CHjDZ1IDYOwGYxYjO5KLSlz5HiNQ9udIXsPZ61VWaHGZ5XW/jyjmr6t2xz2jGVwbQ==",
|
|
41
|
+
"dev": true,
|
|
40
42
|
"license": "Apache-2.0",
|
|
41
43
|
"dependencies": {
|
|
42
44
|
"json-schema": "^0.4.0"
|
|
@@ -572,6 +574,7 @@
|
|
|
572
574
|
"cpu": [
|
|
573
575
|
"arm64"
|
|
574
576
|
],
|
|
577
|
+
"dev": true,
|
|
575
578
|
"license": "MIT",
|
|
576
579
|
"optional": true,
|
|
577
580
|
"os": [
|
|
@@ -585,6 +588,7 @@
|
|
|
585
588
|
"cpu": [
|
|
586
589
|
"x64"
|
|
587
590
|
],
|
|
591
|
+
"dev": true,
|
|
588
592
|
"license": "MIT",
|
|
589
593
|
"optional": true,
|
|
590
594
|
"os": [
|
|
@@ -598,6 +602,7 @@
|
|
|
598
602
|
"cpu": [
|
|
599
603
|
"arm"
|
|
600
604
|
],
|
|
605
|
+
"dev": true,
|
|
601
606
|
"license": "MIT",
|
|
602
607
|
"optional": true,
|
|
603
608
|
"os": [
|
|
@@ -611,6 +616,7 @@
|
|
|
611
616
|
"cpu": [
|
|
612
617
|
"arm64"
|
|
613
618
|
],
|
|
619
|
+
"dev": true,
|
|
614
620
|
"license": "MIT",
|
|
615
621
|
"optional": true,
|
|
616
622
|
"os": [
|
|
@@ -624,6 +630,7 @@
|
|
|
624
630
|
"cpu": [
|
|
625
631
|
"x64"
|
|
626
632
|
],
|
|
633
|
+
"dev": true,
|
|
627
634
|
"license": "MIT",
|
|
628
635
|
"optional": true,
|
|
629
636
|
"os": [
|
|
@@ -637,6 +644,7 @@
|
|
|
637
644
|
"cpu": [
|
|
638
645
|
"x64"
|
|
639
646
|
],
|
|
647
|
+
"dev": true,
|
|
640
648
|
"license": "MIT",
|
|
641
649
|
"optional": true,
|
|
642
650
|
"os": [
|
|
@@ -682,13 +690,14 @@
|
|
|
682
690
|
}
|
|
683
691
|
},
|
|
684
692
|
"node_modules/@opencode-ai/plugin": {
|
|
685
|
-
"version": "1.
|
|
686
|
-
"resolved": "https://registry.npmjs.org/@opencode-ai/plugin/-/plugin-1.
|
|
687
|
-
"integrity": "sha512-
|
|
693
|
+
"version": "1.19.4",
|
|
694
|
+
"resolved": "https://registry.npmjs.org/@opencode-ai/plugin/-/plugin-1.19.4.tgz",
|
|
695
|
+
"integrity": "sha512-VN71q/OmfggxIhiDbuzYDYmZcQMsNyVSw1o91e7LD6WUn/9jx4usI9ZpoPbC5p/Prpo/Umzpd+38+EuLoKRr+A==",
|
|
696
|
+
"dev": true,
|
|
688
697
|
"license": "MIT",
|
|
689
698
|
"dependencies": {
|
|
690
699
|
"@ai-sdk/provider": "3.0.8",
|
|
691
|
-
"@opencode-ai/sdk": "1.
|
|
700
|
+
"@opencode-ai/sdk": "1.19.4",
|
|
692
701
|
"effect": "4.0.0-beta.83",
|
|
693
702
|
"zod": "4.1.8"
|
|
694
703
|
},
|
|
@@ -713,15 +722,17 @@
|
|
|
713
722
|
"version": "4.1.8",
|
|
714
723
|
"resolved": "https://registry.npmjs.org/zod/-/zod-4.1.8.tgz",
|
|
715
724
|
"integrity": "sha512-5R1P+WwQqmmMIEACyzSvo4JXHY5WiAFHRMg+zBZKgKS+Q1viRa0C1hmUKtHltoIFKtIdki3pRxkmpP74jnNYHQ==",
|
|
725
|
+
"dev": true,
|
|
716
726
|
"license": "MIT",
|
|
717
727
|
"funding": {
|
|
718
728
|
"url": "https://github.com/sponsors/colinhacks"
|
|
719
729
|
}
|
|
720
730
|
},
|
|
721
731
|
"node_modules/@opencode-ai/sdk": {
|
|
722
|
-
"version": "1.
|
|
723
|
-
"resolved": "https://registry.npmjs.org/@opencode-ai/sdk/-/sdk-1.
|
|
724
|
-
"integrity": "sha512-
|
|
732
|
+
"version": "1.19.4",
|
|
733
|
+
"resolved": "https://registry.npmjs.org/@opencode-ai/sdk/-/sdk-1.19.4.tgz",
|
|
734
|
+
"integrity": "sha512-3Wuc4t8gEuWKHbX1Na9oDK6PgOveid70l4Ks5RCjRIo2RcP8FQN3NS6Mg3XWc2+WiUfpfrmvBWlh5u1zeQfDQw==",
|
|
735
|
+
"dev": true,
|
|
725
736
|
"license": "MIT",
|
|
726
737
|
"dependencies": {
|
|
727
738
|
"cross-spawn": "7.0.6"
|
|
@@ -773,6 +784,7 @@
|
|
|
773
784
|
"version": "13.0.5",
|
|
774
785
|
"resolved": "https://registry.npmjs.org/@secretlint/config-loader/-/config-loader-13.0.5.tgz",
|
|
775
786
|
"integrity": "sha512-3hZ6xweL5kuRPqm4YTn9TE8yVkZVjwchtTqaSntT4C35kyrKohVMMTi9lPp6bgMDD/lzXKlwwRUuSn/dcPZq3Q==",
|
|
787
|
+
"dev": true,
|
|
776
788
|
"license": "MIT",
|
|
777
789
|
"dependencies": {
|
|
778
790
|
"@secretlint/profiler": "13.0.5",
|
|
@@ -854,6 +866,7 @@
|
|
|
854
866
|
"version": "13.0.5",
|
|
855
867
|
"resolved": "https://registry.npmjs.org/@secretlint/resolver/-/resolver-13.0.5.tgz",
|
|
856
868
|
"integrity": "sha512-6V3PfSKJTafCMLbPMVZkP1d43Ot9y4hB8tmtA10NEybnV2gqgO8hMrWe2SsZUPBugjUPTise7efs9BFPsO9M6A==",
|
|
869
|
+
"dev": true,
|
|
857
870
|
"license": "MIT"
|
|
858
871
|
},
|
|
859
872
|
"node_modules/@secretlint/secretlint-rule-no-dotenv": {
|
|
@@ -886,6 +899,7 @@
|
|
|
886
899
|
"version": "13.0.5",
|
|
887
900
|
"resolved": "https://registry.npmjs.org/@secretlint/secretlint-rule-pattern/-/secretlint-rule-pattern-13.0.5.tgz",
|
|
888
901
|
"integrity": "sha512-O5FasZpXq8WZ6GPcqiPYDxyJTr1Bx+WjXC3lXd3mpbYb1abEuETDLNuu3AWOtp2Bh39TXQVvj40lX+NcWzus6Q==",
|
|
902
|
+
"dev": true,
|
|
889
903
|
"license": "MIT",
|
|
890
904
|
"dependencies": {
|
|
891
905
|
"@secretlint/tester": "13.0.5",
|
|
@@ -910,6 +924,7 @@
|
|
|
910
924
|
"version": "13.0.5",
|
|
911
925
|
"resolved": "https://registry.npmjs.org/@secretlint/source-creator/-/source-creator-13.0.5.tgz",
|
|
912
926
|
"integrity": "sha512-Y1edWpqit4Ai9fM4LU+v3s0JcCW6rSzOisDcxKBKfrg6ynFPX8n+JwEr5Bk+zGA0RnwlngJbmqjS+/CxDNl56A==",
|
|
927
|
+
"dev": true,
|
|
913
928
|
"license": "MIT",
|
|
914
929
|
"dependencies": {
|
|
915
930
|
"@secretlint/types": "13.0.5",
|
|
@@ -923,6 +938,7 @@
|
|
|
923
938
|
"version": "13.0.5",
|
|
924
939
|
"resolved": "https://registry.npmjs.org/@secretlint/tester/-/tester-13.0.5.tgz",
|
|
925
940
|
"integrity": "sha512-gc/SEhYgcd6ghaRxRxasb/FX+jb6TY9DpduXVqNQ+CPZYydMIkordnw0Ac3MTYr7J3ETFh/vCb6u3HGge6I3IA==",
|
|
941
|
+
"dev": true,
|
|
926
942
|
"license": "MIT",
|
|
927
943
|
"dependencies": {
|
|
928
944
|
"@secretlint/config-loader": "13.0.5",
|
|
@@ -997,6 +1013,7 @@
|
|
|
997
1013
|
"version": "1.1.0",
|
|
998
1014
|
"resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz",
|
|
999
1015
|
"integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==",
|
|
1016
|
+
"dev": true,
|
|
1000
1017
|
"license": "MIT"
|
|
1001
1018
|
},
|
|
1002
1019
|
"node_modules/@textlint/ast-node-types": {
|
|
@@ -1564,6 +1581,7 @@
|
|
|
1564
1581
|
"version": "8.20.0",
|
|
1565
1582
|
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz",
|
|
1566
1583
|
"integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==",
|
|
1584
|
+
"dev": true,
|
|
1567
1585
|
"license": "MIT",
|
|
1568
1586
|
"dependencies": {
|
|
1569
1587
|
"fast-deep-equal": "^3.1.3",
|
|
@@ -1635,6 +1653,7 @@
|
|
|
1635
1653
|
"version": "2.0.1",
|
|
1636
1654
|
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
|
|
1637
1655
|
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
|
|
1656
|
+
"dev": true,
|
|
1638
1657
|
"license": "Python-2.0"
|
|
1639
1658
|
},
|
|
1640
1659
|
"node_modules/array-flatten": {
|
|
@@ -1877,6 +1896,7 @@
|
|
|
1877
1896
|
"version": "6.11.0",
|
|
1878
1897
|
"resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-6.11.0.tgz",
|
|
1879
1898
|
"integrity": "sha512-sXnYK/Ij80TO3lcqZVV2YgfKN5QjUWIRk/XSm2J/4bd/lPko3lvk0O4ZppH6m+6hB2/GTu+ptNwVFe1xh+QLQw==",
|
|
1899
|
+
"dev": true,
|
|
1880
1900
|
"license": "Artistic-2.0",
|
|
1881
1901
|
"dependencies": {
|
|
1882
1902
|
"editions": "^6.21.0"
|
|
@@ -1970,6 +1990,7 @@
|
|
|
1970
1990
|
"version": "3.0.3",
|
|
1971
1991
|
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
|
|
1972
1992
|
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
|
|
1993
|
+
"dev": true,
|
|
1973
1994
|
"license": "MIT",
|
|
1974
1995
|
"dependencies": {
|
|
1975
1996
|
"fill-range": "^7.1.1"
|
|
@@ -2317,6 +2338,7 @@
|
|
|
2317
2338
|
"version": "7.0.6",
|
|
2318
2339
|
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
|
|
2319
2340
|
"integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
|
|
2341
|
+
"dev": true,
|
|
2320
2342
|
"license": "MIT",
|
|
2321
2343
|
"dependencies": {
|
|
2322
2344
|
"path-key": "^3.1.0",
|
|
@@ -2415,6 +2437,7 @@
|
|
|
2415
2437
|
"version": "2.1.2",
|
|
2416
2438
|
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
|
|
2417
2439
|
"integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
|
|
2440
|
+
"dev": true,
|
|
2418
2441
|
"license": "Apache-2.0",
|
|
2419
2442
|
"optional": true,
|
|
2420
2443
|
"engines": {
|
|
@@ -2487,6 +2510,7 @@
|
|
|
2487
2510
|
"version": "6.22.0",
|
|
2488
2511
|
"resolved": "https://registry.npmjs.org/editions/-/editions-6.22.0.tgz",
|
|
2489
2512
|
"integrity": "sha512-UgGlf8IW75je7HZjNDpJdCv4cGJWIi6yumFdZ0R7A8/CIhQiWUjyGLCxdHpd8bmyD1gnkfUNK0oeOXqUS2cpfQ==",
|
|
2513
|
+
"dev": true,
|
|
2490
2514
|
"license": "Artistic-2.0",
|
|
2491
2515
|
"dependencies": {
|
|
2492
2516
|
"version-range": "^4.15.0"
|
|
@@ -2510,6 +2534,7 @@
|
|
|
2510
2534
|
"version": "4.0.0-beta.83",
|
|
2511
2535
|
"resolved": "https://registry.npmjs.org/effect/-/effect-4.0.0-beta.83.tgz",
|
|
2512
2536
|
"integrity": "sha512-0wsak8RtgGAr9UWSbVDgJHZcUqMSvicHcvaZv1MbMM7MCGgW4Rn/137J1MHQbwYPcwYGxT/IqehFd+UbYuj78w==",
|
|
2537
|
+
"dev": true,
|
|
2513
2538
|
"license": "MIT",
|
|
2514
2539
|
"dependencies": {
|
|
2515
2540
|
"@standard-schema/spec": "^1.1.0",
|
|
@@ -2836,6 +2861,7 @@
|
|
|
2836
2861
|
"version": "4.10.0",
|
|
2837
2862
|
"resolved": "https://registry.npmjs.org/fast-check/-/fast-check-4.10.0.tgz",
|
|
2838
2863
|
"integrity": "sha512-hhqQL+IJllZi3aM4TKvmCj3bywLEcycNTTLZeLhA9ttMxBrCqM07q7Di4kl+j9EWSTXvJH1+EpIgsDbF/+8H5Q==",
|
|
2864
|
+
"dev": true,
|
|
2839
2865
|
"funding": [
|
|
2840
2866
|
{
|
|
2841
2867
|
"type": "individual",
|
|
@@ -2858,6 +2884,7 @@
|
|
|
2858
2884
|
"version": "3.1.3",
|
|
2859
2885
|
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
|
|
2860
2886
|
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
|
|
2887
|
+
"dev": true,
|
|
2861
2888
|
"license": "MIT"
|
|
2862
2889
|
},
|
|
2863
2890
|
"node_modules/fast-fifo": {
|
|
@@ -2888,6 +2915,7 @@
|
|
|
2888
2915
|
"version": "3.1.7",
|
|
2889
2916
|
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.7.tgz",
|
|
2890
2917
|
"integrity": "sha512-dOvZVzjdZdz7phd9v6jCbwxrBW3fK6n8Rc0CtdmM4bumzMnxywBYhuph6J819RRw/ku+rLbelwfMunktuzVVHg==",
|
|
2918
|
+
"dev": true,
|
|
2891
2919
|
"funding": [
|
|
2892
2920
|
{
|
|
2893
2921
|
"type": "github",
|
|
@@ -2914,6 +2942,7 @@
|
|
|
2914
2942
|
"version": "7.1.1",
|
|
2915
2943
|
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
|
|
2916
2944
|
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
|
|
2945
|
+
"dev": true,
|
|
2917
2946
|
"license": "MIT",
|
|
2918
2947
|
"dependencies": {
|
|
2919
2948
|
"to-regex-range": "^5.0.1"
|
|
@@ -2962,6 +2991,7 @@
|
|
|
2962
2991
|
"version": "0.1.6",
|
|
2963
2992
|
"resolved": "https://registry.npmjs.org/find-my-way-ts/-/find-my-way-ts-0.1.6.tgz",
|
|
2964
2993
|
"integrity": "sha512-a85L9ZoXtNAey3Y6Z+eBWW658kO/MwR7zIafkIUPUMf3isZG0NCs2pjW2wtjxAKuJPxMAsHUIP4ZPGv0o5gyTA==",
|
|
2994
|
+
"dev": true,
|
|
2965
2995
|
"license": "MIT"
|
|
2966
2996
|
},
|
|
2967
2997
|
"node_modules/forever-agent": {
|
|
@@ -3446,6 +3476,7 @@
|
|
|
3446
3476
|
"version": "7.0.0",
|
|
3447
3477
|
"resolved": "https://registry.npmjs.org/ini/-/ini-7.0.0.tgz",
|
|
3448
3478
|
"integrity": "sha512-ifK0CgjALofS5bkrcTy4RaQ9Vx2Knf/eLeIO+NaswQEpH1UblrtTSCIvN71qQDMq0PeQ/SSPojvEJp9vvvfr+w==",
|
|
3479
|
+
"dev": true,
|
|
3449
3480
|
"license": "ISC",
|
|
3450
3481
|
"engines": {
|
|
3451
3482
|
"node": "^22.22.2 || ^24.15.0 || >=26.0.0"
|
|
@@ -3515,6 +3546,7 @@
|
|
|
3515
3546
|
"version": "7.0.0",
|
|
3516
3547
|
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
|
|
3517
3548
|
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
|
|
3549
|
+
"dev": true,
|
|
3518
3550
|
"license": "MIT",
|
|
3519
3551
|
"engines": {
|
|
3520
3552
|
"node": ">=0.12.0"
|
|
@@ -3558,6 +3590,7 @@
|
|
|
3558
3590
|
"version": "2.0.0",
|
|
3559
3591
|
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
|
|
3560
3592
|
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
|
|
3593
|
+
"dev": true,
|
|
3561
3594
|
"license": "ISC"
|
|
3562
3595
|
},
|
|
3563
3596
|
"node_modules/isstream": {
|
|
@@ -3571,6 +3604,7 @@
|
|
|
3571
3604
|
"version": "9.5.0",
|
|
3572
3605
|
"resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-9.5.0.tgz",
|
|
3573
3606
|
"integrity": "sha512-5mbUj3SiZXCuRf9fT3ibzbSSEWiy63gFfksmGfdOzujPjW3k+z8WvIBxcJHBoQNlaZaiyB25deviif2+osLmLw==",
|
|
3607
|
+
"dev": true,
|
|
3574
3608
|
"license": "Artistic-2.0",
|
|
3575
3609
|
"dependencies": {
|
|
3576
3610
|
"binaryextensions": "^6.11.0",
|
|
@@ -3625,12 +3659,14 @@
|
|
|
3625
3659
|
"version": "0.4.0",
|
|
3626
3660
|
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
|
|
3627
3661
|
"integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
|
|
3662
|
+
"dev": true,
|
|
3628
3663
|
"license": "(AFL-2.1 OR BSD-3-Clause)"
|
|
3629
3664
|
},
|
|
3630
3665
|
"node_modules/json-schema-traverse": {
|
|
3631
3666
|
"version": "1.0.0",
|
|
3632
3667
|
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
|
|
3633
3668
|
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
|
|
3669
|
+
"dev": true,
|
|
3634
3670
|
"license": "MIT"
|
|
3635
3671
|
},
|
|
3636
3672
|
"node_modules/json-stringify-safe": {
|
|
@@ -3644,6 +3680,7 @@
|
|
|
3644
3680
|
"version": "2.2.3",
|
|
3645
3681
|
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
|
|
3646
3682
|
"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
|
|
3683
|
+
"dev": true,
|
|
3647
3684
|
"license": "MIT",
|
|
3648
3685
|
"bin": {
|
|
3649
3686
|
"json5": "lib/cli.js"
|
|
@@ -3755,6 +3792,7 @@
|
|
|
3755
3792
|
"version": "1.30.0",
|
|
3756
3793
|
"resolved": "https://registry.npmjs.org/kubernetes-types/-/kubernetes-types-1.30.0.tgz",
|
|
3757
3794
|
"integrity": "sha512-Dew1okvhM/SQcIa2rcgujNndZwU8VnSapDgdxlYoB84ZlpAD43U6KLAFqYo17ykSFGHNPrg0qry0bP+GJd9v7Q==",
|
|
3795
|
+
"dev": true,
|
|
3758
3796
|
"license": "Apache-2.0"
|
|
3759
3797
|
},
|
|
3760
3798
|
"node_modules/lockfile": {
|
|
@@ -3942,6 +3980,7 @@
|
|
|
3942
3980
|
"version": "4.0.8",
|
|
3943
3981
|
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
|
|
3944
3982
|
"integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
|
|
3983
|
+
"dev": true,
|
|
3945
3984
|
"license": "MIT",
|
|
3946
3985
|
"dependencies": {
|
|
3947
3986
|
"braces": "^3.0.3",
|
|
@@ -4068,6 +4107,7 @@
|
|
|
4068
4107
|
"version": "2.1.0",
|
|
4069
4108
|
"resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-2.1.0.tgz",
|
|
4070
4109
|
"integrity": "sha512-p/pBCVO63CsvvpkomUnNNag6+n38rULuDA6HHe70o2gtC8ODI52foF/4ko2qQcp6OiErJXTmrZeXmsGGHsIQNQ==",
|
|
4110
|
+
"dev": true,
|
|
4071
4111
|
"license": "MIT",
|
|
4072
4112
|
"optionalDependencies": {
|
|
4073
4113
|
"msgpackr-extract": "^3.0.4"
|
|
@@ -4077,6 +4117,7 @@
|
|
|
4077
4117
|
"version": "3.0.4",
|
|
4078
4118
|
"resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.4.tgz",
|
|
4079
4119
|
"integrity": "sha512-4kmO/MdyUIkLIvTPr8VHLil4AtoKIoniWPIEk5+CDy0xnWC84azhSFmuJ7PxZdsYtiP5kEeQsORAVIeMgxT+Hw==",
|
|
4120
|
+
"dev": true,
|
|
4080
4121
|
"hasInstallScript": true,
|
|
4081
4122
|
"license": "MIT",
|
|
4082
4123
|
"optional": true,
|
|
@@ -4099,6 +4140,7 @@
|
|
|
4099
4140
|
"version": "0.2.8",
|
|
4100
4141
|
"resolved": "https://registry.npmjs.org/multipasta/-/multipasta-0.2.8.tgz",
|
|
4101
4142
|
"integrity": "sha512-ZPWuMKyv0cSO29f7hozp+k6+crZbQijV8ipMvxNxRf2SwtYGTX1ZX89Kd20VV4H9Znonx+EQn+iy1wGQsJ+b+Q==",
|
|
4143
|
+
"dev": true,
|
|
4102
4144
|
"license": "MIT"
|
|
4103
4145
|
},
|
|
4104
4146
|
"node_modules/negotiator": {
|
|
@@ -4143,6 +4185,7 @@
|
|
|
4143
4185
|
"version": "5.2.2",
|
|
4144
4186
|
"resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz",
|
|
4145
4187
|
"integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==",
|
|
4188
|
+
"dev": true,
|
|
4146
4189
|
"license": "MIT",
|
|
4147
4190
|
"optional": true,
|
|
4148
4191
|
"dependencies": {
|
|
@@ -4319,6 +4362,7 @@
|
|
|
4319
4362
|
"version": "3.1.1",
|
|
4320
4363
|
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
|
|
4321
4364
|
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
|
|
4365
|
+
"dev": true,
|
|
4322
4366
|
"license": "MIT",
|
|
4323
4367
|
"engines": {
|
|
4324
4368
|
"node": ">=8"
|
|
@@ -4370,6 +4414,7 @@
|
|
|
4370
4414
|
"version": "2.3.2",
|
|
4371
4415
|
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
|
|
4372
4416
|
"integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
|
|
4417
|
+
"dev": true,
|
|
4373
4418
|
"license": "MIT",
|
|
4374
4419
|
"engines": {
|
|
4375
4420
|
"node": ">=8.6"
|
|
@@ -4589,6 +4634,7 @@
|
|
|
4589
4634
|
"version": "8.4.2",
|
|
4590
4635
|
"resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-8.4.2.tgz",
|
|
4591
4636
|
"integrity": "sha512-vvuOGgcuPJAirlHvuQw1TrOiw7ptaIXXmIbNuiNOY6lNGJJH49PQ1Kj4nd783nPdQhQdicgOjVI2yI/9BD6/Ng==",
|
|
4637
|
+
"dev": true,
|
|
4592
4638
|
"funding": [
|
|
4593
4639
|
{
|
|
4594
4640
|
"type": "individual",
|
|
@@ -4689,6 +4735,7 @@
|
|
|
4689
4735
|
"version": "4.1.4",
|
|
4690
4736
|
"resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.4.tgz",
|
|
4691
4737
|
"integrity": "sha512-3GiwEzklkbXTDp52UR5nT8iXgYAx1V9ZG/kDZT7p60u2GCv2XTwQq4NzinMoMpNtXhmt3WkhYXcj6HH8HdwCEQ==",
|
|
4738
|
+
"dev": true,
|
|
4692
4739
|
"license": "MIT",
|
|
4693
4740
|
"dependencies": {
|
|
4694
4741
|
"debug": "^4.4.3",
|
|
@@ -4701,6 +4748,7 @@
|
|
|
4701
4748
|
"version": "4.3.2",
|
|
4702
4749
|
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz",
|
|
4703
4750
|
"integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==",
|
|
4751
|
+
"dev": true,
|
|
4704
4752
|
"funding": [
|
|
4705
4753
|
{
|
|
4706
4754
|
"type": "github",
|
|
@@ -4776,6 +4824,7 @@
|
|
|
4776
4824
|
"version": "2.0.2",
|
|
4777
4825
|
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
|
|
4778
4826
|
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
|
|
4827
|
+
"dev": true,
|
|
4779
4828
|
"license": "MIT",
|
|
4780
4829
|
"engines": {
|
|
4781
4830
|
"node": ">=0.10.0"
|
|
@@ -5030,6 +5079,7 @@
|
|
|
5030
5079
|
"version": "2.0.0",
|
|
5031
5080
|
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
|
|
5032
5081
|
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
|
|
5082
|
+
"dev": true,
|
|
5033
5083
|
"license": "MIT",
|
|
5034
5084
|
"dependencies": {
|
|
5035
5085
|
"shebang-regex": "^3.0.0"
|
|
@@ -5042,6 +5092,7 @@
|
|
|
5042
5092
|
"version": "3.0.0",
|
|
5043
5093
|
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
|
|
5044
5094
|
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
|
|
5095
|
+
"dev": true,
|
|
5045
5096
|
"license": "MIT",
|
|
5046
5097
|
"engines": {
|
|
5047
5098
|
"node": ">=8"
|
|
@@ -5513,6 +5564,7 @@
|
|
|
5513
5564
|
"version": "6.11.0",
|
|
5514
5565
|
"resolved": "https://registry.npmjs.org/textextensions/-/textextensions-6.11.0.tgz",
|
|
5515
5566
|
"integrity": "sha512-tXJwSr9355kFJI3lbCkPpUH5cP8/M0GGy2xLO34aZCjMXBaK3SoPnZwr/oWmo1FdCnELcs4npdCIOFtq9W3ruQ==",
|
|
5567
|
+
"dev": true,
|
|
5516
5568
|
"license": "Artistic-2.0",
|
|
5517
5569
|
"dependencies": {
|
|
5518
5570
|
"editions": "^6.21.0"
|
|
@@ -5585,6 +5637,7 @@
|
|
|
5585
5637
|
"version": "5.0.1",
|
|
5586
5638
|
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
|
|
5587
5639
|
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
|
|
5640
|
+
"dev": true,
|
|
5588
5641
|
"license": "MIT",
|
|
5589
5642
|
"dependencies": {
|
|
5590
5643
|
"is-number": "^7.0.0"
|
|
@@ -5607,6 +5660,7 @@
|
|
|
5607
5660
|
"version": "4.3.0",
|
|
5608
5661
|
"resolved": "https://registry.npmjs.org/toml/-/toml-4.3.0.tgz",
|
|
5609
5662
|
"integrity": "sha512-lVb8X9BsPVuH0M4BKeS91tXAmJvCjQ5UIyAbQFaxkKGyUFK2RPkhwaFSQH8vbpl1d23eu/IBH+dwVMHWaq9A5A==",
|
|
5663
|
+
"dev": true,
|
|
5610
5664
|
"license": "MIT",
|
|
5611
5665
|
"engines": {
|
|
5612
5666
|
"node": ">=20"
|
|
@@ -5808,6 +5862,7 @@
|
|
|
5808
5862
|
"version": "14.0.2",
|
|
5809
5863
|
"resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.2.tgz",
|
|
5810
5864
|
"integrity": "sha512-xZe/16rV4aa+HGSOCiY2YeLT1OybRLrrkL/Rqaq7p7GMVXjFh+6wN4oMYgjFmnSnhY8t6Xpdl2l9qmnHYuMHwQ==",
|
|
5865
|
+
"dev": true,
|
|
5811
5866
|
"funding": [
|
|
5812
5867
|
"https://github.com/sponsors/broofa",
|
|
5813
5868
|
"https://github.com/sponsors/ctavan"
|
|
@@ -5967,6 +6022,7 @@
|
|
|
5967
6022
|
"version": "4.15.0",
|
|
5968
6023
|
"resolved": "https://registry.npmjs.org/version-range/-/version-range-4.15.0.tgz",
|
|
5969
6024
|
"integrity": "sha512-Ck0EJbAGxHwprkzFO966t4/5QkRuzh+/I1RxhLgUKKwEn+Cd8NwM60mE3AqBZg5gYODoXW0EFsQvbZjRlvdqbg==",
|
|
6025
|
+
"dev": true,
|
|
5970
6026
|
"license": "Artistic-2.0",
|
|
5971
6027
|
"engines": {
|
|
5972
6028
|
"node": ">=4"
|
|
@@ -5997,6 +6053,7 @@
|
|
|
5997
6053
|
"version": "2.0.2",
|
|
5998
6054
|
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
|
5999
6055
|
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
|
|
6056
|
+
"dev": true,
|
|
6000
6057
|
"license": "ISC",
|
|
6001
6058
|
"dependencies": {
|
|
6002
6059
|
"isexe": "^2.0.0"
|
|
@@ -28,6 +28,8 @@ import { cratesCoherenceFindings } from "../rules/releaseCoherence.ts";
|
|
|
28
28
|
import { scanTree } from "../engines/gitleaks.ts";
|
|
29
29
|
import { scanPaths, type SecretlintMode } from "../engines/secretlint.ts";
|
|
30
30
|
import { EngineMissingError, EngineRunError, type EngineOptions } from "../engines/support.ts";
|
|
31
|
+
import { sandboxRun } from "./sandbox.ts";
|
|
32
|
+
import { realDockerExec, type DockerExec } from "../roundtrip/docker.ts";
|
|
31
33
|
import type { TextSanitizer } from "../redact.ts";
|
|
32
34
|
|
|
33
35
|
/** Native-finding target label shared across the artifact-stage scans. */
|
|
@@ -50,6 +52,8 @@ export type CrateStageOptions = {
|
|
|
50
52
|
readonly secretlintMode?: SecretlintMode;
|
|
51
53
|
/** Exact cargo binary seam (tests / pinned toolchains); default "cargo" on PATH. */
|
|
52
54
|
readonly cargoBinPath?: string;
|
|
55
|
+
/** W4 sandbox seam (only consulted when targets.crates.sandboxImage is set). */
|
|
56
|
+
readonly sandboxExec?: DockerExec;
|
|
53
57
|
/** shared engine/extract timeout. */
|
|
54
58
|
readonly timeoutMs?: number;
|
|
55
59
|
readonly cargoTimeoutMs?: number;
|
|
@@ -58,6 +62,8 @@ export type CrateStageOptions = {
|
|
|
58
62
|
export type CrateStageResult = {
|
|
59
63
|
readonly findings: readonly Finding[];
|
|
60
64
|
readonly artifact: CrateArtifactRecord | null;
|
|
65
|
+
/** Observed in-image toolchain versions (sandbox runs only) — record binding. */
|
|
66
|
+
readonly toolchain?: string;
|
|
61
67
|
};
|
|
62
68
|
|
|
63
69
|
function scopeFindingPath(f: Finding, extractDir: string): Finding {
|
|
@@ -123,15 +129,18 @@ export async function runCargoArtifactStage(o: CrateStageOptions): Promise<Crate
|
|
|
123
129
|
const identity = manifestIdentity(repoDir, o.cfg);
|
|
124
130
|
const crateName = `${identity.name}-${identity.version}.crate`;
|
|
125
131
|
|
|
126
|
-
const
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
132
|
+
const sandboxImage = o.cfg.targets.crates.sandboxImage;
|
|
133
|
+
if (sandboxImage === undefined) {
|
|
134
|
+
const versionCheck = spawnSync(bin, ["--version"], {
|
|
135
|
+
encoding: "utf8",
|
|
136
|
+
stdio: "ignore",
|
|
137
|
+
...(o.env === undefined ? {} : { env: { ...o.env } }),
|
|
138
|
+
});
|
|
139
|
+
if (versionCheck.error !== undefined || versionCheck.status !== 0) {
|
|
140
|
+
throw new EngineMissingError(
|
|
141
|
+
`cargo is not available (\`\${bin} --version\` failed) — install Rust via rustup (https://rustup.rs) or pass cargoBinPath before running border check (border exit 2)`,
|
|
142
|
+
);
|
|
143
|
+
}
|
|
135
144
|
}
|
|
136
145
|
|
|
137
146
|
ensureStateDir(repoDir);
|
|
@@ -142,31 +151,50 @@ export async function runCargoArtifactStage(o: CrateStageOptions): Promise<Crate
|
|
|
142
151
|
rmSync(targetDir, { recursive: true, force: true }); // stale build output from an interrupted run
|
|
143
152
|
mkdirSync(targetDir, { recursive: true });
|
|
144
153
|
|
|
154
|
+
const dist = join(distDir, crateName);
|
|
145
155
|
try {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
);
|
|
156
|
+
let stageToolchain: string | undefined;
|
|
157
|
+
if (sandboxImage !== undefined) {
|
|
158
|
+
const cacheDir = join(repoDir, BORDER_STATE_DIR, "cache");
|
|
159
|
+
mkdirSync(cacheDir, { recursive: true });
|
|
160
|
+
const run = sandboxRun({
|
|
161
|
+
spec: { image: sandboxImage, docker: o.sandboxExec ?? realDockerExec() },
|
|
162
|
+
repoDir,
|
|
163
|
+
outDir: distDir,
|
|
164
|
+
laneProbes: ["cargo", "rustc"],
|
|
165
|
+
cargoCacheHostDir: cacheDir,
|
|
166
|
+
laneScript:
|
|
167
|
+
"cargo package --allow-dirty --no-verify\n"
|
|
168
|
+
+ "find target/package -maxdepth 1 -name '*.crate' -exec cp {} /audit/out/ ;",
|
|
169
|
+
});
|
|
170
|
+
stageToolchain = run.toolchain;
|
|
171
|
+
} else {
|
|
172
|
+
const result = spawnSync(bin, ["package", "--allow-dirty", "--no-verify"], {
|
|
173
|
+
cwd: repoDir,
|
|
174
|
+
encoding: "utf8",
|
|
175
|
+
timeout: o.cargoTimeoutMs ?? 120_000,
|
|
176
|
+
env: {
|
|
177
|
+
...(o.env === undefined ? process.env : { ...o.env }),
|
|
178
|
+
CARGO_TARGET_DIR: targetDir,
|
|
179
|
+
},
|
|
180
|
+
});
|
|
181
|
+
if (result.error !== undefined || result.status !== 0) {
|
|
182
|
+
throw new EngineRunError(
|
|
183
|
+
`cargo package failed (exit ${String(result.status)}) — nothing to gate: ${(result.stderr ?? "").trim().slice(0, 400)}`,
|
|
184
|
+
result.status,
|
|
185
|
+
);
|
|
186
|
+
}
|
|
187
|
+
// cargo writes the crate to <target-dir>/package/<name>-<version>.crate
|
|
188
|
+
const packedDir = join(targetDir, "package");
|
|
189
|
+
const packed = join(packedDir, crateName);
|
|
190
|
+
if (!existsSync(packed)) {
|
|
191
|
+
throw new EngineRunError(`cargo package produced no ${crateName} in ${relative(repoDir, packedDir)} — failing closed`, null);
|
|
192
|
+
}
|
|
193
|
+
renameSync(packed, dist);
|
|
160
194
|
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
const packedDir = join(targetDir, "package");
|
|
164
|
-
const packed = join(packedDir, crateName);
|
|
165
|
-
if (!existsSync(packed)) {
|
|
166
|
-
throw new EngineRunError(`cargo package produced no ${crateName} in ${relative(repoDir, packedDir)} — failing closed`, null);
|
|
195
|
+
if (!existsSync(dist)) {
|
|
196
|
+
throw new EngineRunError(`cargo package produced no ${crateName} in ${relative(repoDir, distDir)} — failing closed`, null);
|
|
167
197
|
}
|
|
168
|
-
const dist = join(distDir, crateName);
|
|
169
|
-
renameSync(packed, dist);
|
|
170
198
|
|
|
171
199
|
const bytes = readFileSync(dist);
|
|
172
200
|
const sha256 = createHash("sha256").update(bytes).digest("hex");
|
|
@@ -234,6 +262,7 @@ export async function runCargoArtifactStage(o: CrateStageOptions): Promise<Crate
|
|
|
234
262
|
return {
|
|
235
263
|
findings,
|
|
236
264
|
artifact: { file: `${BORDER_STATE_DIR}/dist/${crateName}`, sha256, bytes: bytes.length },
|
|
265
|
+
...(stageToolchain !== undefined ? { toolchain: stageToolchain } : {}),
|
|
237
266
|
};
|
|
238
267
|
} finally {
|
|
239
268
|
rmSync(targetDir, { recursive: true, force: true });
|