@subql/node-stellar 3.6.1 → 3.8.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.
@@ -1 +1 @@
1
- {"version":3,"file":"block.stellar.spec.js","sourceRoot":"","sources":["../../src/stellar/block.stellar.spec.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;AAcnC,mDAA+C;AAC/C,+CAAwC;AACxC,qDAAqD;AACrD,mDAAsD;AAEtD,MAAM,WAAW,GAAG,0DAA0D,CAAC;AAC/E,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACjC,MAAM,KAAK,GAAiB,EAAE,QAAQ,EAAE,CAAC,EAA6B,CAAC;YACvE,MAAM,MAAM,GAAuB,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;YAEjD,MAAM,MAAM,GAAG,mCAAmB,CAAC,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAExE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;QAC1C,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;YAClC,MAAM,WAAW,GAAuB;gBACtC,cAAc,EAAE,UAAU;aACM,CAAC;YACnC,MAAM,MAAM,GAA6B,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;YAEjE,MAAM,MAAM,GAAG,mCAAmB,CAAC,0BAA0B,CAC3D,WAAW,EACX,MAAM,CACP,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;YAChE,MAAM,WAAW,GAAuB;gBACtC,cAAc,EAAE,UAAU;aACM,CAAC;YACnC,MAAM,MAAM,GAA6B,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;YAEjE,MAAM,MAAM,GAAG,mCAAmB,CAAC,0BAA0B,CAC3D,WAAW,EACX,MAAM,CACP,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,WAAW,GAAuB;gBACtC,cAAc,EAAE,UAAU;aACM,CAAC;YACnC,MAAM,MAAM,GAA6B,EAAE,CAAC;YAE5C,MAAM,MAAM,GAAG,mCAAmB,CAAC,0BAA0B,CAC3D,WAAW,EACX,MAAM,CACP,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,SAAS,GAAqB;gBAClC,cAAc,EAAE,UAAU;gBAC1B,IAAI,EAAE,OAAO;aACiB,CAAC;YACjC,MAAM,MAAM,GAA2B;gBACrC,aAAa,EAAE,UAAU;gBACzB,IAAI,EAAE,oBAAU,CAAC,qBAAqB,CAAC,aAAa;aACrD,CAAC;YAEF,MAAM,MAAM,GAAG,mCAAmB,CAAC,wBAAwB,CACzD,SAAS,EACT,MAAM,CACP,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;YAClF,MAAM,SAAS,GAAqB;gBAClC,cAAc,EAAE,UAAU;gBAC1B,IAAI,EAAE,oBAAU,CAAC,qBAAqB,CAAC,aAAa;aACtB,CAAC;YACjC,MAAM,MAAM,GAA2B;gBACrC,aAAa,EAAE,UAAU;gBACzB,IAAI,EAAE,oBAAU,CAAC,qBAAqB,CAAC,aAAa;aACrD,CAAC;YAEF,MAAM,MAAM,GAAG,mCAAmB,CAAC,wBAAwB,CACzD,SAAS,EACT,MAAM,CACP,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,MAAM,SAAS,GAAqB;gBAClC,cAAc,EAAE,UAAU;gBAC1B,IAAI,EAAE,OAAO;aACiB,CAAC;YACjC,MAAM,MAAM,GAA2B,EAAE,CAAC;YAE1C,MAAM,MAAM,GAAG,mCAAmB,CAAC,wBAAwB,CACzD,SAAS,EACT,MAAM,CACP,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,MAAM,GAAkB;gBAC5B,OAAO,EAAE,UAAU;gBACnB,IAAI,EAAE,OAAO;aACc,CAAC;YAC9B,MAAM,MAAM,GAAwB;gBAClC,OAAO,EAAE,UAAU;gBACnB,IAAI,EAAE,OAAO;aACd,CAAC;YAEF,MAAM,MAAM,GAAG,mCAAmB,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAEzE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;YAC3E,MAAM,MAAM,GAAkB;gBAC5B,OAAO,EAAE,UAAU;gBACnB,IAAI,EAAE,OAAO;aACc,CAAC;YAC9B,MAAM,MAAM,GAAwB;gBAClC,OAAO,EAAE,UAAU;gBACnB,IAAI,EAAE,OAAO;aACd,CAAC;YAEF,MAAM,MAAM,GAAG,mCAAmB,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAEzE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,MAAM,MAAM,GAAkB;gBAC5B,OAAO,EAAE,UAAU;gBACnB,IAAI,EAAE,OAAO;aACc,CAAC;YAC9B,MAAM,MAAM,GAAwB,EAAE,CAAC;YAEvC,MAAM,MAAM,GAAG,mCAAmB,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAEzE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,qBAAqB,EAAE;QAC9B,MAAM,MAAM,GAAG,IAAA,8BAAa,EAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,IAAA,8BAAa,EAAC,QAAQ,CAAC,CAAC;QAEvC,MAAM,SAAS,GAAiB;YAC9B,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,IAAI;YACjB,SAAS,EAAE,IAAI;YACf,cAAc,EAAE,IAAI;YACpB,UAAU,EAAE,IAAI,uBAAQ,CAAC,WAAW,CAAC;YACrC,EAAE,EAAE,IAAI;YACR,WAAW,EAAE,IAAI;YACjB,wBAAwB,EAAE,IAAI;YAC9B,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;YACvB,KAAK,EAAE,IAAI;SACZ,CAAC;QAEF,MAAM,oBAAoB,GAAuB;YAC/C,MAAM,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;SAC7B,CAAC;QAEF,MAAM,sBAAsB,GAAuB;YACjD,MAAM,EAAE,CAAC,SAAS,CAAC;SACpB,CAAC;QAEF,EAAE,CAAC,+CAA+C,EAAE;YAClD,MAAM,CACJ,mCAAmB,CAAC,oBAAoB,CACtC,SAAS,EACT,oBAAoB,EACpB,WAAW,CACZ,CACF,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE;YACrD,MAAM,CACJ,mCAAmB,CAAC,oBAAoB,CACtC,SAAS,EACT,oBAAoB,CACrB,CACF,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE;YAC1D,MAAM,CACJ,mCAAmB,CAAC,oBAAoB,CACtC,SAAS,EACT,sBAAsB,EACtB,WAAW,CACZ,CACF,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE;YACzC,sBAAsB,CAAC,MAAM,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC/D,MAAM,CACJ,mCAAmB,CAAC,oBAAoB,CACtC,SAAS,EACT,sBAAsB,CACvB,CACF,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE;YAC1C,oBAAoB,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC/C,MAAM,CACJ,mCAAmB,CAAC,oBAAoB,CACtC,SAAS,EACT,oBAAoB,CACrB,CACF,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE;YACzC,oBAAoB,CAAC,UAAU,GAAG,WAAW,CAAC;YAC9C,MAAM,CACJ,mCAAmB,CAAC,oBAAoB,CACtC,SAAS,EACT,oBAAoB,CACrB,CACF,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE;YAC5C,MAAM,CACJ,mCAAmB,CAAC,oBAAoB,CAAC,SAAS,EAAE;gBAClD,UAAU,EAAE,gBAAgB;aAC7B,CAAC,CACH,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE;YACzC,MAAM,CACJ,mCAAmB,CAAC,oBAAoB,CACtC,SAAS,EACT,oBAAoB,EACpB,gBAAgB,CACjB,CACF,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport {\n StellarBlock,\n StellarBlockFilter,\n StellarEffect,\n StellarEffectFilter,\n SorobanEvent,\n SorobanEventFilter,\n StellarOperation,\n StellarOperationFilter,\n StellarTransaction,\n StellarTransactionFilter,\n} from '@subql/types-stellar';\nimport { nativeToScVal } from 'soroban-client';\nimport { Contract } from 'stellar-base';\nimport { HorizonApi } from 'stellar-sdk/lib/horizon';\nimport { StellarBlockWrapped } from './block.stellar';\n\nconst testAddress = 'CA3D5KRYM6CB7OWQ6TWYRR3Z4T7GNZLKERYNZGGA5SOAOPIFY6YQGAXE';\ndescribe('StellarBlockWrapped', () => {\n describe('filterBlocksProcessor', () => {\n it('should filter by modulo', () => {\n const block: StellarBlock = { sequence: 5 } as unknown as StellarBlock;\n const filter: StellarBlockFilter = { modulo: 2 };\n\n const result = StellarBlockWrapped.filterBlocksProcessor(block, filter);\n\n expect(result).toBe(false);\n });\n });\n\n describe('filterTransactionProcessor', () => {\n it('should filter by account', () => {\n const transaction: StellarTransaction = {\n source_account: 'account1',\n } as unknown as StellarTransaction;\n const filter: StellarTransactionFilter = { account: 'account2' };\n\n const result = StellarBlockWrapped.filterTransactionProcessor(\n transaction,\n filter,\n );\n\n expect(result).toBe(false);\n });\n\n it('should pass when account filter condition is fulfilled', () => {\n const transaction: StellarTransaction = {\n source_account: 'account1',\n } as unknown as StellarTransaction;\n const filter: StellarTransactionFilter = { account: 'account1' };\n\n const result = StellarBlockWrapped.filterTransactionProcessor(\n transaction,\n filter,\n );\n\n expect(result).toBe(true);\n });\n\n it('should pass when there is no account filter', () => {\n const transaction: StellarTransaction = {\n source_account: 'account1',\n } as unknown as StellarTransaction;\n const filter: StellarTransactionFilter = {};\n\n const result = StellarBlockWrapped.filterTransactionProcessor(\n transaction,\n filter,\n );\n\n expect(result).toBe(true);\n });\n });\n\n describe('filterOperationProcessor', () => {\n it('should filter by source_account and type', () => {\n const operation: StellarOperation = {\n source_account: 'account1',\n type: 'type1',\n } as unknown as StellarOperation;\n const filter: StellarOperationFilter = {\n sourceAccount: 'account2',\n type: HorizonApi.OperationResponseType.createAccount,\n };\n\n const result = StellarBlockWrapped.filterOperationProcessor(\n operation,\n filter,\n );\n\n expect(result).toBe(false);\n });\n\n it('should pass when source_account and type filter conditions are fulfilled', () => {\n const operation: StellarOperation = {\n source_account: 'account1',\n type: HorizonApi.OperationResponseType.createAccount,\n } as unknown as StellarOperation;\n const filter: StellarOperationFilter = {\n sourceAccount: 'account1',\n type: HorizonApi.OperationResponseType.createAccount,\n };\n\n const result = StellarBlockWrapped.filterOperationProcessor(\n operation,\n filter,\n );\n\n expect(result).toBe(true);\n });\n\n it('should pass when there are no filter conditions', () => {\n const operation: StellarOperation = {\n source_account: 'account1',\n type: 'type1',\n } as unknown as StellarOperation;\n const filter: StellarOperationFilter = {};\n\n const result = StellarBlockWrapped.filterOperationProcessor(\n operation,\n filter,\n );\n\n expect(result).toBe(true);\n });\n });\n\n describe('filterEffectProcessor', () => {\n it('should filter by account and type', () => {\n const effect: StellarEffect = {\n account: 'account1',\n type: 'type1',\n } as unknown as StellarEffect;\n const filter: StellarEffectFilter = {\n account: 'account2',\n type: 'type2',\n };\n\n const result = StellarBlockWrapped.filterEffectProcessor(effect, filter);\n\n expect(result).toBe(false);\n });\n\n it('should pass when account and type filter conditions are fulfilled', () => {\n const effect: StellarEffect = {\n account: 'account1',\n type: 'type1',\n } as unknown as StellarEffect;\n const filter: StellarEffectFilter = {\n account: 'account1',\n type: 'type1',\n };\n\n const result = StellarBlockWrapped.filterEffectProcessor(effect, filter);\n\n expect(result).toBe(true);\n });\n\n it('should pass when there are no filter conditions', () => {\n const effect: StellarEffect = {\n account: 'account1',\n type: 'type1',\n } as unknown as StellarEffect;\n const filter: StellarEffectFilter = {};\n\n const result = StellarBlockWrapped.filterEffectProcessor(effect, filter);\n\n expect(result).toBe(true);\n });\n });\n\n describe('StellarBlockWrapped', function () {\n const topic1 = nativeToScVal('topic1');\n const topic2 = nativeToScVal('topic2');\n\n const mockEvent: SorobanEvent = {\n type: undefined,\n ledger: null,\n transaction: null,\n operation: null,\n ledgerClosedAt: null,\n contractId: new Contract(testAddress),\n id: null,\n pagingToken: null,\n inSuccessfulContractCall: null,\n topic: [topic1, topic2],\n value: null,\n };\n\n const mockEventFilterValid: SorobanEventFilter = {\n topics: ['topic1', 'topic2'],\n };\n\n const mockEventFilterInvalid: SorobanEventFilter = {\n topics: ['topics3'],\n };\n\n it('should pass filter - valid address and topics', function () {\n expect(\n StellarBlockWrapped.filterEventProcessor(\n mockEvent,\n mockEventFilterValid,\n testAddress,\n ),\n ).toEqual(true);\n });\n\n it('should pass filter - no address and valid topics', function () {\n expect(\n StellarBlockWrapped.filterEventProcessor(\n mockEvent,\n mockEventFilterValid,\n ),\n ).toEqual(true);\n });\n\n it('should fail filter - valid address and invalid topics', function () {\n expect(\n StellarBlockWrapped.filterEventProcessor(\n mockEvent,\n mockEventFilterInvalid,\n testAddress,\n ),\n ).toEqual(false);\n });\n\n it('should fail filter - event not found', function () {\n mockEventFilterInvalid.topics = ['topic1', 'topic2', 'topic3'];\n expect(\n StellarBlockWrapped.filterEventProcessor(\n mockEvent,\n mockEventFilterInvalid,\n ),\n ).toEqual(false);\n });\n\n it('should pass filter - skip null topics', function () {\n mockEventFilterValid.topics = [null, 'topic2'];\n expect(\n StellarBlockWrapped.filterEventProcessor(\n mockEvent,\n mockEventFilterValid,\n ),\n ).toEqual(true);\n });\n\n it('should pass filer - valid contractId', function () {\n mockEventFilterValid.contractId = testAddress;\n expect(\n StellarBlockWrapped.filterEventProcessor(\n mockEvent,\n mockEventFilterValid,\n ),\n ).toEqual(true);\n });\n\n it('should fail filter - invalid contractId', function () {\n expect(\n StellarBlockWrapped.filterEventProcessor(mockEvent, {\n contractId: 'invalidaddress',\n }),\n ).toEqual(false);\n });\n\n it('should fail filter - invalid address', function () {\n expect(\n StellarBlockWrapped.filterEventProcessor(\n mockEvent,\n mockEventFilterValid,\n 'invalidaddress',\n ),\n ).toEqual(false);\n });\n });\n});\n"]}
1
+ {"version":3,"file":"block.stellar.spec.js","sourceRoot":"","sources":["../../src/stellar/block.stellar.spec.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport {\n StellarBlock,\n StellarBlockFilter,\n StellarEffect,\n StellarEffectFilter,\n SorobanEvent,\n SorobanEventFilter,\n StellarOperation,\n StellarOperationFilter,\n StellarTransaction,\n StellarTransactionFilter,\n} from '@subql/types-stellar';\nimport { nativeToScVal, Contract } from 'stellar-sdk';\nimport { HorizonApi } from 'stellar-sdk/lib/horizon';\nimport { StellarBlockWrapped } from './block.stellar';\n\nconst testAddress = 'CA3D5KRYM6CB7OWQ6TWYRR3Z4T7GNZLKERYNZGGA5SOAOPIFY6YQGAXE';\ndescribe('StellarBlockWrapped', () => {\n describe('filterBlocksProcessor', () => {\n it('should filter by modulo', () => {\n const block: StellarBlock = { sequence: 5 } as unknown as StellarBlock;\n const filter: StellarBlockFilter = { modulo: 2 };\n\n const result = StellarBlockWrapped.filterBlocksProcessor(block, filter);\n\n expect(result).toBe(false);\n });\n });\n\n describe('filterTransactionProcessor', () => {\n it('should filter by account', () => {\n const transaction: StellarTransaction = {\n source_account: 'account1',\n } as unknown as StellarTransaction;\n const filter: StellarTransactionFilter = { account: 'account2' };\n\n const result = StellarBlockWrapped.filterTransactionProcessor(\n transaction,\n filter,\n );\n\n expect(result).toBe(false);\n });\n\n it('should pass when account filter condition is fulfilled', () => {\n const transaction: StellarTransaction = {\n source_account: 'account1',\n } as unknown as StellarTransaction;\n const filter: StellarTransactionFilter = { account: 'account1' };\n\n const result = StellarBlockWrapped.filterTransactionProcessor(\n transaction,\n filter,\n );\n\n expect(result).toBe(true);\n });\n\n it('should pass when there is no account filter', () => {\n const transaction: StellarTransaction = {\n source_account: 'account1',\n } as unknown as StellarTransaction;\n const filter: StellarTransactionFilter = {};\n\n const result = StellarBlockWrapped.filterTransactionProcessor(\n transaction,\n filter,\n );\n\n expect(result).toBe(true);\n });\n });\n\n describe('filterOperationProcessor', () => {\n it('should filter by source_account and type', () => {\n const operation: StellarOperation = {\n source_account: 'account1',\n type: 'type1',\n } as unknown as StellarOperation;\n const filter: StellarOperationFilter = {\n sourceAccount: 'account2',\n type: HorizonApi.OperationResponseType.createAccount,\n };\n\n const result = StellarBlockWrapped.filterOperationProcessor(\n operation,\n filter,\n );\n\n expect(result).toBe(false);\n });\n\n it('should pass when source_account and type filter conditions are fulfilled', () => {\n const operation: StellarOperation = {\n source_account: 'account1',\n type: HorizonApi.OperationResponseType.createAccount,\n } as unknown as StellarOperation;\n const filter: StellarOperationFilter = {\n sourceAccount: 'account1',\n type: HorizonApi.OperationResponseType.createAccount,\n };\n\n const result = StellarBlockWrapped.filterOperationProcessor(\n operation,\n filter,\n );\n\n expect(result).toBe(true);\n });\n\n it('should pass when there are no filter conditions', () => {\n const operation: StellarOperation = {\n source_account: 'account1',\n type: 'type1',\n } as unknown as StellarOperation;\n const filter: StellarOperationFilter = {};\n\n const result = StellarBlockWrapped.filterOperationProcessor(\n operation,\n filter,\n );\n\n expect(result).toBe(true);\n });\n });\n\n describe('filterEffectProcessor', () => {\n it('should filter by account and type', () => {\n const effect: StellarEffect = {\n account: 'account1',\n type: 'type1',\n } as unknown as StellarEffect;\n const filter: StellarEffectFilter = {\n account: 'account2',\n type: 'type2',\n };\n\n const result = StellarBlockWrapped.filterEffectProcessor(effect, filter);\n\n expect(result).toBe(false);\n });\n\n it('should pass when account and type filter conditions are fulfilled', () => {\n const effect: StellarEffect = {\n account: 'account1',\n type: 'type1',\n } as unknown as StellarEffect;\n const filter: StellarEffectFilter = {\n account: 'account1',\n type: 'type1',\n };\n\n const result = StellarBlockWrapped.filterEffectProcessor(effect, filter);\n\n expect(result).toBe(true);\n });\n\n it('should pass when there are no filter conditions', () => {\n const effect: StellarEffect = {\n account: 'account1',\n type: 'type1',\n } as unknown as StellarEffect;\n const filter: StellarEffectFilter = {};\n\n const result = StellarBlockWrapped.filterEffectProcessor(effect, filter);\n\n expect(result).toBe(true);\n });\n });\n\n describe('StellarBlockWrapped', function () {\n const topic1 = nativeToScVal('topic1');\n const topic2 = nativeToScVal('topic2');\n\n const mockEvent: SorobanEvent = {\n type: undefined,\n ledger: null,\n transaction: null,\n operation: null,\n ledgerClosedAt: null,\n contractId: new Contract(testAddress),\n id: null,\n pagingToken: null,\n inSuccessfulContractCall: null,\n topic: [topic1, topic2],\n value: null,\n };\n\n const mockEventFilterValid: SorobanEventFilter = {\n topics: ['topic1', 'topic2'],\n };\n\n const mockEventFilterInvalid: SorobanEventFilter = {\n topics: ['topics3'],\n };\n\n it('should pass filter - valid address and topics', function () {\n expect(\n StellarBlockWrapped.filterEventProcessor(\n mockEvent,\n mockEventFilterValid,\n testAddress,\n ),\n ).toEqual(true);\n });\n\n it('should pass filter - no address and valid topics', function () {\n expect(\n StellarBlockWrapped.filterEventProcessor(\n mockEvent,\n mockEventFilterValid,\n ),\n ).toEqual(true);\n });\n\n it('should fail filter - valid address and invalid topics', function () {\n expect(\n StellarBlockWrapped.filterEventProcessor(\n mockEvent,\n mockEventFilterInvalid,\n testAddress,\n ),\n ).toEqual(false);\n });\n\n it('should fail filter - event not found', function () {\n mockEventFilterInvalid.topics = ['topic1', 'topic2', 'topic3'];\n expect(\n StellarBlockWrapped.filterEventProcessor(\n mockEvent,\n mockEventFilterInvalid,\n ),\n ).toEqual(false);\n });\n\n it('should pass filter - skip null topics', function () {\n mockEventFilterValid.topics = [null, 'topic2'];\n expect(\n StellarBlockWrapped.filterEventProcessor(\n mockEvent,\n mockEventFilterValid,\n ),\n ).toEqual(true);\n });\n\n it('should pass filer - valid contractId', function () {\n mockEventFilterValid.contractId = testAddress;\n expect(\n StellarBlockWrapped.filterEventProcessor(\n mockEvent,\n mockEventFilterValid,\n ),\n ).toEqual(true);\n });\n\n it('should fail filter - invalid contractId', function () {\n expect(\n StellarBlockWrapped.filterEventProcessor(mockEvent, {\n contractId: 'invalidaddress',\n }),\n ).toEqual(false);\n });\n\n it('should fail filter - invalid address', function () {\n expect(\n StellarBlockWrapped.filterEventProcessor(\n mockEvent,\n mockEventFilterValid,\n 'invalidaddress',\n ),\n ).toEqual(false);\n });\n });\n});\n"]}
@@ -1,20 +1,21 @@
1
- import { Account, Address, Contract, FeeBumpTransaction, Server, SorobanRpc, Transaction, xdr } from 'soroban-client';
2
- import { Durability } from 'soroban-client/lib/server';
1
+ import { Memo, MemoType, Operation } from '@stellar/stellar-base';
2
+ import { Account, Address, Contract, FeeBumpTransaction, SorobanRpc, Transaction, xdr } from 'stellar-sdk';
3
+ import { Durability } from 'stellar-sdk/lib/soroban';
3
4
  import { SorobanServer } from './soroban.server';
