@voxgig/sdkgen 4.32.1 → 4.34.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/voxgig-sdkgen +1 -1
- package/dist/action/copies.d.ts +21 -0
- package/dist/action/copies.js +146 -0
- package/dist/action/copies.js.map +1 -0
- package/dist/action/doctor.d.ts +15 -2
- package/dist/action/doctor.js +169 -23
- package/dist/action/doctor.js.map +1 -1
- package/dist/action/edition.js +6 -2
- package/dist/action/edition.js.map +1 -1
- package/dist/action/feature.js +6 -2
- package/dist/action/feature.js.map +1 -1
- package/dist/action/package.js +28 -10
- package/dist/action/package.js.map +1 -1
- package/dist/action/remove.js +2 -0
- package/dist/action/remove.js.map +1 -1
- package/dist/action/resolve.d.ts +1 -0
- package/dist/action/resolve.js +10 -2
- package/dist/action/resolve.js.map +1 -1
- package/dist/action/target.js +6 -2
- package/dist/action/target.js.map +1 -1
- package/dist/helpers/naming.js +1 -1
- package/dist/helpers/naming.js.map +1 -1
- package/dist/sdkgen.d.ts +2 -1
- package/dist/sdkgen.js +36 -3
- package/dist/sdkgen.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/model/sdkgen.aontu +7 -1
- package/package.json +1 -1
- package/project/.sdk/model/feature/debug.aontu +3 -1
- package/project/.sdk/src/cmp/c/PrepareAuth_c.ts +8 -28
- package/project/.sdk/src/cmp/c/TestClean_c.ts +774 -0
- package/project/.sdk/src/cmp/c/Test_c.ts +3 -0
- package/project/.sdk/src/cmp/c/fragment/Entity.fragment.c +16 -5
- package/project/.sdk/src/cmp/c/fragment/Main.fragment.c +1 -1
- package/project/.sdk/src/cmp/clojure/PrepareAuth_clojure.ts +3 -0
- package/project/.sdk/src/cmp/clojure/TestClean_clojure.ts +473 -0
- package/project/.sdk/src/cmp/clojure/Test_clojure.ts +6 -0
- package/project/.sdk/src/cmp/clojure/fragment/Entity.fragment.clj +18 -8
- package/project/.sdk/src/cmp/cpp/PrepareAuth_cpp.ts +3 -0
- package/project/.sdk/src/cmp/cpp/TestClean_cpp.ts +782 -0
- package/project/.sdk/src/cmp/cpp/TestEntity_cpp.ts +1 -1
- package/project/.sdk/src/cmp/cpp/Test_cpp.ts +2 -0
- package/project/.sdk/src/cmp/csharp/PrepareAuth_csharp.ts +3 -0
- package/project/.sdk/src/cmp/csharp/TestClean_csharp.ts +887 -0
- package/project/.sdk/src/cmp/csharp/Test_csharp.ts +2 -0
- package/project/.sdk/src/cmp/csharp/fragment/EntityBase.fragment.cs +68 -4
- package/project/.sdk/src/cmp/csharp/fragment/Main.fragment.cs +8 -2
- package/project/.sdk/src/cmp/csharp/fragment/SdkError.fragment.cs +49 -0
- package/project/.sdk/src/cmp/elixir/PrepareAuth_elixir.ts +3 -0
- package/project/.sdk/src/cmp/elixir/Schema_elixir.ts +20 -10
- package/project/.sdk/src/cmp/elixir/TestClean_elixir.ts +666 -0
- package/project/.sdk/src/cmp/elixir/Test_elixir.ts +4 -0
- package/project/.sdk/src/cmp/elixir/fragment/Main.fragment.ex +1 -1
- package/project/.sdk/src/cmp/elixir/fragment/Pipeline.fragment.ex +14 -2
- package/project/.sdk/src/cmp/go/PrepareAuth_go.ts +3 -0
- package/project/.sdk/src/cmp/go/TestClean_go.ts +804 -0
- package/project/.sdk/src/cmp/go/Test_go.ts +3 -0
- package/project/.sdk/src/cmp/go/fragment/Entity.fragment.go +54 -4
- package/project/.sdk/src/cmp/go/fragment/Main.fragment.go +27 -2
- package/project/.sdk/src/cmp/java/PrepareAuth_java.ts +3 -0
- package/project/.sdk/src/cmp/java/TestClean_java.ts +884 -0
- package/project/.sdk/src/cmp/java/Test_java.ts +2 -0
- package/project/.sdk/src/cmp/java/fragment/EntityBase.fragment.java +56 -11
- package/project/.sdk/src/cmp/java/fragment/SdkError.fragment.java +36 -3
- package/project/.sdk/src/cmp/js/PrepareAuth_js.ts +3 -0
- package/project/.sdk/src/cmp/js/TestClean_js.ts +458 -0
- package/project/.sdk/src/cmp/js/Test_js.ts +2 -0
- package/project/.sdk/src/cmp/js/fragment/EntityBase.fragment.js +5 -4
- package/project/.sdk/src/cmp/js/fragment/EntityCreateOp.fragment.js +7 -1
- package/project/.sdk/src/cmp/js/fragment/EntityListOp.fragment.js +7 -1
- package/project/.sdk/src/cmp/js/fragment/EntityLoadOp.fragment.js +7 -1
- package/project/.sdk/src/cmp/js/fragment/EntityRemoveOp.fragment.js +7 -1
- package/project/.sdk/src/cmp/js/fragment/EntityUpdateOp.fragment.js +7 -1
- package/project/.sdk/src/cmp/js/fragment/Main.fragment.js +11 -2
- package/project/.sdk/src/cmp/js/fragment/SdkError.fragment.js +17 -1
- package/project/.sdk/src/cmp/kotlin/Package_kotlin.ts +5 -0
- package/project/.sdk/src/cmp/kotlin/PrepareAuth_kotlin.ts +3 -0
- package/project/.sdk/src/cmp/kotlin/TestClean_kotlin.ts +654 -0
- package/project/.sdk/src/cmp/kotlin/Test_kotlin.ts +3 -0
- package/project/.sdk/src/cmp/kotlin/fragment/EntityBase.fragment.kt +44 -11
- package/project/.sdk/src/cmp/kotlin/fragment/SdkError.fragment.kt +31 -0
- package/project/.sdk/src/cmp/lua/PrepareAuth_lua.ts +3 -0
- package/project/.sdk/src/cmp/lua/TestClean_lua.ts +769 -0
- package/project/.sdk/src/cmp/lua/Test_lua.ts +3 -0
- package/project/.sdk/src/cmp/lua/fragment/Entity.fragment.lua +77 -1
- package/project/.sdk/src/cmp/lua/fragment/Main.fragment.lua +49 -2
- package/project/.sdk/src/cmp/ocaml/Entity_ocaml.ts +3 -2
- package/project/.sdk/src/cmp/ocaml/PrepareAuth_ocaml.ts +4 -25
- package/project/.sdk/src/cmp/ocaml/TestClean_ocaml.ts +538 -0
- package/project/.sdk/src/cmp/ocaml/Test_ocaml.ts +5 -0
- package/project/.sdk/src/cmp/ocaml/fragment/RunOp.fragment.ml +16 -4
- package/project/.sdk/src/cmp/perl/PrepareAuth_perl.ts +3 -0
- package/project/.sdk/src/cmp/perl/TestClean_perl.ts +619 -0
- package/project/.sdk/src/cmp/perl/Test_perl.ts +3 -0
- package/project/.sdk/src/cmp/perl/fragment/Entity.fragment.pm +67 -5
- package/project/.sdk/src/cmp/perl/fragment/Main.fragment.pm +13 -1
- package/project/.sdk/src/cmp/php/PrepareAuth_php.ts +3 -0
- package/project/.sdk/src/cmp/php/TestClean_php.ts +809 -0
- package/project/.sdk/src/cmp/php/Test_php.ts +2 -0
- package/project/.sdk/src/cmp/php/fragment/Entity.fragment.php +96 -55
- package/project/.sdk/src/cmp/php/fragment/Main.fragment.php +15 -2
- package/project/.sdk/src/cmp/py/PrepareAuth_py.ts +3 -0
- package/project/.sdk/src/cmp/py/TestClean_py.ts +549 -0
- package/project/.sdk/src/cmp/py/Test_py.ts +3 -0
- package/project/.sdk/src/cmp/py/fragment/Entity.fragment.py +83 -55
- package/project/.sdk/src/cmp/py/fragment/Main.fragment.py +19 -3
- package/project/.sdk/src/cmp/rb/PrepareAuth_rb.ts +3 -0
- package/project/.sdk/src/cmp/rb/TestClean_rb.ts +535 -0
- package/project/.sdk/src/cmp/rb/Test_rb.ts +3 -0
- package/project/.sdk/src/cmp/rb/fragment/Entity.fragment.rb +108 -46
- package/project/.sdk/src/cmp/rb/fragment/Main.fragment.rb +12 -1
- package/project/.sdk/src/cmp/rust/PrepareAuth_rust.ts +9 -45
- package/project/.sdk/src/cmp/rust/TestClean_rust.ts +881 -0
- package/project/.sdk/src/cmp/rust/Test_rust.ts +3 -0
- package/project/.sdk/src/cmp/rust/fragment/Entity.fragment.rs +14 -6
- package/project/.sdk/src/cmp/rust/fragment/Main.fragment.rs +17 -1
- package/project/.sdk/src/cmp/rust/fragment/SdkError.fragment.rs +34 -2
- package/project/.sdk/src/cmp/scala/PrepareAuth_scala.ts +3 -0
- package/project/.sdk/src/cmp/scala/TestClean_scala.ts +608 -0
- package/project/.sdk/src/cmp/scala/Test_scala.ts +3 -0
- package/project/.sdk/src/cmp/scala/fragment/EntityBase.fragment.scala +58 -6
- package/project/.sdk/src/cmp/swift/PrepareAuth_swift.ts +3 -0
- package/project/.sdk/src/cmp/swift/TestClean_swift.ts +671 -0
- package/project/.sdk/src/cmp/swift/Test_swift.ts +3 -0
- package/project/.sdk/src/cmp/swift/fragment/EntityBase.fragment.swift +10 -0
- package/project/.sdk/src/cmp/swift/fragment/Main.fragment.swift +16 -2
- package/project/.sdk/src/cmp/swift/fragment/SdkError.fragment.swift +47 -3
- package/project/.sdk/src/cmp/ts/PrepareAuth_ts.ts +3 -0
- package/project/.sdk/src/cmp/ts/TestClean_ts.ts +465 -0
- package/project/.sdk/src/cmp/ts/Test_ts.ts +2 -0
- package/project/.sdk/src/cmp/ts/fragment/EntityBase.fragment.ts +5 -4
- package/project/.sdk/src/cmp/ts/fragment/EntityCreateOp.fragment.ts +7 -1
- package/project/.sdk/src/cmp/ts/fragment/EntityListOp.fragment.ts +7 -1
- package/project/.sdk/src/cmp/ts/fragment/EntityLoadOp.fragment.ts +7 -1
- package/project/.sdk/src/cmp/ts/fragment/EntityRemoveOp.fragment.ts +7 -1
- package/project/.sdk/src/cmp/ts/fragment/EntityUpdateOp.fragment.ts +7 -1
- package/project/.sdk/src/cmp/ts/fragment/Main.fragment.ts +8 -2
- package/project/.sdk/src/cmp/ts/fragment/SdkError.fragment.ts +20 -2
- package/project/.sdk/src/cmp/zig/PrepareAuth_zig.ts +3 -0
- package/project/.sdk/src/cmp/zig/TestClean_zig.ts +791 -0
- package/project/.sdk/src/cmp/zig/Test_zig.ts +5 -0
- package/project/.sdk/src/cmp/zig/fragment/Build.fragment.zig +19 -0
- package/project/.sdk/src/cmp/zig/fragment/Entity.fragment.zig +14 -5
- package/project/.sdk/src/cmp/zig/fragment/Main.fragment.zig +1 -1
- package/project/.sdk/tm/c/core/context.c +25 -0
- package/project/.sdk/tm/c/core/error.c +16 -0
- package/project/.sdk/tm/c/core/sdk.h +22 -0
- package/project/.sdk/tm/c/feature/audit.c +2 -0
- package/project/.sdk/tm/c/feature/cost.c +1 -0
- package/project/.sdk/tm/c/feature/debug.c +19 -29
- package/project/.sdk/tm/c/feature/log.c +21 -2
- package/project/.sdk/tm/c/feature/proxy.c +55 -3
- package/project/.sdk/tm/c/feature/secrets.c +7 -0
- package/project/.sdk/tm/c/feature/telemetry.c +2 -0
- package/project/.sdk/tm/c/tests/feature_test.c +2 -2
- package/project/.sdk/tm/c/utility/clean.c +530 -8
- package/project/.sdk/tm/c/utility/done.c +28 -12
- package/project/.sdk/tm/c/utility/make_error.c +4 -3
- package/project/.sdk/tm/c/utility/make_options.c +71 -45
- package/project/.sdk/tm/clojure/feature/secrets/sdk/feature/secrets.clj +15 -0
- package/project/.sdk/tm/clojure/src/sdk/client.clj +20 -4
- package/project/.sdk/tm/clojure/src/sdk/core.clj +319 -35
- package/project/.sdk/tm/clojure/src/sdk/features.clj +68 -30
- package/project/.sdk/tm/clojure/test/sdk/test/feature.clj +4 -2
- package/project/.sdk/tm/clojure/test/sdk/test/pipeline.clj +47 -20
- package/project/.sdk/tm/clojure/test/sdk/test_runner.clj +4 -0
- package/project/.sdk/tm/cpp/core/types.hpp +93 -3
- package/project/.sdk/tm/cpp/feature/audit.hpp +1 -0
- package/project/.sdk/tm/cpp/feature/cost.hpp +1 -0
- package/project/.sdk/tm/cpp/feature/debug.hpp +20 -12
- package/project/.sdk/tm/cpp/feature/log.hpp +31 -9
- package/project/.sdk/tm/cpp/feature/proxy.hpp +52 -6
- package/project/.sdk/tm/cpp/feature/secrets.hpp +13 -0
- package/project/.sdk/tm/cpp/feature/telemetry.hpp +4 -2
- package/project/.sdk/tm/cpp/test/feature_test.cpp +2 -2
- package/project/.sdk/tm/cpp/utility/pipeline.hpp +426 -51
- package/project/.sdk/tm/csharp/core/Context.cs +32 -0
- package/project/.sdk/tm/csharp/core/Utility.cs +2 -0
- package/project/.sdk/tm/csharp/feature/AuditFeature.cs +1 -0
- package/project/.sdk/tm/csharp/feature/CostFeature.cs +7 -5
- package/project/.sdk/tm/csharp/feature/DebugFeature.cs +19 -16
- package/project/.sdk/tm/csharp/feature/FeatureOptions.cs +16 -0
- package/project/.sdk/tm/csharp/feature/LogFeature.cs +4 -1
- package/project/.sdk/tm/csharp/feature/ProxyFeature.cs +26 -5
- package/project/.sdk/tm/csharp/feature/SecretsFeature.cs +16 -0
- package/project/.sdk/tm/csharp/feature/TelemetryFeature.cs +4 -2
- package/project/.sdk/tm/csharp/test/FeatureTest.cs +2 -2
- package/project/.sdk/tm/csharp/utility/Clean.cs +440 -2
- package/project/.sdk/tm/csharp/utility/Done.cs +27 -11
- package/project/.sdk/tm/csharp/utility/MakeError.cs +19 -8
- package/project/.sdk/tm/csharp/utility/MakeOptions.cs +119 -29
- package/project/.sdk/tm/csharp/utility/MakeResponse.cs +21 -11
- package/project/.sdk/tm/csharp/utility/Register.cs +1 -0
- package/project/.sdk/tm/elixir/lib/projectname/context.ex +19 -0
- package/project/.sdk/tm/elixir/lib/projectname/entity_base.ex +22 -1
- package/project/.sdk/tm/elixir/lib/projectname/error.ex +24 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/audit.ex +2 -2
- package/project/.sdk/tm/elixir/lib/projectname/feature/cost.ex +2 -2
- package/project/.sdk/tm/elixir/lib/projectname/feature/debug.ex +13 -13
- package/project/.sdk/tm/elixir/lib/projectname/feature/log.ex +18 -5
- package/project/.sdk/tm/elixir/lib/projectname/feature/proxy.ex +19 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets.ex +15 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/telemetry.ex +4 -2
- package/project/.sdk/tm/elixir/lib/projectname/feature.ex +22 -0
- package/project/.sdk/tm/elixir/lib/projectname/utility.ex +464 -41
- package/project/.sdk/tm/elixir/test/feature_test.exs +3 -2
- package/project/.sdk/tm/go/core/context.go +42 -0
- package/project/.sdk/tm/go/core/error.go +30 -10
- package/project/.sdk/tm/go/core/utility_type.go +2 -0
- package/project/.sdk/tm/go/feature/audit_feature.go +1 -0
- package/project/.sdk/tm/go/feature/base_feature.go +12 -0
- package/project/.sdk/tm/go/feature/cost_feature.go +2 -2
- package/project/.sdk/tm/go/feature/debug_feature.go +14 -12
- package/project/.sdk/tm/go/feature/log_feature.go +13 -8
- package/project/.sdk/tm/go/feature/proxy_feature.go +26 -6
- package/project/.sdk/tm/go/feature/secrets_feature.go +19 -0
- package/project/.sdk/tm/go/feature/telemetry_feature.go +4 -2
- package/project/.sdk/tm/go/test/feature_test.go +2 -2
- package/project/.sdk/tm/go/utility/clean.go +585 -2
- package/project/.sdk/tm/go/utility/done.go +29 -9
- package/project/.sdk/tm/go/utility/make_error.go +51 -16
- package/project/.sdk/tm/go/utility/make_options.go +77 -36
- package/project/.sdk/tm/go/utility/register.go +12 -0
- package/project/.sdk/tm/java/core/Context.java +29 -0
- package/project/.sdk/tm/java/core/SdkClient.java +4 -2
- package/project/.sdk/tm/java/core/Utility.java +7 -0
- package/project/.sdk/tm/java/feature/AuditFeature.java +6 -0
- package/project/.sdk/tm/java/feature/CostFeature.java +5 -0
- package/project/.sdk/tm/java/feature/DebugFeature.java +25 -14
- package/project/.sdk/tm/java/feature/LogFeature.java +11 -4
- package/project/.sdk/tm/java/feature/ProxyFeature.java +41 -6
- package/project/.sdk/tm/java/feature/SecretsFeature.java +18 -0
- package/project/.sdk/tm/java/feature/TelemetryFeature.java +8 -2
- package/project/.sdk/tm/java/test/FeatureTest.java +2 -2
- package/project/.sdk/tm/java/utility/Clean.java +519 -1
- package/project/.sdk/tm/java/utility/Done.java +1 -1
- package/project/.sdk/tm/java/utility/MakeError.java +5 -1
- package/project/.sdk/tm/java/utility/MakeOptions.java +55 -31
- package/project/.sdk/tm/java/utility/Register.java +4 -0
- package/project/.sdk/tm/js/src/Context.js +5 -1
- package/project/.sdk/tm/js/src/feature/audit/AuditFeature.js +2 -2
- package/project/.sdk/tm/js/src/feature/cost/CostFeature.js +2 -2
- package/project/.sdk/tm/js/src/feature/debug/DebugFeature.js +13 -7
- package/project/.sdk/tm/js/src/feature/log/LogFeature.js +9 -5
- package/project/.sdk/tm/js/src/feature/proxy/ProxyFeature.js +19 -1
- package/project/.sdk/tm/js/src/feature/secrets/SecretsFeature.js +14 -0
- package/project/.sdk/tm/js/src/feature/telemetry/TelemetryFeature.js +4 -2
- package/project/.sdk/tm/js/src/utility/CleanUtility.js +294 -21
- package/project/.sdk/tm/js/src/utility/DoneUtility.js +17 -5
- package/project/.sdk/tm/js/src/utility/MakeErrorUtility.js +18 -2
- package/project/.sdk/tm/js/src/utility/MakeOptionsUtility.js +39 -15
- package/project/.sdk/tm/js/src/utility/Utility.js +4 -2
- package/project/.sdk/tm/js/test/feature/harness.js +11 -1
- package/project/.sdk/tm/js/test/feature.test.js +9 -2
- package/project/.sdk/tm/kotlin/core/Context.kt +19 -0
- package/project/.sdk/tm/kotlin/core/SdkClient.kt +9 -2
- package/project/.sdk/tm/kotlin/core/Utility.kt +2 -0
- package/project/.sdk/tm/kotlin/feature/AuditFeature.kt +11 -9
- package/project/.sdk/tm/kotlin/feature/CostFeature.kt +8 -5
- package/project/.sdk/tm/kotlin/feature/DebugFeature.kt +15 -22
- package/project/.sdk/tm/kotlin/feature/LogFeature.kt +8 -4
- package/project/.sdk/tm/kotlin/feature/ProxyFeature.kt +26 -2
- package/project/.sdk/tm/kotlin/feature/SecretsFeature.kt +11 -0
- package/project/.sdk/tm/kotlin/feature/TelemetryFeature.kt +4 -2
- package/project/.sdk/tm/kotlin/test/FeatureTest.kt +2 -2
- package/project/.sdk/tm/kotlin/utility/CoreUtil.kt +447 -11
- package/project/.sdk/tm/kotlin/utility/MakeOptions.kt +38 -31
- package/project/.sdk/tm/kotlin/utility/Register.kt +1 -0
- package/project/.sdk/tm/lua/core/context.lua +43 -0
- package/project/.sdk/tm/lua/core/error.lua +36 -1
- package/project/.sdk/tm/lua/core/utility_type.lua +4 -0
- package/project/.sdk/tm/lua/feature/audit_feature.lua +2 -2
- package/project/.sdk/tm/lua/feature/cost_feature.lua +2 -2
- package/project/.sdk/tm/lua/feature/debug_feature.lua +21 -17
- package/project/.sdk/tm/lua/feature/log_feature.lua +2 -1
- package/project/.sdk/tm/lua/feature/proxy_feature.lua +23 -1
- package/project/.sdk/tm/lua/feature/secrets_feature.lua +18 -0
- package/project/.sdk/tm/lua/feature/telemetry_feature.lua +4 -2
- package/project/.sdk/tm/lua/test/feature/secrets/secrets_feature_test.lua +3 -2
- package/project/.sdk/tm/lua/test/feature_test.lua +10 -3
- package/project/.sdk/tm/lua/utility/clean.lua +426 -2
- package/project/.sdk/tm/lua/utility/clean_explain.lua +34 -0
- package/project/.sdk/tm/lua/utility/done.lua +1 -7
- package/project/.sdk/tm/lua/utility/make_error.lua +3 -1
- package/project/.sdk/tm/lua/utility/make_options.lua +76 -30
- package/project/.sdk/tm/lua/utility/register.lua +4 -1
- package/project/.sdk/tm/ocaml/Makefile +5 -1
- package/project/.sdk/tm/ocaml/feature/secrets_feature.ml +12 -1
- package/project/.sdk/tm/ocaml/sdk_features.ml +78 -18
- package/project/.sdk/tm/ocaml/sdk_helpers.ml +27 -0
- package/project/.sdk/tm/ocaml/sdk_runtime.ml +304 -26
- package/project/.sdk/tm/ocaml/sdk_types.ml +1 -0
- package/project/.sdk/tm/ocaml/test/feature/secrets/t_secrets.ml +3 -1
- package/project/.sdk/tm/ocaml/test/t_feature.ml +2 -2
- package/project/.sdk/tm/perl/core/context.pm +27 -0
- package/project/.sdk/tm/perl/core/error.pm +52 -5
- package/project/.sdk/tm/perl/feature/audit_feature.pm +2 -2
- package/project/.sdk/tm/perl/feature/cost_feature.pm +2 -2
- package/project/.sdk/tm/perl/feature/debug_feature.pm +17 -13
- package/project/.sdk/tm/perl/feature/log_feature.pm +3 -1
- package/project/.sdk/tm/perl/feature/proxy_feature.pm +21 -1
- package/project/.sdk/tm/perl/feature/secrets_feature.pm +20 -1
- package/project/.sdk/tm/perl/feature/telemetry_feature.pm +4 -2
- package/project/.sdk/tm/perl/t/feature.t +4 -2
- package/project/.sdk/tm/perl/utility/clean.pm +345 -1
- package/project/.sdk/tm/perl/utility/done.pm +24 -6
- package/project/.sdk/tm/perl/utility/make_error.pm +17 -4
- package/project/.sdk/tm/perl/utility/make_options.pm +33 -14
- package/project/.sdk/tm/php/core/Context.php +24 -1
- package/project/.sdk/tm/php/core/Error.php +34 -3
- package/project/.sdk/tm/php/core/UtilityType.php +4 -0
- package/project/.sdk/tm/php/feature/AuditFeature.php +2 -2
- package/project/.sdk/tm/php/feature/CostFeature.php +2 -2
- package/project/.sdk/tm/php/feature/DebugFeature.php +18 -9
- package/project/.sdk/tm/php/feature/LogFeature.php +5 -2
- package/project/.sdk/tm/php/feature/ProxyFeature.php +20 -1
- package/project/.sdk/tm/php/feature/SecretsFeature.php +18 -0
- package/project/.sdk/tm/php/feature/TelemetryFeature.php +4 -2
- package/project/.sdk/tm/php/test/FeatureTest.php +2 -2
- package/project/.sdk/tm/php/utility/Clean.php +438 -2
- package/project/.sdk/tm/php/utility/Done.php +14 -7
- package/project/.sdk/tm/php/utility/MakeError.php +9 -7
- package/project/.sdk/tm/php/utility/MakeOptions.php +62 -38
- package/project/.sdk/tm/php/utility/Register.php +2 -0
- package/project/.sdk/tm/py/pkg/core/context.py +17 -0
- package/project/.sdk/tm/py/pkg/core/error.py +42 -1
- package/project/.sdk/tm/py/pkg/core/utility_type.py +4 -0
- package/project/.sdk/tm/py/pkg/feature/audit_feature.py +2 -2
- package/project/.sdk/tm/py/pkg/feature/cost_feature.py +2 -2
- package/project/.sdk/tm/py/pkg/feature/debug_feature.py +17 -12
- package/project/.sdk/tm/py/pkg/feature/log_feature.py +2 -1
- package/project/.sdk/tm/py/pkg/feature/proxy_feature.py +18 -1
- package/project/.sdk/tm/py/pkg/feature/secrets_feature.py +12 -0
- package/project/.sdk/tm/py/pkg/feature/telemetry_feature.py +4 -2
- package/project/.sdk/tm/py/pkg/utility/clean.py +311 -1
- package/project/.sdk/tm/py/pkg/utility/done.py +18 -5
- package/project/.sdk/tm/py/pkg/utility/make_error.py +9 -6
- package/project/.sdk/tm/py/pkg/utility/make_options.py +64 -25
- package/project/.sdk/tm/py/pkg/utility/make_response.py +19 -13
- package/project/.sdk/tm/py/pkg/utility/register.py +4 -2
- package/project/.sdk/tm/py/test/feature_harness.py +4 -0
- package/project/.sdk/tm/py/test/test_feature.py +2 -2
- package/project/.sdk/tm/py/test/test_primary_utility.py +1 -0
- package/project/.sdk/tm/rb/core/context.rb +28 -0
- package/project/.sdk/tm/rb/core/error.rb +30 -0
- package/project/.sdk/tm/rb/core/utility_type.rb +1 -1
- package/project/.sdk/tm/rb/feature/audit_feature.rb +2 -2
- package/project/.sdk/tm/rb/feature/cost_feature.rb +2 -2
- package/project/.sdk/tm/rb/feature/debug_feature.rb +15 -12
- package/project/.sdk/tm/rb/feature/log_feature.rb +3 -1
- package/project/.sdk/tm/rb/feature/proxy_feature.rb +25 -1
- package/project/.sdk/tm/rb/feature/secrets_feature.rb +17 -0
- package/project/.sdk/tm/rb/feature/telemetry_feature.rb +4 -2
- package/project/.sdk/tm/rb/test/feature_test.rb +4 -2
- package/project/.sdk/tm/rb/utility/clean.rb +312 -1
- package/project/.sdk/tm/rb/utility/done.rb +15 -5
- package/project/.sdk/tm/rb/utility/make_error.rb +13 -4
- package/project/.sdk/tm/rb/utility/make_options.rb +31 -12
- package/project/.sdk/tm/rb/utility/register.rb +2 -0
- package/project/.sdk/tm/rust/core/context.rs +55 -0
- package/project/.sdk/tm/rust/core/utility_type.rs +17 -0
- package/project/.sdk/tm/rust/feature/audit.rs +2 -0
- package/project/.sdk/tm/rust/feature/cost.rs +3 -2
- package/project/.sdk/tm/rust/feature/debug.rs +16 -16
- package/project/.sdk/tm/rust/feature/log.rs +42 -7
- package/project/.sdk/tm/rust/feature/proxy.rs +48 -2
- package/project/.sdk/tm/rust/feature/secrets.rs +12 -0
- package/project/.sdk/tm/rust/feature/telemetry.rs +2 -0
- package/project/.sdk/tm/rust/tests/feature_test.rs +2 -2
- package/project/.sdk/tm/rust/utility/clean.rs +446 -5
- package/project/.sdk/tm/rust/utility/done.rs +22 -12
- package/project/.sdk/tm/rust/utility/make_error.rs +4 -1
- package/project/.sdk/tm/rust/utility/make_options.rs +73 -19
- package/project/.sdk/tm/scala/Makefile +3 -1
- package/project/.sdk/tm/scala/core/Context.scala +16 -0
- package/project/.sdk/tm/scala/core/SdkClient.scala +14 -4
- package/project/.sdk/tm/scala/core/SdkError.scala +28 -0
- package/project/.sdk/tm/scala/core/Types.scala +3 -0
- package/project/.sdk/tm/scala/core/Utility.scala +2 -0
- package/project/.sdk/tm/scala/feature/AuditFeature.scala +16 -10
- package/project/.sdk/tm/scala/feature/CostFeature.scala +10 -5
- package/project/.sdk/tm/scala/feature/DebugFeature.scala +24 -21
- package/project/.sdk/tm/scala/feature/LogFeature.scala +9 -4
- package/project/.sdk/tm/scala/feature/ProxyFeature.scala +23 -2
- package/project/.sdk/tm/scala/feature/SecretsFeature.scala +14 -0
- package/project/.sdk/tm/scala/feature/TelemetryFeature.scala +9 -2
- package/project/.sdk/tm/scala/sdktest/SdkTestMain.scala +2 -2
- package/project/.sdk/tm/scala/utility/Make.scala +63 -20
- package/project/.sdk/tm/scala/utility/Misc.scala +358 -5
- package/project/.sdk/tm/scala/utility/Register.scala +1 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/core/Context.swift +29 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/core/Utility.swift +2 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/AuditFeature.swift +10 -9
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/CostFeature.swift +7 -5
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/DebugFeature.swift +19 -15
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/FeatureOptions.swift +16 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/LogFeature.swift +4 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/ProxyFeature.swift +20 -5
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/SecretsFeature.swift +13 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/TelemetryFeature.swift +4 -2
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/MakeError.swift +15 -5
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/MakeOptions.swift +58 -19
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/Register.swift +1 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/ResultUtil.swift +391 -4
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/FeatureTest.swift +2 -2
- package/project/.sdk/tm/ts/src/Context.ts +5 -1
- package/project/.sdk/tm/ts/src/feature/audit/AuditFeature.ts +2 -2
- package/project/.sdk/tm/ts/src/feature/cost/CostFeature.ts +2 -2
- package/project/.sdk/tm/ts/src/feature/debug/DebugFeature.ts +13 -7
- package/project/.sdk/tm/ts/src/feature/log/LogFeature.ts +9 -5
- package/project/.sdk/tm/ts/src/feature/proxy/ProxyFeature.ts +19 -1
- package/project/.sdk/tm/ts/src/feature/secrets/SecretsFeature.ts +12 -0
- package/project/.sdk/tm/ts/src/feature/telemetry/TelemetryFeature.ts +4 -2
- package/project/.sdk/tm/ts/src/utility/CleanUtility.ts +287 -9
- package/project/.sdk/tm/ts/src/utility/DoneUtility.ts +18 -5
- package/project/.sdk/tm/ts/src/utility/MakeErrorUtility.ts +18 -8
- package/project/.sdk/tm/ts/src/utility/MakeOptionsUtility.ts +38 -16
- package/project/.sdk/tm/ts/src/utility/Utility.ts +4 -2
- package/project/.sdk/tm/ts/test/feature/harness.ts +11 -1
- package/project/.sdk/tm/ts/test/feature.test.ts +9 -2
- package/project/.sdk/tm/zig/core/context.zig +34 -0
- package/project/.sdk/tm/zig/core/error.zig +22 -1
- package/project/.sdk/tm/zig/core/utility.zig +403 -39
- package/project/.sdk/tm/zig/feature/audit.zig +4 -2
- package/project/.sdk/tm/zig/feature/cost.zig +3 -2
- package/project/.sdk/tm/zig/feature/debug.zig +20 -25
- package/project/.sdk/tm/zig/feature/log.zig +3 -1
- package/project/.sdk/tm/zig/feature/proxy.zig +47 -6
- package/project/.sdk/tm/zig/feature/secrets.zig +7 -0
- package/project/.sdk/tm/zig/feature/telemetry.zig +4 -2
- package/project/.sdk/tm/zig/test/feature_test.zig +2 -2
- package/project/sdkgen-package.json +1 -1
- package/src/action/copies.ts +219 -0
- package/src/action/doctor.ts +247 -21
- package/src/action/edition.ts +10 -2
- package/src/action/feature.ts +11 -2
- package/src/action/package.ts +31 -10
- package/src/action/remove.ts +4 -0
- package/src/action/resolve.ts +16 -3
- package/src/action/target.ts +10 -2
- package/src/helpers/naming.ts +1 -1
- package/src/sdkgen.ts +45 -5
|
@@ -1,11 +1,449 @@
|
|
|
1
|
-
// ProjectName SDK utility: clean
|
|
1
|
+
// ProjectName SDK utility: clean - the one choke point every egress passes
|
|
2
|
+
// through. Everything that leaves the pipeline is cleaned; inside it data
|
|
3
|
+
// stays raw, so a hook can still read the header it must add to. See
|
|
4
|
+
// docs/explanation/secret-redaction.md.
|
|
5
|
+
|
|
6
|
+
using System.Collections;
|
|
7
|
+
using System.Globalization;
|
|
8
|
+
using System.Reflection;
|
|
9
|
+
using System.Text;
|
|
10
|
+
using System.Text.Json;
|
|
11
|
+
|
|
12
|
+
using Voxgig.Struct;
|
|
2
13
|
|
|
3
14
|
namespace ProjectNameSdk.Util;
|
|
4
15
|
|
|
16
|
+
// The derived clean block, MUTABLE after MakeOptions since features register
|
|
17
|
+
// values later. Fields rather than properties: System.Text.Json serialises
|
|
18
|
+
// properties, so a JSON of the options shows this block as {} and never the
|
|
19
|
+
// registry it holds.
|
|
20
|
+
public sealed class CleanConfig
|
|
21
|
+
{
|
|
22
|
+
public bool Active = true;
|
|
23
|
+
public List<string> Keys = new();
|
|
24
|
+
public List<string> Values = new();
|
|
25
|
+
public string Mask = "[redacted]";
|
|
26
|
+
public int Hint;
|
|
27
|
+
public int Min = 4;
|
|
28
|
+
}
|
|
29
|
+
|
|
5
30
|
public static partial class SdkUtility
|
|
6
31
|
{
|
|
32
|
+
private const int CleanMaxDepth = 32;
|
|
33
|
+
private const string CleanCircular = "[circular]";
|
|
34
|
+
|
|
35
|
+
// A dropped slot (a delegate): omitted from a map, null in a list.
|
|
36
|
+
private static readonly object CleanDrop = new();
|
|
37
|
+
|
|
38
|
+
private static readonly JsonSerializerOptions CleanJsonOpts = new()
|
|
39
|
+
{
|
|
40
|
+
Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
private static string CleanNormKey(string key)
|
|
44
|
+
{
|
|
45
|
+
return key.ToLowerInvariant().Replace("-", "").Replace("_", "");
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
private static List<string> CleanSplitKeys(object? keys)
|
|
49
|
+
{
|
|
50
|
+
return (Convert.ToString(keys) ?? "")
|
|
51
|
+
.Split(',')
|
|
52
|
+
.Select(k => CleanNormKey(k.Trim()))
|
|
53
|
+
.Where(k => k != "")
|
|
54
|
+
.ToList();
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
internal static List<string> CleanSplitValues(object? values)
|
|
58
|
+
{
|
|
59
|
+
if (values is IList list && values is not string)
|
|
60
|
+
{
|
|
61
|
+
return list.OfType<string>().ToList();
|
|
62
|
+
}
|
|
63
|
+
return (Convert.ToString(values) ?? "")
|
|
64
|
+
.Split(',')
|
|
65
|
+
.Select(v => v.Trim())
|
|
66
|
+
.Where(v => v != "")
|
|
67
|
+
.ToList();
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
private static int CleanCount(object? val, int dflt)
|
|
71
|
+
{
|
|
72
|
+
double n;
|
|
73
|
+
if (val is string s)
|
|
74
|
+
{
|
|
75
|
+
if (!double.TryParse(s.Trim(), System.Globalization.NumberStyles.Float,
|
|
76
|
+
System.Globalization.CultureInfo.InvariantCulture, out n))
|
|
77
|
+
{
|
|
78
|
+
return dflt;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
else if (val is int or long or double or float or short or byte or decimal)
|
|
82
|
+
{
|
|
83
|
+
n = Convert.ToDouble(val);
|
|
84
|
+
}
|
|
85
|
+
else
|
|
86
|
+
{
|
|
87
|
+
return dflt;
|
|
88
|
+
}
|
|
89
|
+
n = Math.Floor(n);
|
|
90
|
+
return double.IsFinite(n) && 0 <= n ? (int)n : dflt;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
internal static CleanConfig MakeCleanConfig(object? cleanopts)
|
|
94
|
+
{
|
|
95
|
+
var opts = cleanopts as Dictionary<string, object?> ?? new Dictionary<string, object?>();
|
|
96
|
+
return new CleanConfig
|
|
97
|
+
{
|
|
98
|
+
Active = !(opts.TryGetValue("active", out var a) && a is bool ab && !ab),
|
|
99
|
+
Keys = CleanSplitKeys(opts.TryGetValue("keys", out var k) ? k : null),
|
|
100
|
+
Values = new List<string>(),
|
|
101
|
+
Mask = opts.TryGetValue("mask", out var m) && m is string ms ? ms : "[redacted]",
|
|
102
|
+
Hint = CleanCount(opts.TryGetValue("hint", out var h) ? h : null, 0),
|
|
103
|
+
Min = Math.Max(1, CleanCount(opts.TryGetValue("min", out var mn) ? mn : null, 4)),
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// A context without options (MakeError accepts a bare one) still masks by
|
|
108
|
+
// the schema defaults.
|
|
109
|
+
internal static CleanConfig CleanConfigOf(Context? ctx)
|
|
110
|
+
{
|
|
111
|
+
if (ctx?.Options != null &&
|
|
112
|
+
ctx.Options.TryGetValue("__derived__", out var draw) &&
|
|
113
|
+
draw is Dictionary<string, object?> derived &&
|
|
114
|
+
derived.TryGetValue("clean", out var craw) &&
|
|
115
|
+
craw is CleanConfig cfg)
|
|
116
|
+
{
|
|
117
|
+
return cfg;
|
|
118
|
+
}
|
|
119
|
+
return MakeCleanConfig(StructUtils.GetProp(SdkSchema.Optspec, "clean"));
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// The encoded forms a value travels in.
|
|
123
|
+
private static List<string> CleanForms(string value)
|
|
124
|
+
{
|
|
125
|
+
var out_ = new List<string> { value };
|
|
126
|
+
void Add(string s)
|
|
127
|
+
{
|
|
128
|
+
if (s != "" && !out_.Contains(s))
|
|
129
|
+
{
|
|
130
|
+
out_.Add(s);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
try { Add(Convert.ToBase64String(Encoding.UTF8.GetBytes(value))); } catch (Exception) { }
|
|
134
|
+
try { Add(Uri.EscapeDataString(value)); } catch (Exception) { }
|
|
135
|
+
try
|
|
136
|
+
{
|
|
137
|
+
var quoted = JsonSerializer.Serialize(value, CleanJsonOpts);
|
|
138
|
+
Add(quoted.Substring(1, quoted.Length - 2));
|
|
139
|
+
}
|
|
140
|
+
catch (Exception) { }
|
|
141
|
+
return out_;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
internal static void CleanAddUtil(Context ctx, object? value)
|
|
145
|
+
{
|
|
146
|
+
CleanRegister(CleanConfigOf(ctx), value);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
private static void CleanRegister(CleanConfig cfg, object? value)
|
|
150
|
+
{
|
|
151
|
+
if (value is not string s || s.Length < cfg.Min)
|
|
152
|
+
{
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
var changed = false;
|
|
156
|
+
foreach (var form in CleanForms(s))
|
|
157
|
+
{
|
|
158
|
+
if (form.Length >= cfg.Min && !cfg.Values.Contains(form))
|
|
159
|
+
{
|
|
160
|
+
cfg.Values.Add(form);
|
|
161
|
+
changed = true;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
if (changed)
|
|
165
|
+
{
|
|
166
|
+
cfg.Values.Sort((a, b) => b.Length.CompareTo(a.Length));
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
private static string CleanMaskValue(CleanConfig cfg, string value)
|
|
171
|
+
{
|
|
172
|
+
if (0 < cfg.Hint && value.Length > 2 * cfg.Hint)
|
|
173
|
+
{
|
|
174
|
+
return cfg.Mask + value.Substring(value.Length - cfg.Hint);
|
|
175
|
+
}
|
|
176
|
+
return cfg.Mask;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
private static string CleanString(CleanConfig cfg, string text)
|
|
180
|
+
{
|
|
181
|
+
var out_ = text;
|
|
182
|
+
foreach (var value in cfg.Values)
|
|
183
|
+
{
|
|
184
|
+
if (out_.Contains(value))
|
|
185
|
+
{
|
|
186
|
+
out_ = out_.Replace(value, CleanMaskValue(cfg, value));
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return out_;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
private static bool CleanSensitiveKey(CleanConfig cfg, object? key)
|
|
193
|
+
{
|
|
194
|
+
if (key is not string ks)
|
|
195
|
+
{
|
|
196
|
+
return false;
|
|
197
|
+
}
|
|
198
|
+
var nk = CleanNormKey(ks);
|
|
199
|
+
foreach (var k in cfg.Keys)
|
|
200
|
+
{
|
|
201
|
+
if (nk.Contains(k))
|
|
202
|
+
{
|
|
203
|
+
return true;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return false;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
private static string CleanCamel(string name)
|
|
210
|
+
{
|
|
211
|
+
return name == "" ? name : char.ToLowerInvariant(name[0]) + name.Substring(1);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
private static bool CleanIsNumber(object val)
|
|
215
|
+
{
|
|
216
|
+
return val is int or long or double or float or short or byte or decimal or
|
|
217
|
+
sbyte or ushort or uint or ulong;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// A registered value used as a map key is masked like any other string;
|
|
221
|
+
// keys that mask alike take a counter, so none is lost.
|
|
222
|
+
private static string CleanName(CleanConfig cfg, Dictionary<string, object?> out_, string key)
|
|
223
|
+
{
|
|
224
|
+
var name = CleanString(cfg, key);
|
|
225
|
+
if (name == key || !out_.ContainsKey(name))
|
|
226
|
+
{
|
|
227
|
+
return name;
|
|
228
|
+
}
|
|
229
|
+
var i = 1;
|
|
230
|
+
while (out_.ContainsKey(name + "#" + i))
|
|
231
|
+
{
|
|
232
|
+
i++;
|
|
233
|
+
}
|
|
234
|
+
return name + "#" + i;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// A masked plain-data copy: functions dropped, cycles cut, and nothing
|
|
238
|
+
// shared with the live value, whose spec must stay raw. A typed pipeline
|
|
239
|
+
// product (Spec, Result, a feature record) reads through its public
|
|
240
|
+
// fields, the way a structured logger would; the context reads through
|
|
241
|
+
// its own record so its client, options and config never enter.
|
|
242
|
+
private static object? CleanSnapshot(CleanConfig cfg, object? val, object? key,
|
|
243
|
+
int depth, List<object> seen)
|
|
244
|
+
{
|
|
245
|
+
if (val == null || ReferenceEquals(val, StructUtils.NONE))
|
|
246
|
+
{
|
|
247
|
+
return val;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
if (val is string s)
|
|
251
|
+
{
|
|
252
|
+
return CleanSensitiveKey(cfg, key) ? CleanMaskValue(cfg, s) : CleanString(cfg, s);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
if (val is Delegate)
|
|
256
|
+
{
|
|
257
|
+
return CleanDrop;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
if (val is bool || val is int || val is long || val is double || val is float ||
|
|
261
|
+
val is short || val is byte || val is decimal || val is char || val.GetType().IsEnum)
|
|
262
|
+
{
|
|
263
|
+
return CleanSensitiveKey(cfg, key) ? cfg.Mask : val;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
if (CleanMaxDepth <= depth || seen.Any(o => ReferenceEquals(o, val)))
|
|
267
|
+
{
|
|
268
|
+
return CleanCircular;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
if (CleanSensitiveKey(cfg, key))
|
|
272
|
+
{
|
|
273
|
+
return cfg.Mask;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
seen.Add(val);
|
|
277
|
+
try
|
|
278
|
+
{
|
|
279
|
+
if (val is IDictionary dict)
|
|
280
|
+
{
|
|
281
|
+
var out_ = new Dictionary<string, object?>();
|
|
282
|
+
foreach (DictionaryEntry kv in dict)
|
|
283
|
+
{
|
|
284
|
+
var k = Convert.ToString(kv.Key) ?? "";
|
|
285
|
+
var v = CleanSnapshot(cfg, kv.Value, k, depth + 1, seen);
|
|
286
|
+
if (!ReferenceEquals(v, CleanDrop))
|
|
287
|
+
{
|
|
288
|
+
out_[CleanName(cfg, out_, k)] = v;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
return out_;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
if (val is IList list)
|
|
295
|
+
{
|
|
296
|
+
var out_ = new List<object?>();
|
|
297
|
+
foreach (var item in list)
|
|
298
|
+
{
|
|
299
|
+
var v = CleanSnapshot(cfg, item, null, depth + 1, seen);
|
|
300
|
+
out_.Add(ReferenceEquals(v, CleanDrop) ? null : v);
|
|
301
|
+
}
|
|
302
|
+
return out_;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
if (val is Exception err)
|
|
306
|
+
{
|
|
307
|
+
var out_ = new Dictionary<string, object?>
|
|
308
|
+
{
|
|
309
|
+
["message"] = CleanString(cfg, err.Message),
|
|
310
|
+
["stack"] = CleanString(cfg, err.StackTrace ?? ""),
|
|
311
|
+
};
|
|
312
|
+
if (err is ProjectNameError se)
|
|
313
|
+
{
|
|
314
|
+
out_["sdk"] = se.Sdk;
|
|
315
|
+
out_["code"] = CleanString(cfg, se.Code);
|
|
316
|
+
out_["status"] = se.Status;
|
|
317
|
+
out_["result"] = CleanSnapshot(cfg, se.ResultVal, "result", depth + 1, seen);
|
|
318
|
+
out_["spec"] = CleanSnapshot(cfg, se.SpecVal, "spec", depth + 1, seen);
|
|
319
|
+
}
|
|
320
|
+
return out_;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
if (val is Context ctx)
|
|
324
|
+
{
|
|
325
|
+
return CleanSnapshot(cfg, ctx.RawRecord(), key, depth, seen);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
if (val is IEntity ent)
|
|
329
|
+
{
|
|
330
|
+
return ent.GetName();
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
var fields = val.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance);
|
|
334
|
+
if (0 == fields.Length)
|
|
335
|
+
{
|
|
336
|
+
return CleanString(cfg, Convert.ToString(val) ?? "");
|
|
337
|
+
}
|
|
338
|
+
var rec = new Dictionary<string, object?>();
|
|
339
|
+
foreach (var f in fields)
|
|
340
|
+
{
|
|
341
|
+
var k = CleanCamel(f.Name);
|
|
342
|
+
var v = CleanSnapshot(cfg, f.GetValue(val), k, depth + 1, seen);
|
|
343
|
+
if (!ReferenceEquals(v, CleanDrop))
|
|
344
|
+
{
|
|
345
|
+
rec[k] = v;
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
return rec;
|
|
349
|
+
}
|
|
350
|
+
finally
|
|
351
|
+
{
|
|
352
|
+
seen.RemoveAt(seen.Count - 1);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
// The SDK's own error is cleaned in place, since it is about to be thrown.
|
|
7
357
|
internal static object? CleanUtil(Context ctx, object? val)
|
|
8
358
|
{
|
|
9
|
-
|
|
359
|
+
var cfg = CleanConfigOf(ctx);
|
|
360
|
+
|
|
361
|
+
if (!cfg.Active)
|
|
362
|
+
{
|
|
363
|
+
return val;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
if (val is string s)
|
|
367
|
+
{
|
|
368
|
+
return CleanString(cfg, s);
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
if (val is ProjectNameError err)
|
|
372
|
+
{
|
|
373
|
+
err.SetMessage(CleanString(cfg, err.Message));
|
|
374
|
+
err.Code = CleanString(cfg, err.Code);
|
|
375
|
+
if (err.ResultVal != null && err.ResultVal is not string)
|
|
376
|
+
{
|
|
377
|
+
err.ResultVal = CleanSnapshot(cfg, err.ResultVal, "result", 1, new List<object>());
|
|
378
|
+
}
|
|
379
|
+
if (err.SpecVal != null && err.SpecVal is not string)
|
|
380
|
+
{
|
|
381
|
+
err.SpecVal = CleanSnapshot(cfg, err.SpecVal, "spec", 1, new List<object>());
|
|
382
|
+
}
|
|
383
|
+
return err;
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
// Exception's message is read-only, so a foreign exception leaves as a
|
|
387
|
+
// cleaned copy of the SDK's own error, without the raw one as its cause.
|
|
388
|
+
if (val is Exception ex)
|
|
389
|
+
{
|
|
390
|
+
return new ProjectNameError("", CleanString(cfg, ex.Message), null);
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
var out_ = CleanSnapshot(cfg, val, null, 0, new List<object>());
|
|
394
|
+
return ReferenceEquals(out_, CleanDrop) ? null : out_;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
internal static bool CleanKeyUtil(Context ctx, object? key)
|
|
398
|
+
{
|
|
399
|
+
return CleanSensitiveKey(CleanConfigOf(ctx), key);
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
// Every scalar under a sensitive name, at any depth and of any shape: a
|
|
403
|
+
// credential mistyped as a map or a number is still a credential, and the
|
|
404
|
+
// validation error that rejects it quotes it.
|
|
405
|
+
internal static void CleanAddSensitive(Context ctx, object? val)
|
|
406
|
+
{
|
|
407
|
+
CleanAddSensitiveIn(CleanConfigOf(ctx), val, false, 0, new List<object>());
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
private static void CleanAddSensitiveIn(CleanConfig cfg, object? val, bool under,
|
|
411
|
+
int depth, List<object> seen)
|
|
412
|
+
{
|
|
413
|
+
if (val == null || CleanMaxDepth <= depth)
|
|
414
|
+
{
|
|
415
|
+
return;
|
|
416
|
+
}
|
|
417
|
+
if (val is string s)
|
|
418
|
+
{
|
|
419
|
+
if (under) CleanRegister(cfg, s);
|
|
420
|
+
return;
|
|
421
|
+
}
|
|
422
|
+
if (CleanIsNumber(val))
|
|
423
|
+
{
|
|
424
|
+
if (under) CleanRegister(cfg, Convert.ToString(val, CultureInfo.InvariantCulture));
|
|
425
|
+
return;
|
|
426
|
+
}
|
|
427
|
+
if (seen.Any(o => ReferenceEquals(o, val)))
|
|
428
|
+
{
|
|
429
|
+
return;
|
|
430
|
+
}
|
|
431
|
+
if (val is IDictionary dict)
|
|
432
|
+
{
|
|
433
|
+
seen.Add(val);
|
|
434
|
+
foreach (DictionaryEntry kv in dict)
|
|
435
|
+
{
|
|
436
|
+
CleanAddSensitiveIn(cfg, kv.Value,
|
|
437
|
+
under || CleanSensitiveKey(cfg, Convert.ToString(kv.Key)), depth + 1, seen);
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
else if (val is IList list)
|
|
441
|
+
{
|
|
442
|
+
seen.Add(val);
|
|
443
|
+
foreach (var item in list)
|
|
444
|
+
{
|
|
445
|
+
CleanAddSensitiveIn(cfg, item, under, depth + 1, seen);
|
|
446
|
+
}
|
|
447
|
+
}
|
|
10
448
|
}
|
|
11
449
|
}
|
|
@@ -6,17 +6,7 @@ public static partial class SdkUtility
|
|
|
6
6
|
{
|
|
7
7
|
internal static object? DoneUtil(Context ctx)
|
|
8
8
|
{
|
|
9
|
-
|
|
10
|
-
{
|
|
11
|
-
ctx.Ctrl.Explain =
|
|
12
|
-
CleanUtil(ctx, ctx.Ctrl.Explain) as Dictionary<string, object?>;
|
|
13
|
-
if (ctx.Ctrl.Explain != null &&
|
|
14
|
-
ctx.Ctrl.Explain.TryGetValue("result", out var explainResult) &&
|
|
15
|
-
explainResult is Dictionary<string, object?> rm)
|
|
16
|
-
{
|
|
17
|
-
rm.Remove("err");
|
|
18
|
-
}
|
|
19
|
-
}
|
|
9
|
+
CleanExplainUtil(ctx);
|
|
20
10
|
|
|
21
11
|
if (ctx.Result != null && ctx.Result.Ok)
|
|
22
12
|
{
|
|
@@ -25,4 +15,30 @@ public static partial class SdkUtility
|
|
|
25
15
|
|
|
26
16
|
return MakeErrorUtil(ctx, null);
|
|
27
17
|
}
|
|
18
|
+
|
|
19
|
+
// Refilled in place: the caller holds this very dictionary (the Context
|
|
20
|
+
// copied it out of the ctrl map), so a replacement would leave them
|
|
21
|
+
// reading the raw one. err is pruned from the cleaned copy of result only.
|
|
22
|
+
internal static void CleanExplainUtil(Context ctx)
|
|
23
|
+
{
|
|
24
|
+
var explain = ctx.Ctrl.Explain;
|
|
25
|
+
if (explain == null)
|
|
26
|
+
{
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
if (CleanUtil(ctx, explain) is Dictionary<string, object?> cleaned &&
|
|
30
|
+
!ReferenceEquals(cleaned, explain))
|
|
31
|
+
{
|
|
32
|
+
explain.Clear();
|
|
33
|
+
foreach (var kv in cleaned)
|
|
34
|
+
{
|
|
35
|
+
explain[kv.Key] = kv.Value;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (explain.TryGetValue("result", out var explainResult) &&
|
|
39
|
+
explainResult is Dictionary<string, object?> rm)
|
|
40
|
+
{
|
|
41
|
+
rm.Remove("err");
|
|
42
|
+
}
|
|
43
|
+
}
|
|
28
44
|
}
|
|
@@ -26,26 +26,37 @@ public static partial class SdkUtility
|
|
|
26
26
|
|
|
27
27
|
var errmsg = err.Message;
|
|
28
28
|
var msg = "ProjectNameSDK: " + opname + ": " + errmsg;
|
|
29
|
-
msg = CleanUtil(ctx, msg) as string ?? msg;
|
|
30
29
|
|
|
31
30
|
result.Err = null;
|
|
32
31
|
|
|
33
32
|
var spec = ctx.Spec;
|
|
34
33
|
|
|
34
|
+
// The context stays reachable on the error for a debugger; the error
|
|
35
|
+
// type keeps it out of every serialiser.
|
|
36
|
+
var sdkErr = new ProjectNameError(
|
|
37
|
+
err is ProjectNameError se ? se.Code : "", msg, ctx);
|
|
38
|
+
|
|
39
|
+
CleanUtil(ctx, sdkErr);
|
|
40
|
+
|
|
41
|
+
// Promote the HTTP status to the top level, so a consumer can branch on
|
|
42
|
+
// err.Status instead of reaching into err.ResultVal.
|
|
43
|
+
sdkErr.Status = result.Status;
|
|
44
|
+
|
|
45
|
+
// Reached from RunOp's catch as well as from Done, and a stage that
|
|
46
|
+
// throws never reaches Done's cleaning.
|
|
35
47
|
if (ctx.Ctrl.Explain != null)
|
|
36
48
|
{
|
|
49
|
+
CleanExplainUtil(ctx);
|
|
37
50
|
ctx.Ctrl.Explain["err"] = new Dictionary<string, object?>
|
|
38
51
|
{
|
|
39
|
-
["
|
|
52
|
+
["code"] = sdkErr.Code,
|
|
53
|
+
["message"] = sdkErr.Message,
|
|
54
|
+
["status"] = sdkErr.Status,
|
|
40
55
|
};
|
|
41
56
|
}
|
|
42
57
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
{
|
|
46
|
-
ResultVal = CleanUtil(ctx, result),
|
|
47
|
-
SpecVal = CleanUtil(ctx, spec),
|
|
48
|
-
};
|
|
58
|
+
sdkErr.ResultVal = CleanUtil(ctx, result);
|
|
59
|
+
sdkErr.SpecVal = CleanUtil(ctx, spec);
|
|
49
60
|
|
|
50
61
|
ctx.Ctrl.Err = sdkErr;
|
|
51
62
|
|