cantonjs 0.2.0 → 0.3.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/README.md +149 -59
- package/dist/cjs/auth/index.d.ts +2 -0
- package/dist/cjs/auth/index.d.ts.map +1 -0
- package/dist/cjs/auth/index.js +3 -0
- package/dist/cjs/auth/index.js.map +1 -0
- package/dist/cjs/auth/types.d.ts +27 -0
- package/dist/cjs/auth/types.d.ts.map +1 -0
- package/dist/cjs/auth/types.js +3 -0
- package/dist/cjs/auth/types.js.map +1 -0
- package/dist/cjs/chains/definitions.d.ts +5 -11
- package/dist/cjs/chains/definitions.d.ts.map +1 -1
- package/dist/cjs/chains/definitions.js +59 -13
- package/dist/cjs/chains/definitions.js.map +1 -1
- package/dist/cjs/chains/index.d.ts +2 -1
- package/dist/cjs/chains/index.d.ts.map +1 -1
- package/dist/cjs/chains/index.js +19 -6
- package/dist/cjs/chains/index.js.map +1 -1
- package/dist/cjs/chains/presets.d.ts +59 -0
- package/dist/cjs/chains/presets.d.ts.map +1 -0
- package/dist/cjs/chains/presets.js +55 -0
- package/dist/cjs/chains/presets.js.map +1 -0
- package/dist/cjs/errors/auth.d.ts +6 -0
- package/dist/cjs/errors/auth.d.ts.map +1 -1
- package/dist/cjs/errors/auth.js +17 -1
- package/dist/cjs/errors/auth.js.map +1 -1
- package/dist/cjs/errors/index.d.ts +1 -1
- package/dist/cjs/errors/index.d.ts.map +1 -1
- package/dist/cjs/errors/index.js +2 -1
- package/dist/cjs/errors/index.js.map +1 -1
- package/dist/cjs/index.d.ts +5 -4
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +9 -6
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/testing/setupSandbox.d.ts +11 -1
- package/dist/cjs/testing/setupSandbox.d.ts.map +1 -1
- package/dist/cjs/testing/setupSandbox.js +25 -13
- package/dist/cjs/testing/setupSandbox.js.map +1 -1
- package/dist/cjs/transport/grpc.d.ts +2 -4
- package/dist/cjs/transport/grpc.d.ts.map +1 -1
- package/dist/cjs/transport/grpc.js +28 -16
- package/dist/cjs/transport/grpc.js.map +1 -1
- package/dist/cjs/transport/index.d.ts +1 -1
- package/dist/cjs/transport/index.d.ts.map +1 -1
- package/dist/cjs/transport/json-api.d.ts +1 -1
- package/dist/cjs/transport/json-api.d.ts.map +1 -1
- package/dist/cjs/transport/json-api.js +19 -5
- package/dist/cjs/transport/json-api.js.map +1 -1
- package/dist/cjs/transport/types.d.ts +13 -3
- package/dist/cjs/transport/types.d.ts.map +1 -1
- package/dist/cjs/transport/types.js +40 -0
- package/dist/cjs/transport/types.js.map +1 -1
- package/dist/esm/auth/index.d.ts +2 -0
- package/dist/esm/auth/index.d.ts.map +1 -0
- package/dist/esm/auth/index.js +2 -0
- package/dist/esm/auth/index.js.map +1 -0
- package/dist/esm/auth/types.d.ts +27 -0
- package/dist/esm/auth/types.d.ts.map +1 -0
- package/dist/esm/auth/types.js +2 -0
- package/dist/esm/auth/types.js.map +1 -0
- package/dist/esm/chains/definitions.d.ts +5 -11
- package/dist/esm/chains/definitions.d.ts.map +1 -1
- package/dist/esm/chains/definitions.js +59 -13
- package/dist/esm/chains/definitions.js.map +1 -1
- package/dist/esm/chains/index.d.ts +2 -1
- package/dist/esm/chains/index.d.ts.map +1 -1
- package/dist/esm/chains/index.js +2 -1
- package/dist/esm/chains/index.js.map +1 -1
- package/dist/esm/chains/presets.d.ts +59 -0
- package/dist/esm/chains/presets.d.ts.map +1 -0
- package/dist/esm/chains/presets.js +51 -0
- package/dist/esm/chains/presets.js.map +1 -0
- package/dist/esm/errors/auth.d.ts +6 -0
- package/dist/esm/errors/auth.d.ts.map +1 -1
- package/dist/esm/errors/auth.js +15 -0
- package/dist/esm/errors/auth.js.map +1 -1
- package/dist/esm/errors/index.d.ts +1 -1
- package/dist/esm/errors/index.d.ts.map +1 -1
- package/dist/esm/errors/index.js +1 -1
- package/dist/esm/errors/index.js.map +1 -1
- package/dist/esm/index.d.ts +5 -4
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/testing/setupSandbox.d.ts +11 -1
- package/dist/esm/testing/setupSandbox.d.ts.map +1 -1
- package/dist/esm/testing/setupSandbox.js +25 -14
- package/dist/esm/testing/setupSandbox.js.map +1 -1
- package/dist/esm/transport/grpc.d.ts +2 -4
- package/dist/esm/transport/grpc.d.ts.map +1 -1
- package/dist/esm/transport/grpc.js +28 -16
- package/dist/esm/transport/grpc.js.map +1 -1
- package/dist/esm/transport/index.d.ts +1 -1
- package/dist/esm/transport/index.d.ts.map +1 -1
- package/dist/esm/transport/json-api.d.ts +1 -1
- package/dist/esm/transport/json-api.d.ts.map +1 -1
- package/dist/esm/transport/json-api.js +19 -5
- package/dist/esm/transport/json-api.js.map +1 -1
- package/dist/esm/transport/types.d.ts +13 -3
- package/dist/esm/transport/types.d.ts.map +1 -1
- package/dist/esm/transport/types.js +38 -1
- package/dist/esm/transport/types.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/tsconfig.cjs.tsbuildinfo +1 -1
- package/package.json +12 -2
- package/src/auth/index.ts +7 -0
- package/src/auth/types.ts +30 -0
- package/src/chains/definitions.ts +77 -22
- package/src/chains/index.ts +2 -1
- package/src/chains/presets.ts +121 -0
- package/src/errors/auth.ts +16 -0
- package/src/errors/index.ts +1 -1
- package/src/index.ts +34 -7
- package/src/testing/setupSandbox.ts +45 -17
- package/src/transport/grpc.ts +33 -19
- package/src/transport/index.ts +7 -1
- package/src/transport/json-api.ts +24 -7
- package/src/transport/types.ts +63 -3
package/README.md
CHANGED
|
@@ -20,12 +20,15 @@ cantonjs is a modern, type-safe TypeScript library for the [Canton Network](http
|
|
|
20
20
|
|
|
21
21
|
**Companion CLI:** [cantonctl](https://github.com/merged-one/cantonctl) ("Hardhat for Canton")
|
|
22
22
|
|
|
23
|
+
Development policy: the included runtime surface is gated at 100% statements, branches, functions, and lines, and every coverage exclusion or inline `v8 ignore` must be justified in [`EXCLUSIONS.md`](./EXCLUSIONS.md).
|
|
24
|
+
|
|
23
25
|
## Features
|
|
24
26
|
|
|
25
27
|
- **Function exports, not classes** — tree-shakeable, ESM + CJS dual build
|
|
26
28
|
- **Type-safe codegen** — generate TypeScript from Daml DAR files
|
|
27
29
|
- **Real-time streaming** — AsyncIterator WebSocket streams with auto-reconnect
|
|
28
30
|
- **React hooks** — TanStack Query-powered hooks via [cantonjs-react](#cantonjs-react)
|
|
31
|
+
- **Splice ecosystem packages** — public Scan, Validator ANS, Token Standard, and wallet-boundary integrations
|
|
29
32
|
- **First-class testing** — mock transports, recording transports, Canton sandbox fixtures
|
|
30
33
|
- **Structured errors** — error codes, recovery hints, traversable cause chains
|
|
31
34
|
- **Zero runtime dependencies** — transports are injected, not bundled
|
|
@@ -36,6 +39,36 @@ cantonjs is a modern, type-safe TypeScript library for the [Canton Network](http
|
|
|
36
39
|
npm install cantonjs
|
|
37
40
|
```
|
|
38
41
|
|
|
42
|
+
## Package Map
|
|
43
|
+
|
|
44
|
+
The repo is now split into a stable Canton core plus focused Splice add-on packages.
|
|
45
|
+
|
|
46
|
+
| Package | Stability | Purpose |
|
|
47
|
+
| ------- | --------- | ------- |
|
|
48
|
+
| `cantonjs` | GA | Canton Ledger API V2 clients, transports, chains, streaming, errors, and codegen runtime types |
|
|
49
|
+
| `cantonjs-codegen` | GA | DAR-to-TypeScript code generation |
|
|
50
|
+
| `cantonjs-react` | GA | React hooks for participant-private ledger data |
|
|
51
|
+
| `cantonjs-splice-scan` | GA | Public Scan reads for DSO metadata, update history, and public ANS lookups |
|
|
52
|
+
| `cantonjs-splice-validator` | GA + legacy compatibility | Validator ANS, filtered GA Scan Proxy reads, and legacy wallet compatibility flows |
|
|
53
|
+
| `cantonjs-splice-interfaces` | GA | Stable Splice Daml interface descriptors and generated types |
|
|
54
|
+
| `cantonjs-splice-token-standard` | GA | Ledger-centric CIP-0056 helpers for new token transfer and allocation flows |
|
|
55
|
+
| `cantonjs-wallet-adapters` | Experimental | CIP-0103 wallet boundary adapters for browser and SDK interop |
|
|
56
|
+
|
|
57
|
+
## Stability Tiers
|
|
58
|
+
|
|
59
|
+
- **GA**: Covered by the normal semver promise for the pinned release line.
|
|
60
|
+
- **Legacy compatibility**: Still supported for existing integrations, but not the recommended starting point for new work.
|
|
61
|
+
- **Experimental**: May break in minor releases while the upstream surface is still moving.
|
|
62
|
+
|
|
63
|
+
Current compatibility target:
|
|
64
|
+
|
|
65
|
+
- **Canton GA line:** `3.4.x`
|
|
66
|
+
- **Splice GA line:** `0.5.x`
|
|
67
|
+
- **Vendored Splice artifacts:** `0.5.17`
|
|
68
|
+
- **Legacy wallet note:** `createLegacyWalletClient()` exists for old `wallet-external` flows, but new transfer flows should use `cantonjs-splice-token-standard`.
|
|
69
|
+
|
|
70
|
+
See [compatibility policy](./docs/compatibility.md) and [migration notes](./docs/MIGRATING_TO_SPLICE_SUPPORT.md).
|
|
71
|
+
|
|
39
72
|
## Quick Start
|
|
40
73
|
|
|
41
74
|
```typescript
|
|
@@ -60,17 +93,35 @@ const created = await client.createContract('#my-pkg:Main:Asset', {
|
|
|
60
93
|
})
|
|
61
94
|
|
|
62
95
|
// 4. Exercise a choice
|
|
63
|
-
const tx = await client.exerciseChoice(
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
'Transfer',
|
|
67
|
-
{ newOwner: 'Bob' },
|
|
68
|
-
)
|
|
96
|
+
const tx = await client.exerciseChoice('#my-pkg:Main:Asset', created.contractId, 'Transfer', {
|
|
97
|
+
newOwner: 'Bob',
|
|
98
|
+
})
|
|
69
99
|
|
|
70
100
|
// 5. Query active contracts
|
|
71
101
|
const contracts = await client.queryContracts('#my-pkg:Main:Asset')
|
|
72
102
|
```
|
|
73
103
|
|
|
104
|
+
Static bearer tokens remain supported. For request-scoped auth, provide an async token or session provider:
|
|
105
|
+
|
|
106
|
+
```typescript
|
|
107
|
+
import { createLedgerClient, jsonApi, type AuthProvider } from 'cantonjs'
|
|
108
|
+
|
|
109
|
+
const auth: AuthProvider = async ({ request }) => {
|
|
110
|
+
if (request.path.startsWith('/v2/state/')) return undefined
|
|
111
|
+
return await getFreshJwtForAudience('participant')
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
const transport = jsonApi({
|
|
115
|
+
url: 'http://localhost:7575',
|
|
116
|
+
auth,
|
|
117
|
+
})
|
|
118
|
+
|
|
119
|
+
const client = createLedgerClient({
|
|
120
|
+
transport,
|
|
121
|
+
actAs: 'Alice::1234',
|
|
122
|
+
})
|
|
123
|
+
```
|
|
124
|
+
|
|
74
125
|
## Streaming
|
|
75
126
|
|
|
76
127
|
Subscribe to real-time updates with auto-reconnect and offset tracking:
|
|
@@ -96,25 +147,53 @@ Import only what you need for smaller bundles:
|
|
|
96
147
|
import { createLedgerClient } from 'cantonjs/ledger'
|
|
97
148
|
import { createAdminClient } from 'cantonjs/admin'
|
|
98
149
|
import { createTestClient } from 'cantonjs/testing'
|
|
99
|
-
import { localNet, devNet, testNet, mainNet } from 'cantonjs/chains'
|
|
150
|
+
import { localNet, devNet, testNet, mainNet, withChainOverrides } from 'cantonjs/chains'
|
|
100
151
|
import type { TemplateDescriptor, InferPayload } from 'cantonjs/codegen'
|
|
101
152
|
```
|
|
102
153
|
|
|
154
|
+
## Network Presets
|
|
155
|
+
|
|
156
|
+
Built-in public presets are discovery-first. They carry public Scan discovery metadata, auth audience hints, and the pinned Splice release line, but they do not commit operator-specific participant or validator URLs.
|
|
157
|
+
|
|
158
|
+
Layer concrete deployment settings on top:
|
|
159
|
+
|
|
160
|
+
```typescript
|
|
161
|
+
import { devNet, withChainOverrides } from 'cantonjs/chains'
|
|
162
|
+
|
|
163
|
+
const chain = withChainOverrides(devNet, {
|
|
164
|
+
participant: {
|
|
165
|
+
jsonApiUrl: process.env.CANTON_JSON_API_URL,
|
|
166
|
+
},
|
|
167
|
+
scan: {
|
|
168
|
+
url: process.env.SPLICE_SCAN_URL,
|
|
169
|
+
},
|
|
170
|
+
validator: {
|
|
171
|
+
apiBaseUrl: process.env.SPLICE_VALIDATOR_URL,
|
|
172
|
+
},
|
|
173
|
+
})
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
`chain.scan.discoveryRoot` remains available when you need to resolve a live public Scan deployment from operator documentation first.
|
|
177
|
+
|
|
103
178
|
## Clients
|
|
104
179
|
|
|
105
|
-
| Client
|
|
106
|
-
|
|
107
|
-
| `createLedgerClient()` | Party-scoped contract operations (create, exercise, query, stream)
|
|
108
|
-
| `createAdminClient()`
|
|
109
|
-
| `createTestClient()`
|
|
180
|
+
| Client | Purpose |
|
|
181
|
+
| ---------------------- | ------------------------------------------------------------------- |
|
|
182
|
+
| `createLedgerClient()` | Party-scoped contract operations (create, exercise, query, stream) |
|
|
183
|
+
| `createAdminClient()` | Node administration (parties, users, packages, IDP) |
|
|
184
|
+
| `createTestClient()` | Sandbox testing (time control, party allocation, sandbox lifecycle) |
|
|
110
185
|
|
|
111
186
|
## Transports
|
|
112
187
|
|
|
113
|
-
| Transport
|
|
114
|
-
|
|
115
|
-
| `jsonApi({ url, token })`
|
|
116
|
-
| `
|
|
117
|
-
| `
|
|
188
|
+
| Transport | Description |
|
|
189
|
+
| ---------------------------------- | ------------------------------------------------------------------------------------- |
|
|
190
|
+
| `jsonApi({ url, token })` | HTTP transport for Canton JSON API V2 with static bearer auth |
|
|
191
|
+
| `jsonApi({ url, auth })` | HTTP transport with async per-request token lookup |
|
|
192
|
+
| `jsonApi({ url, session })` | HTTP transport with async per-request token and header injection |
|
|
193
|
+
| `grpc({ grpcTransport, token })` | gRPC via injected ConnectRPC client with static bearer auth |
|
|
194
|
+
| `grpc({ grpcTransport, auth })` | gRPC via injected ConnectRPC client with async per-request token lookup |
|
|
195
|
+
| `grpc({ grpcTransport, session })` | gRPC via injected ConnectRPC client with async per-request token and header injection |
|
|
196
|
+
| `fallback({ transports })` | Failover across multiple transports |
|
|
118
197
|
|
|
119
198
|
## Error Handling
|
|
120
199
|
|
|
@@ -133,14 +212,14 @@ try {
|
|
|
133
212
|
}
|
|
134
213
|
```
|
|
135
214
|
|
|
136
|
-
| Range
|
|
137
|
-
|
|
215
|
+
| Range | Domain |
|
|
216
|
+
| ------ | ------------------------------------------- |
|
|
138
217
|
| CJ1xxx | Transport (connection, HTTP, gRPC, timeout) |
|
|
139
|
-
| CJ2xxx | Authentication (JWT, token lifecycle)
|
|
140
|
-
| CJ3xxx | Ledger (command rejection, authorization)
|
|
141
|
-
| CJ4xxx | Admin (party, user, package management)
|
|
142
|
-
| CJ5xxx | Streaming (WebSocket, reconnection)
|
|
143
|
-
| CJ6xxx | Codegen (type mismatch, generation)
|
|
218
|
+
| CJ2xxx | Authentication (JWT, token lifecycle) |
|
|
219
|
+
| CJ3xxx | Ledger (command rejection, authorization) |
|
|
220
|
+
| CJ4xxx | Admin (party, user, package management) |
|
|
221
|
+
| CJ5xxx | Streaming (WebSocket, reconnection) |
|
|
222
|
+
| CJ6xxx | Codegen (type mismatch, generation) |
|
|
144
223
|
|
|
145
224
|
## Packages
|
|
146
225
|
|
|
@@ -151,7 +230,7 @@ Generate TypeScript types from Daml DAR files:
|
|
|
151
230
|
```bash
|
|
152
231
|
npm install --save-dev cantonjs-codegen
|
|
153
232
|
|
|
154
|
-
cantonjs-codegen --dar ./model.dar --output ./src/generated
|
|
233
|
+
npx cantonjs-codegen --dar ./model.dar --output ./src/generated
|
|
155
234
|
```
|
|
156
235
|
|
|
157
236
|
Records become type aliases, variants become discriminated unions, templates become companion const objects with `templateId` and choices. See [packages/cantonjs-codegen](./packages/cantonjs-codegen/).
|
|
@@ -165,8 +244,14 @@ npm install cantonjs-react @tanstack/react-query
|
|
|
165
244
|
```
|
|
166
245
|
|
|
167
246
|
```tsx
|
|
247
|
+
import { createLedgerClient, jsonApi } from 'cantonjs'
|
|
168
248
|
import { CantonProvider, useContracts, useCreateContract } from 'cantonjs-react'
|
|
169
249
|
|
|
250
|
+
const client = createLedgerClient({
|
|
251
|
+
transport: jsonApi({ url: 'http://localhost:7575', token: 'your-jwt-token' }),
|
|
252
|
+
actAs: 'Alice::1234',
|
|
253
|
+
})
|
|
254
|
+
|
|
170
255
|
function App() {
|
|
171
256
|
return (
|
|
172
257
|
<CantonProvider client={client}>
|
|
@@ -188,14 +273,12 @@ function AssetList() {
|
|
|
188
273
|
|
|
189
274
|
return (
|
|
190
275
|
<div>
|
|
191
|
-
<button onClick={() => create({ createArguments: { owner: 'Alice', value: 100 } })}>
|
|
276
|
+
<button onClick={() => create({ createArguments: { owner: 'Alice', value: '100' } })}>
|
|
192
277
|
Create
|
|
193
278
|
</button>
|
|
194
279
|
<ul>
|
|
195
|
-
{assets?.map(c => (
|
|
196
|
-
<li key={c.createdEvent.contractId}>
|
|
197
|
-
{JSON.stringify(c.createdEvent.createArgument)}
|
|
198
|
-
</li>
|
|
280
|
+
{assets?.map((c) => (
|
|
281
|
+
<li key={c.createdEvent.contractId}>{JSON.stringify(c.createdEvent.createArgument)}</li>
|
|
199
282
|
))}
|
|
200
283
|
</ul>
|
|
201
284
|
</div>
|
|
@@ -205,11 +288,21 @@ function AssetList() {
|
|
|
205
288
|
|
|
206
289
|
See [packages/cantonjs-react](./packages/cantonjs-react/).
|
|
207
290
|
|
|
291
|
+
`cantonjs-react` stays focused on participant-private ledger state. For public Splice data, use TanStack Query directly with `cantonjs-splice-scan`; see [docs/examples/react.md](./docs/examples/react.md).
|
|
292
|
+
|
|
293
|
+
### Splice Packages
|
|
294
|
+
|
|
295
|
+
- `cantonjs-splice-scan` — GA public Scan reads for DSO metadata, updates, and public ANS lookups. Experimental Scan routes stay behind `cantonjs-splice-scan/experimental`. See [docs/guide/scan.md](./docs/guide/scan.md).
|
|
296
|
+
- `cantonjs-splice-validator` — GA validator ANS plus the filtered GA Scan Proxy subset. `createLegacyWalletClient()` is legacy compatibility only and is not recommended for new transfer flows. See [docs/guide/validator-ans.md](./docs/guide/validator-ans.md).
|
|
297
|
+
- `cantonjs-splice-token-standard` and `cantonjs-splice-interfaces` — GA stable CIP-0056 descriptors and ledger-centric helpers for new transfer and allocation flows. See [docs/guide/token-standard.md](./docs/guide/token-standard.md).
|
|
298
|
+
- `cantonjs-wallet-adapters` — experimental CIP-0103 wallet boundary adapters for browser and SDK interop. See [docs/guide/wallet-adapters.md](./docs/guide/wallet-adapters.md).
|
|
299
|
+
|
|
208
300
|
## Testing
|
|
209
301
|
|
|
210
302
|
cantonjs provides first-class testing utilities. No `vi.mock()` needed — all dependencies are injected:
|
|
211
303
|
|
|
212
304
|
```typescript
|
|
305
|
+
import { createLedgerClient } from 'cantonjs'
|
|
213
306
|
import { createMockTransport } from 'cantonjs/testing'
|
|
214
307
|
|
|
215
308
|
const transport = createMockTransport({
|
|
@@ -225,31 +318,29 @@ Integration testing with a real Canton sandbox:
|
|
|
225
318
|
```typescript
|
|
226
319
|
import { setupCantonSandbox } from 'cantonjs/testing'
|
|
227
320
|
|
|
228
|
-
const sandbox = setupCantonSandbox(
|
|
229
|
-
cantonctlPath: 'cantonctl',
|
|
230
|
-
})
|
|
321
|
+
const sandbox = await setupCantonSandbox()
|
|
231
322
|
// sandbox.client is a fully configured TestClient
|
|
232
323
|
```
|
|
233
324
|
|
|
234
325
|
## Canton Concepts
|
|
235
326
|
|
|
236
|
-
| Concept
|
|
237
|
-
|
|
238
|
-
| **Party**
|
|
239
|
-
| **Template**
|
|
240
|
-
| **Choice**
|
|
241
|
-
| **ContractId**
|
|
242
|
-
| **DAR**
|
|
243
|
-
| **Synchronizer** | Consensus domain for transaction ordering
|
|
327
|
+
| Concept | Description |
|
|
328
|
+
| ---------------- | ------------------------------------------------------------ |
|
|
329
|
+
| **Party** | Identity unit (not an address), permissions via JWT |
|
|
330
|
+
| **Template** | Daml contract definition (`packageId:moduleName:entityName`) |
|
|
331
|
+
| **Choice** | Operation on a contract (like a function call) |
|
|
332
|
+
| **ContractId** | Unique UTXO-style identifier for a contract instance |
|
|
333
|
+
| **DAR** | Daml Archive — the deployment artifact |
|
|
334
|
+
| **Synchronizer** | Consensus domain for transaction ordering |
|
|
244
335
|
|
|
245
336
|
## Bundle Size
|
|
246
337
|
|
|
247
338
|
cantonjs is designed for minimal footprint:
|
|
248
339
|
|
|
249
|
-
| Entry Point
|
|
250
|
-
|
|
251
|
-
| `cantonjs`
|
|
252
|
-
| `cantonjs/ledger` | 1.1 KB
|
|
340
|
+
| Entry Point | Size (minified + brotli) |
|
|
341
|
+
| ----------------- | ------------------------ |
|
|
342
|
+
| `cantonjs` | 5.78 kB |
|
|
343
|
+
| `cantonjs/ledger` | 1.1 KB |
|
|
253
344
|
|
|
254
345
|
## Requirements
|
|
255
346
|
|
|
@@ -263,16 +354,15 @@ git clone https://github.com/merged-one/cantonjs.git
|
|
|
263
354
|
cd cantonjs
|
|
264
355
|
npm install
|
|
265
356
|
|
|
266
|
-
npm test # Run
|
|
357
|
+
npm test # Run root tests
|
|
358
|
+
npm run test:coverage # Enforced root coverage gate
|
|
359
|
+
npm run test:coverage:all # Root + package coverage gates
|
|
360
|
+
npm run verify:ci:pr # Full PR validation suite
|
|
267
361
|
npm run typecheck # Type-check
|
|
268
362
|
npm run lint # Lint
|
|
269
363
|
npm run build # Build ESM + CJS + types
|
|
270
364
|
npm run size # Bundle size audit
|
|
271
365
|
npm run docs:dev # Start docs dev server
|
|
272
|
-
|
|
273
|
-
# Packages
|
|
274
|
-
cd packages/cantonjs-codegen && npm test # 29 codegen tests
|
|
275
|
-
cd packages/cantonjs-react && npm test # 16 React tests
|
|
276
366
|
```
|
|
277
367
|
|
|
278
368
|
## Contributing
|
|
@@ -283,16 +373,16 @@ See [CONTRIBUTING.md](./CONTRIBUTING.md) for development setup, coding conventio
|
|
|
283
373
|
|
|
284
374
|
Design decisions are documented as Architecture Decision Records (ADRs):
|
|
285
375
|
|
|
286
|
-
| ADR
|
|
287
|
-
|
|
376
|
+
| ADR | Topic |
|
|
377
|
+
| ------------------------------------------------------ | -------------------------------- |
|
|
288
378
|
| [0001](./docs/adr/0001-typescript-function-exports.md) | TypeScript with function exports |
|
|
289
|
-
| [0002](./docs/adr/0002-transport-abstraction.md)
|
|
290
|
-
| [0003](./docs/adr/0003-party-scoped-clients.md)
|
|
291
|
-
| [0004](./docs/adr/0004-structured-error-model.md)
|
|
292
|
-
| [0005](./docs/adr/0005-streaming-architecture.md)
|
|
293
|
-
| [0006](./docs/adr/0006-testing-strategy.md)
|
|
294
|
-
| [0007](./docs/adr/0007-codegen-architecture.md)
|
|
295
|
-
| [0008](./docs/adr/0008-react-integration.md)
|
|
379
|
+
| [0002](./docs/adr/0002-transport-abstraction.md) | Transport abstraction |
|
|
380
|
+
| [0003](./docs/adr/0003-party-scoped-clients.md) | Party-scoped client architecture |
|
|
381
|
+
| [0004](./docs/adr/0004-structured-error-model.md) | Structured error model |
|
|
382
|
+
| [0005](./docs/adr/0005-streaming-architecture.md) | Streaming architecture |
|
|
383
|
+
| [0006](./docs/adr/0006-testing-strategy.md) | Testing strategy |
|
|
384
|
+
| [0007](./docs/adr/0007-codegen-architecture.md) | Codegen architecture |
|
|
385
|
+
| [0008](./docs/adr/0008-react-integration.md) | React integration |
|
|
296
386
|
|
|
297
387
|
## Related
|
|
298
388
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/auth/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,YAAY,EACZ,WAAW,EACX,WAAW,EACX,YAAY,EACZ,eAAe,GAChB,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/auth/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export type MaybePromise<T> = T | Promise<T>;
|
|
2
|
+
/** Request metadata exposed to auth/session providers. */
|
|
3
|
+
export type AuthContext = {
|
|
4
|
+
/** Transport type making the request, e.g. json-api or grpc. */
|
|
5
|
+
readonly transport: string;
|
|
6
|
+
/** Base URL for the target Canton endpoint. */
|
|
7
|
+
readonly url: string;
|
|
8
|
+
/** HTTP-style request metadata for the current transport call. */
|
|
9
|
+
readonly request: {
|
|
10
|
+
readonly method: 'GET' | 'POST' | 'PATCH' | 'DELETE';
|
|
11
|
+
readonly path: string;
|
|
12
|
+
readonly headers?: Readonly<Record<string, string>>;
|
|
13
|
+
readonly signal?: AbortSignal;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
/** A resolved auth session for a single request. */
|
|
17
|
+
export type AuthSession = {
|
|
18
|
+
/** Bearer token to attach as Authorization header. */
|
|
19
|
+
readonly token?: string;
|
|
20
|
+
/** Additional headers to attach for the current request. */
|
|
21
|
+
readonly headers?: Readonly<Record<string, string>>;
|
|
22
|
+
};
|
|
23
|
+
/** Per-request bearer token provider. */
|
|
24
|
+
export type AuthProvider = (context: AuthContext) => MaybePromise<string | undefined>;
|
|
25
|
+
/** Per-request session provider for auth headers and bearer tokens. */
|
|
26
|
+
export type SessionProvider = (context: AuthContext) => MaybePromise<AuthSession | undefined>;
|
|
27
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/auth/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;AAE5C,0DAA0D;AAC1D,MAAM,MAAM,WAAW,GAAG;IACxB,gEAAgE;IAChE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,+CAA+C;IAC/C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,kEAAkE;IAClE,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAA;QACpD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;QACnD,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAC9B,CAAA;CACF,CAAA;AAED,oDAAoD;AACpD,MAAM,MAAM,WAAW,GAAG;IACxB,sDAAsD;IACtD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,4DAA4D;IAC5D,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CACpD,CAAA;AAED,yCAAyC;AACzC,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,WAAW,KAAK,YAAY,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;AAErF,uEAAuE;AACvE,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,WAAW,KAAK,YAAY,CAAC,WAAW,GAAG,SAAS,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/auth/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,18 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Canton network chain definitions.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Public environments default to discovery-first metadata. Consumers can
|
|
5
|
+
* layer in deployment-specific participant, Scan, or validator URLs with
|
|
6
|
+
* `withChainOverrides()` without committing operator-specific endpoints.
|
|
6
7
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
readonly name: string;
|
|
10
|
-
readonly network: 'localnet' | 'devnet' | 'testnet' | 'mainnet';
|
|
11
|
-
readonly jsonApiUrl?: string;
|
|
12
|
-
readonly grpcUrl?: string;
|
|
13
|
-
readonly scanUrl?: string;
|
|
14
|
-
readonly resetCycle?: string;
|
|
15
|
-
};
|
|
8
|
+
import { type CantonChain } from './presets.js';
|
|
9
|
+
export type { CantonAuthAudienceHints, CantonChain, CantonChainOverrides, CantonChainPresetInput, CantonNetwork, CantonParticipantEndpoints, CantonScanEndpoints, CantonSpliceMetadata, CantonValidatorEndpoints, } from './presets.js';
|
|
16
10
|
export declare const localNet: CantonChain;
|
|
17
11
|
export declare const devNet: CantonChain;
|
|
18
12
|
export declare const testNet: CantonChain;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../../src/chains/definitions.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../../src/chains/definitions.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAA;AAElE,YAAY,EACV,uBAAuB,EACvB,WAAW,EACX,oBAAoB,EACpB,sBAAsB,EACtB,aAAa,EACb,0BAA0B,EAC1B,mBAAmB,EACnB,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,cAAc,CAAA;AAWrB,eAAO,MAAM,QAAQ,EAAE,WAWrB,CAAA;AAEF,eAAO,MAAM,MAAM,EAAE,WAiBnB,CAAA;AAEF,eAAO,MAAM,OAAO,EAAE,WAiBpB,CAAA;AAEF,eAAO,MAAM,OAAO,EAAE,WAepB,CAAA"}
|
|
@@ -2,32 +2,78 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Canton network chain definitions.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* Public environments default to discovery-first metadata. Consumers can
|
|
6
|
+
* layer in deployment-specific participant, Scan, or validator URLs with
|
|
7
|
+
* `withChainOverrides()` without committing operator-specific endpoints.
|
|
7
8
|
*/
|
|
8
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
10
|
exports.mainNet = exports.testNet = exports.devNet = exports.localNet = void 0;
|
|
10
|
-
|
|
11
|
+
const presets_js_1 = require("./presets.js");
|
|
12
|
+
const SPLICE_DISCOVERY_ROOT = 'https://docs.global.canton.network.sync.global';
|
|
13
|
+
const SPLICE_RELEASE_LINE = '0.5';
|
|
14
|
+
const PARTICIPANT_AUDIENCE_HINT = 'https://daml.com/participant/jwt/aud/participant/<participant-id>';
|
|
15
|
+
const PUBLIC_SCAN_AUDIENCE_HINT = 'Public Scan is often anonymous; if a token is required, use the operator-published audience.';
|
|
16
|
+
const VALIDATOR_AUDIENCE_HINT = 'Validator API audiences are operator-specific and should come from your validator or wallet provider.';
|
|
17
|
+
exports.localNet = (0, presets_js_1.defineChainPreset)({
|
|
11
18
|
id: 'canton-localnet',
|
|
12
19
|
name: 'Canton LocalNet',
|
|
13
20
|
network: 'localnet',
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
21
|
+
participant: {
|
|
22
|
+
jsonApiUrl: 'http://localhost:7575',
|
|
23
|
+
grpcUrl: 'http://localhost:6865',
|
|
24
|
+
},
|
|
25
|
+
authAudiences: {
|
|
26
|
+
participant: PARTICIPANT_AUDIENCE_HINT,
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
exports.devNet = (0, presets_js_1.defineChainPreset)({
|
|
18
30
|
id: 'canton-devnet',
|
|
19
31
|
name: 'Canton DevNet',
|
|
20
32
|
network: 'devnet',
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
33
|
+
scan: {
|
|
34
|
+
discoveryRoot: SPLICE_DISCOVERY_ROOT,
|
|
35
|
+
},
|
|
36
|
+
authAudiences: {
|
|
37
|
+
participant: PARTICIPANT_AUDIENCE_HINT,
|
|
38
|
+
scan: PUBLIC_SCAN_AUDIENCE_HINT,
|
|
39
|
+
validator: VALIDATOR_AUDIENCE_HINT,
|
|
40
|
+
},
|
|
41
|
+
splice: {
|
|
42
|
+
releaseLine: SPLICE_RELEASE_LINE,
|
|
43
|
+
resetCycleNote: 'Public dev deployments may reset during release-line rollovers or operator maintenance.',
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
exports.testNet = (0, presets_js_1.defineChainPreset)({
|
|
24
47
|
id: 'canton-testnet',
|
|
25
48
|
name: 'Canton TestNet',
|
|
26
49
|
network: 'testnet',
|
|
27
|
-
|
|
28
|
-
|
|
50
|
+
scan: {
|
|
51
|
+
discoveryRoot: SPLICE_DISCOVERY_ROOT,
|
|
52
|
+
},
|
|
53
|
+
authAudiences: {
|
|
54
|
+
participant: PARTICIPANT_AUDIENCE_HINT,
|
|
55
|
+
scan: PUBLIC_SCAN_AUDIENCE_HINT,
|
|
56
|
+
validator: VALIDATOR_AUDIENCE_HINT,
|
|
57
|
+
},
|
|
58
|
+
splice: {
|
|
59
|
+
releaseLine: SPLICE_RELEASE_LINE,
|
|
60
|
+
resetCycleNote: 'Treat public test environments as resettable and resolve live endpoints from operator docs.',
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
exports.mainNet = (0, presets_js_1.defineChainPreset)({
|
|
29
64
|
id: 'canton-mainnet',
|
|
30
65
|
name: 'Canton MainNet',
|
|
31
66
|
network: 'mainnet',
|
|
32
|
-
|
|
67
|
+
scan: {
|
|
68
|
+
discoveryRoot: SPLICE_DISCOVERY_ROOT,
|
|
69
|
+
},
|
|
70
|
+
authAudiences: {
|
|
71
|
+
participant: PARTICIPANT_AUDIENCE_HINT,
|
|
72
|
+
scan: PUBLIC_SCAN_AUDIENCE_HINT,
|
|
73
|
+
validator: VALIDATOR_AUDIENCE_HINT,
|
|
74
|
+
},
|
|
75
|
+
splice: {
|
|
76
|
+
releaseLine: SPLICE_RELEASE_LINE,
|
|
77
|
+
},
|
|
78
|
+
});
|
|
33
79
|
//# sourceMappingURL=definitions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../../src/chains/definitions.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../../src/chains/definitions.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,6CAAkE;AAclE,MAAM,qBAAqB,GAAG,gDAAgD,CAAA;AAC9E,MAAM,mBAAmB,GAAG,KAAK,CAAA;AACjC,MAAM,yBAAyB,GAC7B,mEAAmE,CAAA;AACrE,MAAM,yBAAyB,GAC7B,8FAA8F,CAAA;AAChG,MAAM,uBAAuB,GAC3B,uGAAuG,CAAA;AAE5F,QAAA,QAAQ,GAAgB,IAAA,8BAAiB,EAAC;IACrD,EAAE,EAAE,iBAAiB;IACrB,IAAI,EAAE,iBAAiB;IACvB,OAAO,EAAE,UAAU;IACnB,WAAW,EAAE;QACX,UAAU,EAAE,uBAAuB;QACnC,OAAO,EAAE,uBAAuB;KACjC;IACD,aAAa,EAAE;QACb,WAAW,EAAE,yBAAyB;KACvC;CACF,CAAC,CAAA;AAEW,QAAA,MAAM,GAAgB,IAAA,8BAAiB,EAAC;IACnD,EAAE,EAAE,eAAe;IACnB,IAAI,EAAE,eAAe;IACrB,OAAO,EAAE,QAAQ;IACjB,IAAI,EAAE;QACJ,aAAa,EAAE,qBAAqB;KACrC;IACD,aAAa,EAAE;QACb,WAAW,EAAE,yBAAyB;QACtC,IAAI,EAAE,yBAAyB;QAC/B,SAAS,EAAE,uBAAuB;KACnC;IACD,MAAM,EAAE;QACN,WAAW,EAAE,mBAAmB;QAChC,cAAc,EACZ,yFAAyF;KAC5F;CACF,CAAC,CAAA;AAEW,QAAA,OAAO,GAAgB,IAAA,8BAAiB,EAAC;IACpD,EAAE,EAAE,gBAAgB;IACpB,IAAI,EAAE,gBAAgB;IACtB,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE;QACJ,aAAa,EAAE,qBAAqB;KACrC;IACD,aAAa,EAAE;QACb,WAAW,EAAE,yBAAyB;QACtC,IAAI,EAAE,yBAAyB;QAC/B,SAAS,EAAE,uBAAuB;KACnC;IACD,MAAM,EAAE;QACN,WAAW,EAAE,mBAAmB;QAChC,cAAc,EACZ,6FAA6F;KAChG;CACF,CAAC,CAAA;AAEW,QAAA,OAAO,GAAgB,IAAA,8BAAiB,EAAC;IACpD,EAAE,EAAE,gBAAgB;IACpB,IAAI,EAAE,gBAAgB;IACtB,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE;QACJ,aAAa,EAAE,qBAAqB;KACrC;IACD,aAAa,EAAE;QACb,WAAW,EAAE,yBAAyB;QACtC,IAAI,EAAE,yBAAyB;QAC/B,SAAS,EAAE,uBAAuB;KACnC;IACD,MAAM,EAAE;QACN,WAAW,EAAE,mBAAmB;KACjC;CACF,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/chains/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/chains/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA"}
|
package/dist/cjs/chains/index.js
CHANGED
|
@@ -1,9 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
2
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
Object.defineProperty(exports, "
|
|
7
|
-
Object.defineProperty(exports, "
|
|
8
|
-
Object.defineProperty(exports, "mainNet", { enumerable: true, get: function () { return definitions_js_1.mainNet; } });
|
|
17
|
+
exports.withChainOverrides = exports.defineChainPreset = void 0;
|
|
18
|
+
__exportStar(require("./definitions.js"), exports);
|
|
19
|
+
var presets_js_1 = require("./presets.js");
|
|
20
|
+
Object.defineProperty(exports, "defineChainPreset", { enumerable: true, get: function () { return presets_js_1.defineChainPreset; } });
|
|
21
|
+
Object.defineProperty(exports, "withChainOverrides", { enumerable: true, get: function () { return presets_js_1.withChainOverrides; } });
|
|
9
22
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/chains/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/chains/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,mDAAgC;AAChC,2CAAoE;AAA3D,+GAAA,iBAAiB,OAAA;AAAE,gHAAA,kBAAkB,OAAA"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
export type CantonNetwork = 'localnet' | 'devnet' | 'testnet' | 'mainnet';
|
|
2
|
+
export type CantonParticipantEndpoints = {
|
|
3
|
+
readonly jsonApiUrl?: string;
|
|
4
|
+
readonly grpcUrl?: string;
|
|
5
|
+
};
|
|
6
|
+
export type CantonScanEndpoints = {
|
|
7
|
+
readonly url?: string;
|
|
8
|
+
readonly discoveryRoot?: string;
|
|
9
|
+
};
|
|
10
|
+
export type CantonValidatorEndpoints = {
|
|
11
|
+
readonly apiBaseUrl?: string;
|
|
12
|
+
readonly scanProxyBaseUrl?: string;
|
|
13
|
+
};
|
|
14
|
+
export type CantonAuthAudienceHints = {
|
|
15
|
+
readonly participant?: string;
|
|
16
|
+
readonly scan?: string;
|
|
17
|
+
readonly validator?: string;
|
|
18
|
+
};
|
|
19
|
+
export type CantonSpliceMetadata = {
|
|
20
|
+
readonly releaseLine?: string;
|
|
21
|
+
readonly resetCycleNote?: string;
|
|
22
|
+
};
|
|
23
|
+
export type CantonChain = {
|
|
24
|
+
readonly id: string;
|
|
25
|
+
readonly name: string;
|
|
26
|
+
readonly network: CantonNetwork;
|
|
27
|
+
readonly participant: CantonParticipantEndpoints;
|
|
28
|
+
readonly scan: CantonScanEndpoints;
|
|
29
|
+
readonly validator: CantonValidatorEndpoints;
|
|
30
|
+
readonly authAudiences: CantonAuthAudienceHints;
|
|
31
|
+
readonly splice: CantonSpliceMetadata;
|
|
32
|
+
readonly jsonApiUrl?: string;
|
|
33
|
+
readonly grpcUrl?: string;
|
|
34
|
+
readonly scanUrl?: string;
|
|
35
|
+
readonly validatorApiUrl?: string;
|
|
36
|
+
readonly scanProxyUrl?: string;
|
|
37
|
+
readonly resetCycle?: string;
|
|
38
|
+
};
|
|
39
|
+
export type CantonChainPresetInput = {
|
|
40
|
+
readonly id: string;
|
|
41
|
+
readonly name: string;
|
|
42
|
+
readonly network: CantonNetwork;
|
|
43
|
+
readonly participant?: CantonParticipantEndpoints;
|
|
44
|
+
readonly scan?: CantonScanEndpoints;
|
|
45
|
+
readonly validator?: CantonValidatorEndpoints;
|
|
46
|
+
readonly authAudiences?: CantonAuthAudienceHints;
|
|
47
|
+
readonly splice?: CantonSpliceMetadata;
|
|
48
|
+
};
|
|
49
|
+
export type CantonChainOverrides = {
|
|
50
|
+
readonly name?: string;
|
|
51
|
+
readonly participant?: Partial<CantonParticipantEndpoints>;
|
|
52
|
+
readonly scan?: Partial<CantonScanEndpoints>;
|
|
53
|
+
readonly validator?: Partial<CantonValidatorEndpoints>;
|
|
54
|
+
readonly authAudiences?: Partial<CantonAuthAudienceHints>;
|
|
55
|
+
readonly splice?: Partial<CantonSpliceMetadata>;
|
|
56
|
+
};
|
|
57
|
+
export declare function defineChainPreset(input: CantonChainPresetInput): CantonChain;
|
|
58
|
+
export declare function withChainOverrides(chain: CantonChain, overrides?: CantonChainOverrides): CantonChain;
|
|
59
|
+
//# sourceMappingURL=presets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../../src/chains/presets.ts"],"names":[],"mappings":"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"}
|