4
5
  export default class SafeStellarProvider extends SorobanServer {
5
6
  private blockHeight;
6
7
  private baseApi;
7
- constructor(baseApi: Server, blockHeight: number);
8
+ constructor(baseApi: SorobanRpc.Server, blockHeight: number);
8
9
  getAccount(address: string): Promise<Account>;
9
- getHealth(): Promise<SorobanRpc.GetHealthResponse>;
10
- getContractData(contract: string | Address | Contract, key: xdr.ScVal, durability?: Durability): Promise<SorobanRpc.LedgerEntryResult>;
11
- getLedgerEntries(keys: xdr.LedgerKey[]): Promise<SorobanRpc.GetLedgerEntriesResponse>;
12
- getTransaction(hash: string): Promise<SorobanRpc.GetTransactionResponse>;
13
- getEvents(request: Server.GetEventsRequest): Promise<SorobanRpc.GetEventsResponse>;
14
- getNetwork(): Promise<SorobanRpc.GetNetworkResponse>;
15
- getLatestLedger(): Promise<SorobanRpc.GetLatestLedgerResponse>;
16
- simulateTransaction(transaction: Transaction | FeeBumpTransaction): Promise<SorobanRpc.SimulateTransactionResponse>;
17
- prepareTransaction(transaction: Transaction | FeeBumpTransaction, networkPassphrase?: string): Promise<Transaction | FeeBumpTransaction>;
18
- sendTransaction(transaction: Transaction | FeeBumpTransaction): Promise<SorobanRpc.SendTransactionResponse>;
10
+ getHealth(): Promise<SorobanRpc.Api.GetHealthResponse>;
11
+ getContractData(contract: string | Address | Contract, key: xdr.ScVal, durability?: Durability): Promise<SorobanRpc.Api.LedgerEntryResult>;
12
+ getLedgerEntries(keys: xdr.LedgerKey[]): Promise<SorobanRpc.Api.GetLedgerEntriesResponse>;
13
+ getTransaction(hash: string): Promise<SorobanRpc.Api.GetTransactionResponse>;
14
+ getEvents(request: SorobanRpc.Server.GetEventsRequest): Promise<SorobanRpc.Api.GetEventsResponse>;
15
+ getNetwork(): Promise<SorobanRpc.Api.GetNetworkResponse>;
16
+ getLatestLedger(): Promise<SorobanRpc.Api.GetLatestLedgerResponse>;
17
+ simulateTransaction(transaction: Transaction | FeeBumpTransaction): Promise<SorobanRpc.Api.SimulateTransactionResponse>;
18
+ prepareTransaction(transaction: Transaction | FeeBumpTransaction): Promise<Transaction<Memo<MemoType>, Operation[]>>;
19
+ sendTransaction(transaction: Transaction | FeeBumpTransaction): Promise<SorobanRpc.Api.SendTransactionResponse>;
19
20
  requestAirdrop(address: string | Pick<Account, 'accountId'>, friendbotUrl?: string): Promise<Account>;
20
21
  }
