@cardano-sdk/e2e 0.49.5 → 0.49.6

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cardano-sdk/e2e",
3
- "version": "0.49.5",
3
+ "version": "0.49.6",
4
4
  "description": "End to end tests for the cardano-js-sdk packages.",
5
5
  "repository": "https://github.com/input-output-hk/cardano-js-sdk",
6
6
  "license": "Apache-2.0",
@@ -75,20 +75,20 @@
75
75
  "dependencies": {
76
76
  "@cardano-foundation/ledgerjs-hw-app-cardano": "^7.1.4",
77
77
  "@cardano-ogmios/client": "6.9.0",
78
- "@cardano-sdk/cardano-services": "~0.33.5",
79
- "@cardano-sdk/cardano-services-client": "~0.23.5",
80
- "@cardano-sdk/core": "~0.42.3",
78
+ "@cardano-sdk/cardano-services": "~0.33.6",
79
+ "@cardano-sdk/cardano-services-client": "~0.23.6",
80
+ "@cardano-sdk/core": "~0.43.0",
81
81
  "@cardano-sdk/crypto": "~0.1.32",
82
- "@cardano-sdk/hardware-ledger": "~0.13.0",
83
- "@cardano-sdk/hardware-trezor": "~0.6.18",
84
- "@cardano-sdk/input-selection": "~0.13.33",
85
- "@cardano-sdk/key-management": "~0.25.0",
86
- "@cardano-sdk/ogmios": "~0.18.19",
87
- "@cardano-sdk/tx-construction": "~0.24.2",
82
+ "@cardano-sdk/hardware-ledger": "~0.13.1",
83
+ "@cardano-sdk/hardware-trezor": "~0.6.19",
84
+ "@cardano-sdk/input-selection": "~0.13.34",
85
+ "@cardano-sdk/key-management": "~0.25.1",
86
+ "@cardano-sdk/ogmios": "~0.18.20",
87
+ "@cardano-sdk/tx-construction": "~0.24.3",
88
88
  "@cardano-sdk/util": "~0.15.5",
89
- "@cardano-sdk/util-dev": "~0.24.4",
90
- "@cardano-sdk/util-rxjs": "~0.9.1",
91
- "@cardano-sdk/wallet": "~0.48.0",
89
+ "@cardano-sdk/util-dev": "~0.24.5",
90
+ "@cardano-sdk/util-rxjs": "~0.9.2",
91
+ "@cardano-sdk/wallet": "~0.49.0",
92
92
  "@dcspark/cardano-multiplatform-lib-nodejs": "^3.1.1",
93
93
  "@emurgo/cardano-message-signing-nodejs": "^1.0.1",
94
94
  "@shiroyasha9/axios-fetch-adapter": "1.0.3",
@@ -119,10 +119,10 @@
119
119
  "@babel/core": "^7.18.2",
120
120
  "@babel/preset-env": "^7.18.2",
121
121
  "@babel/preset-typescript": "^7.17.12",
122
- "@cardano-sdk/dapp-connector": "~0.13.0",
123
- "@cardano-sdk/projection": "~0.12.19",
124
- "@cardano-sdk/projection-typeorm": "~0.9.19",
125
- "@cardano-sdk/web-extension": "~0.37.2",
122
+ "@cardano-sdk/dapp-connector": "~0.13.1",
123
+ "@cardano-sdk/projection": "~0.12.20",
124
+ "@cardano-sdk/projection-typeorm": "~0.9.20",
125
+ "@cardano-sdk/web-extension": "~0.37.3",
126
126
  "@dcspark/cardano-multiplatform-lib-browser": "^3.1.1",
127
127
  "@emurgo/cardano-message-signing-asmjs": "^1.0.1",
128
128
  "@types/bunyan": "^1.8.8",
@@ -182,5 +182,5 @@
182
182
  "publishConfig": {
183
183
  "access": "public"
184
184
  },
185
- "gitHead": "babafa33aedea682bb61dc91ca93c5f38ec5d797"
185
+ "gitHead": "1e454e8ffaa2637307bfde7c2183ea76d0fed76d"
186
186
  }
package/src/factories.ts CHANGED
@@ -60,7 +60,7 @@ import { Logger } from 'ts-log';
60
60
  import { NoCache, NodeTxSubmitProvider } from '@cardano-sdk/cardano-services';
61
61
  import { OgmiosObservableCardanoNode } from '@cardano-sdk/ogmios';
62
62
  import { TrezorKeyAgent } from '@cardano-sdk/hardware-trezor';
63
- import { createStubStakePoolProvider } from '@cardano-sdk/util-dev';
63
+ import { createStubHandleProvider, createStubStakePoolProvider } from '@cardano-sdk/util-dev';
64
64
  import { filter, firstValueFrom, of } from 'rxjs';
65
65
  import { getEnv, walletVariables } from './environment';
66
66
  import DeviceConnection from '@cardano-foundation/ledgerjs-hw-app-cardano';
