cantonjs 0.0.1
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/LICENSE +201 -0
- package/dist/cjs/admin/index.d.ts +5 -0
- package/dist/cjs/admin/index.d.ts.map +1 -0
- package/dist/cjs/admin/index.js +6 -0
- package/dist/cjs/admin/index.js.map +1 -0
- package/dist/cjs/chains/definitions.d.ts +20 -0
- package/dist/cjs/chains/definitions.d.ts.map +1 -0
- package/dist/cjs/chains/definitions.js +33 -0
- package/dist/cjs/chains/definitions.js.map +1 -0
- package/dist/cjs/chains/index.d.ts +2 -0
- package/dist/cjs/chains/index.d.ts.map +1 -0
- package/dist/cjs/chains/index.js +9 -0
- package/dist/cjs/chains/index.js.map +1 -0
- package/dist/cjs/clients/createAdminClient.d.ts +73 -0
- package/dist/cjs/clients/createAdminClient.d.ts.map +1 -0
- package/dist/cjs/clients/createAdminClient.js +205 -0
- package/dist/cjs/clients/createAdminClient.js.map +1 -0
- package/dist/cjs/clients/createLedgerClient.d.ts +83 -0
- package/dist/cjs/clients/createLedgerClient.d.ts.map +1 -0
- package/dist/cjs/clients/createLedgerClient.js +240 -0
- package/dist/cjs/clients/createLedgerClient.js.map +1 -0
- package/dist/cjs/clients/createTestClient.d.ts +27 -0
- package/dist/cjs/clients/createTestClient.d.ts.map +1 -0
- package/dist/cjs/clients/createTestClient.js +46 -0
- package/dist/cjs/clients/createTestClient.js.map +1 -0
- package/dist/cjs/clients/index.d.ts +4 -0
- package/dist/cjs/clients/index.d.ts.map +1 -0
- package/dist/cjs/clients/index.js +10 -0
- package/dist/cjs/clients/index.js.map +1 -0
- package/dist/cjs/codegen/index.d.ts +2 -0
- package/dist/cjs/codegen/index.d.ts.map +1 -0
- package/dist/cjs/codegen/index.js +3 -0
- package/dist/cjs/codegen/index.js.map +1 -0
- package/dist/cjs/codegen/types.d.ts +38 -0
- package/dist/cjs/codegen/types.d.ts.map +1 -0
- package/dist/cjs/codegen/types.js +9 -0
- package/dist/cjs/codegen/types.js.map +1 -0
- package/dist/cjs/errors/auth.d.ts +13 -0
- package/dist/cjs/errors/auth.d.ts.map +1 -0
- package/dist/cjs/errors/auth.js +36 -0
- package/dist/cjs/errors/auth.js.map +1 -0
- package/dist/cjs/errors/base.d.ts +35 -0
- package/dist/cjs/errors/base.d.ts.map +1 -0
- package/dist/cjs/errors/base.js +71 -0
- package/dist/cjs/errors/base.js.map +1 -0
- package/dist/cjs/errors/index.d.ts +6 -0
- package/dist/cjs/errors/index.d.ts.map +1 -0
- package/dist/cjs/errors/index.js +22 -0
- package/dist/cjs/errors/index.js.map +1 -0
- package/dist/cjs/errors/ledger.d.ts +22 -0
- package/dist/cjs/errors/ledger.d.ts.map +1 -0
- package/dist/cjs/errors/ledger.js +55 -0
- package/dist/cjs/errors/ledger.js.map +1 -0
- package/dist/cjs/errors/streaming.d.ts +20 -0
- package/dist/cjs/errors/streaming.d.ts.map +1 -0
- package/dist/cjs/errors/streaming.js +54 -0
- package/dist/cjs/errors/streaming.js.map +1 -0
- package/dist/cjs/errors/transport.d.ts +31 -0
- package/dist/cjs/errors/transport.d.ts.map +1 -0
- package/dist/cjs/errors/transport.js +63 -0
- package/dist/cjs/errors/transport.js.map +1 -0
- package/dist/cjs/index.d.ts +25 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +48 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/ledger/index.d.ts +5 -0
- package/dist/cjs/ledger/index.d.ts.map +1 -0
- package/dist/cjs/ledger/index.js +6 -0
- package/dist/cjs/ledger/index.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/streaming/createStream.d.ts +55 -0
- package/dist/cjs/streaming/createStream.d.ts.map +1 -0
- package/dist/cjs/streaming/createStream.js +270 -0
- package/dist/cjs/streaming/createStream.js.map +1 -0
- package/dist/cjs/streaming/index.d.ts +8 -0
- package/dist/cjs/streaming/index.d.ts.map +1 -0
- package/dist/cjs/streaming/index.js +16 -0
- package/dist/cjs/streaming/index.js.map +1 -0
- package/dist/cjs/streaming/streamCompletions.d.ts +25 -0
- package/dist/cjs/streaming/streamCompletions.d.ts.map +1 -0
- package/dist/cjs/streaming/streamCompletions.js +47 -0
- package/dist/cjs/streaming/streamCompletions.js.map +1 -0
- package/dist/cjs/streaming/streamContracts.d.ts +42 -0
- package/dist/cjs/streaming/streamContracts.d.ts.map +1 -0
- package/dist/cjs/streaming/streamContracts.js +56 -0
- package/dist/cjs/streaming/streamContracts.js.map +1 -0
- package/dist/cjs/streaming/streamUpdates.d.ts +38 -0
- package/dist/cjs/streaming/streamUpdates.d.ts.map +1 -0
- package/dist/cjs/streaming/streamUpdates.js +66 -0
- package/dist/cjs/streaming/streamUpdates.js.map +1 -0
- package/dist/cjs/streaming/types.d.ts +111 -0
- package/dist/cjs/streaming/types.d.ts.map +1 -0
- package/dist/cjs/streaming/types.js +20 -0
- package/dist/cjs/streaming/types.js.map +1 -0
- package/dist/cjs/testing/index.d.ts +4 -0
- package/dist/cjs/testing/index.d.ts.map +1 -0
- package/dist/cjs/testing/index.js +11 -0
- package/dist/cjs/testing/index.js.map +1 -0
- package/dist/cjs/testing/mockTransport.d.ts +80 -0
- package/dist/cjs/testing/mockTransport.d.ts.map +1 -0
- package/dist/cjs/testing/mockTransport.js +97 -0
- package/dist/cjs/testing/mockTransport.js.map +1 -0
- package/dist/cjs/testing/setupSandbox.d.ts +62 -0
- package/dist/cjs/testing/setupSandbox.d.ts.map +1 -0
- package/dist/cjs/testing/setupSandbox.js +109 -0
- package/dist/cjs/testing/setupSandbox.js.map +1 -0
- package/dist/cjs/transport/fallback.d.ts +21 -0
- package/dist/cjs/transport/fallback.d.ts.map +1 -0
- package/dist/cjs/transport/fallback.js +48 -0
- package/dist/cjs/transport/fallback.js.map +1 -0
- package/dist/cjs/transport/grpc.d.ts +51 -0
- package/dist/cjs/transport/grpc.d.ts.map +1 -0
- package/dist/cjs/transport/grpc.js +90 -0
- package/dist/cjs/transport/grpc.js.map +1 -0
- package/dist/cjs/transport/index.d.ts +3 -0
- package/dist/cjs/transport/index.d.ts.map +1 -0
- package/dist/cjs/transport/index.js +6 -0
- package/dist/cjs/transport/index.js.map +1 -0
- package/dist/cjs/transport/json-api.d.ts +9 -0
- package/dist/cjs/transport/json-api.d.ts.map +1 -0
- package/dist/cjs/transport/json-api.js +69 -0
- package/dist/cjs/transport/json-api.js.map +1 -0
- package/dist/cjs/transport/types.d.ts +36 -0
- package/dist/cjs/transport/types.d.ts.map +1 -0
- package/dist/cjs/transport/types.js +10 -0
- package/dist/cjs/transport/types.js.map +1 -0
- package/dist/cjs/types/command.d.ts +127 -0
- package/dist/cjs/types/command.d.ts.map +1 -0
- package/dist/cjs/types/command.js +12 -0
- package/dist/cjs/types/command.js.map +1 -0
- package/dist/cjs/types/contract.d.ts +104 -0
- package/dist/cjs/types/contract.d.ts.map +1 -0
- package/dist/cjs/types/contract.js +12 -0
- package/dist/cjs/types/contract.js.map +1 -0
- package/dist/cjs/types/idp.d.ts +28 -0
- package/dist/cjs/types/idp.d.ts.map +1 -0
- package/dist/cjs/types/idp.js +9 -0
- package/dist/cjs/types/idp.js.map +1 -0
- package/dist/cjs/types/index.d.ts +10 -0
- package/dist/cjs/types/index.d.ts.map +1 -0
- package/dist/cjs/types/index.js +3 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/interactive.d.ts +47 -0
- package/dist/cjs/types/interactive.d.ts.map +1 -0
- package/dist/cjs/types/interactive.js +13 -0
- package/dist/cjs/types/interactive.js.map +1 -0
- package/dist/cjs/types/package.d.ts +15 -0
- package/dist/cjs/types/package.d.ts.map +1 -0
- package/dist/cjs/types/package.js +8 -0
- package/dist/cjs/types/package.js.map +1 -0
- package/dist/cjs/types/party.d.ts +32 -0
- package/dist/cjs/types/party.d.ts.map +1 -0
- package/dist/cjs/types/party.js +10 -0
- package/dist/cjs/types/party.js.map +1 -0
- package/dist/cjs/types/reassignment.d.ts +65 -0
- package/dist/cjs/types/reassignment.d.ts.map +1 -0
- package/dist/cjs/types/reassignment.js +10 -0
- package/dist/cjs/types/reassignment.js.map +1 -0
- package/dist/cjs/types/transaction.d.ts +59 -0
- package/dist/cjs/types/transaction.d.ts.map +1 -0
- package/dist/cjs/types/transaction.js +13 -0
- package/dist/cjs/types/transaction.js.map +1 -0
- package/dist/cjs/types/user.d.ts +64 -0
- package/dist/cjs/types/user.d.ts.map +1 -0
- package/dist/cjs/types/user.js +12 -0
- package/dist/cjs/types/user.js.map +1 -0
- package/dist/esm/admin/index.d.ts +5 -0
- package/dist/esm/admin/index.d.ts.map +1 -0
- package/dist/esm/admin/index.js +2 -0
- package/dist/esm/admin/index.js.map +1 -0
- package/dist/esm/chains/definitions.d.ts +20 -0
- package/dist/esm/chains/definitions.d.ts.map +1 -0
- package/dist/esm/chains/definitions.js +30 -0
- package/dist/esm/chains/definitions.js.map +1 -0
- package/dist/esm/chains/index.d.ts +2 -0
- package/dist/esm/chains/index.d.ts.map +1 -0
- package/dist/esm/chains/index.js +2 -0
- package/dist/esm/chains/index.js.map +1 -0
- package/dist/esm/clients/createAdminClient.d.ts +73 -0
- package/dist/esm/clients/createAdminClient.d.ts.map +1 -0
- package/dist/esm/clients/createAdminClient.js +202 -0
- package/dist/esm/clients/createAdminClient.js.map +1 -0
- package/dist/esm/clients/createLedgerClient.d.ts +83 -0
- package/dist/esm/clients/createLedgerClient.d.ts.map +1 -0
- package/dist/esm/clients/createLedgerClient.js +237 -0
- package/dist/esm/clients/createLedgerClient.js.map +1 -0
- package/dist/esm/clients/createTestClient.d.ts +27 -0
- package/dist/esm/clients/createTestClient.d.ts.map +1 -0
- package/dist/esm/clients/createTestClient.js +43 -0
- package/dist/esm/clients/createTestClient.js.map +1 -0
- package/dist/esm/clients/index.d.ts +4 -0
- package/dist/esm/clients/index.d.ts.map +1 -0
- package/dist/esm/clients/index.js +4 -0
- package/dist/esm/clients/index.js.map +1 -0
- package/dist/esm/codegen/index.d.ts +2 -0
- package/dist/esm/codegen/index.d.ts.map +1 -0
- package/dist/esm/codegen/index.js +2 -0
- package/dist/esm/codegen/index.js.map +1 -0
- package/dist/esm/codegen/types.d.ts +38 -0
- package/dist/esm/codegen/types.d.ts.map +1 -0
- package/dist/esm/codegen/types.js +8 -0
- package/dist/esm/codegen/types.js.map +1 -0
- package/dist/esm/errors/auth.d.ts +13 -0
- package/dist/esm/errors/auth.d.ts.map +1 -0
- package/dist/esm/errors/auth.js +31 -0
- package/dist/esm/errors/auth.js.map +1 -0
- package/dist/esm/errors/base.d.ts +35 -0
- package/dist/esm/errors/base.d.ts.map +1 -0
- package/dist/esm/errors/base.js +67 -0
- package/dist/esm/errors/base.js.map +1 -0
- package/dist/esm/errors/index.d.ts +6 -0
- package/dist/esm/errors/index.d.ts.map +1 -0
- package/dist/esm/errors/index.js +6 -0
- package/dist/esm/errors/index.js.map +1 -0
- package/dist/esm/errors/ledger.d.ts +22 -0
- package/dist/esm/errors/ledger.d.ts.map +1 -0
- package/dist/esm/errors/ledger.js +49 -0
- package/dist/esm/errors/ledger.js.map +1 -0
- package/dist/esm/errors/streaming.d.ts +20 -0
- package/dist/esm/errors/streaming.d.ts.map +1 -0
- package/dist/esm/errors/streaming.js +48 -0
- package/dist/esm/errors/streaming.js.map +1 -0
- package/dist/esm/errors/transport.d.ts +31 -0
- package/dist/esm/errors/transport.d.ts.map +1 -0
- package/dist/esm/errors/transport.js +56 -0
- package/dist/esm/errors/transport.js.map +1 -0
- package/dist/esm/index.d.ts +25 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +18 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/ledger/index.d.ts +5 -0
- package/dist/esm/ledger/index.d.ts.map +1 -0
- package/dist/esm/ledger/index.js +2 -0
- package/dist/esm/ledger/index.js.map +1 -0
- package/dist/esm/streaming/createStream.d.ts +55 -0
- package/dist/esm/streaming/createStream.d.ts.map +1 -0
- package/dist/esm/streaming/createStream.js +265 -0
- package/dist/esm/streaming/createStream.js.map +1 -0
- package/dist/esm/streaming/index.d.ts +8 -0
- package/dist/esm/streaming/index.d.ts.map +1 -0
- package/dist/esm/streaming/index.js +6 -0
- package/dist/esm/streaming/index.js.map +1 -0
- package/dist/esm/streaming/streamCompletions.d.ts +25 -0
- package/dist/esm/streaming/streamCompletions.d.ts.map +1 -0
- package/dist/esm/streaming/streamCompletions.js +44 -0
- package/dist/esm/streaming/streamCompletions.js.map +1 -0
- package/dist/esm/streaming/streamContracts.d.ts +42 -0
- package/dist/esm/streaming/streamContracts.d.ts.map +1 -0
- package/dist/esm/streaming/streamContracts.js +53 -0
- package/dist/esm/streaming/streamContracts.js.map +1 -0
- package/dist/esm/streaming/streamUpdates.d.ts +38 -0
- package/dist/esm/streaming/streamUpdates.d.ts.map +1 -0
- package/dist/esm/streaming/streamUpdates.js +63 -0
- package/dist/esm/streaming/streamUpdates.js.map +1 -0
- package/dist/esm/streaming/types.d.ts +111 -0
- package/dist/esm/streaming/types.d.ts.map +1 -0
- package/dist/esm/streaming/types.js +17 -0
- package/dist/esm/streaming/types.js.map +1 -0
- package/dist/esm/testing/index.d.ts +4 -0
- package/dist/esm/testing/index.d.ts.map +1 -0
- package/dist/esm/testing/index.js +4 -0
- package/dist/esm/testing/index.js.map +1 -0
- package/dist/esm/testing/mockTransport.d.ts +80 -0
- package/dist/esm/testing/mockTransport.d.ts.map +1 -0
- package/dist/esm/testing/mockTransport.js +93 -0
- package/dist/esm/testing/mockTransport.js.map +1 -0
- package/dist/esm/testing/setupSandbox.d.ts +62 -0
- package/dist/esm/testing/setupSandbox.d.ts.map +1 -0
- package/dist/esm/testing/setupSandbox.js +106 -0
- package/dist/esm/testing/setupSandbox.js.map +1 -0
- package/dist/esm/transport/fallback.d.ts +21 -0
- package/dist/esm/transport/fallback.d.ts.map +1 -0
- package/dist/esm/transport/fallback.js +45 -0
- package/dist/esm/transport/fallback.js.map +1 -0
- package/dist/esm/transport/grpc.d.ts +51 -0
- package/dist/esm/transport/grpc.d.ts.map +1 -0
- package/dist/esm/transport/grpc.js +87 -0
- package/dist/esm/transport/grpc.js.map +1 -0
- package/dist/esm/transport/index.d.ts +3 -0
- package/dist/esm/transport/index.d.ts.map +1 -0
- package/dist/esm/transport/index.js +2 -0
- package/dist/esm/transport/index.js.map +1 -0
- package/dist/esm/transport/json-api.d.ts +9 -0
- package/dist/esm/transport/json-api.d.ts.map +1 -0
- package/dist/esm/transport/json-api.js +66 -0
- package/dist/esm/transport/json-api.js.map +1 -0
- package/dist/esm/transport/types.d.ts +36 -0
- package/dist/esm/transport/types.d.ts.map +1 -0
- package/dist/esm/transport/types.js +9 -0
- package/dist/esm/transport/types.js.map +1 -0
- package/dist/esm/types/command.d.ts +127 -0
- package/dist/esm/types/command.d.ts.map +1 -0
- package/dist/esm/types/command.js +11 -0
- package/dist/esm/types/command.js.map +1 -0
- package/dist/esm/types/contract.d.ts +104 -0
- package/dist/esm/types/contract.d.ts.map +1 -0
- package/dist/esm/types/contract.js +11 -0
- package/dist/esm/types/contract.js.map +1 -0
- package/dist/esm/types/idp.d.ts +28 -0
- package/dist/esm/types/idp.d.ts.map +1 -0
- package/dist/esm/types/idp.js +8 -0
- package/dist/esm/types/idp.js.map +1 -0
- package/dist/esm/types/index.d.ts +10 -0
- package/dist/esm/types/index.d.ts.map +1 -0
- package/dist/esm/types/index.js +2 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/interactive.d.ts +47 -0
- package/dist/esm/types/interactive.d.ts.map +1 -0
- package/dist/esm/types/interactive.js +12 -0
- package/dist/esm/types/interactive.js.map +1 -0
- package/dist/esm/types/package.d.ts +15 -0
- package/dist/esm/types/package.d.ts.map +1 -0
- package/dist/esm/types/package.js +7 -0
- package/dist/esm/types/package.js.map +1 -0
- package/dist/esm/types/party.d.ts +32 -0
- package/dist/esm/types/party.d.ts.map +1 -0
- package/dist/esm/types/party.js +9 -0
- package/dist/esm/types/party.js.map +1 -0
- package/dist/esm/types/reassignment.d.ts +65 -0
- package/dist/esm/types/reassignment.d.ts.map +1 -0
- package/dist/esm/types/reassignment.js +9 -0
- package/dist/esm/types/reassignment.js.map +1 -0
- package/dist/esm/types/transaction.d.ts +59 -0
- package/dist/esm/types/transaction.d.ts.map +1 -0
- package/dist/esm/types/transaction.js +12 -0
- package/dist/esm/types/transaction.js.map +1 -0
- package/dist/esm/types/user.d.ts +64 -0
- package/dist/esm/types/user.d.ts.map +1 -0
- package/dist/esm/types/user.js +11 -0
- package/dist/esm/types/user.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/dist/tsconfig.cjs.tsbuildinfo +1 -0
- package/package.json +140 -0
- package/src/admin/index.ts +9 -0
- package/src/chains/definitions.ts +43 -0
- package/src/chains/index.ts +1 -0
- package/src/clients/createAdminClient.ts +336 -0
- package/src/clients/createLedgerClient.ts +383 -0
- package/src/clients/createTestClient.ts +77 -0
- package/src/clients/index.ts +19 -0
- package/src/codegen/index.ts +6 -0
- package/src/codegen/types.ts +51 -0
- package/src/errors/auth.ts +33 -0
- package/src/errors/base.ts +83 -0
- package/src/errors/index.ts +5 -0
- package/src/errors/ledger.ts +53 -0
- package/src/errors/streaming.ts +51 -0
- package/src/errors/transport.ts +65 -0
- package/src/index.ts +122 -0
- package/src/ledger/index.ts +33 -0
- package/src/streaming/createStream.ts +321 -0
- package/src/streaming/index.ts +19 -0
- package/src/streaming/streamCompletions.ts +49 -0
- package/src/streaming/streamContracts.ts +64 -0
- package/src/streaming/streamUpdates.ts +67 -0
- package/src/streaming/types.ts +117 -0
- package/src/testing/index.ts +18 -0
- package/src/testing/mockTransport.ts +132 -0
- package/src/testing/setupSandbox.ts +163 -0
- package/src/transport/fallback.ts +57 -0
- package/src/transport/grpc.ts +130 -0
- package/src/transport/index.ts +2 -0
- package/src/transport/json-api.ts +83 -0
- package/src/transport/types.ts +39 -0
- package/src/types/command.ts +123 -0
- package/src/types/contract.ts +101 -0
- package/src/types/idp.ts +31 -0
- package/src/types/index.ts +66 -0
- package/src/types/interactive.ts +53 -0
- package/src/types/package.ts +16 -0
- package/src/types/party.ts +33 -0
- package/src/types/reassignment.ts +68 -0
- package/src/types/transaction.ts +57 -0
- package/src/types/user.ts +41 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core AsyncIterable stream factory for Canton WebSocket connections.
|
|
3
|
+
*
|
|
4
|
+
* Creates a stream that:
|
|
5
|
+
* - Opens a WebSocket connection with Canton subprotocol auth
|
|
6
|
+
* - Sends a subscription request on connection open
|
|
7
|
+
* - Yields parsed JSON messages as an AsyncIterable
|
|
8
|
+
* - Auto-reconnects with exponential backoff on disconnect
|
|
9
|
+
* - Tracks offsets for gap-free resumption
|
|
10
|
+
* - Supports AbortSignal cancellation
|
|
11
|
+
*
|
|
12
|
+
* @see ADR 0005 — Streaming Architecture
|
|
13
|
+
*/
|
|
14
|
+
import type { WebSocketConstructor, ReconnectConfig } from './types.js';
|
|
15
|
+
/** Internal configuration for createStream. */
|
|
16
|
+
export type CreateStreamConfig = {
|
|
17
|
+
/** Full WebSocket URL (ws:// or wss://). */
|
|
18
|
+
readonly url: string;
|
|
19
|
+
/** JWT token for authentication. */
|
|
20
|
+
readonly token?: string;
|
|
21
|
+
/** WebSocket constructor. */
|
|
22
|
+
readonly WebSocket?: WebSocketConstructor;
|
|
23
|
+
/** AbortSignal for cancellation. */
|
|
24
|
+
readonly signal?: AbortSignal;
|
|
25
|
+
/** Reconnect config, or false to disable. */
|
|
26
|
+
readonly reconnect?: ReconnectConfig | false;
|
|
27
|
+
/** Build the subscription request body. Called on each (re)connection. */
|
|
28
|
+
readonly buildRequest: (lastOffset: number | undefined) => unknown;
|
|
29
|
+
/** Extract an offset from a received message, if present. */
|
|
30
|
+
readonly extractOffset: (message: unknown) => number | undefined;
|
|
31
|
+
/** Whether this is a bounded stream that ends on server close. */
|
|
32
|
+
readonly bounded?: boolean;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Convert an HTTP(S) URL to a WebSocket URL.
|
|
36
|
+
* http://host → ws://host, https://host → wss://host
|
|
37
|
+
* If already ws/wss, return as-is.
|
|
38
|
+
*/
|
|
39
|
+
export declare function toWebSocketUrl(baseUrl: string, path: string): string;
|
|
40
|
+
/**
|
|
41
|
+
* Calculate reconnect delay with exponential backoff and jitter.
|
|
42
|
+
*/
|
|
43
|
+
export declare function calculateDelay(attempt: number, config: Required<ReconnectConfig>): number;
|
|
44
|
+
/**
|
|
45
|
+
* Create a Canton WebSocket stream as an AsyncIterable.
|
|
46
|
+
*
|
|
47
|
+
* Each iteration yields a parsed JSON message from the WebSocket.
|
|
48
|
+
* The stream auto-reconnects on disconnect unless:
|
|
49
|
+
* - The AbortSignal is aborted
|
|
50
|
+
* - reconnect is set to false
|
|
51
|
+
* - The stream is bounded and the server closed normally (code 1000)
|
|
52
|
+
* - Max reconnect attempts are exhausted
|
|
53
|
+
*/
|
|
54
|
+
export declare function createStream<T>(config: CreateStreamConfig): AsyncIterable<T>;
|
|
55
|
+
//# sourceMappingURL=createStream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createStream.d.ts","sourceRoot":"","sources":["../../../src/streaming/createStream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EACV,oBAAoB,EAEpB,eAAe,EAChB,MAAM,YAAY,CAAA;AAGnB,+CAA+C;AAC/C,MAAM,MAAM,kBAAkB,GAAG;IAC/B,4CAA4C;IAC5C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,oCAAoC;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,6BAA6B;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,oBAAoB,CAAA;IACzC,oCAAoC;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;IAC7B,6CAA6C;IAC7C,QAAQ,CAAC,SAAS,CAAC,EAAE,eAAe,GAAG,KAAK,CAAA;IAC5C,0EAA0E;IAC1E,QAAQ,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAA;IAClE,6DAA6D;IAC7D,QAAQ,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,CAAA;IAChE,kEAAkE;IAClE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAUD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAQpE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,MAAM,CAQzF;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,kBAAkB,GAAG,aAAa,CAAC,CAAC,CAAC,CAM5E"}
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core AsyncIterable stream factory for Canton WebSocket connections.
|
|
3
|
+
*
|
|
4
|
+
* Creates a stream that:
|
|
5
|
+
* - Opens a WebSocket connection with Canton subprotocol auth
|
|
6
|
+
* - Sends a subscription request on connection open
|
|
7
|
+
* - Yields parsed JSON messages as an AsyncIterable
|
|
8
|
+
* - Auto-reconnects with exponential backoff on disconnect
|
|
9
|
+
* - Tracks offsets for gap-free resumption
|
|
10
|
+
* - Supports AbortSignal cancellation
|
|
11
|
+
*
|
|
12
|
+
* @see ADR 0005 — Streaming Architecture
|
|
13
|
+
*/
|
|
14
|
+
import { WebSocketError, StreamClosedError, ReconnectFailedError } from '../errors/streaming.js';
|
|
15
|
+
const DEFAULT_RECONNECT = {
|
|
16
|
+
initialDelay: 1000,
|
|
17
|
+
maxDelay: 30000,
|
|
18
|
+
factor: 2,
|
|
19
|
+
jitter: 0.25,
|
|
20
|
+
maxAttempts: Infinity,
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Convert an HTTP(S) URL to a WebSocket URL.
|
|
24
|
+
* http://host → ws://host, https://host → wss://host
|
|
25
|
+
* If already ws/wss, return as-is.
|
|
26
|
+
*/
|
|
27
|
+
export function toWebSocketUrl(baseUrl, path) {
|
|
28
|
+
const url = new URL(path, baseUrl);
|
|
29
|
+
if (url.protocol === 'https:') {
|
|
30
|
+
url.protocol = 'wss:';
|
|
31
|
+
}
|
|
32
|
+
else if (url.protocol === 'http:') {
|
|
33
|
+
url.protocol = 'ws:';
|
|
34
|
+
}
|
|
35
|
+
return url.toString();
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Calculate reconnect delay with exponential backoff and jitter.
|
|
39
|
+
*/
|
|
40
|
+
export function calculateDelay(attempt, config) {
|
|
41
|
+
const baseDelay = Math.min(config.initialDelay * Math.pow(config.factor, attempt), config.maxDelay);
|
|
42
|
+
const jitterRange = baseDelay * config.jitter;
|
|
43
|
+
const jitter = (Math.random() * 2 - 1) * jitterRange;
|
|
44
|
+
return Math.max(0, baseDelay + jitter);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Create a Canton WebSocket stream as an AsyncIterable.
|
|
48
|
+
*
|
|
49
|
+
* Each iteration yields a parsed JSON message from the WebSocket.
|
|
50
|
+
* The stream auto-reconnects on disconnect unless:
|
|
51
|
+
* - The AbortSignal is aborted
|
|
52
|
+
* - reconnect is set to false
|
|
53
|
+
* - The stream is bounded and the server closed normally (code 1000)
|
|
54
|
+
* - Max reconnect attempts are exhausted
|
|
55
|
+
*/
|
|
56
|
+
export function createStream(config) {
|
|
57
|
+
return {
|
|
58
|
+
[Symbol.asyncIterator]() {
|
|
59
|
+
return new StreamIterator(config);
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Internal AsyncIterator implementation.
|
|
65
|
+
*
|
|
66
|
+
* Uses a message queue with promise-based signaling to bridge the
|
|
67
|
+
* event-driven WebSocket API to the pull-based AsyncIterator protocol.
|
|
68
|
+
*/
|
|
69
|
+
class StreamIterator {
|
|
70
|
+
config;
|
|
71
|
+
reconnectConfig;
|
|
72
|
+
ws = null;
|
|
73
|
+
lastOffset = undefined;
|
|
74
|
+
reconnectAttempts = 0;
|
|
75
|
+
done = false;
|
|
76
|
+
abortHandler = null;
|
|
77
|
+
// Message queue for buffering received messages
|
|
78
|
+
queue = [];
|
|
79
|
+
// Error stored when fail() is called before next()
|
|
80
|
+
storedError = null;
|
|
81
|
+
// Pending resolve/reject for when consumer is waiting
|
|
82
|
+
pendingResolve = null;
|
|
83
|
+
pendingReject = null;
|
|
84
|
+
constructor(config) {
|
|
85
|
+
this.config = config;
|
|
86
|
+
if (config.reconnect === false) {
|
|
87
|
+
this.reconnectConfig = false;
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
this.reconnectConfig = { ...DEFAULT_RECONNECT, ...config.reconnect };
|
|
91
|
+
}
|
|
92
|
+
if (config.signal?.aborted) {
|
|
93
|
+
this.done = true;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
this.setupAbortHandler();
|
|
97
|
+
this.connect();
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
async next() {
|
|
101
|
+
// If an error was stored before next() was called, throw it now
|
|
102
|
+
if (this.storedError) {
|
|
103
|
+
const error = this.storedError;
|
|
104
|
+
this.storedError = null;
|
|
105
|
+
throw error;
|
|
106
|
+
}
|
|
107
|
+
if (this.done && this.queue.length === 0) {
|
|
108
|
+
return { done: true, value: undefined };
|
|
109
|
+
}
|
|
110
|
+
// If there are queued messages, return immediately
|
|
111
|
+
if (this.queue.length > 0) {
|
|
112
|
+
return { done: false, value: this.queue.shift() };
|
|
113
|
+
}
|
|
114
|
+
// Wait for the next message, error, or close
|
|
115
|
+
return new Promise((resolve, reject) => {
|
|
116
|
+
this.pendingResolve = resolve;
|
|
117
|
+
this.pendingReject = reject;
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
async return() {
|
|
121
|
+
this.cleanup();
|
|
122
|
+
return { done: true, value: undefined };
|
|
123
|
+
}
|
|
124
|
+
async throw(error) {
|
|
125
|
+
this.cleanup();
|
|
126
|
+
throw error;
|
|
127
|
+
}
|
|
128
|
+
setupAbortHandler() {
|
|
129
|
+
if (!this.config.signal)
|
|
130
|
+
return;
|
|
131
|
+
this.abortHandler = () => {
|
|
132
|
+
this.cleanup();
|
|
133
|
+
if (this.pendingResolve) {
|
|
134
|
+
this.pendingResolve({ done: true, value: undefined });
|
|
135
|
+
this.pendingResolve = null;
|
|
136
|
+
this.pendingReject = null;
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
this.config.signal.addEventListener('abort', this.abortHandler);
|
|
140
|
+
}
|
|
141
|
+
connect() {
|
|
142
|
+
if (this.done)
|
|
143
|
+
return;
|
|
144
|
+
const WS = this.config.WebSocket ?? globalThis.WebSocket;
|
|
145
|
+
if (!WS) {
|
|
146
|
+
const error = new WebSocketError(this.config.url, {
|
|
147
|
+
cause: new Error('No WebSocket implementation available. Provide a WebSocket constructor.'),
|
|
148
|
+
});
|
|
149
|
+
this.fail(error);
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
const protocols = this.config.token
|
|
153
|
+
? ['daml.ws.auth', `jwt.token.${this.config.token}`]
|
|
154
|
+
: undefined;
|
|
155
|
+
let ws;
|
|
156
|
+
try {
|
|
157
|
+
ws = new WS(this.config.url, protocols);
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
const error = new WebSocketError(this.config.url, {
|
|
161
|
+
cause: err instanceof Error ? err : new Error(String(err)),
|
|
162
|
+
});
|
|
163
|
+
this.fail(error);
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
this.ws = ws;
|
|
167
|
+
ws.onopen = () => {
|
|
168
|
+
this.reconnectAttempts = 0;
|
|
169
|
+
const request = this.config.buildRequest(this.lastOffset);
|
|
170
|
+
ws.send(JSON.stringify(request));
|
|
171
|
+
};
|
|
172
|
+
ws.onmessage = (event) => {
|
|
173
|
+
let message;
|
|
174
|
+
try {
|
|
175
|
+
message = JSON.parse(String(event.data));
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
return; // Skip non-JSON messages
|
|
179
|
+
}
|
|
180
|
+
// Track offset for resumption
|
|
181
|
+
const offset = this.config.extractOffset(message);
|
|
182
|
+
if (offset !== undefined) {
|
|
183
|
+
this.lastOffset = offset;
|
|
184
|
+
}
|
|
185
|
+
this.enqueue(message);
|
|
186
|
+
};
|
|
187
|
+
ws.onerror = () => {
|
|
188
|
+
// onerror is always followed by onclose, so we handle reconnection there
|
|
189
|
+
};
|
|
190
|
+
ws.onclose = (event) => {
|
|
191
|
+
this.ws = null;
|
|
192
|
+
// Normal close on bounded stream = stream complete
|
|
193
|
+
if (this.config.bounded && event.code === 1000) {
|
|
194
|
+
this.cleanup();
|
|
195
|
+
if (this.pendingResolve) {
|
|
196
|
+
this.pendingResolve({ done: true, value: undefined });
|
|
197
|
+
this.pendingResolve = null;
|
|
198
|
+
this.pendingReject = null;
|
|
199
|
+
}
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
// If already done (abort, return), don't reconnect
|
|
203
|
+
if (this.done)
|
|
204
|
+
return;
|
|
205
|
+
// Try to reconnect
|
|
206
|
+
if (this.reconnectConfig === false) {
|
|
207
|
+
const error = new StreamClosedError(event.code, event.reason);
|
|
208
|
+
this.fail(error);
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
if (this.reconnectAttempts >= this.reconnectConfig.maxAttempts) {
|
|
212
|
+
const error = new ReconnectFailedError(this.reconnectAttempts);
|
|
213
|
+
this.fail(error);
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
const delay = calculateDelay(this.reconnectAttempts, this.reconnectConfig);
|
|
217
|
+
this.reconnectAttempts++;
|
|
218
|
+
setTimeout(() => {
|
|
219
|
+
if (!this.done) {
|
|
220
|
+
this.connect();
|
|
221
|
+
}
|
|
222
|
+
}, delay);
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
enqueue(message) {
|
|
226
|
+
if (this.pendingResolve) {
|
|
227
|
+
const resolve = this.pendingResolve;
|
|
228
|
+
this.pendingResolve = null;
|
|
229
|
+
this.pendingReject = null;
|
|
230
|
+
resolve({ done: false, value: message });
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
this.queue.push(message);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
fail(error) {
|
|
237
|
+
this.done = true;
|
|
238
|
+
if (this.pendingReject) {
|
|
239
|
+
const reject = this.pendingReject;
|
|
240
|
+
this.pendingResolve = null;
|
|
241
|
+
this.pendingReject = null;
|
|
242
|
+
reject(error);
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
this.storedError = error;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
cleanup() {
|
|
249
|
+
this.done = true;
|
|
250
|
+
if (this.config.signal && this.abortHandler) {
|
|
251
|
+
this.config.signal.removeEventListener('abort', this.abortHandler);
|
|
252
|
+
this.abortHandler = null;
|
|
253
|
+
}
|
|
254
|
+
if (this.ws) {
|
|
255
|
+
// Clear handlers before closing to prevent reconnect
|
|
256
|
+
this.ws.onopen = null;
|
|
257
|
+
this.ws.onmessage = null;
|
|
258
|
+
this.ws.onerror = null;
|
|
259
|
+
this.ws.onclose = null;
|
|
260
|
+
this.ws.close();
|
|
261
|
+
this.ws = null;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=createStream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createStream.js","sourceRoot":"","sources":["../../../src/streaming/createStream.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { createStream, toWebSocketUrl, calculateDelay } from './createStream.js';
|
|
2
|
+
export type { CreateStreamConfig } from './createStream.js';
|
|
3
|
+
export { streamUpdates } from './streamUpdates.js';
|
|
4
|
+
export { streamContracts, type ActiveContractsResponse } from './streamContracts.js';
|
|
5
|
+
export { streamCompletions } from './streamCompletions.js';
|
|
6
|
+
export type { WebSocketConstructor, WebSocketLike, ReconnectConfig, StreamOptions, StreamUpdatesOptions, StreamContractsOptions, StreamCompletionsOptions, CompletionEvent, } from './types.js';
|
|
7
|
+
export { WS_READY_STATE } from './types.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/streaming/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAChF,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAE3D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,KAAK,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE1D,YAAY,EACV,oBAAoB,EACpB,aAAa,EACb,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,eAAe,GAChB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { createStream, toWebSocketUrl, calculateDelay } from './createStream.js';
|
|
2
|
+
export { streamUpdates } from './streamUpdates.js';
|
|
3
|
+
export { streamContracts } from './streamContracts.js';
|
|
4
|
+
export { streamCompletions } from './streamCompletions.js';
|
|
5
|
+
export { WS_READY_STATE } from './types.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/streaming/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAGhF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAgC,MAAM,sBAAsB,CAAA;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAa1D,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stream command completions from Canton's /v2/commands/completions WebSocket endpoint.
|
|
3
|
+
*
|
|
4
|
+
* Yields completion events as an AsyncIterable with auto-reconnect.
|
|
5
|
+
*/
|
|
6
|
+
import type { CompletionEvent, StreamCompletionsOptions } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Stream command completions from a Canton node.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* const completions = streamCompletions({
|
|
13
|
+
* url: 'http://localhost:7575',
|
|
14
|
+
* token: jwt,
|
|
15
|
+
* parties: ['Alice::1220'],
|
|
16
|
+
* beginExclusive: 0,
|
|
17
|
+
* })
|
|
18
|
+
*
|
|
19
|
+
* for await (const event of completions) {
|
|
20
|
+
* console.log('Completion:', event.completion.commandId, event.completion.status)
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export declare function streamCompletions(options: StreamCompletionsOptions): AsyncIterable<CompletionEvent>;
|
|
25
|
+
//# sourceMappingURL=streamCompletions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streamCompletions.d.ts","sourceRoot":"","sources":["../../../src/streaming/streamCompletions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAG3E;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,wBAAwB,GAChC,aAAa,CAAC,eAAe,CAAC,CAoBhC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stream command completions from Canton's /v2/commands/completions WebSocket endpoint.
|
|
3
|
+
*
|
|
4
|
+
* Yields completion events as an AsyncIterable with auto-reconnect.
|
|
5
|
+
*/
|
|
6
|
+
import { createStream, toWebSocketUrl } from './createStream.js';
|
|
7
|
+
/**
|
|
8
|
+
* Stream command completions from a Canton node.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* const completions = streamCompletions({
|
|
13
|
+
* url: 'http://localhost:7575',
|
|
14
|
+
* token: jwt,
|
|
15
|
+
* parties: ['Alice::1220'],
|
|
16
|
+
* beginExclusive: 0,
|
|
17
|
+
* })
|
|
18
|
+
*
|
|
19
|
+
* for await (const event of completions) {
|
|
20
|
+
* console.log('Completion:', event.completion.commandId, event.completion.status)
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export function streamCompletions(options) {
|
|
25
|
+
const wsUrl = toWebSocketUrl(options.url, '/v2/commands/completions');
|
|
26
|
+
return createStream({
|
|
27
|
+
url: wsUrl,
|
|
28
|
+
token: options.token,
|
|
29
|
+
WebSocket: options.WebSocket,
|
|
30
|
+
signal: options.signal,
|
|
31
|
+
reconnect: options.reconnect,
|
|
32
|
+
bounded: false,
|
|
33
|
+
buildRequest: (lastOffset) => ({
|
|
34
|
+
beginExclusive: lastOffset ?? options.beginExclusive ?? 0,
|
|
35
|
+
parties: options.parties,
|
|
36
|
+
...(options.applicationId && { applicationId: options.applicationId }),
|
|
37
|
+
}),
|
|
38
|
+
extractOffset: (message) => {
|
|
39
|
+
const msg = message;
|
|
40
|
+
return msg.completion?.offset;
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=streamCompletions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streamCompletions.js","sourceRoot":"","sources":["../../../src/streaming/streamCompletions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAEhE;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAiC;IAEjC,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,0BAA0B,CAAC,CAAA;IAErE,OAAO,YAAY,CAAkB;QACnC,GAAG,EAAE,KAAK;QACV,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,OAAO,EAAE,KAAK;QACd,YAAY,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YAC7B,cAAc,EAAE,UAAU,IAAI,OAAO,CAAC,cAAc,IAAI,CAAC;YACzD,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC;SACvE,CAAC;QACF,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE;YACzB,MAAM,GAAG,GAAG,OAA0B,CAAA;YACtC,OAAO,GAAG,CAAC,UAAU,EAAE,MAAM,CAAA;QAC/B,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stream active contracts from Canton's /v2/state/active-contracts WebSocket endpoint.
|
|
3
|
+
*
|
|
4
|
+
* This is a bounded stream: the server sends all matching active contracts
|
|
5
|
+
* and then closes the connection. No auto-reconnect is used.
|
|
6
|
+
*/
|
|
7
|
+
import type { StreamContractsOptions } from './types.js';
|
|
8
|
+
/** Response message from the active contracts stream. */
|
|
9
|
+
export type ActiveContractsResponse = {
|
|
10
|
+
readonly contractEntry?: {
|
|
11
|
+
readonly [key: string]: unknown;
|
|
12
|
+
};
|
|
13
|
+
readonly offset?: number;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Stream active contracts from a Canton node.
|
|
17
|
+
*
|
|
18
|
+
* The stream yields contract entries matching the provided filters.
|
|
19
|
+
* It is bounded: the server closes the connection when all contracts
|
|
20
|
+
* have been sent.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* const contracts = streamContracts({
|
|
25
|
+
* url: 'http://localhost:7575',
|
|
26
|
+
* token: jwt,
|
|
27
|
+
* eventFormat: {
|
|
28
|
+
* filtersByParty: {
|
|
29
|
+
* [party]: { cumulative: [{ identifierFilter: { WildcardFilter: { value: {} } } }] }
|
|
30
|
+
* }
|
|
31
|
+
* }
|
|
32
|
+
* })
|
|
33
|
+
*
|
|
34
|
+
* for await (const entry of contracts) {
|
|
35
|
+
* if (entry.contractEntry && 'JsActiveContract' in entry.contractEntry) {
|
|
36
|
+
* console.log('Contract:', entry.contractEntry.JsActiveContract)
|
|
37
|
+
* }
|
|
38
|
+
* }
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export declare function streamContracts(options: StreamContractsOptions): AsyncIterable<ActiveContractsResponse>;
|
|
42
|
+
//# sourceMappingURL=streamContracts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streamContracts.d.ts","sourceRoot":"","sources":["../../../src/streaming/streamContracts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAGxD,yDAAyD;AACzD,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,aAAa,CAAC,EAAE;QAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAA;IAC5D,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACzB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,sBAAsB,GAC9B,aAAa,CAAC,uBAAuB,CAAC,CAmBxC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stream active contracts from Canton's /v2/state/active-contracts WebSocket endpoint.
|
|
3
|
+
*
|
|
4
|
+
* This is a bounded stream: the server sends all matching active contracts
|
|
5
|
+
* and then closes the connection. No auto-reconnect is used.
|
|
6
|
+
*/
|
|
7
|
+
import { createStream, toWebSocketUrl } from './createStream.js';
|
|
8
|
+
/**
|
|
9
|
+
* Stream active contracts from a Canton node.
|
|
10
|
+
*
|
|
11
|
+
* The stream yields contract entries matching the provided filters.
|
|
12
|
+
* It is bounded: the server closes the connection when all contracts
|
|
13
|
+
* have been sent.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const contracts = streamContracts({
|
|
18
|
+
* url: 'http://localhost:7575',
|
|
19
|
+
* token: jwt,
|
|
20
|
+
* eventFormat: {
|
|
21
|
+
* filtersByParty: {
|
|
22
|
+
* [party]: { cumulative: [{ identifierFilter: { WildcardFilter: { value: {} } } }] }
|
|
23
|
+
* }
|
|
24
|
+
* }
|
|
25
|
+
* })
|
|
26
|
+
*
|
|
27
|
+
* for await (const entry of contracts) {
|
|
28
|
+
* if (entry.contractEntry && 'JsActiveContract' in entry.contractEntry) {
|
|
29
|
+
* console.log('Contract:', entry.contractEntry.JsActiveContract)
|
|
30
|
+
* }
|
|
31
|
+
* }
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export function streamContracts(options) {
|
|
35
|
+
const wsUrl = toWebSocketUrl(options.url, '/v2/state/active-contracts');
|
|
36
|
+
return createStream({
|
|
37
|
+
url: wsUrl,
|
|
38
|
+
token: options.token,
|
|
39
|
+
WebSocket: options.WebSocket,
|
|
40
|
+
signal: options.signal,
|
|
41
|
+
reconnect: false, // Bounded stream — no reconnect
|
|
42
|
+
bounded: true,
|
|
43
|
+
buildRequest: () => ({
|
|
44
|
+
eventFormat: options.eventFormat,
|
|
45
|
+
...(options.activeAtOffset !== undefined && { activeAtOffset: options.activeAtOffset }),
|
|
46
|
+
}),
|
|
47
|
+
extractOffset: (message) => {
|
|
48
|
+
const msg = message;
|
|
49
|
+
return msg.offset;
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=streamContracts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streamContracts.js","sourceRoot":"","sources":["../../../src/streaming/streamContracts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAQhE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,eAAe,CAC7B,OAA+B;IAE/B,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,4BAA4B,CAAC,CAAA;IAEvE,OAAO,YAAY,CAA0B;QAC3C,GAAG,EAAE,KAAK;QACV,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,SAAS,EAAE,KAAK,EAAE,gCAAgC;QAClD,OAAO,EAAE,IAAI;QACb,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;YACnB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,GAAG,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC;SACxF,CAAC;QACF,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE;YACzB,MAAM,GAAG,GAAG,OAAkC,CAAA;YAC9C,OAAO,GAAG,CAAC,MAAM,CAAA;QACnB,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stream updates from Canton's /v2/updates WebSocket endpoint.
|
|
3
|
+
*
|
|
4
|
+
* Yields TaggedUpdate messages (Transaction, Reassignment, OffsetCheckpoint,
|
|
5
|
+
* TopologyTransaction) as an AsyncIterable with auto-reconnect.
|
|
6
|
+
*/
|
|
7
|
+
import type { TaggedUpdate } from '../types/transaction.js';
|
|
8
|
+
import type { StreamUpdatesOptions } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Stream ledger updates from a Canton node.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const updates = streamUpdates({
|
|
15
|
+
* url: 'http://localhost:7575',
|
|
16
|
+
* token: jwt,
|
|
17
|
+
* beginExclusive: 0,
|
|
18
|
+
* updateFormat: {
|
|
19
|
+
* includeTransactions: {
|
|
20
|
+
* transactionShape: 'TRANSACTION_SHAPE_ACS_DELTA',
|
|
21
|
+
* eventFormat: {
|
|
22
|
+
* filtersByParty: {
|
|
23
|
+
* [party]: { cumulative: [{ identifierFilter: { WildcardFilter: { value: {} } } }] }
|
|
24
|
+
* }
|
|
25
|
+
* }
|
|
26
|
+
* }
|
|
27
|
+
* }
|
|
28
|
+
* })
|
|
29
|
+
*
|
|
30
|
+
* for await (const update of updates) {
|
|
31
|
+
* if ('Transaction' in update) {
|
|
32
|
+
* console.log('Transaction:', update.Transaction.value.updateId)
|
|
33
|
+
* }
|
|
34
|
+
* }
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export declare function streamUpdates(options: StreamUpdatesOptions): AsyncIterable<TaggedUpdate>;
|
|
38
|
+
//# sourceMappingURL=streamUpdates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streamUpdates.d.ts","sourceRoot":"","sources":["../../../src/streaming/streamUpdates.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAGtD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAAC,YAAY,CAAC,CA2BxF"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stream updates from Canton's /v2/updates WebSocket endpoint.
|
|
3
|
+
*
|
|
4
|
+
* Yields TaggedUpdate messages (Transaction, Reassignment, OffsetCheckpoint,
|
|
5
|
+
* TopologyTransaction) as an AsyncIterable with auto-reconnect.
|
|
6
|
+
*/
|
|
7
|
+
import { createStream, toWebSocketUrl } from './createStream.js';
|
|
8
|
+
/**
|
|
9
|
+
* Stream ledger updates from a Canton node.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const updates = streamUpdates({
|
|
14
|
+
* url: 'http://localhost:7575',
|
|
15
|
+
* token: jwt,
|
|
16
|
+
* beginExclusive: 0,
|
|
17
|
+
* updateFormat: {
|
|
18
|
+
* includeTransactions: {
|
|
19
|
+
* transactionShape: 'TRANSACTION_SHAPE_ACS_DELTA',
|
|
20
|
+
* eventFormat: {
|
|
21
|
+
* filtersByParty: {
|
|
22
|
+
* [party]: { cumulative: [{ identifierFilter: { WildcardFilter: { value: {} } } }] }
|
|
23
|
+
* }
|
|
24
|
+
* }
|
|
25
|
+
* }
|
|
26
|
+
* }
|
|
27
|
+
* })
|
|
28
|
+
*
|
|
29
|
+
* for await (const update of updates) {
|
|
30
|
+
* if ('Transaction' in update) {
|
|
31
|
+
* console.log('Transaction:', update.Transaction.value.updateId)
|
|
32
|
+
* }
|
|
33
|
+
* }
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export function streamUpdates(options) {
|
|
37
|
+
const wsUrl = toWebSocketUrl(options.url, '/v2/updates');
|
|
38
|
+
const isOpen = options.endInclusive === undefined;
|
|
39
|
+
return createStream({
|
|
40
|
+
url: wsUrl,
|
|
41
|
+
token: options.token,
|
|
42
|
+
WebSocket: options.WebSocket,
|
|
43
|
+
signal: options.signal,
|
|
44
|
+
reconnect: isOpen ? options.reconnect : false,
|
|
45
|
+
bounded: !isOpen,
|
|
46
|
+
buildRequest: (lastOffset) => ({
|
|
47
|
+
beginExclusive: lastOffset ?? options.beginExclusive ?? 0,
|
|
48
|
+
...(options.endInclusive !== undefined && { endInclusive: options.endInclusive }),
|
|
49
|
+
...(options.updateFormat && { updateFormat: options.updateFormat }),
|
|
50
|
+
}),
|
|
51
|
+
extractOffset: (message) => {
|
|
52
|
+
const msg = message;
|
|
53
|
+
if ('Transaction' in msg) {
|
|
54
|
+
return msg.Transaction.value.offset;
|
|
55
|
+
}
|
|
56
|
+
if ('OffsetCheckpoint' in msg) {
|
|
57
|
+
return msg.OffsetCheckpoint.value.offset;
|
|
58
|
+
}
|
|
59
|
+
return undefined;
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=streamUpdates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streamUpdates.js","sourceRoot":"","sources":["../../../src/streaming/streamUpdates.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAEhE;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,aAAa,CAAC,OAA6B;IACzD,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;IACxD,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,KAAK,SAAS,CAAA;IAEjD,OAAO,YAAY,CAAe;QAChC,GAAG,EAAE,KAAK;QACV,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK;QAC7C,OAAO,EAAE,CAAC,MAAM;QAChB,YAAY,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YAC7B,cAAc,EAAE,UAAU,IAAI,OAAO,CAAC,cAAc,IAAI,CAAC;YACzD,GAAG,CAAC,OAAO,CAAC,YAAY,KAAK,SAAS,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;YACjF,GAAG,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;SACpE,CAAC;QACF,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE;YACzB,MAAM,GAAG,GAAG,OAAuB,CAAA;YACnC,IAAI,aAAa,IAAI,GAAG,EAAE,CAAC;gBACzB,OAAO,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAA;YACrC,CAAC;YACD,IAAI,kBAAkB,IAAI,GAAG,EAAE,CAAC;gBAC9B,OAAO,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAA;YAC1C,CAAC;YACD,OAAO,SAAS,CAAA;QAClB,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}
|