@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.
@@ -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 <<'EOF'
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
  }
@@ -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 'DOCKER_NETWORK=quickstart\nSPLICE_VERSION=0.6.5\n' > "$quickstart_dir/.env"
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 {'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@distrohelena/canton-typescript-sdk",
3
- "version": "0.1.20",
3
+ "version": "0.1.22",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",