Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
92297a9
feat: make request retries explicit and safe
HardlyDifficult Jul 10, 2026
c21f390
fix: align Scan failover retryability
HardlyDifficult Jul 10, 2026
bc00876
fix: preserve read option types internally
HardlyDifficult Jul 10, 2026
8eeca33
fix: preserve Scan rotation predicates
HardlyDifficult Jul 10, 2026
c7a9c41
fix: stabilize derived retry parameters
HardlyDifficult Jul 10, 2026
852e5ba
fix: reject unsafe retry snapshot values
HardlyDifficult Jul 10, 2026
9d21bf6
fix: validate derived retry configuration
HardlyDifficult Jul 10, 2026
f3c5141
feat: harden interactive submissions end to end
HardlyDifficult Jul 10, 2026
a06669d
fix: align interactive submissions with live Ledger
HardlyDifficult Jul 10, 2026
2549f60
test: surface interactive submission errors
HardlyDifficult Jul 10, 2026
65aa083
test: align interactive E2E with pinned Splice
HardlyDifficult Jul 10, 2026
21764a3
ci: read pinned Splice version from source
HardlyDifficult Jul 10, 2026
8f7e8e6
test: align Quickstart fixture with pinned Splice
HardlyDifficult Jul 10, 2026
03e1f96
Merge origin/main into typed retry strategies
HardlyDifficult Jul 10, 2026
bed904d
fix: materialize cost estimation wire defaults
HardlyDifficult Jul 10, 2026
dfb886f
Merge codex/typed-operation-retry-strategies into codex/ledger-intera…
HardlyDifficult Jul 10, 2026
de5c3ae
fix: preserve interactive hashing scheme types
HardlyDifficult Jul 10, 2026
a743fd8
fix: make mutating operation semantics unrepresentable
HardlyDifficult Jul 10, 2026
6f3af6e
test: align external signing fixtures with strict APIs
HardlyDifficult Jul 10, 2026
d203f44
Merge remote-tracking branch 'origin/main' into codex/typed-operation…
HardlyDifficult Jul 10, 2026
be32b7e
fix: match interactive transaction wire formats
HardlyDifficult Jul 10, 2026
587985d
fix: enforce mutation-only operation semantics
HardlyDifficult Jul 10, 2026
067b9ef
Merge remote-tracking branch 'origin/codex/typed-operation-retry-stra…
HardlyDifficult Jul 10, 2026
edf1c11
fix(http): require request body snapshots
HardlyDifficult Jul 10, 2026
3875cc5
Merge remote-tracking branch 'origin/codex/typed-operation-retry-stra…
HardlyDifficult Jul 10, 2026
514c900
Merge origin/main into interactive submission foundation
HardlyDifficult Jul 10, 2026
e48c1ca
fix(traffic): make actor fallback total
HardlyDifficult Jul 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion .github/workflows/test-cn-quickstart.yml
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,13 @@ jobs:

