Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions node/jest.config.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
module.exports = {
export default {
roots: ['<rootDir>/src'],
preset: 'ts-jest',
extensionsToTreatAsEsm: ['.ts'],
moduleNameMapper: { '^(\\.{1,2}/.*)\\.js$': '$1' },
transform: {
'^.+\\.tsx?$': ['ts-jest', { useESM: true }],
'^.+\\.js$': ['ts-jest', { useESM: true }],
},
transformIgnorePatterns: ['node_modules/(?!(@noble)/)'],
testEnvironment: 'node',
collectCoverage: true,
collectCoverageFrom: ['**/*.[jt]s?(x)', '!**/*.d.ts'],
Expand Down
29 changes: 19 additions & 10 deletions node/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 8 additions & 1 deletion node/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,13 @@
"description": "Hyperledger Fabric Gateway client API for Node",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"type": "module",
"exports": {
".": {
"import": "./dist/index.js",
"types": "./dist/index.d.ts"
}
},
"engines": {
"node": ">=20.9.0"
},
Expand Down Expand Up @@ -35,7 +42,7 @@
"dependencies": {
"@grpc/grpc-js": "^1.14.0",
"@hyperledger/fabric-protos": "^0.3.0",
"@noble/curves": "^1.9.4",
"@noble/curves": "^2.0.0",
"google-protobuf": "^3.21.0"
},
"optionalDependencies": {
Expand Down
22 changes: 13 additions & 9 deletions node/src/blockevents.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,24 @@

import { CallOptions, Metadata, ServiceError, status } from '@grpc/grpc-js';
import { common, ledger, msp, orderer, peer } from '@hyperledger/fabric-protos';
import { CloseableAsyncIterable } from '.';
import { BlockEventsOptions } from './blockeventsbuilder';
import { BlockAndPrivateDataEventsRequest, BlockEventsRequest, FilteredBlockEventsRequest } from './blockeventsrequest';
import * as checkpointers from './checkpointers';
import { Gateway, InternalConnectOptions, assertDefined, internalConnect } from './gateway';
import { GatewayError } from './gatewayerror';
import { Identity } from './identity/identity';
import { Network } from './network';
import { CloseableAsyncIterable } from './index.js';
import { BlockEventsOptions } from './blockeventsbuilder.js';
import {
BlockAndPrivateDataEventsRequest,
BlockEventsRequest,
FilteredBlockEventsRequest,
} from './blockeventsrequest.js';
import * as checkpointers from './checkpointers.js';
import { Gateway, InternalConnectOptions, assertDefined, internalConnect } from './gateway.js';
import { GatewayError } from './gatewayerror.js';
import { Identity } from './identity/identity.js';
import { Network } from './network.js';
import {
DuplexStreamResponseStub,
MockGatewayGrpcClient,
newDuplexStreamResponse,
readElements,
} from './testutils.test';
} from './testutils.test.js';

function assertStartPositionToBeSpecified(seekInfo: orderer.SeekInfo, blockNumber: number): void {
const start = seekInfo.getStart();
Expand Down
11 changes: 7 additions & 4 deletions node/src/blockeventsbuilder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
*/

import { common, orderer } from '@hyperledger/fabric-protos';
// google-protobuf has no package exports field, so deep path imports are
// unresolvable under node18 module resolution. Disable unsafe rules for this import.
// eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-assignment
import { Timestamp } from 'google-protobuf/google/protobuf/timestamp_pb';
import {
BlockAndPrivateDataEventsRequest,
Expand All @@ -13,10 +16,10 @@ import {
BlockEventsRequestImpl,
FilteredBlockEventsRequest,
FilteredBlockEventsRequestImpl,
} from './blockeventsrequest';
import { GatewayClient } from './client';
import { EventsBuilder, EventsOptions } from './eventsbuilder';
import { SigningIdentity } from './signingidentity';
} from './blockeventsrequest.js';
import { GatewayClient } from './client.js';
import { EventsBuilder, EventsOptions } from './eventsbuilder.js';
import { SigningIdentity } from './signingidentity.js';

function seekLargestBlockNumber(): orderer.SeekPosition {
const largestBlockNumber = new orderer.SeekSpecified();
Expand Down
8 changes: 4 additions & 4 deletions node/src/blockeventsrequest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@

import { CallOptions } from '@grpc/grpc-js';
import { common, peer } from '@hyperledger/fabric-protos';
import { CloseableAsyncIterable, GatewayClient } from './client';
import { assertDefined } from './gateway';
import { Signable } from './signable';
import { SigningIdentity } from './signingidentity';
import { CloseableAsyncIterable, GatewayClient } from './client.js';
import { assertDefined } from './gateway.js';
import { Signable } from './signable.js';
import { SigningIdentity } from './signingidentity.js';

/**
* Delivers block events.
Expand Down
2 changes: 1 addition & 1 deletion node/src/chaincodeevent.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
*/

import { gateway, peer } from '@hyperledger/fabric-protos';
import { CloseableAsyncIterable } from './client';
import { CloseableAsyncIterable } from './client.js';

/**
* Chaincode event emitted by a transaction function.
Expand Down
14 changes: 7 additions & 7 deletions node/src/chaincodeevents.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@

import { CallOptions, Metadata, ServiceError, status } from '@grpc/grpc-js';
import { gateway as gatewayproto, orderer, peer } from '@hyperledger/fabric-protos';
import { ChaincodeEvent } from './chaincodeevent';
import * as checkpointers from './checkpointers';
import { Gateway, InternalConnectOptions, internalConnect } from './gateway';
import { GatewayError } from './gatewayerror';
import { Identity } from './identity/identity';
import { Network } from './network';
import { MockGatewayGrpcClient, newServerStreamResponse, readElements } from './testutils.test';
import { ChaincodeEvent } from './chaincodeevent.js';
import * as checkpointers from './checkpointers.js';
import { Gateway, InternalConnectOptions, internalConnect } from './gateway.js';
import { GatewayError } from './gatewayerror.js';
import { Identity } from './identity/identity.js';
import { Network } from './network.js';
import { MockGatewayGrpcClient, newServerStreamResponse, readElements } from './testutils.test.js';

function assertDecodeChaincodeEventsRequest(
signedRequest: gatewayproto.SignedChaincodeEventsRequest,
Expand Down
8 changes: 4 additions & 4 deletions node/src/chaincodeeventsbuilder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@
*/

import { gateway } from '@hyperledger/fabric-protos';
import { ChaincodeEventsRequest, ChaincodeEventsRequestImpl } from './chaincodeeventsrequest';
import { GatewayClient } from './client';
import { EventsBuilder, EventsOptions } from './eventsbuilder';
import { SigningIdentity } from './signingidentity';
import { ChaincodeEventsRequest, ChaincodeEventsRequestImpl } from './chaincodeeventsrequest.js';
import { GatewayClient } from './client.js';
import { EventsBuilder, EventsOptions } from './eventsbuilder.js';
import { SigningIdentity } from './signingidentity.js';

/**
* Options used when requesting chaincode events.
Expand Down
8 changes: 4 additions & 4 deletions node/src/chaincodeeventsrequest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@

import { CallOptions } from '@grpc/grpc-js';
import { gateway } from '@hyperledger/fabric-protos';
import { ChaincodeEvent, newChaincodeEvents } from './chaincodeevent';
import { CloseableAsyncIterable, GatewayClient } from './client';
import { Signable } from './signable';
import { SigningIdentity } from './signingidentity';
import { ChaincodeEvent, newChaincodeEvents } from './chaincodeevent.js';
import { CloseableAsyncIterable, GatewayClient } from './client.js';
import { Signable } from './signable.js';
import { SigningIdentity } from './signingidentity.js';

/**
* Delivers events emitted by transaction functions in a specific chaincode.
Expand Down
2 changes: 1 addition & 1 deletion node/src/checkpointer.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* SPDX-License-Identifier: Apache-2.0
*/

import { ChaincodeEvent } from './chaincodeevent';
import { ChaincodeEvent } from './chaincodeevent.js';

/**
* Used to get the checkpointed state.
Expand Down
8 changes: 4 additions & 4 deletions node/src/checkpointers.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@

import { promises as fs } from 'node:fs';
import * as path from 'node:path';
import { ChaincodeEvent } from './chaincodeevent';
import { Checkpointer } from './checkpointer';
import * as checkpointers from './checkpointers';
import { createTempDir } from './testutils.test';
import { ChaincodeEvent } from './chaincodeevent.js';
import { Checkpointer } from './checkpointer.js';
import * as checkpointers from './checkpointers.js';
import { createTempDir } from './testutils.test.js';

/* eslint-disable jest/expect-expect */

Expand Down
6 changes: 3 additions & 3 deletions node/src/checkpointers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
* SPDX-License-Identifier: Apache-2.0
*/

import { Checkpointer } from './checkpointer';
import { FileCheckPointer } from './filecheckpointer';
import { InMemoryCheckPointer } from './inmemorycheckpointer';
import { Checkpointer } from './checkpointer.js';
import { FileCheckPointer } from './filecheckpointer.js';
import { InMemoryCheckPointer } from './inmemorycheckpointer.js';

/**
* Create a checkpointer that uses the specified file to store persistent state.
Expand Down
6 changes: 3 additions & 3 deletions node/src/client.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@

import * as grpc from '@grpc/grpc-js';
import { common, gateway } from '@hyperledger/fabric-protos';
import { GatewayClient, newGatewayClient } from './client';
import { GatewayError } from './gatewayerror';
import { MockGatewayGrpcClient } from './testutils.test';
import { GatewayClient, newGatewayClient } from './client.js';
import { GatewayError } from './gatewayerror.js';
import { MockGatewayGrpcClient } from './testutils.test.js';

describe('client', () => {
describe('throws GatewayError on gRPC error', () => {
Expand Down
10 changes: 5 additions & 5 deletions node/src/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@
import { CallOptions, ClientUnaryCall, Metadata, requestCallback, ServiceError } from '@grpc/grpc-js';
import { common, gateway, peer } from '@hyperledger/fabric-protos';
import { Message } from 'google-protobuf';
import { CommitStatusError } from './commitstatuserror';
import { EndorseError } from './endorseerror';
import { ConnectOptions } from './gateway';
import { GatewayError, newGatewayError } from './gatewayerror';
import { SubmitError } from './submiterror';
import { CommitStatusError } from './commitstatuserror.js';
import { EndorseError } from './endorseerror.js';
import { ConnectOptions } from './gateway.js';
import { GatewayError, newGatewayError } from './gatewayerror.js';
import { SubmitError } from './submiterror.js';

export const evaluateMethod = '/gateway.Gateway/Evaluate';
export const endorseMethod = '/gateway.Gateway/Endorse';
Expand Down
8 changes: 4 additions & 4 deletions node/src/commit.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@

import { CallOptions } from '@grpc/grpc-js';
import { gateway } from '@hyperledger/fabric-protos';
import { GatewayClient } from './client';
import { Signable } from './signable';
import { SigningIdentity } from './signingidentity';
import { Status, StatusCode } from './status';
import { GatewayClient } from './client.js';
import { Signable } from './signable.js';
import { SigningIdentity } from './signingidentity.js';
import { Status, StatusCode } from './status.js';

/**
* Allows access to information about a transaction that is committed to the ledger.
Expand Down
2 changes: 1 addition & 1 deletion node/src/commiterror.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
*/

import { peer } from '@hyperledger/fabric-protos';
import { Status, StatusNames } from './status';
import { Status, StatusNames } from './status.js';

/**
* CommitError is thrown to indicate that a transaction committed with an unsuccessful status code.
Expand Down
2 changes: 1 addition & 1 deletion node/src/commitstatuserror.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
*/

import { ServiceError } from '@grpc/grpc-js';
import { ErrorDetail, GatewayError } from './gatewayerror';
import { ErrorDetail, GatewayError } from './gatewayerror.js';

/**
* CommitStatusError is thrown when a failure occurs obtaining the commit status of a transaction.
Expand Down
Loading