@distrohelena/canton-typescript-sdk 0.1.20 → 0.1.22
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/node/start-local.sh +38 -4
- package/node/test-start-local.sh +72 -2
- package/package.json +1 -1
package/node/start-local.sh
CHANGED
|
@@ -107,6 +107,14 @@ resolve_tls_enabled() {
|
|
|
107
107
|
printf '%s\n' "$value"
|
|
108
108
|
}
|
|
109
109
|
|
|
110
|
+
localnet_http_scheme() {
|
|
111
|
+
if [[ "$(resolve_tls_enabled)" == "1" ]]; then
|
|
112
|
+
printf 'https\n'
|
|
113
|
+
else
|
|
114
|
+
printf 'http\n'
|
|
115
|
+
fi
|
|
116
|
+
}
|
|
117
|
+
|
|
110
118
|
resolve_tls_rotate() {
|
|
111
119
|
local value="${LOCALNET_TLS_ROTATE:-0}"
|
|
112
120
|
if [[ "$value" != "0" && "$value" != "1" ]]; then
|
|
@@ -136,6 +144,8 @@ prepare_tls_runtime_files() {
|
|
|
136
144
|
local compose_file="$runtime_dir/compose-localnet.yaml"
|
|
137
145
|
local tls_fragment_file="$runtime_dir/canton-tls.conf"
|
|
138
146
|
local canton_config_file="$runtime_dir/canton-localnet.conf"
|
|
147
|
+
local onboarding_utils_source="$MODULES_DIR/splice-onboarding/docker/utils.sh"
|
|
148
|
+
local onboarding_utils_file="$runtime_dir/splice-onboarding-utils.sh"
|
|
139
149
|
local supplied_count=0
|
|
140
150
|
|
|
141
151
|
[[ -n "${LOCALNET_TLS_CERT_CHAIN_PATH:-}" ]] && ((supplied_count += 1))
|
|
@@ -180,6 +190,11 @@ prepare_tls_runtime_files() {
|
|
|
180
190
|
openssl req -x509 -new -sha256 -days 3650 -key "$ca_key_path" \
|
|
181
191
|
-subj "/CN=localnet-tls-ca" -out "$ca_certificate_path" >/dev/null 2>&1
|
|
182
192
|
fi
|
|
193
|
+
if [[ -e "$server_certificate_path" ]] \
|
|
194
|
+
&& ! openssl x509 -in "$server_certificate_path" -noout -ext subjectAltName 2>/dev/null \
|
|
195
|
+
| grep -Fq 'IP Address:127.0.0.1, IP Address:0.0.0.0'; then
|
|
196
|
+
rm -f "$server_key_path" "$server_certificate_path"
|
|
197
|
+
fi
|
|
183
198
|
if [[ ! -e "$server_key_path" || ! -e "$server_certificate_path" ]]; then
|
|
184
199
|
rm -f "$server_key_path" "$server_certificate_path"
|
|
185
200
|
local csr_path="$runtime_dir/server.csr"
|
|
@@ -192,7 +207,7 @@ prepare_tls_runtime_files() {
|
|
|
192
207
|
basicConstraints = CA:FALSE
|
|
193
208
|
keyUsage = digitalSignature, keyEncipherment
|
|
194
209
|
extendedKeyUsage = serverAuth
|
|
195
|
-
subjectAltName = DNS:localhost, DNS:canton, IP:127.0.0.1
|
|
210
|
+
subjectAltName = DNS:localhost, DNS:canton, IP:127.0.0.1, IP:0.0.0.0
|
|
196
211
|
EOF
|
|
197
212
|
openssl x509 -req -sha256 -days 3650 -in "$csr_path" \
|
|
198
213
|
-CA "$ca_certificate_path" -CAkey "$ca_key_path" -CAcreateserial \
|
|
@@ -207,6 +222,15 @@ EOF
|
|
|
207
222
|
fi
|
|
208
223
|
fi
|
|
209
224
|
|
|
225
|
+
if [[ ! -r "$onboarding_utils_source" ]]; then
|
|
226
|
+
echo "Unable to read Splice onboarding utilities at $onboarding_utils_source." >&2
|
|
227
|
+
return 1
|
|
228
|
+
fi
|
|
229
|
+
sed \
|
|
230
|
+
-e 's#http://\$participant#${LOCALNET_HTTP_SCHEME:-http}://$participant#g' \
|
|
231
|
+
-e 's#http://\$validator#${LOCALNET_HTTP_SCHEME:-http}://$validator#g' \
|
|
232
|
+
"$onboarding_utils_source" > "$onboarding_utils_file"
|
|
233
|
+
|
|
210
234
|
: > "$tls_fragment_file"
|
|
211
235
|
local participant profile
|
|
212
236
|
for participant in app-provider app-user sv; do
|
|
@@ -250,6 +274,13 @@ services:
|
|
|
250
274
|
environment:
|
|
251
275
|
- |
|
|
252
276
|
ADDITIONAL_CONFIG_LOCALNET_TLS=
|
|
277
|
+
splice-onboarding:
|
|
278
|
+
volumes:
|
|
279
|
+
- "$ca_certificate_path:/app/localnet-tls/ca.crt:ro"
|
|
280
|
+
- "$onboarding_utils_file:/app/utils.sh:ro"
|
|
281
|
+
environment:
|
|
282
|
+
- LOCALNET_HTTP_SCHEME=https
|
|
283
|
+
- CURL_CA_BUNDLE=/app/localnet-tls/ca.crt
|
|
253
284
|
EOF
|
|
254
285
|
for participant in app-provider app-user sv; do
|
|
255
286
|
case "$participant" in
|
|
@@ -813,7 +844,7 @@ EOF
|
|
|
813
844
|
if [[ "$(resolve_tls_enabled)" == "1" ]]; then
|
|
814
845
|
printf ' - "%s:/app/localnet-tls/ca.crt:ro"\n' "${LOCALNET_TLS_CA_CERT_PATH}"
|
|
815
846
|
fi
|
|
816
|
-
cat <<
|
|
847
|
+
cat <<EOF
|
|
817
848
|
command:
|
|
818
849
|
- pipeline
|
|
819
850
|
- ledger
|
|
@@ -946,6 +977,7 @@ provision_extra_pqs() {
|
|
|
946
977
|
-e EXTRA_PARTICIPANT_PARTY_HINT="extra_${index}_${PARTY_HINT_BASE}" \
|
|
947
978
|
-e EXTRA_PQS_USER_NAME="${name}-pqs-user" \
|
|
948
979
|
-e EXTRA_PQS_CONFIG_FILE="${name}-pqs.conf" \
|
|
980
|
+
-e LOCALNET_HTTP_SCHEME="$(localnet_http_scheme)" \
|
|
949
981
|
splice-onboarding \
|
|
950
982
|
bash -lc '
|
|
951
983
|
set -euo pipefail
|
|
@@ -979,6 +1011,7 @@ grant_validator_read_as_any_party_right() {
|
|
|
979
1011
|
-e VALIDATOR_USER_NAME="$validator_user_name" \
|
|
980
1012
|
-e VALIDATOR_AUTH_AUDIENCE="$auth_audience" \
|
|
981
1013
|
-e PARTICIPANT_JSON_API_PORT="$participant_json_port" \
|
|
1014
|
+
-e LOCALNET_HTTP_SCHEME="$(localnet_http_scheme)" \
|
|
982
1015
|
splice-onboarding \
|
|
983
1016
|
bash -lc '
|
|
984
1017
|
set -euo pipefail
|
|
@@ -995,7 +1028,7 @@ payload="$(cat <<EOF
|
|
|
995
1028
|
}
|
|
996
1029
|
EOF
|
|
997
1030
|
)"
|
|
998
|
-
curl_check "http://$participant/v2/users/$VALIDATOR_USER_NAME/rights" "$validator_token" "application/json" \
|
|
1031
|
+
curl_check "${LOCALNET_HTTP_SCHEME:-http}://$participant/v2/users/$VALIDATOR_USER_NAME/rights" "$validator_token" "application/json" \
|
|
999
1032
|
--data-raw "$payload" >/dev/null
|
|
1000
1033
|
'
|
|
1001
1034
|
}
|
|
@@ -1009,6 +1042,7 @@ grant_user_read_as_any_party_right() {
|
|
|
1009
1042
|
-e TARGET_USER_NAME="$user_name" \
|
|
1010
1043
|
-e TARGET_AUTH_AUDIENCE="$auth_audience" \
|
|
1011
1044
|
-e PARTICIPANT_JSON_API_PORT="$participant_json_port" \
|
|
1045
|
+
-e LOCALNET_HTTP_SCHEME="$(localnet_http_scheme)" \
|
|
1012
1046
|
splice-onboarding \
|
|
1013
1047
|
bash -lc '
|
|
1014
1048
|
set -euo pipefail
|
|
@@ -1025,7 +1059,7 @@ payload="$(cat <<EOF
|
|
|
1025
1059
|
}
|
|
1026
1060
|
EOF
|
|
1027
1061
|
)"
|
|
1028
|
-
curl_check "http://$participant/v2/users/$TARGET_USER_NAME/rights" "$admin_token" "application/json" \
|
|
1062
|
+
curl_check "${LOCALNET_HTTP_SCHEME:-http}://$participant/v2/users/$TARGET_USER_NAME/rights" "$admin_token" "application/json" \
|
|
1029
1063
|
--data-raw "$payload" >/dev/null
|
|
1030
1064
|
'
|
|
1031
1065
|
}
|
package/node/test-start-local.sh
CHANGED
|
@@ -6,6 +6,7 @@ SCRIPT_DIR="$REPO_ROOT/node"
|
|
|
6
6
|
REPO_ENV_FILE="$REPO_ROOT/.env"
|
|
7
7
|
|
|
8
8
|
tmpdir="$(mktemp -d)"
|
|
9
|
+
real_docker="$(command -v docker || true)"
|
|
9
10
|
root_env_backup="$tmpdir/root-env.backup"
|
|
10
11
|
root_env_exists=0
|
|
11
12
|
if [[ -f "$REPO_ENV_FILE" ]]; then
|
|
@@ -53,15 +54,49 @@ run_case() {
|
|
|
53
54
|
"$generated_dir"
|
|
54
55
|
ln -s "$quickstart_dir" "$quickstart_root_dir/quickstart"
|
|
55
56
|
printf '%s\n' "$makefile_targets" > "$quickstart_dir/Makefile"
|
|
56
|
-
printf '
|
|
57
|
+
printf '%s\n' \
|
|
58
|
+
'DOCKER_NETWORK=quickstart' \
|
|
59
|
+
'SPLICE_VERSION=0.6.5' \
|
|
60
|
+
'SCRIBE_IMAGE=scribe' \
|
|
61
|
+
'SCRIBE_VERSION=test' \
|
|
62
|
+
'POSTGRES_VERSION=16' \
|
|
63
|
+
'DB_USER=test' \
|
|
64
|
+
'DB_PASSWORD=test' \
|
|
65
|
+
> "$quickstart_dir/.env"
|
|
66
|
+
cat > "$quickstart_dir/compose.yaml" <<'EOF'
|
|
67
|
+
volumes:
|
|
68
|
+
onboarding:
|
|
69
|
+
|
|
70
|
+
services:
|
|
71
|
+
postgres:
|
|
72
|
+
image: postgres:16
|
|
73
|
+
canton:
|
|
74
|
+
image: canton:test
|
|
75
|
+
splice:
|
|
76
|
+
image: splice:test
|
|
77
|
+
splice-onboarding:
|
|
78
|
+
image: onboarding:test
|
|
79
|
+
pqs-app-provider:
|
|
80
|
+
image: pqs:test
|
|
81
|
+
pqs-app-user:
|
|
82
|
+
image: pqs:test
|
|
83
|
+
pqs-sv:
|
|
84
|
+
image: pqs:test
|
|
85
|
+
EOF
|
|
57
86
|
printf 'AUTH_MODE=%s\n' "$auth_mode" > "$quickstart_dir/.env.local"
|
|
58
|
-
: > "$quickstart_dir/compose.yaml"
|
|
59
87
|
: > "$quickstart_dir/docker/modules/localnet/compose.yaml"
|
|
60
88
|
: > "$quickstart_dir/docker/modules/localnet/compose.env"
|
|
61
89
|
: > "$quickstart_dir/docker/modules/localnet/env/common.env"
|
|
62
90
|
: > "$quickstart_dir/docker/modules/pqs/compose.yaml"
|
|
63
91
|
: > "$quickstart_dir/docker/modules/pqs/compose.env"
|
|
64
92
|
: > "$quickstart_dir/docker/modules/splice-onboarding/compose.yaml"
|
|
93
|
+
printf '%s\n' \
|
|
94
|
+
'curl_check "http://$participant/v2/users"' \
|
|
95
|
+
'curl_check "http://$validator/api/validator/v0/scan-proxy/dso-party-id"' \
|
|
96
|
+
> "$quickstart_dir/docker/modules/splice-onboarding/docker-utils.sh"
|
|
97
|
+
mkdir -p "$quickstart_dir/docker/modules/splice-onboarding/docker"
|
|
98
|
+
mv "$quickstart_dir/docker/modules/splice-onboarding/docker-utils.sh" \
|
|
99
|
+
"$quickstart_dir/docker/modules/splice-onboarding/docker/utils.sh"
|
|
65
100
|
: > "$quickstart_dir/docker/modules/keycloak/compose.yaml"
|
|
66
101
|
: > "$quickstart_dir/docker/modules/keycloak/compose.env"
|
|
67
102
|
|
|
@@ -401,6 +436,30 @@ assert_file_contains "$tmpdir/generated/additional-config.extra-validators.conf"
|
|
|
401
436
|
assert_file_contains "$tmpdir/generated/additional-config.extra-validators.conf" ' validator-party-hint = "${EXTRA_VALIDATOR_1_PARTY_HINT}"'
|
|
402
437
|
assert_file_contains "$tmpdir/generated/additional-config.extra-validators.conf" ' domains.global.buy-extra-traffic {'
|
|
403
438
|
assert_file_contains "$tmpdir/generated/additional-config.extra-validators.conf" 'canton.sv-apps.sv.expected-validator-onboardings += { secret = "${EXTRA_VALIDATOR_3_ONBOARDING_SECRET}" }'
|
|
439
|
+
run_case $'.PHONY: start\nstart:\n' 'stub env AUTH_MODE=shared-secret' shared-secret default 2 '' '' 0 1
|
|
440
|
+
assert_file_contains_text "$tmpdir/generated/additional-config.extra-participants.conf" 'canton.participants.extra-1.ledger-api.tls {'
|
|
441
|
+
assert_file_contains_text "$tmpdir/generated/additional-config.extra-validators.conf" 'canton.validator-apps.extra-1-validator_backend.participant-client {'
|
|
442
|
+
compose_config="$tmpdir/extra-tls-compose.config"
|
|
443
|
+
if [[ -n "$real_docker" ]] && "$real_docker" compose version >/dev/null 2>&1; then
|
|
444
|
+
if ! "$real_docker" compose \
|
|
445
|
+
-f "$tmpdir/quickstart/compose.yaml" \
|
|
446
|
+
-f "$tmpdir/quickstart/docker/modules/localnet/compose.yaml" \
|
|
447
|
+
-f "$tmpdir/quickstart/docker/modules/splice-onboarding/compose.yaml" \
|
|
448
|
+
-f "$tmpdir/quickstart/docker/modules/pqs/compose.yaml" \
|
|
449
|
+
-f "$tmpdir/generated/compose-extra-participants.yaml" \
|
|
450
|
+
-f "$tmpdir/tls/compose-localnet.yaml" \
|
|
451
|
+
--env-file "$tmpdir/quickstart/.env" \
|
|
452
|
+
--env-file "$tmpdir/quickstart/.env.local" \
|
|
453
|
+
--env-file "$tmpdir/generated/extra-participants.env" \
|
|
454
|
+
config > "$compose_config" 2>&1; then
|
|
455
|
+
echo 'extra participants plus TLS did not produce valid merged Compose configuration' >&2
|
|
456
|
+
cat "$compose_config" >&2
|
|
457
|
+
exit 1
|
|
458
|
+
fi
|
|
459
|
+
else
|
|
460
|
+
assert_file_contains_text "$tmpdir/generated/compose-extra-participants.yaml" ' postgres-pqs-extra-1:'
|
|
461
|
+
assert_file_contains_text "$tmpdir/generated/compose-extra-participants.yaml" ' postgres-pqs-extra-1:'
|
|
462
|
+
fi
|
|
404
463
|
run_case $'.PHONY: start-local-ledger\nstart-local-ledger:\n' 'stub docker compose -f compose.yaml -f '"$tmpdir"'/quickstart/docker/modules/localnet/compose.yaml -f '"$tmpdir"'/quickstart/docker/modules/splice-onboarding/compose.yaml -f '"$tmpdir"'/quickstart/docker/modules/pqs/compose.yaml --env-file .env --env-file .env.local --env-file '"$tmpdir"'/quickstart/docker/modules/localnet/compose.env --env-file '"$tmpdir"'/quickstart/docker/modules/localnet/env/common.env --env-file '"$tmpdir"'/quickstart/docker/modules/pqs/compose.env --profile app-provider --profile pqs-app-provider --profile pqs-sv -f '"$tmpdir"'/tls/compose-localnet.yaml down -v --remove-orphans' shared-secret default 0 '' '' 0 1
|
|
405
464
|
assert_file_contains_text "$tmpdir/tls/canton-tls.conf" 'canton.participants.app-provider.ledger-api.tls {'
|
|
406
465
|
assert_file_contains_text "$tmpdir/tls/canton-tls.conf" 'canton.participants.app-provider.admin-api.tls {'
|
|
@@ -413,15 +472,26 @@ fi
|
|
|
413
472
|
assert_file_contains_text "$tmpdir/tls/compose-localnet.yaml" '/app/localnet-tls/server.key:ro'
|
|
414
473
|
assert_file_contains_text "$tmpdir/tls/compose-localnet.yaml" '/app/localnet-tls/ca.crt:ro'
|
|
415
474
|
assert_file_contains_text "$tmpdir/tls/compose-localnet.yaml" 'ADDITIONAL_CONFIG_LOCALNET_TLS='
|
|
475
|
+
assert_file_contains_text "$tmpdir/tls/compose-localnet.yaml" 'LOCALNET_HTTP_SCHEME=https'
|
|
476
|
+
assert_file_contains_text "$tmpdir/tls/compose-localnet.yaml" 'CURL_CA_BUNDLE=/app/localnet-tls/ca.crt'
|
|
477
|
+
assert_file_contains_text "$tmpdir/tls/compose-localnet.yaml" "$tmpdir/tls/splice-onboarding-utils.sh:/app/utils.sh:ro"
|
|
416
478
|
assert_file_contains_text "$tmpdir/tls/compose-localnet.yaml" 'admin-api.tls.trust-collection-file = "/app/localnet-tls/ca.crt"'
|
|
417
479
|
assert_file_contains_text "$tmpdir/tls/compose-localnet.yaml" 'ledger-api.client-config.tls.trust-collection-file = "/app/localnet-tls/ca.crt"'
|
|
418
480
|
assert_file_contains_text "$tmpdir/tls/compose-localnet.yaml" 'SCRIBE_SOURCE_LEDGER_TLS_CAFILE: /app/localnet-tls/ca.crt'
|
|
481
|
+
assert_file_contains_text "$tmpdir/tls/splice-onboarding-utils.sh" '${LOCALNET_HTTP_SCHEME:-http}://$participant/v2/users'
|
|
482
|
+
assert_file_contains_text "$tmpdir/tls/splice-onboarding-utils.sh" '${LOCALNET_HTTP_SCHEME:-http}://$validator/api/validator/v0/scan-proxy/dso-party-id'
|
|
419
483
|
if grep -Fq 'canton.validator-apps.app-user-validator_backend.participant-client' "$tmpdir/tls/compose-localnet.yaml"; then
|
|
420
484
|
echo "unexpected client TLS configuration for inactive app-user participant" >&2
|
|
421
485
|
exit 1
|
|
422
486
|
fi
|
|
423
487
|
assert_file_mode "$tmpdir/tls/server.key" 600
|
|
424
488
|
assert_file_mode "$tmpdir/tls/ca.key" 600
|
|
489
|
+
if ! openssl x509 -in "$tmpdir/tls/server.crt" -text -noout \
|
|
490
|
+
| grep -Fq 'IP Address:127.0.0.1, IP Address:0.0.0.0'; then
|
|
491
|
+
echo 'generated TLS certificate is missing the 0.0.0.0 subject alternative name' >&2
|
|
492
|
+
openssl x509 -in "$tmpdir/tls/server.crt" -text -noout >&2
|
|
493
|
+
exit 1
|
|
494
|
+
fi
|
|
425
495
|
run_case $'.PHONY: start\nstart:\n' 'stub docker compose -f compose.yaml -f '"$tmpdir"'/quickstart/docker/modules/localnet/compose.yaml -f '"$tmpdir"'/quickstart/docker/modules/splice-onboarding/compose.yaml -f '"$tmpdir"'/quickstart/docker/modules/pqs/compose.yaml --env-file .env --env-file .env.local --env-file '"$tmpdir"'/quickstart/docker/modules/localnet/compose.env --env-file '"$tmpdir"'/quickstart/docker/modules/localnet/env/common.env --env-file '"$tmpdir"'/quickstart/docker/modules/pqs/compose.env --profile app-provider --profile pqs-app-provider --profile pqs-sv -f '"$tmpdir"'/generated/compose-extra-participants.yaml --env-file '"$tmpdir"'/generated/extra-participants.env -f '"$tmpdir"'/tls/compose-localnet.yaml down -v --remove-orphans' shared-secret default 2 '' '' 0 1
|
|
426
496
|
assert_file_contains_text "$tmpdir/generated/additional-config.extra-participants.conf" 'canton.participants.extra-1.ledger-api.tls {'
|
|
427
497
|
assert_file_contains_text "$tmpdir/generated/additional-config.extra-participants.conf" 'canton.participants.extra-2.admin-api.tls {'
|