- name: Start CN-Quickstart
run: |
npm run localnet:start
splice_version="$(tr -d '[:space:]' < libs/splice/VERSION)"
if [[ ! "${splice_version}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "Invalid pinned Splice version: ${splice_version}" >&2
exit 1
fi
echo "Starting CN-Quickstart with pinned Splice ${splice_version}"
CANTON_LOCALNET_SPLICE_VERSION="${splice_version}" npm run localnet:start
echo "✓ CN-Quickstart started"
timeout-minutes: 15

Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { createApiOperation } from '../../../../../core';
import {
InteractiveSubmissionExecuteAndWaitForTransactionRequestSchema,
InteractiveSubmissionExecuteAndWaitForTransactionResponseSchema,
type InteractiveSubmissionExecuteAndWaitForTransactionRequest,
type InteractiveSubmissionExecuteAndWaitForTransactionResponse,
} from '../../../schemas/api/interactive-submission';
/** Execute an interactive submission and wait for the resulting transaction. */
export const InteractiveSubmissionExecuteAndWaitForTransaction = createApiOperation<
InteractiveSubmissionExecuteAndWaitForTransactionRequest,
InteractiveSubmissionExecuteAndWaitForTransactionResponse
>({
paramsSchema: InteractiveSubmissionExecuteAndWaitForTransactionRequestSchema,
responseSchema: InteractiveSubmissionExecuteAndWaitForTransactionResponseSchema,
method: 'POST',
buildUrl: (_params, apiUrl) => `${apiUrl}/v2/interactive-submission/executeAndWaitForTransaction`,
buildRequestData: (params) => ({
...params,
deduplicationPeriod: params.deduplicationPeriod ?? { Empty: {} },
}),
getFreshRetryIdentifier: (params) => params.submissionId,
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { createApiOperation } from '../../../../../core';
import {
InteractiveSubmissionExecuteAndWaitRequestSchema,
InteractiveSubmissionExecuteAndWaitResponseSchema,
type InteractiveSubmissionExecuteAndWaitRequest,
type InteractiveSubmissionExecuteAndWaitResponse,
} from '../../../schemas/api/interactive-submission';
/** Execute an interactive submission and wait for its completion. */
export const InteractiveSubmissionExecuteAndWait = createApiOperation<
InteractiveSubmissionExecuteAndWaitRequest,
InteractiveSubmissionExecuteAndWaitResponse
>({
paramsSchema: InteractiveSubmissionExecuteAndWaitRequestSchema,
responseSchema: InteractiveSubmissionExecuteAndWaitResponseSchema,
method: 'POST',
buildUrl: (_params, apiUrl) => `${apiUrl}/v2/interactive-submission/executeAndWait`,
buildRequestData: (params) => ({
...params,
deduplicationPeriod: params.deduplicationPeriod ?? { Empty: {} },
}),
getFreshRetryIdentifier: (params) => params.submissionId,
});
Original file line number Diff line number Diff line change
@@ -1,18 +1,23 @@
import { createApiOperation } from '../../../../../core';
import {
InteractiveSubmissionExecuteRequestSchema,
InteractiveSubmissionExecuteResponseSchema,
type InteractiveSubmissionExecuteRequest,
type InteractiveSubmissionExecuteResponse,
} from '../../../schemas/api/interactive-submission';

/** Execute an interactive submission that has been previously prepared and signed. */
export const InteractiveSubmissionExecute = createApiOperation<
InteractiveSubmissionExecuteRequest,
InteractiveSubmissionExecuteResponse
>({
paramsSchema: InteractiveSubmissionExecuteRequestSchema,
responseSchema: InteractiveSubmissionExecuteResponseSchema,
method: 'POST',
buildUrl: (_params: InteractiveSubmissionExecuteRequest, apiUrl: string) =>
`${apiUrl}/v2/interactive-submission/execute`,
buildRequestData: (params) => params,
buildRequestData: (params) => ({
...params,
deduplicationPeriod: params.deduplicationPeriod ?? { Empty: {} },
}),
getFreshRetryIdentifier: (params) => params.submissionId,
});
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
import { createApiOperation } from '../../../../../core';
import { type GetPreferredPackageVersionResponse } from '../../../schemas/api';
import {
GetPreferredPackageVersionResponseSchema,
type GetPreferredPackageVersionResponse,
} from '../../../schemas/api';
import {
InteractiveSubmissionGetPreferredPackageVersionParamsSchema,
type InteractiveSubmissionGetPreferredPackageVersionParams,
Expand All @@ -23,6 +26,7 @@ export const InteractiveSubmissionGetPreferredPackageVersion = createApiOperatio
GetPreferredPackageVersionResponse
>({
paramsSchema: InteractiveSubmissionGetPreferredPackageVersionParamsSchema,
responseSchema: GetPreferredPackageVersionResponseSchema,
method: 'GET',
buildUrl: (params: InteractiveSubmissionGetPreferredPackageVersionParams, apiUrl: string) => {
const url = new URL(`${apiUrl}/v2/interactive-submission/preferred-package-version`);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { createApiOperation } from '../../../../../core';
import { type GetPreferredPackagesResponse } from '../../../schemas/api';
import { GetPreferredPackagesResponseSchema, type GetPreferredPackagesResponse } from '../../../schemas/api';
import {
InteractiveSubmissionGetPreferredPackagesParamsSchema,
type InteractiveSubmissionGetPreferredPackagesParams,
Expand Down Expand Up @@ -27,13 +27,10 @@ export const InteractiveSubmissionGetPreferredPackages = createApiOperation<
GetPreferredPackagesResponse
>({
paramsSchema: InteractiveSubmissionGetPreferredPackagesParamsSchema,
responseSchema: GetPreferredPackagesResponseSchema,
method: 'POST',
requestSemantics: 'read',
buildUrl: (_params: InteractiveSubmissionGetPreferredPackagesParams, apiUrl: string) =>
`${apiUrl}/v2/interactive-submission/preferred-packages`,
buildRequestData: (params: InteractiveSubmissionGetPreferredPackagesParams) => ({
packageVettingRequirements: params.packageVettingRequirements,
synchronizerId: params.synchronizerId,
vettingValidAt: params.vettingValidAt,
}),
buildRequestData: (params: InteractiveSubmissionGetPreferredPackagesParams) => params,
});
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
export * from './allocate-party';
export * from './create-user';
export * from './execute';
export * from './execute-and-wait';
export * from './execute-and-wait-for-transaction';
export * from './get-preferred-package-version';
export * from './get-preferred-packages';
export * from './prepare';
export * from './upload-dar';
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { createApiOperation } from '../../../../../core';
import {
InteractiveSubmissionPrepareRequestSchema,
InteractiveSubmissionPrepareResponseSchema,
type InteractiveSubmissionPrepareRequest,
type InteractiveSubmissionPrepareResponse,
} from '../../../schemas/api/interactive-submission';
Expand All @@ -11,9 +12,23 @@ export const InteractiveSubmissionPrepare = createApiOperation<
InteractiveSubmissionPrepareResponse
>({
paramsSchema: InteractiveSubmissionPrepareRequestSchema,
responseSchema: InteractiveSubmissionPrepareResponseSchema,
method: 'POST',
requestSemantics: 'read',
buildUrl: (_params: InteractiveSubmissionPrepareRequest, apiUrl: string) =>
`${apiUrl}/v2/interactive-submission/prepare`,
buildRequestData: (params) => params,
// Canton models these OpenAPI-optional fields as non-defaulted Scala values at the JSON boundary.
buildRequestData: (params) => ({
...params,
synchronizerId: params.synchronizerId ?? '',
packageIdSelectionPreference: params.packageIdSelectionPreference ?? [],
Comment thread
HardlyDifficult marked this conversation as resolved.
...(params.estimateTrafficCost === undefined
? {}
: {
estimateTrafficCost: {
...params.estimateTrafficCost,
expectedSignatures: params.estimateTrafficCost.expectedSignatures ?? [],
},
}),
}),
});

This file was deleted.

Loading
Loading