@@ -3,7 +3,8 @@
3
3
  // SPDX-License-Identifier: GPL-3.0
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
5
  const node_core_1 = require("@subql/node-core");
6
- const server_1 = require("soroban-client/lib/server");
6
+ const soroban_1 = require("stellar-sdk/lib/soroban");
7
+ // import { Durability } from 'soroban-client/lib/server';
7
8
  const soroban_server_1 = require("./soroban.server");
8
9
  const logger = (0, node_core_1.getLogger)('safe.api.stellar');
9
10
  class SafeStellarProvider extends soroban_server_1.SorobanServer {
@@ -21,7 +22,7 @@ class SafeStellarProvider extends soroban_server_1.SorobanServer {
21
22
  throw new Error('Method getHealth is not implemented.');
22
23
  }
23
24
  //eslint-disable-next-line @typescript-eslint/require-await
24
- async getContractData(contract, key, durability = server_1.Durability.Persistent) {
25
+ async getContractData(contract, key, durability = soroban_1.Durability.Persistent) {
25
26
  throw new Error('Method getContractData is not implemented.');
26
27
  }
27
28
  // @ts-ignore
@@ -52,7 +53,7 @@ class SafeStellarProvider extends soroban_server_1.SorobanServer {
52
53
  throw new Error('Method simulateTransaction is not implemented.');
53
54
  }
54
55
  //eslint-disable-next-line @typescript-eslint/require-await
55
- async prepareTransaction(transaction, networkPassphrase) {
56
+ async prepareTransaction(transaction) {
56
57
  throw new Error('Method prepareTransaction is not implemented.');
57
58
  }
58
59
  //eslint-disable-next-line @typescript-eslint/require-await
@@ -1 +1 @@
1
- {"version":3,"file":"safe-api.js","sourceRoot":"","sources":["../../src/stellar/safe-api.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;AAEnC,gDAA6C;AAW7C,sDAAuD;AACvD,qDAAiD;AAEjD,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,kBAAkB,CAAC,CAAC;AAE7C,MAAqB,mBAAoB,SAAQ,8BAAa;IAI5D,YAAY,OAAe,EAAE,WAAmB;QAC9C,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,UAAU,CAAC,OAAe;QAC9B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,SAAS;QACb,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,eAAe,CACnB,QAAqC,EACrC,GAAc,EACd,aAAyB,mBAAU,CAAC,UAAU;QAE9C,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,aAAa;IACb,4DAA4D;IAC5D,KAAK,CAAC,gBAAgB,CACpB,IAAqB;QAErB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,cAAc,CAClB,IAAY;QAEZ,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,SAAS,CACb,OAAgC;QAEhC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;YAC5B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO,EAAE,EAAE;SACZ,CAAC,CAAC;IACL,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,eAAe;QACnB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,mBAAmB,CACvB,WAA6C;QAE7C,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,kBAAkB,CACtB,WAA6C,EAC7C,iBAA0B;QAE1B,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,eAAe,CACnB,WAA6C;QAE7C,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,cAAc,CAClB,OAA4C,EAC5C,YAAqB;QAErB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;CACF;AA5FD,sCA4FC","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { getLogger } from '@subql/node-core';\nimport {\n Account,\n Address,\n Contract,\n FeeBumpTransaction,\n Server,\n SorobanRpc,\n Transaction,\n xdr,\n} from 'soroban-client';\nimport { Durability } from 'soroban-client/lib/server';\nimport { SorobanServer } from './soroban.server';\n\nconst logger = getLogger('safe.api.stellar');\n\nexport default class SafeStellarProvider extends SorobanServer {\n private blockHeight: number;\n private baseApi: Server;\n\n constructor(baseApi: Server, blockHeight: number) {\n super(baseApi.serverURL.toString());\n this.blockHeight = blockHeight;\n this.baseApi = baseApi;\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async getAccount(address: string): Promise<Account> {\n throw new Error('Method getAccount is not implemented.');\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async getHealth(): Promise<SorobanRpc.GetHealthResponse> {\n throw new Error('Method getHealth is not implemented.');\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async getContractData(\n contract: string | Address | Contract,\n key: xdr.ScVal,\n durability: Durability = Durability.Persistent,\n ): Promise<SorobanRpc.LedgerEntryResult> {\n throw new Error('Method getContractData is not implemented.');\n }\n\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/require-await\n async getLedgerEntries(\n keys: xdr.LedgerKey[],\n ): Promise<SorobanRpc.GetLedgerEntriesResponse> {\n throw new Error('Method getLedgerEntries is not implemented.');\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async getTransaction(\n hash: string,\n ): Promise<SorobanRpc.GetTransactionResponse> {\n throw new Error('Method getTransaction is not implemented.');\n }\n\n async getEvents(\n request: Server.GetEventsRequest,\n ): Promise<SorobanRpc.GetEventsResponse> {\n return this.baseApi.getEvents({\n startLedger: this.blockHeight,\n filters: [],\n });\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async getNetwork(): Promise<SorobanRpc.GetNetworkResponse> {\n throw new Error('Method getNetwork is not implemented.');\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async getLatestLedger(): Promise<SorobanRpc.GetLatestLedgerResponse> {\n throw new Error('Method getLatestLedger is not implemented.');\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async simulateTransaction(\n transaction: Transaction | FeeBumpTransaction,\n ): Promise<SorobanRpc.SimulateTransactionResponse> {\n throw new Error('Method simulateTransaction is not implemented.');\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async prepareTransaction(\n transaction: Transaction | FeeBumpTransaction,\n networkPassphrase?: string,\n ): Promise<Transaction | FeeBumpTransaction> {\n throw new Error('Method prepareTransaction is not implemented.');\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async sendTransaction(\n transaction: Transaction | FeeBumpTransaction,\n ): Promise<SorobanRpc.SendTransactionResponse> {\n throw new Error('Method sendTransaction is not implemented.');\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async requestAirdrop(\n address: string | Pick<Account, 'accountId'>,\n friendbotUrl?: string,\n ): Promise<Account> {\n throw new Error('Method requestAirdrop is not implemented.');\n }\n}\n"]}
1
+ {"version":3,"file":"safe-api.js","sourceRoot":"","sources":["../../src/stellar/safe-api.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;AAGnC,gDAA6C;AAU7C,qDAAqD;AAErD,0DAA0D;AAC1D,qDAAiD;AAEjD,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,kBAAkB,CAAC,CAAC;AAE7C,MAAqB,mBAAoB,SAAQ,8BAAa;IAI5D,YAAY,OAA0B,EAAE,WAAmB;QACzD,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,UAAU,CAAC,OAAe;QAC9B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,SAAS;QACb,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,eAAe,CACnB,QAAqC,EACrC,GAAc,EACd,aAAyB,oBAAU,CAAC,UAAU;QAE9C,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,aAAa;IACb,4DAA4D;IAC5D,KAAK,CAAC,gBAAgB,CACpB,IAAqB;QAErB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,cAAc,CAClB,IAAY;QAEZ,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,SAAS,CACb,OAA2C;QAE3C,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;YAC5B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO,EAAE,EAAE;SACZ,CAAC,CAAC;IACL,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,eAAe;QACnB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,mBAAmB,CACvB,WAA6C;QAE7C,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,kBAAkB,CACtB,WAA6C;QAE7C,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,eAAe,CACnB,WAA6C;QAE7C,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,cAAc,CAClB,OAA4C,EAC5C,YAAqB;QAErB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;CACF;AA3FD,sCA2FC","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Memo, MemoType, Operation } from '@stellar/stellar-base';\nimport { getLogger } from '@subql/node-core';\nimport {\n Account,\n Address,\n Contract,\n FeeBumpTransaction,\n SorobanRpc,\n Transaction,\n xdr,\n} from 'stellar-sdk';\nimport { Durability } from 'stellar-sdk/lib/soroban';\n\n// import { Durability } from 'soroban-client/lib/server';\nimport { SorobanServer } from './soroban.server';\n\nconst logger = getLogger('safe.api.stellar');\n\nexport default class SafeStellarProvider extends SorobanServer {\n private blockHeight: number;\n private baseApi: SorobanRpc.Server;\n\n constructor(baseApi: SorobanRpc.Server, blockHeight: number) {\n super(baseApi.serverURL.toString());\n this.blockHeight = blockHeight;\n this.baseApi = baseApi;\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async getAccount(address: string): Promise<Account> {\n throw new Error('Method getAccount is not implemented.');\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async getHealth(): Promise<SorobanRpc.Api.GetHealthResponse> {\n throw new Error('Method getHealth is not implemented.');\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async getContractData(\n contract: string | Address | Contract,\n key: xdr.ScVal,\n durability: Durability = Durability.Persistent,\n ): Promise<SorobanRpc.Api.LedgerEntryResult> {\n throw new Error('Method getContractData is not implemented.');\n }\n\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/require-await\n async getLedgerEntries(\n keys: xdr.LedgerKey[],\n ): Promise<SorobanRpc.Api.GetLedgerEntriesResponse> {\n throw new Error('Method getLedgerEntries is not implemented.');\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async getTransaction(\n hash: string,\n ): Promise<SorobanRpc.Api.GetTransactionResponse> {\n throw new Error('Method getTransaction is not implemented.');\n }\n\n async getEvents(\n request: SorobanRpc.Server.GetEventsRequest,\n ): Promise<SorobanRpc.Api.GetEventsResponse> {\n return this.baseApi.getEvents({\n startLedger: this.blockHeight,\n filters: [],\n });\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async getNetwork(): Promise<SorobanRpc.Api.GetNetworkResponse> {\n throw new Error('Method getNetwork is not implemented.');\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async getLatestLedger(): Promise<SorobanRpc.Api.GetLatestLedgerResponse> {\n throw new Error('Method getLatestLedger is not implemented.');\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async simulateTransaction(\n transaction: Transaction | FeeBumpTransaction,\n ): Promise<SorobanRpc.Api.SimulateTransactionResponse> {\n throw new Error('Method simulateTransaction is not implemented.');\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async prepareTransaction(\n transaction: Transaction | FeeBumpTransaction,\n ): Promise<Transaction<Memo<MemoType>, Operation[]>> {\n throw new Error('Method prepareTransaction is not implemented.');\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async sendTransaction(\n transaction: Transaction | FeeBumpTransaction,\n ): Promise<SorobanRpc.Api.SendTransactionResponse> {\n throw new Error('Method sendTransaction is not implemented.');\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async requestAirdrop(\n address: string | Pick<Account, 'accountId'>,\n friendbotUrl?: string,\n ): Promise<Account> {\n throw new Error('Method requestAirdrop is not implemented.');\n }\n}\n"]}
@@ -1,7 +1,7 @@
1
- import { Server, SorobanRpc } from 'soroban-client';
2
- export declare class SorobanServer extends Server {
1
+ import { SorobanRpc } from 'stellar-sdk';
2
+ export declare class SorobanServer extends SorobanRpc.Server {
3
3
  private eventsCache;
4
4
  private fetchEventsForSequence;
5
5
  private updateEventCache;
6
- getEvents(request: Server.GetEventsRequest): Promise<SorobanRpc.GetEventsResponse>;
6
+ getEvents(request: SorobanRpc.Server.GetEventsRequest): Promise<SorobanRpc.Api.GetEventsResponse>;
7
7
  }
@@ -4,9 +4,9 @@
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
5
  exports.SorobanServer = void 0;
6
6
  const lodash_1 = require("lodash");
7
- const soroban_client_1 = require("soroban-client");
7
+ const stellar_sdk_1 = require("stellar-sdk");
8
8
  const DEFAULT_PAGE_SIZE = 100;
9
- class SorobanServer extends soroban_client_1.Server {
9
+ class SorobanServer extends stellar_sdk_1.SorobanRpc.Server {
10
10
  constructor() {
11
11
  super(...arguments);
12
12
  this.eventsCache = {};
@@ -1 +1 @@
1
- {"version":3,"file":"soroban.server.js","sourceRoot":"","sources":["../../src/stellar/soroban.server.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { SorobanRpcEventResponse } from '@subql/types-stellar';\nimport { compact, groupBy, last } from 'lodash';\nimport { Server, SorobanRpc } from 'soroban-client';\n\nconst DEFAULT_PAGE_SIZE = 100;\n\nexport class SorobanServer extends Server {\n private eventsCache: { [key: number]: SorobanRpc.GetEventsResponse } = {};\n\n private async fetchEventsForSequence(\n sequence: number,\n request: Server.GetEventsRequest,\n accEvents: SorobanRpcEventResponse[] = [],\n ): Promise<{\n events: SorobanRpc.GetEventsResponse;\n eventsToCache: SorobanRpc.GetEventsResponse;\n }> {\n const response = await super.getEvents(request);\n\n // Separate the events for the current sequence and the subsequent sequences\n const groupedEvents = groupBy(response.events, (event) =>\n event.ledger === sequence ? 'events' : 'eventsToCache',\n );\n const events = compact(groupedEvents.events);\n let eventsToCache = compact(groupedEvents.eventsToCache);\n\n // Update the accumulated events with the events from the current sequence\n const newEvents = accEvents.concat(events);\n\n if (eventsToCache?.length) {\n if (response.events.length === DEFAULT_PAGE_SIZE) {\n const lastSequence = last(response.events).ledger;\n eventsToCache = eventsToCache.filter(\n (event) => event.ledger !== lastSequence,\n );\n }\n return {\n events: { events: newEvents, latestLedger: response.latestLedger },\n eventsToCache: {\n events: eventsToCache,\n latestLedger: response.latestLedger,\n },\n };\n }\n\n if (response.events.length < DEFAULT_PAGE_SIZE) {\n return {\n events: { events: newEvents, latestLedger: response.latestLedger },\n eventsToCache: { events: [], latestLedger: response.latestLedger },\n };\n }\n\n // Prepare the next request\n const nextRequest = {\n ...request,\n cursor: response.events[response.events.length - 1]?.pagingToken,\n startLedger: undefined,\n };\n\n // Continue fetching events for the sequence\n return this.fetchEventsForSequence(sequence, nextRequest, newEvents);\n }\n\n private updateEventCache(\n response: SorobanRpc.GetEventsResponse,\n ignoreHeight?: number,\n ): void {\n response.events.forEach((event) => {\n if (ignoreHeight && ignoreHeight === event.ledger) return;\n const ledger = event.ledger;\n if (!this.eventsCache[ledger]) {\n this.eventsCache[ledger] = {\n events: [],\n } as SorobanRpc.GetEventsResponse;\n }\n const eventExists = this.eventsCache[ledger].events.some(\n (existingEvent) => existingEvent.id === event.id,\n );\n if (!eventExists) {\n this.eventsCache[ledger].events.push(event);\n }\n });\n }\n\n async getEvents(\n request: Server.GetEventsRequest,\n ): Promise<SorobanRpc.GetEventsResponse> {\n const sequence = request.startLedger;\n\n if (this.eventsCache[sequence]) {\n const cachedEvents = this.eventsCache[sequence];\n delete this.eventsCache[sequence];\n return cachedEvents;\n }\n\n const response = await this.fetchEventsForSequence(sequence, request);\n this.updateEventCache(response.eventsToCache, sequence);\n\n return response.events;\n }\n}\n"]}
1
+ {"version":3,"file":"soroban.server.js","sourceRoot":"","sources":["../../src/stellar/soroban.server.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { SorobanRpcEventResponse } from '@subql/types-stellar';\nimport { compact, groupBy, last } from 'lodash';\nimport { SorobanRpc } from 'stellar-sdk';\n\nconst DEFAULT_PAGE_SIZE = 100;\n\nexport class SorobanServer extends SorobanRpc.Server {\n private eventsCache: { [key: number]: SorobanRpc.Api.GetEventsResponse } = {};\n\n private async fetchEventsForSequence(\n sequence: number,\n request: SorobanRpc.Server.GetEventsRequest,\n accEvents: SorobanRpcEventResponse[] = [],\n ): Promise<{\n events: SorobanRpc.Api.GetEventsResponse;\n eventsToCache: SorobanRpc.Api.GetEventsResponse;\n }> {\n const response = await super.getEvents(request);\n\n // Separate the events for the current sequence and the subsequent sequences\n const groupedEvents = groupBy(response.events, (event) =>\n event.ledger === sequence ? 'events' : 'eventsToCache',\n );\n const events = compact(groupedEvents.events);\n let eventsToCache = compact(groupedEvents.eventsToCache);\n\n // Update the accumulated events with the events from the current sequence\n const newEvents = accEvents.concat(events);\n\n if (eventsToCache?.length) {\n if (response.events.length === DEFAULT_PAGE_SIZE) {\n const lastSequence = last(response.events).ledger;\n eventsToCache = eventsToCache.filter(\n (event) => event.ledger !== lastSequence,\n );\n }\n return {\n events: { events: newEvents, latestLedger: response.latestLedger },\n eventsToCache: {\n events: eventsToCache,\n latestLedger: response.latestLedger,\n },\n };\n }\n\n if (response.events.length < DEFAULT_PAGE_SIZE) {\n return {\n events: { events: newEvents, latestLedger: response.latestLedger },\n eventsToCache: { events: [], latestLedger: response.latestLedger },\n };\n }\n\n // Prepare the next request\n const nextRequest = {\n ...request,\n cursor: response.events[response.events.length - 1]?.pagingToken,\n startLedger: undefined,\n };\n\n // Continue fetching events for the sequence\n return this.fetchEventsForSequence(sequence, nextRequest, newEvents);\n }\n\n private updateEventCache(\n response: SorobanRpc.Api.GetEventsResponse,\n ignoreHeight?: number,\n ): void {\n response.events.forEach((event) => {\n if (ignoreHeight && ignoreHeight === event.ledger) return;\n const ledger = event.ledger;\n if (!this.eventsCache[ledger]) {\n this.eventsCache[ledger] = {\n events: [],\n } as SorobanRpc.Api.GetEventsResponse;\n }\n const eventExists = this.eventsCache[ledger].events.some(\n (existingEvent) => existingEvent.id === event.id,\n );\n if (!eventExists) {\n this.eventsCache[ledger].events.push(event);\n }\n });\n }\n\n async getEvents(\n request: SorobanRpc.Server.GetEventsRequest,\n ): Promise<SorobanRpc.Api.GetEventsResponse> {\n const sequence = request.startLedger;\n\n if (this.eventsCache[sequence]) {\n const cachedEvents = this.eventsCache[sequence];\n delete this.eventsCache[sequence];\n return cachedEvents;\n }\n\n const response = await this.fetchEventsForSequence(sequence, request);\n this.updateEventCache(response.eventsToCache, sequence);\n\n return response.events;\n }\n}\n"]}
@@ -2,7 +2,7 @@
2
2
  // Copyright 2020-2023 SubQuery Pte Ltd authors & contributors
3
3
  // SPDX-License-Identifier: GPL-3.0
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
- const server_1 = require("soroban-client/lib/server");
5
+ const stellar_sdk_1 = require("stellar-sdk");
6
6
  const soroban_server_1 = require("./soroban.server");
7
7
  const DEFAULT_PAGE_SIZE = 100;
8
8
  describe('SorobanServer', () => {
@@ -11,7 +11,7 @@ describe('SorobanServer', () => {
11
11
  let spy;
12
12
  beforeEach(() => {
13
13
  server = new soroban_server_1.SorobanServer(url);
14
- spy = jest.spyOn(server_1.Server.prototype, 'getEvents');
14
+ spy = jest.spyOn(stellar_sdk_1.SorobanRpc.Server.prototype, 'getEvents');
15
15
  });
16
16
  afterEach(() => {
17
17
  spy.mockRestore();
@@ -1 +1 @@
1
- {"version":3,"file":"soroban.server.spec.js","sourceRoot":"","sources":["../../src/stellar/soroban.server.spec.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Server } from 'soroban-client/lib/server';\nimport { SorobanServer } from './soroban.server';\n\nconst DEFAULT_PAGE_SIZE = 100;\n\ndescribe('SorobanServer', () => {\n let server: SorobanServer;\n const url = 'https://example.com';\n let spy: jest.SpyInstance;\n\n beforeEach(() => {\n server = new SorobanServer(url);\n spy = jest.spyOn(Server.prototype, 'getEvents');\n });\n\n afterEach(() => {\n spy.mockRestore();\n });\n\n test('should handle no events', async () => {\n spy.mockResolvedValue({ events: [] });\n\n const response = await server.getEvents({\n startLedger: 1,\n } as Server.GetEventsRequest);\n\n expect(response).toEqual({ events: [] });\n expect(spy).toHaveBeenCalledTimes(1);\n });\n\n test('should handle events from different ledgers', async () => {\n // Should be BaseEventResponse type\n spy.mockResolvedValue({\n events: [\n { id: '1', ledger: 1, pagingToken: '1' },\n { id: '2', ledger: 2, pagingToken: '2' },\n ],\n latestLedger: 5,\n });\n\n const response = await server.getEvents({\n startLedger: 1,\n } as Server.GetEventsRequest);\n\n expect(response).toEqual({\n events: [{ id: '1', ledger: 1, pagingToken: '1' }],\n latestLedger: 5,\n });\n expect(spy).toHaveBeenCalledTimes(1);\n });\n\n test('should handle response length less than DEFAULT_PAGE_SIZE', async () => {\n spy.mockResolvedValue({\n events: Array.from({ length: DEFAULT_PAGE_SIZE - 1 }, (_, i) => ({\n id: `${i}`,\n ledger: 1,\n pagingToken: `${i}`,\n })),\n });\n\n const response = await server.getEvents({\n startLedger: 1,\n } as Server.GetEventsRequest);\n\n expect(response.events.length).toBe(DEFAULT_PAGE_SIZE - 1);\n expect(spy).toHaveBeenCalledTimes(1);\n });\n\n test('should handle no matching ledger', async () => {\n spy.mockResolvedValue({\n events: [\n { id: '1', ledger: 2, pagingToken: '1' },\n { id: '1', ledger: 3, pagingToken: '2' },\n ],\n });\n\n const response = await server.getEvents({\n startLedger: 1,\n } as Server.GetEventsRequest);\n\n expect(response).toEqual({ events: [] });\n expect(spy).toHaveBeenCalledTimes(1);\n });\n\n test('should return cached events for given startLedger', async () => {\n (server as any).eventsCache[1] = {\n events: [{ ledger: 1, pagingToken: '1' }],\n };\n\n const response = await server.getEvents({\n startLedger: 1,\n } as Server.GetEventsRequest);\n\n expect(response).toEqual({ events: [{ ledger: 1, pagingToken: '1' }] });\n expect(spy).toHaveBeenCalledTimes(0);\n });\n\n test('should handle startLedger events greater than DEFAULT_PAGE_SIZE', async () => {\n spy\n .mockResolvedValueOnce({\n events: Array.from({ length: DEFAULT_PAGE_SIZE }, (_, i) => ({\n id: `${i}`,\n ledger: 1,\n pagingToken: `${i}`,\n })),\n })\n .mockResolvedValueOnce({\n events: Array.from({ length: 5 }, (_, i) => ({\n id: `${i + DEFAULT_PAGE_SIZE}`,\n ledger: 1,\n pagingToken: `${i + DEFAULT_PAGE_SIZE}`,\n })),\n });\n\n const response = await server.getEvents({\n startLedger: 1,\n } as Server.GetEventsRequest);\n\n expect(response.events.length).toBe(DEFAULT_PAGE_SIZE + 5);\n expect(spy).toHaveBeenCalledTimes(2);\n });\n\n test('should handle last block of otherEvents on next page', async () => {\n spy\n .mockResolvedValueOnce({\n events: [\n ...Array.from({ length: DEFAULT_PAGE_SIZE - 1 }, (_, i) => ({\n id: `${i}`,\n ledger: 1,\n pagingToken: `${i}`,\n })),\n { id: '2-1', ledger: 2, pagingToken: '1' },\n ],\n })\n .mockResolvedValueOnce({\n events: [{ id: '2-2', ledger: 2, pagingToken: '2' }],\n });\n\n const response = await server.getEvents({\n startLedger: 1,\n } as Server.GetEventsRequest);\n\n expect(response).toEqual({\n events: [\n ...Array.from({ length: DEFAULT_PAGE_SIZE - 1 }, (_, i) => ({\n id: `${i}`,\n ledger: 1,\n pagingToken: `${i}`,\n })),\n ],\n });\n expect((server as any).eventsCache[2]).toBeUndefined();\n expect(spy).toHaveBeenCalledTimes(1);\n });\n});\n"]}
1
+ {"version":3,"file":"soroban.server.spec.js","sourceRoot":"","sources":["../../src/stellar/soroban.server.spec.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { SorobanRpc } from 'stellar-sdk';\nimport { SorobanServer } from './soroban.server';\n\nconst DEFAULT_PAGE_SIZE = 100;\n\ndescribe('SorobanServer', () => {\n let server: SorobanServer;\n const url = 'https://example.com';\n let spy: jest.SpyInstance;\n\n beforeEach(() => {\n server = new SorobanServer(url);\n spy = jest.spyOn(SorobanRpc.Server.prototype, 'getEvents');\n });\n\n afterEach(() => {\n spy.mockRestore();\n });\n\n test('should handle no events', async () => {\n spy.mockResolvedValue({ events: [] });\n\n const response = await server.getEvents({\n startLedger: 1,\n } as SorobanRpc.Server.GetEventsRequest);\n\n expect(response).toEqual({ events: [] });\n expect(spy).toHaveBeenCalledTimes(1);\n });\n\n test('should handle events from different ledgers', async () => {\n // Should be BaseEventResponse type\n spy.mockResolvedValue({\n events: [\n { id: '1', ledger: 1, pagingToken: '1' },\n { id: '2', ledger: 2, pagingToken: '2' },\n ],\n latestLedger: 5,\n });\n\n const response = await server.getEvents({\n startLedger: 1,\n } as SorobanRpc.Server.GetEventsRequest);\n\n expect(response).toEqual({\n events: [{ id: '1', ledger: 1, pagingToken: '1' }],\n latestLedger: 5,\n });\n expect(spy).toHaveBeenCalledTimes(1);\n });\n\n test('should handle response length less than DEFAULT_PAGE_SIZE', async () => {\n spy.mockResolvedValue({\n events: Array.from({ length: DEFAULT_PAGE_SIZE - 1 }, (_, i) => ({\n id: `${i}`,\n ledger: 1,\n pagingToken: `${i}`,\n })),\n });\n\n const response = await server.getEvents({\n startLedger: 1,\n } as SorobanRpc.Server.GetEventsRequest);\n\n expect(response.events.length).toBe(DEFAULT_PAGE_SIZE - 1);\n expect(spy).toHaveBeenCalledTimes(1);\n });\n\n test('should handle no matching ledger', async () => {\n spy.mockResolvedValue({\n events: [\n { id: '1', ledger: 2, pagingToken: '1' },\n { id: '1', ledger: 3, pagingToken: '2' },\n ],\n });\n\n const response = await server.getEvents({\n startLedger: 1,\n } as SorobanRpc.Server.GetEventsRequest);\n\n expect(response).toEqual({ events: [] });\n expect(spy).toHaveBeenCalledTimes(1);\n });\n\n test('should return cached events for given startLedger', async () => {\n (server as any).eventsCache[1] = {\n events: [{ ledger: 1, pagingToken: '1' }],\n };\n\n const response = await server.getEvents({\n startLedger: 1,\n } as SorobanRpc.Server.GetEventsRequest);\n\n expect(response).toEqual({ events: [{ ledger: 1, pagingToken: '1' }] });\n expect(spy).toHaveBeenCalledTimes(0);\n });\n\n test('should handle startLedger events greater than DEFAULT_PAGE_SIZE', async () => {\n spy\n .mockResolvedValueOnce({\n events: Array.from({ length: DEFAULT_PAGE_SIZE }, (_, i) => ({\n id: `${i}`,\n ledger: 1,\n pagingToken: `${i}`,\n })),\n })\n .mockResolvedValueOnce({\n events: Array.from({ length: 5 }, (_, i) => ({\n id: `${i + DEFAULT_PAGE_SIZE}`,\n ledger: 1,\n pagingToken: `${i + DEFAULT_PAGE_SIZE}`,\n })),\n });\n\n const response = await server.getEvents({\n startLedger: 1,\n } as SorobanRpc.Server.GetEventsRequest);\n\n expect(response.events.length).toBe(DEFAULT_PAGE_SIZE + 5);\n expect(spy).toHaveBeenCalledTimes(2);\n });\n\n test('should handle last block of otherEvents on next page', async () => {\n spy\n .mockResolvedValueOnce({\n events: [\n ...Array.from({ length: DEFAULT_PAGE_SIZE - 1 }, (_, i) => ({\n id: `${i}`,\n ledger: 1,\n pagingToken: `${i}`,\n })),\n { id: '2-1', ledger: 2, pagingToken: '1' },\n ],\n })\n .mockResolvedValueOnce({\n events: [{ id: '2-2', ledger: 2, pagingToken: '2' }],\n });\n\n const response = await server.getEvents({\n startLedger: 1,\n } as SorobanRpc.Server.GetEventsRequest);\n\n expect(response).toEqual({\n events: [\n ...Array.from({ length: DEFAULT_PAGE_SIZE - 1 }, (_, i) => ({\n id: `${i}`,\n ledger: 1,\n pagingToken: `${i}`,\n })),\n ],\n });\n expect((server as any).eventsCache[2]).toBeUndefined();\n expect(spy).toHaveBeenCalledTimes(1);\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"testing.module.js","sourceRoot":"","sources":["../../src/subcommands/testing.module.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;AAEnC,2CAAwC;AACxC,yDAA0E;AAC1E,+CAAqE;AACrE,gDAW0B;AAC1B,oEAAgE;AAEhE,0EAAqE;AACrE,sEAAiE;AACjE,gEAA4D;AAC5D,gEAA4D;AAC5D,gEAA4D;AAC5D,oFAAgF;AAChF,wCAA+C;AAE/C,uDAAmD;AA4D5C,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;CAAG,CAAA;AAAvB,oBAAoB;IA1DhC,IAAA,eAAM,EAAC;QACN,SAAS,EAAE;YACT,gCAAoB;YACpB,wBAAY;YACZ,gCAAc;YACd,6BAAa;YACb,sBAAU;YACV,0BAAc;YACd,gCAAc;YACd,yCAAkB;YAClB,qCAAgB;YAChB,oDAAwB;YACxB,iCAAqB;YACrB,sCAA0B;YAC1B;gBACE,OAAO,EAAE,iBAAiB;gBAC1B,QAAQ,EAAE,gCAAc;aACzB;YACD;gBACE,OAAO,EAAE,sBAAU;gBACnB,UAAU,EAAE,KAAK,EACf,OAAwB,EACxB,qBAA2C,EAC3C,qBAAkE,EAClE,YAA2B,EAC3B,EAAE;oBACF,MAAM,UAAU,GAAG,IAAI,2BAAiB,CACtC,OAAO,EACP,qBAAqB,EACrB,qBAAqB,EACrB,YAAY,CACb,CAAC;oBACF,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;oBACxB,OAAO,UAAU,CAAC;gBACpB,CAAC;gBACD,MAAM,EAAE;oBACN,kBAAkB;oBAClB,wBAAwB;oBACxB,iCAAqB;oBACrB,6BAAa;iBACd;aACF;YACD,sBAAU;YACV;gBACE,OAAO,EAAE,MAAM;gBACf,QAAQ,EAAE,2BAAiB;aAC5B;YACD;gBACE,OAAO,EAAE,iBAAiB;gBAC1B,QAAQ,EAAE,gCAAc;aACzB;YACD,gCAAc;YACd,4BAAiB;SAClB;QAED,WAAW,EAAE,EAAE;QACf,OAAO,EAAE,CAAC,sBAAU,CAAC;KACtB,CAAC;GACW,oBAAoB,CAAG;AAAvB,oDAAoB;AAY1B,IAAM,aAAa,GAAnB,MAAM,aAAa;CAAG,CAAA;AAAhB,aAAa;IAVzB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,oBAAQ,CAAC,OAAO,EAAE;YAClB,kCAAe,CAAC,QAAQ,EAAE;YAC1B,kCAAkB,CAAC,OAAO,EAAE;YAC5B,yBAAc,CAAC,OAAO,EAAE;YACxB,oBAAoB;SACrB;QACD,WAAW,EAAE,EAAE;KAChB,CAAC;GACW,aAAa,CAAG;AAAhB,sCAAa","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Module } from '@nestjs/common';\nimport { EventEmitter2, EventEmitterModule } from '@nestjs/event-emitter';\nimport { ScheduleModule, SchedulerRegistry } from '@nestjs/schedule';\nimport {\n ApiService,\n ConnectionPoolService,\n ConnectionPoolStateManager,\n DbModule,\n InMemoryCacheService,\n PoiService,\n PoiSyncService,\n ProjectUpgradeSevice,\n StoreService,\n TestRunner,\n} from '@subql/node-core';\nimport { ConfigureModule } from '../configure/configure.module';\nimport { SubqueryProject } from '../configure/SubqueryProject';\nimport { DsProcessorService } from '../indexer/ds-processor.service';\nimport { DynamicDsService } from '../indexer/dynamic-ds.service';\nimport { IndexerManager } from '../indexer/indexer.manager';\nimport { ProjectService } from '../indexer/project.service';\nimport { SandboxService } from '../indexer/sandbox.service';\nimport { UnfinalizedBlocksService } from '../indexer/unfinalizedBlocks.service';\nimport { StellarApiService } from '../stellar';\nimport { StellarApiConnection } from '../stellar/api.connection';\nimport { TestingService } from './testing.service';\n\n@Module({\n providers: [\n InMemoryCacheService,\n StoreService,\n TestingService,\n EventEmitter2,\n PoiService,\n PoiSyncService,\n SandboxService,\n DsProcessorService,\n DynamicDsService,\n UnfinalizedBlocksService,\n ConnectionPoolService,\n ConnectionPoolStateManager,\n {\n provide: 'IProjectService',\n useClass: ProjectService,\n },\n {\n provide: ApiService,\n useFactory: async (\n project: SubqueryProject,\n projectUpgradeService: ProjectUpgradeSevice,\n connectionPoolService: ConnectionPoolService<StellarApiConnection>,\n eventEmitter: EventEmitter2,\n ) => {\n const apiService = new StellarApiService(\n project,\n projectUpgradeService,\n connectionPoolService,\n eventEmitter,\n );\n await apiService.init();\n return apiService;\n },\n inject: [\n 'ISubqueryProject',\n 'IProjectUpgradeService',\n ConnectionPoolService,\n EventEmitter2,\n ],\n },\n TestRunner,\n {\n provide: 'IApi',\n useClass: StellarApiService,\n },\n {\n provide: 'IIndexerManager',\n useClass: IndexerManager,\n },\n IndexerManager,\n SchedulerRegistry,\n ],\n\n controllers: [],\n exports: [TestRunner],\n})\nexport class TestingFeatureModule {}\n\n@Module({\n imports: [\n DbModule.forRoot(),\n ConfigureModule.register(),\n EventEmitterModule.forRoot(),\n ScheduleModule.forRoot(),\n TestingFeatureModule,\n ],\n controllers: [],\n})\nexport class TestingModule {}\n"]}
1
+ {"version":3,"file":"testing.module.js","sourceRoot":"","sources":["../../src/subcommands/testing.module.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;AAEnC,2CAAwC;AACxC,yDAA0E;AAC1E,+CAAqE;AACrE,gDAW0B;AAC1B,oEAAgE;AAEhE,0EAAqE;AACrE,sEAAiE;AACjE,gEAA4D;AAC5D,gEAA4D;AAC5D,gEAA4D;AAC5D,oFAAgF;AAChF,wCAA+C;AAE/C,uDAAmD;AA4D5C,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;CAAG,CAAA;AAAvB,oBAAoB;IA1DhC,IAAA,eAAM,EAAC;QACN,SAAS,EAAE;YACT,gCAAoB;YACpB,wBAAY;YACZ,gCAAc;YACd,6BAAa;YACb,sBAAU;YACV,0BAAc;YACd,gCAAc;YACd,yCAAkB;YAClB,qCAAgB;YAChB,oDAAwB;YACxB,iCAAqB;YACrB,sCAA0B;YAC1B;gBACE,OAAO,EAAE,iBAAiB;gBAC1B,QAAQ,EAAE,gCAAc;aACzB;YACD;gBACE,OAAO,EAAE,sBAAU;gBACnB,UAAU,EAAE,KAAK,EACf,OAAwB,EACxB,qBAA4C,EAC5C,qBAAkE,EAClE,YAA2B,EAC3B,EAAE;oBACF,MAAM,UAAU,GAAG,IAAI,2BAAiB,CACtC,OAAO,EACP,qBAAqB,EACrB,qBAAqB,EACrB,YAAY,CACb,CAAC;oBACF,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;oBACxB,OAAO,UAAU,CAAC;gBACpB,CAAC;gBACD,MAAM,EAAE;oBACN,kBAAkB;oBAClB,wBAAwB;oBACxB,iCAAqB;oBACrB,6BAAa;iBACd;aACF;YACD,sBAAU;YACV;gBACE,OAAO,EAAE,MAAM;gBACf,QAAQ,EAAE,2BAAiB;aAC5B;YACD;gBACE,OAAO,EAAE,iBAAiB;gBAC1B,QAAQ,EAAE,gCAAc;aACzB;YACD,gCAAc;YACd,4BAAiB;SAClB;QAED,WAAW,EAAE,EAAE;QACf,OAAO,EAAE,CAAC,sBAAU,CAAC;KACtB,CAAC;GACW,oBAAoB,CAAG;AAAvB,oDAAoB;AAY1B,IAAM,aAAa,GAAnB,MAAM,aAAa;CAAG,CAAA;AAAhB,aAAa;IAVzB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,oBAAQ,CAAC,OAAO,EAAE;YAClB,kCAAe,CAAC,QAAQ,EAAE;YAC1B,kCAAkB,CAAC,OAAO,EAAE;YAC5B,yBAAc,CAAC,OAAO,EAAE;YACxB,oBAAoB;SACrB;QACD,WAAW,EAAE,EAAE;KAChB,CAAC;GACW,aAAa,CAAG;AAAhB,sCAAa","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Module } from '@nestjs/common';\nimport { EventEmitter2, EventEmitterModule } from '@nestjs/event-emitter';\nimport { ScheduleModule, SchedulerRegistry } from '@nestjs/schedule';\nimport {\n ApiService,\n ConnectionPoolService,\n ConnectionPoolStateManager,\n DbModule,\n InMemoryCacheService,\n PoiService,\n PoiSyncService,\n ProjectUpgradeService,\n StoreService,\n TestRunner,\n} from '@subql/node-core';\nimport { ConfigureModule } from '../configure/configure.module';\nimport { SubqueryProject } from '../configure/SubqueryProject';\nimport { DsProcessorService } from '../indexer/ds-processor.service';\nimport { DynamicDsService } from '../indexer/dynamic-ds.service';\nimport { IndexerManager } from '../indexer/indexer.manager';\nimport { ProjectService } from '../indexer/project.service';\nimport { SandboxService } from '../indexer/sandbox.service';\nimport { UnfinalizedBlocksService } from '../indexer/unfinalizedBlocks.service';\nimport { StellarApiService } from '../stellar';\nimport { StellarApiConnection } from '../stellar/api.connection';\nimport { TestingService } from './testing.service';\n\n@Module({\n providers: [\n InMemoryCacheService,\n StoreService,\n TestingService,\n EventEmitter2,\n PoiService,\n PoiSyncService,\n SandboxService,\n DsProcessorService,\n DynamicDsService,\n UnfinalizedBlocksService,\n ConnectionPoolService,\n ConnectionPoolStateManager,\n {\n provide: 'IProjectService',\n useClass: ProjectService,\n },\n {\n provide: ApiService,\n useFactory: async (\n project: SubqueryProject,\n projectUpgradeService: ProjectUpgradeService,\n connectionPoolService: ConnectionPoolService<StellarApiConnection>,\n eventEmitter: EventEmitter2,\n ) => {\n const apiService = new StellarApiService(\n project,\n projectUpgradeService,\n connectionPoolService,\n eventEmitter,\n );\n await apiService.init();\n return apiService;\n },\n inject: [\n 'ISubqueryProject',\n 'IProjectUpgradeService',\n ConnectionPoolService,\n EventEmitter2,\n ],\n },\n TestRunner,\n {\n provide: 'IApi',\n useClass: StellarApiService,\n },\n {\n provide: 'IIndexerManager',\n useClass: IndexerManager,\n },\n IndexerManager,\n SchedulerRegistry,\n ],\n\n controllers: [],\n exports: [TestRunner],\n})\nexport class TestingFeatureModule {}\n\n@Module({\n imports: [\n DbModule.forRoot(),\n ConfigureModule.register(),\n EventEmitterModule.forRoot(),\n ScheduleModule.forRoot(),\n TestingFeatureModule,\n ],\n controllers: [],\n})\nexport class TestingModule {}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@subql/node-stellar",
3
- "version": "3.6.1",
3
+ "version": "3.8.0",
4
4
  "description": "",
5
5
  "author": "Ian He",
6
6
  "license": "GPL-3.0",
@@ -25,12 +25,12 @@
25
25
  "@nestjs/event-emitter": "^2.0.0",
26
26
  "@nestjs/platform-express": "^9.4.0",
27
27
  "@nestjs/schedule": "^3.0.1",
28
- "@subql/common": "^3.4.0",
29
- "@subql/common-stellar": "3.3.1",
30
- "@subql/node-core": "^7.2.1",
28
+ "@subql/common": "^3.4.1",
29
+ "@subql/common-stellar": "3.3.2",
30
+ "@subql/node-core": "^7.3.0",
31
31
  "@subql/testing": "^2.0.0",
32
32
  "@subql/types": "^2.2.1-1",
33
- "@subql/types-stellar": "3.2.1",
33
+ "@subql/types-stellar": "3.2.2-0",
34
34
  "cacheable-lookup": "6",
35
35
  "cron-converter": "^1.0.2",
36
36
  "eventemitter2": "^6.4.5",
@@ -40,8 +40,7 @@
40
40
  "reflect-metadata": "^0.1.13",
41
41
  "rimraf": "^3.0.2",
42
42
  "rxjs": "^7.5.2",
43
- "soroban-client": "^1.0.1",
44
- "stellar-sdk": "^11.2.0",
43
+ "stellar-sdk": "^11.2.2",
45
44
  "yargs": "^16.2.0"
46
45
  },
47
46
  "peerDependencies": {