lib-fints 1.4.2 → 1.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- [![Node.js CI with pnpm](https://github.com/robocode13/lib-fints/actions/workflows/build-test.yml/badge.svg?branch=main)](https://github.com/robocode13/lib-fints/actions/workflows/build-test.yml)
1
+ [![Node.js CI with pnpm](https://github.com/robocode13/lib-fints/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/robocode13/lib-fints/actions/workflows/ci.yml)
2
2
 
3
3
  # Lib-FinTS
4
4
 
@@ -167,6 +167,9 @@ export class CamtParser {
167
167
  if (typeof current === 'string' || typeof current === 'number') {
168
168
  return String(current);
169
169
  }
170
+ if (Array.isArray(current)) {
171
+ return String(current.join(''));
172
+ }
170
173
  if (current && typeof current === 'object' && current !== null && '#text' in current) {
171
174
  return String(current['#text']);
172
175
  }
@@ -670,4 +670,189 @@ describe('CamtParser', () => {
670
670
  expect(transaction.purpose).toBe('Payment with party structure');
671
671
  expect(transaction.amount).toBe(200.0);
672
672
  });
673
+ it('should handle multiple entries in RmtInf (Ustrd)', () => {
674
+ const camtXml = `<?xml version="1.0" encoding="ISO-8859-1"?>
675
+ <Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.052.001.08"
676
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
677
+ xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:camt.052.001.08 camt.052.001.08.xsd">
678
+ <BkToCstmrAcctRpt>
679
+ <GrpHdr>
680
+ <MsgId>52D20260106T1009246445830N000000000</MsgId>
681
+ <CreDtTm>2026-01-06T10:09:24.0+01:00</CreDtTm>
682
+ </GrpHdr>
683
+ <Rpt>
684
+ <Id>0752D522026010610092464000001000</Id>
685
+ <RptPgntn>
686
+ <PgNb>1</PgNb>
687
+ <LastPgInd>true</LastPgInd>
688
+ </RptPgntn>
689
+ <ElctrncSeqNb>000000000</ElctrncSeqNb>
690
+ <CreDtTm>2026-01-06T10:09:24.0+01:00</CreDtTm>
691
+ <Acct>
692
+ <Id>
693
+ <IBAN>DE06940594210000027227</IBAN>
694
+ </Id>
695
+ <Ccy>EUR</Ccy>
696
+ <Ownr>
697
+ <Nm>John Doe</Nm>
698
+ </Ownr>
699
+ <Svcr>
700
+ <FinInstnId>
701
+ <BICFI>BANKABC1XXX</BICFI>
702
+ <Nm>ABC Bank</Nm>
703
+ <Othr>
704
+ <Id>DE 123456789</Id>
705
+ <Issr>UmsStId</Issr>
706
+ </Othr>
707
+ </FinInstnId>
708
+ </Svcr>
709
+ </Acct>
710
+ <Bal>
711
+ <Tp>
712
+ <CdOrPrtry>
713
+ <Cd>OPBD</Cd>
714
+ </CdOrPrtry>
715
+ </Tp>
716
+ <Amt Ccy="EUR">27.31</Amt>
717
+ <CdtDbtInd>DBIT</CdtDbtInd>
718
+ <Dt>
719
+ <Dt>2026-01-05</Dt>
720
+ </Dt>
721
+ </Bal>
722
+ <Bal>
723
+ <Tp>
724
+ <CdOrPrtry>
725
+ <Cd>CLBD</Cd>
726
+ </CdOrPrtry>
727
+ </Tp>
728
+ <Amt Ccy="EUR">234.81</Amt>
729
+ <CdtDbtInd>DBIT</CdtDbtInd>
730
+ <Dt>
731
+ <Dt>2026-01-05</Dt>
732
+ </Dt>
733
+ </Bal>
734
+ <Ntry>
735
+ <Amt Ccy="EUR">179.46</Amt>
736
+ <CdtDbtInd>DBIT</CdtDbtInd>
737
+ <Sts>
738
+ <Cd>BOOK</Cd>
739
+ </Sts>
740
+ <BookgDt>
741
+ <Dt>2026-01-05</Dt>
742
+ </BookgDt>
743
+ <ValDt>
744
+ <Dt>2026-01-05</Dt>
745
+ </ValDt>
746
+ <AcctSvcrRef>TXN003</AcctSvcrRef>
747
+ <BkTxCd>
748
+ <Domn>
749
+ <Cd>PMNT</Cd>
750
+ <Fmly>
751
+ <Cd>ICDT</Cd>
752
+ <SubFmlyCd>ESCT</SubFmlyCd>
753
+ </Fmly>
754
+ </Domn>
755
+ <Prtry>
756
+ <Cd>NTRF+116+02089</Cd>
757
+ <Issr>DK</Issr>
758
+ </Prtry>
759
+ </BkTxCd>
760
+ <NtryDtls>
761
+ <TxDtls>
762
+ <Refs>
763
+ <MsgId>test msgid</MsgId>
764
+ <PmtInfId>VG 2025 QUARTAL IV 12345678</PmtInfId>
765
+ <EndToEndId>VG 2025 QUARTAL IV</EndToEndId>
766
+ </Refs>
767
+ <Amt Ccy="EUR">179.46</Amt>
768
+ <BkTxCd>
769
+ <Domn>
770
+ <Cd>PMNT</Cd>
771
+ <Fmly>
772
+ <Cd>ICDT</Cd>
773
+ <SubFmlyCd>ESCT</SubFmlyCd>
774
+ </Fmly>
775
+ </Domn>
776
+ <Prtry>
777
+ <Cd>NTRF+116+02189</Cd>
778
+ <Issr>DK</Issr>
779
+ </Prtry>
780
+ </BkTxCd>
781
+ <RltdPties>
782
+ <Dbtr>
783
+ <Pty>
784
+ <Nm>DOE</Nm>
785
+ </Pty>
786
+ </Dbtr>
787
+ <DbtrAcct>
788
+ <Id>
789
+ <IBAN>DE12345678901234567890</IBAN>
790
+ </Id>
791
+ </DbtrAcct>
792
+ <Cdtr>
793
+ <Pty>
794
+ <Nm>ABC Bank</Nm>
795
+ </Pty>
796
+ </Cdtr>
797
+ <CdtrAcct>
798
+ <Id>
799
+ <IBAN>DE12345678901234567891</IBAN>
800
+ </Id>
801
+ </CdtrAcct>
802
+ </RltdPties>
803
+ <RltdAgts>
804
+ <CdtrAgt>
805
+ <FinInstnId>
806
+ <BICFI>BANKABC1XXX</BICFI>
807
+ </FinInstnId>
808
+ </CdtrAgt>
809
+ </RltdAgts>
810
+ <RmtInf>
811
+ <Ustrd>28,65EUR EREF: VG 2025 QUARTAL IV IBAN</Ustrd>
812
+ <Ustrd>: DE12345678901234567891 BIC: BANKABC1XXX</Ustrd>
813
+ </RmtInf>
814
+ </TxDtls>
815
+ </NtryDtls>
816
+ <AddtlNtryInf>ENTGELT gem. Vereinbarung</AddtlNtryInf>
817
+ </Ntry>
818
+ </Rpt>
819
+ </BkToCstmrAcctRpt>
820
+ </Document>`;
821
+ const parser = new CamtParser(camtXml);
822
+ const statements = parser.parse();
823
+ expect(statements).toHaveLength(1);
824
+ const statement = statements[0];
825
+ expect(statement.transactions).toHaveLength(1);
826
+ const transaction = statement.transactions[0];
827
+ // Check all Transaction fields filled by the parser
828
+ expect(transaction.amount).toBe(-179.46);
829
+ expect(transaction.customerReference).toBe('VG 2025 QUARTAL IV');
830
+ expect(transaction.bankReference).toBe('TXN003');
831
+ expect(transaction.purpose).toBe('28,65EUR EREF: VG 2025 QUARTAL IV IBAN: DE12345678901234567891 BIC: BANKABC1XXX');
832
+ expect(transaction.remoteName).toBe('ABC Bank');
833
+ expect(transaction.remoteAccountNumber).toBe('DE12345678901234567891');
834
+ expect(transaction.remoteBankId).toBe('BANKABC1XXX');
835
+ expect(transaction.e2eReference).toBe('VG 2025 QUARTAL IV');
836
+ // Check date fields
837
+ expect(transaction.valueDate).toBeInstanceOf(Date);
838
+ expect(transaction.valueDate.getFullYear()).toBe(2026);
839
+ expect(transaction.valueDate.getMonth()).toBe(0); // November (0-based)
840
+ expect(transaction.valueDate.getDate()).toBe(5);
841
+ expect(transaction.entryDate).toBeInstanceOf(Date);
842
+ expect(transaction.entryDate.getFullYear()).toBe(2026);
843
+ expect(transaction.entryDate.getMonth()).toBe(0); // November (0-based)
844
+ expect(transaction.entryDate.getDate()).toBe(5);
845
+ // Check transaction type and code fields
846
+ expect(transaction.fundsCode).toBe('PMNT');
847
+ expect(transaction.transactionType).toBe('ICDT');
848
+ expect(transaction.transactionCode).toBe('ESCT');
849
+ // Check additional information fields
850
+ expect(transaction.additionalInformation).toBe('ENTGELT gem. Vereinbarung');
851
+ expect(transaction.bookingText).toBe('ENTGELT gem. Vereinbarung'); // Should match additionalInformation
852
+ // Verify optional fields not set in this test
853
+ expect(transaction.primeNotesNr).toBeUndefined();
854
+ expect(transaction.remoteIdentifier).toBeUndefined();
855
+ expect(transaction.client).toBeUndefined();
856
+ expect(transaction.textKeyExtension).toBeUndefined();
857
+ });
673
858
  });
@@ -1 +1 @@
1
- {"version":3,"file":"camtParser.d.ts","sourceRoot":"","sources":["../../src/camtParser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAW,SAAS,EAAe,MAAM,gBAAgB,CAAC;AAsJtE,qBAAa,gBAAiB,SAAQ,KAAK;IAGlC,KAAK,CAAC;gBADb,OAAO,EAAE,MAAM,EACR,KAAK,CAAC,mBAAO;CAKrB;AAED,qBAAa,UAAU;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAY;gBAEd,OAAO,EAAE,MAAM;IAoB3B,KAAK,IAAI,SAAS,EAAE;IA8CpB,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,WAAW;IAwEnB,OAAO,CAAC,gBAAgB;IAsBxB,OAAO,CAAC,aAAa;IAuFrB,OAAO,CAAC,iBAAiB;IA6BzB,OAAO,CAAC,gBAAgB;IA8ExB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAwCxB;;;OAGG;IACH,OAAO,CAAC,aAAa;IA4BrB,OAAO,CAAC,SAAS;IAiBjB,OAAO,CAAC,wBAAwB;CAyBhC"}
1
+ {"version":3,"file":"camtParser.d.ts","sourceRoot":"","sources":["../../src/camtParser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAW,SAAS,EAAe,MAAM,gBAAgB,CAAC;AAsJtE,qBAAa,gBAAiB,SAAQ,KAAK;IAGlC,KAAK,CAAC;gBADb,OAAO,EAAE,MAAM,EACR,KAAK,CAAC,mBAAO;CAKrB;AAED,qBAAa,UAAU;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAY;gBAEd,OAAO,EAAE,MAAM;IAoB3B,KAAK,IAAI,SAAS,EAAE;IA8CpB,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,WAAW;IAwEnB,OAAO,CAAC,gBAAgB;IAyBxB,OAAO,CAAC,aAAa;IAuFrB,OAAO,CAAC,iBAAiB;IA6BzB,OAAO,CAAC,gBAAgB;IA8ExB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAwCxB;;;OAGG;IACH,OAAO,CAAC,aAAa;IA4BrB,OAAO,CAAC,SAAS;IAiBjB,OAAO,CAAC,wBAAwB;CAyBhC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lib-fints",
3
- "version": "1.4.2",
3
+ "version": "1.4.3",
4
4
  "description": "Typescript/Javascript client library for Online-Banking via the FinTS 3.0 protocol with PIN/TAN",
5
5
  "engines": {
6
6
  "node": ">=18.0.0"