@@ -179,7 +179,10 @@ chainHistoryProviderFactory.register(BLOCKFROST_PROVIDER, async (params: any, lo
179
179
  return new Promise(async (resolve) => {
180
180
  resolve(
181
181
  new BlockfrostChainHistoryProvider(
182
- new BlockfrostClient({ baseUrl: params.baseUrl }, { rateLimiter: { schedule: (task) => task() } }),
182
+ new BlockfrostClient(
183
+ { apiVersion: params.apiVersion, baseUrl: params.baseUrl, projectId: params.projectId },
184
+ { rateLimiter: { schedule: (task) => task() } }
185
+ ),
183
186
  await networkInfoProviderFactory.create('blockfrost', params, logger),
184
187
  logger
185
188
  )
@@ -225,7 +228,10 @@ networkInfoProviderFactory.register(BLOCKFROST_PROVIDER, async (params: any, log
225
228
  return new Promise(async (resolve) => {
226
229
  resolve(
227
230
  new BlockfrostNetworkInfoProvider(
228
- new BlockfrostClient({ baseUrl: params.baseUrl }, { rateLimiter: { schedule: (task) => task() } }),
231
+ new BlockfrostClient(
232
+ { apiVersion: params.apiVersion, baseUrl: params.baseUrl, projectId: params.projectId },
233
+ { rateLimiter: { schedule: (task) => task() } }
234
+ ),
229
235
  logger
230
236
  )
231
237
  );
@@ -246,7 +252,10 @@ rewardsProviderFactory.register(BLOCKFROST_PROVIDER, async (params: any, logger)
246
252
  return new Promise(async (resolve) => {
247
253
  resolve(
248
254
  new BlockfrostRewardsProvider(
249
- new BlockfrostClient({ baseUrl: params.baseUrl }, { rateLimiter: { schedule: (task) => task() } }),
255
+ new BlockfrostClient(
256
+ { apiVersion: params.apiVersion, baseUrl: params.baseUrl, projectId: params.projectId },
257
+ { rateLimiter: { schedule: (task) => task() } }
258
+ ),
250
259
  logger
251
260
  )
252
261
  );
@@ -293,7 +302,10 @@ txSubmitProviderFactory.register(BLOCKFROST_PROVIDER, async (params: any, logger
293
302
  return new Promise(async (resolve) => {
294
303
  resolve(
295
304
  new BlockfrostTxSubmitProvider(
296
- new BlockfrostClient({ baseUrl: params.baseUrl }, { rateLimiter: { schedule: (task) => task() } }),
305
+ new BlockfrostClient(
306
+ { apiVersion: params.apiVersion, baseUrl: params.baseUrl, projectId: params.projectId },
307
+ { rateLimiter: { schedule: (task) => task() } }
308
+ ),
297
309
  logger
298
310
  )
299
311
  );
@@ -319,7 +331,10 @@ utxoProviderFactory.register(BLOCKFROST_PROVIDER, async (params: any, logger) =>
319
331
  return new Promise(async (resolve) => {
320
332
  resolve(
321
333
  new BlockfrostUtxoProvider(
322
- new BlockfrostClient({ baseUrl: params.baseUrl }, { rateLimiter: { schedule: (task) => task() } }),
334
+ new BlockfrostClient(
335
+ { apiVersion: params.apiVersion, baseUrl: params.baseUrl, projectId: params.projectId },
336
+ { rateLimiter: { schedule: (task) => task() } }
337
+ ),
323
338
  logger
324
339
  )
325
340
  );
@@ -334,6 +349,11 @@ handleProviderFactory.register(HTTP_PROVIDER, async (params: any, logger: Logger
334
349
  });
335
350
  });
336
351
 
352
+ handleProviderFactory.register(
353
+ STUB_PROVIDER,
354
+ async (): Promise<HandleProvider> => Promise.resolve(createStubHandleProvider())
355
+ );
356
+
337
357
  // Stake Pool providers
338
358
  stakePoolProviderFactory.register(
339
359
  STUB_PROVIDER,
@@ -0,0 +1,126 @@
1
+ import { BaseWallet } from '@cardano-sdk/wallet';
2
+ import { Cardano, ProviderFailure, TxSubmissionErrorCode, TxSubmitProvider } from '@cardano-sdk/core';
3
+ import { GenericTxBuilder, TxBuilderDependencies } from '@cardano-sdk/tx-construction';
4
+ import { firstValueFrom } from 'rxjs';
5
+ import { getEnv, getWallet, walletVariables } from '../../src';
6
+ import { logger } from '@cardano-sdk/util-dev';
7
+
8
+ describe('TxSubmitProvider', () => {
9
+ let wallet: BaseWallet;
10
+ let txSubmitProvider: TxSubmitProvider;
11
+ let ownAddress: Cardano.PaymentAddress;
12
+ let walletTxBuilderDependencies: TxBuilderDependencies;
13
+
14
+ beforeAll(async () => {
15
+ const env = getEnv(walletVariables);
16
+ ({
17
+ wallet,
18
+ providers: { txSubmitProvider }
19
+ } = await getWallet({ env, idx: 0, logger, name: 'Test Wallet' }));
20
+ const addresses = await firstValueFrom(wallet.addresses$);
21
+ ownAddress = addresses[0].address;
22
+ walletTxBuilderDependencies = wallet.getTxBuilderDependencies();
23
+ });
24
+
25
+ it('maps ProviderError{TxSubmissionError{OutsideOfValidityInterval}}', async () => {
26
+ const actualTip = await firstValueFrom(wallet.tip$);
27
+ const txBuilder = new GenericTxBuilder({
28
+ ...walletTxBuilderDependencies,
29
+ txBuilderProviders: {
30
+ ...walletTxBuilderDependencies.txBuilderProviders,
31
+ tip: async () => ({
32
+ ...actualTip,
33
+ // GenericTxBuilder fails to build a tx with expired validity interval.
34
+ // we need to trick it to believe the it's within validity interval
35
+ // in order to test submission error
36
+ slot: Cardano.Slot(actualTip.slot - 10)
37
+ })
38
+ }
39
+ });
40
+ const tx = await txBuilder
41
+ .addOutput({ address: ownAddress, value: { coins: 2_000_000n } })
42
+ .setValidityInterval({ invalidHereafter: Cardano.Slot(actualTip.slot - 1) })
43
+ .build()
44
+ .sign();
45
+
46
+ await expect(txSubmitProvider.submitTx({ signedTransaction: tx.cbor })).rejects.toThrow(
47
+ expect.objectContaining({
48
+ innerError: expect.objectContaining({
49
+ code: TxSubmissionErrorCode.OutsideOfValidityInterval
50
+ }),
51
+ reason: ProviderFailure.BadRequest
52
+ })
53
+ );
54
+ });
55
+
56
+ it('maps ProviderError{TxSubmissionError{ValueNotConserved}}', async () => {
57
+ const txBuilder = new GenericTxBuilder({
58
+ ...walletTxBuilderDependencies,
59
+ inputSelector: {
60
+ select: async ({ utxo, outputs }) => ({
61
+ remainingUTxO: new Set([...utxo].slice(1)),
62
+ selection: {
63
+ change: [] as Cardano.TxOut[],
64
+ fee: 2_000_000n,
65
+ inputs: new Set([[...utxo][0]]),
66
+ outputs
67
+ }
68
+ })
69
+ }
70
+ });
71
+ const tx = await txBuilder
72
+ .addOutput({ address: ownAddress, value: { coins: 2_000_000n } })
73
+ .build()
74
+ .sign();
75
+
76
+ await expect(txSubmitProvider.submitTx({ signedTransaction: tx.cbor })).rejects.toThrow(
77
+ expect.objectContaining({
78
+ innerError: expect.objectContaining({
79
+ code: TxSubmissionErrorCode.ValueNotConserved,
80
+ data: expect.objectContaining({
81
+ consumed: expect.objectContaining({ coins: expect.any(BigInt) }),
82
+ produced: expect.objectContaining({ coins: expect.any(BigInt) })
83
+ })
84
+ }),
85
+ reason: ProviderFailure.BadRequest
86
+ })
87
+ );
88
+ });
89
+
90
+ // this mapping is not implemented yet due to
91
+ // https://input-output-rnd.slack.com/archives/C06J663L2A2/p1735920667624239
92
+ it.skip('maps ProviderError{TxSubmissionError{IncompleteWithdrawals}}', async () => {
93
+ const rewardAccounts = await firstValueFrom(wallet.delegation.rewardAccounts$);
94
+ if (rewardAccounts.some((acc) => !acc.dRepDelegatee || !acc.rewardBalance)) {
95
+ return logger.warn(
96
+ 'Skipping IncompleteWithdrawals error test because there are either no rewards, or not delegated to drep'
97
+ );
98
+ }
99
+ const txBuilder = new GenericTxBuilder({
100
+ ...walletTxBuilderDependencies,
101
+ txBuilderProviders: {
102
+ ...walletTxBuilderDependencies.txBuilderProviders,
103
+ rewardAccounts: async () => {
104
+ const accounts = await walletTxBuilderDependencies.txBuilderProviders.rewardAccounts();
105
+ return accounts.map((account) => ({
106
+ ...account,
107
+ rewardBalance: account.rewardBalance - 1n
108
+ }));
109
+ }
110
+ }
111
+ });
112
+ const tx = await txBuilder
113
+ .addOutput({ address: ownAddress, value: { coins: 2_000_000n } })
114
+ .build()
115
+ .sign();
116
+
117
+ await expect(txSubmitProvider.submitTx({ signedTransaction: tx.cbor })).rejects.toThrow(
118
+ expect.objectContaining({
119
+ innerError: expect.objectContaining({
120
+ code: TxSubmissionErrorCode.IncompleteWithdrawals
121
+ }),
122
+ reason: ProviderFailure.BadRequest
123
+ })
124
+ );
125
+ });
126
+ });