bysquare 1.2.2 → 1.2.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
@@ -21,6 +21,10 @@ your implementation. See [examples](examples).
21
21
 
22
22
  ![diagram](./docs/uml/logic.svg)
23
23
 
24
+ [build]: https://img.shields.io/github/workflow/status/xseman/bysquare/tests
25
+ [version]: https://img.shields.io/npm/v/bysquare
26
+ [license]: https://img.shields.io/github/license/xseman/bysquare
27
+
24
28
  ## Install
25
29
 
26
30
  Node.js
@@ -37,7 +41,13 @@ npm install --global bysquare
37
41
 
38
42
  ## API
39
43
 
40
- ### **generate(model: Model): Promise\<string>**
44
+ ```ts
45
+ generate(model: Model): Promise<string>
46
+ parse(qr: string): Promise<Model>
47
+ detect(qr: string): Boolean
48
+ ```
49
+
50
+ **generate(model: Model): Promise\<string>**
41
51
 
42
52
  ```ts
43
53
  import { generate, Model, parse } from "bysquare"
@@ -52,31 +62,29 @@ const model: Model = {
52
62
  BankAccounts: 1
53
63
  }
54
64
 
55
- generate(model).then((qrString: string) => {
56
- // "0004G0005ES17OQ09C98Q7ME34TCR3V71LVKD2AE6EGHKR82DKS5NBJ3331VUFQIV0JGMR743UJCKSAKEM9QGVVVOIVH000"
65
+ generate(model).then((qr: string) => {
57
66
  // your logic...
58
67
  })
59
68
  ```
60
69
 
61
- ### **parse(qr: string): Promise\<Model>**
70
+ **parse(qr: string): Promise\<Model>**
62
71
 
63
72
  ```ts
64
73
  import { Model, parse } from "bysquare"
65
74
 
66
- const qrString = "0004G0005ES17OQ09C98Q7ME34TCR3V71LVKD2AE6EGHKR82DKS5NBJ3331VUFQIV0JGMR743UJCKSAKEM9QGVVVOIVH000"
67
-
68
- parse(qrString).then((model: Model) => {
75
+ const qr = "0004A00090IFU27IV0J6HGGLIOTIBVHNQQJQ6LAVGNBT363HR13JC6C75G19O246KTT5G8LTLM67HOIATP4OOG8F8FDLJ6T26KFCB1690NEVPQVSG0"
76
+ parse(qr).then((model: Model) => {
69
77
  // your logic...
70
78
  })
71
79
  ```
72
80
 
73
- ### **detect(qr: string): Boolean**
81
+ **detect(qr: string): Boolean**
74
82
 
75
83
  ```ts
76
84
  import { detect } from "bysquare"
77
85
 
78
- const qrString = "0004G0005ES17OQ09C98Q7ME34TCR3V71LVKD2AE6EGHKR82DKS5NBJ3331VUFQIV0JGMR743UJCKSAKEM9QGVVVOIVH000"
79
- const isBysquare = detect(qrString)
86
+ const qr = "0004A00090IFU27IV0J6HGGLIOTIBVHNQQJQ6LAVGNBT363HR13JC6C75G19O246KTT5G8LTLM67HOIATP4OOG8F8FDLJ6T26KFCB1690NEVPQVSG0"
87
+ const isBysquare = detect(qr)
80
88
 
81
89
  // your logic...
82
90
  ```
@@ -88,6 +96,7 @@ You can use json file with valid model to generate qr-string.
88
96
  ```sh
89
97
  # example.json
90
98
  # {
99
+ # "InvoiceID: "random-id",
91
100
  # "IBAN": "SK9611000000002918599669",
92
101
  # "Amount": 100.0,
93
102
  # "CurrencyCode": "EUR",
@@ -98,13 +107,14 @@ You can use json file with valid model to generate qr-string.
98
107
  # }
99
108
 
100
109
  $ npx bysquare ./example.json
101
- $ 0004G0005ES17OQ09C98Q7ME34TCR3V71LVKD2AE6EGHKR82DKS5NBJ3331VUFQIV0JGMR743UJCKSAKEM9QGVVVOIVH000
110
+ $ 0004A00090IFU27IV0J6HGGLIOTIBVHNQQJQ6LAVGNBT363HR13JC6C75G19O246KTT5G8LTLM67HOIATP4OOG8F8FDLJ6T26KFCB1690NEVPQVSG0
102
111
  ```
103
112
 
104
113
  You can also use stdin.
105
114
 
106
115
  ```sh
107
116
  $ bysquare <<< '{
117
+ "InvoiceID": "random-id",
108
118
  "IBAN": "SK9611000000002918599669",
109
119
  "Amount": 100.0,
110
120
  "CurrencyCode": "EUR",
@@ -113,7 +123,7 @@ $ bysquare <<< '{
113
123
  "PaymentOptions": 1,
114
124
  "BankAccounts": 1
115
125
  }'
116
- $ 0004G0005ES17OQ09C98Q7ME34TCR3V71LVKD2AE6EGHKR82DKS5NBJ3331VUFQIV0JGMR743UJCKSAKEM9QGVVVOIVH000
126
+ $ 0004A00090IFU27IV0J6HGGLIOTIBVHNQQJQ6LAVGNBT363HR13JC6C75G19O246KTT5G8LTLM67HOIATP4OOG8F8FDLJ6T26KFCB1690NEVPQVSG0
117
127
  ```
118
128
 
119
129
  ## Model
@@ -155,7 +165,7 @@ $ 0004G0005ES17OQ09C98Q7ME34TCR3V71LVKD2AE6EGHKR82DKS5NBJ3331VUFQIV0JGMR743UJCKS
155
165
  | BeneficiaryAddressLine1 | `string` | no |
156
166
  | BeneficiaryAddressLine2 | `string` | no |
157
167
 
158
- ## Resources
168
+ ## Related
159
169
 
160
170
  - <https://bysquare.com/>
161
171
  - <https://devel.cz/otazka/qr-kod-pay-by-square>
@@ -164,16 +174,12 @@ $ 0004G0005ES17OQ09C98Q7ME34TCR3V71LVKD2AE6EGHKR82DKS5NBJ3331VUFQIV0JGMR743UJCKS
164
174
  - <https://www.sbaonline.sk/wp-content/uploads/2020/03/pay-by-square-specifications-1_1_0.pdf>
165
175
  - <https://www.vutbr.cz/studenti/zav-prace/detail/78439>
166
176
 
167
- <!-- Links -->
168
-
169
- [build]: https://img.shields.io/github/workflow/status/xseman/bysquare/tests
170
- [version]: https://img.shields.io/npm/v/bysquare
171
- [license]: https://img.shields.io/github/license/xseman/bysquare
172
-
173
177
  <!--
174
178
  Versioning
175
179
  ----------
176
180
 
181
+ https://github.com/dherges/npm-version-git-flow
182
+
177
183
  - Stash unfinished work
178
184
  - Run tests and build app
179
185
  - Run the `preversion` script
package/lib/generate.d.ts CHANGED
@@ -26,9 +26,10 @@ export declare function createChecksum(tabbedInput: string): Buffer;
26
26
  */
27
27
  export declare function dataWithChecksum(model: Model): Buffer;
28
28
  /**
29
- * Order keys by specification
30
- * Fill empty values
31
- * Transform to tabbed string
29
+ * Logic
30
+ * - Order keys by specification
31
+ * - Fill empty values
32
+ * - Transform to tabbed string
32
33
  */
33
34
  export declare function createTabbedString(model: Model): string;
34
35
  /**
package/lib/generate.js CHANGED
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -80,26 +84,37 @@ exports.createChecksum = createChecksum;
80
84
  function dataWithChecksum(model) {
81
85
  const tabbedString = createTabbedString(model);
82
86
  const checksum = createChecksum(tabbedString);
83
- const merged = Buffer.concat([
84
- checksum,
85
- Buffer.from(tabbedString, "utf-8")
86
- ]);
87
- return merged;
87
+ return Buffer.concat([checksum, Buffer.from(tabbedString, "utf-8")]);
88
88
  }
89
89
  exports.dataWithChecksum = dataWithChecksum;
90
90
  /**
91
- * Order keys by specification
92
- * Fill empty values
93
- * Transform to tabbed string
91
+ * Logic
92
+ * - Order keys by specification
93
+ * - Fill empty values
94
+ * - Transform to tabbed string
94
95
  */
95
96
  function createTabbedString(model) {
96
- const tabbedModel = Object.keys(model)
97
- .reduce((acc, key) => {
98
- acc[index_1.ModelOrdered[key]] = String(model[key] ?? "");
97
+ const tabbed = Object.keys(model).reduce((acc, key) => {
98
+ const index = index_1.SequenceOrder[key];
99
+ acc[index] = String(model[key]);
99
100
  return acc;
100
- }, Array(33).fill(""))
101
- .join("\t");
102
- return tabbedModel;
101
+ }, Array(33).fill(undefined));
102
+ const notStandingOrder = tabbed[14] === undefined;
103
+ const notDirectDebit = tabbed[19] === undefined;
104
+ if (notStandingOrder) {
105
+ tabbed[14] = String(0);
106
+ tabbed.splice(15, 4);
107
+ if (notDirectDebit) {
108
+ tabbed[19 - 4] = String(0);
109
+ tabbed.splice(20 - 4, 10);
110
+ }
111
+ return tabbed.join("\t");
112
+ }
113
+ if (notDirectDebit) {
114
+ tabbed[19] = String(0);
115
+ tabbed.splice(20, 10);
116
+ }
117
+ return tabbed.join("\t");
103
118
  }
104
119
  exports.createTabbedString = createTabbedString;
105
120
  /**
package/lib/index.js CHANGED
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
package/lib/parse.js CHANGED
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -21,41 +25,144 @@ var __importStar = (this && this.__importStar) || function (mod) {
21
25
  Object.defineProperty(exports, "__esModule", { value: true });
22
26
  exports.detect = exports.inverseAlphanumericConversion = exports.parse = exports.createModel = void 0;
23
27
  const lzma = __importStar(require("lzma-native"));
24
- const _1 = require(".");
25
28
  const generate_1 = require("./generate");
29
+ var DecodeSequenceMain;
30
+ (function (DecodeSequenceMain) {
31
+ DecodeSequenceMain[DecodeSequenceMain["InvoiceID"] = 0] = "InvoiceID";
32
+ DecodeSequenceMain[DecodeSequenceMain["Payments"] = 1] = "Payments";
33
+ DecodeSequenceMain[DecodeSequenceMain["PaymentOptions"] = 2] = "PaymentOptions";
34
+ DecodeSequenceMain[DecodeSequenceMain["Amount"] = 3] = "Amount";
35
+ DecodeSequenceMain[DecodeSequenceMain["CurrencyCode"] = 4] = "CurrencyCode";
36
+ DecodeSequenceMain[DecodeSequenceMain["PaymentDueDate"] = 5] = "PaymentDueDate";
37
+ DecodeSequenceMain[DecodeSequenceMain["VariableSymbol"] = 6] = "VariableSymbol";
38
+ DecodeSequenceMain[DecodeSequenceMain["ConstantSymbol"] = 7] = "ConstantSymbol";
39
+ DecodeSequenceMain[DecodeSequenceMain["SpecificSymbol"] = 8] = "SpecificSymbol";
40
+ DecodeSequenceMain[DecodeSequenceMain["OriginatorsReferenceInformation"] = 9] = "OriginatorsReferenceInformation";
41
+ DecodeSequenceMain[DecodeSequenceMain["PaymentNote"] = 10] = "PaymentNote";
42
+ DecodeSequenceMain[DecodeSequenceMain["BankAccounts"] = 11] = "BankAccounts";
43
+ DecodeSequenceMain[DecodeSequenceMain["IBAN"] = 12] = "IBAN";
44
+ DecodeSequenceMain[DecodeSequenceMain["BIC"] = 13] = "BIC";
45
+ DecodeSequenceMain[DecodeSequenceMain["StandingOrderExt"] = 14] = "StandingOrderExt";
46
+ DecodeSequenceMain[DecodeSequenceMain["DirectDebitExt"] = 15] = "DirectDebitExt";
47
+ DecodeSequenceMain[DecodeSequenceMain["BeneficiaryName"] = 16] = "BeneficiaryName";
48
+ DecodeSequenceMain[DecodeSequenceMain["BeneficiaryAddressLine1"] = 17] = "BeneficiaryAddressLine1";
49
+ DecodeSequenceMain[DecodeSequenceMain["BeneficiaryAddressLine2"] = 18] = "BeneficiaryAddressLine2";
50
+ })(DecodeSequenceMain || (DecodeSequenceMain = {}));
51
+ var DecodeSequenceStandingOrder;
52
+ (function (DecodeSequenceStandingOrder) {
53
+ DecodeSequenceStandingOrder[DecodeSequenceStandingOrder["InvoiceID"] = 0] = "InvoiceID";
54
+ DecodeSequenceStandingOrder[DecodeSequenceStandingOrder["Payments"] = 1] = "Payments";
55
+ DecodeSequenceStandingOrder[DecodeSequenceStandingOrder["PaymentOptions"] = 2] = "PaymentOptions";
56
+ DecodeSequenceStandingOrder[DecodeSequenceStandingOrder["Amount"] = 3] = "Amount";
57
+ DecodeSequenceStandingOrder[DecodeSequenceStandingOrder["CurrencyCode"] = 4] = "CurrencyCode";
58
+ DecodeSequenceStandingOrder[DecodeSequenceStandingOrder["PaymentDueDate"] = 5] = "PaymentDueDate";
59
+ DecodeSequenceStandingOrder[DecodeSequenceStandingOrder["VariableSymbol"] = 6] = "VariableSymbol";
60
+ DecodeSequenceStandingOrder[DecodeSequenceStandingOrder["ConstantSymbol"] = 7] = "ConstantSymbol";
61
+ DecodeSequenceStandingOrder[DecodeSequenceStandingOrder["SpecificSymbol"] = 8] = "SpecificSymbol";
62
+ DecodeSequenceStandingOrder[DecodeSequenceStandingOrder["OriginatorsReferenceInformation"] = 9] = "OriginatorsReferenceInformation";
63
+ DecodeSequenceStandingOrder[DecodeSequenceStandingOrder["PaymentNote"] = 10] = "PaymentNote";
64
+ DecodeSequenceStandingOrder[DecodeSequenceStandingOrder["BankAccounts"] = 11] = "BankAccounts";
65
+ DecodeSequenceStandingOrder[DecodeSequenceStandingOrder["IBAN"] = 12] = "IBAN";
66
+ DecodeSequenceStandingOrder[DecodeSequenceStandingOrder["BIC"] = 13] = "BIC";
67
+ DecodeSequenceStandingOrder[DecodeSequenceStandingOrder["StandingOrderExt"] = 14] = "StandingOrderExt";
68
+ DecodeSequenceStandingOrder[DecodeSequenceStandingOrder["Day"] = 15] = "Day";
69
+ DecodeSequenceStandingOrder[DecodeSequenceStandingOrder["Month"] = 16] = "Month";
70
+ DecodeSequenceStandingOrder[DecodeSequenceStandingOrder["Periodicity"] = 17] = "Periodicity";
71
+ DecodeSequenceStandingOrder[DecodeSequenceStandingOrder["LastDate"] = 18] = "LastDate";
72
+ DecodeSequenceStandingOrder[DecodeSequenceStandingOrder["DirectDebitExt"] = 19] = "DirectDebitExt";
73
+ DecodeSequenceStandingOrder[DecodeSequenceStandingOrder["BeneficiaryName"] = 20] = "BeneficiaryName";
74
+ DecodeSequenceStandingOrder[DecodeSequenceStandingOrder["BeneficiaryAddressLine1"] = 21] = "BeneficiaryAddressLine1";
75
+ DecodeSequenceStandingOrder[DecodeSequenceStandingOrder["BeneficiaryAddressLine2"] = 22] = "BeneficiaryAddressLine2";
76
+ })(DecodeSequenceStandingOrder || (DecodeSequenceStandingOrder = {}));
77
+ var DecodeOrderSequenceDirectDebit;
78
+ (function (DecodeOrderSequenceDirectDebit) {
79
+ DecodeOrderSequenceDirectDebit[DecodeOrderSequenceDirectDebit["InvoiceID"] = 0] = "InvoiceID";
80
+ DecodeOrderSequenceDirectDebit[DecodeOrderSequenceDirectDebit["Payments"] = 1] = "Payments";
81
+ DecodeOrderSequenceDirectDebit[DecodeOrderSequenceDirectDebit["PaymentOptions"] = 2] = "PaymentOptions";
82
+ DecodeOrderSequenceDirectDebit[DecodeOrderSequenceDirectDebit["Amount"] = 3] = "Amount";
83
+ DecodeOrderSequenceDirectDebit[DecodeOrderSequenceDirectDebit["CurrencyCode"] = 4] = "CurrencyCode";
84
+ DecodeOrderSequenceDirectDebit[DecodeOrderSequenceDirectDebit["PaymentDueDate"] = 5] = "PaymentDueDate";
85
+ DecodeOrderSequenceDirectDebit[DecodeOrderSequenceDirectDebit["VariableSymbol"] = 6] = "VariableSymbol";
86
+ DecodeOrderSequenceDirectDebit[DecodeOrderSequenceDirectDebit["ConstantSymbol"] = 7] = "ConstantSymbol";
87
+ DecodeOrderSequenceDirectDebit[DecodeOrderSequenceDirectDebit["SpecificSymbol"] = 8] = "SpecificSymbol";
88
+ DecodeOrderSequenceDirectDebit[DecodeOrderSequenceDirectDebit["OriginatorsReferenceInformation"] = 9] = "OriginatorsReferenceInformation";
89
+ DecodeOrderSequenceDirectDebit[DecodeOrderSequenceDirectDebit["PaymentNote"] = 10] = "PaymentNote";
90
+ DecodeOrderSequenceDirectDebit[DecodeOrderSequenceDirectDebit["BankAccounts"] = 11] = "BankAccounts";
91
+ DecodeOrderSequenceDirectDebit[DecodeOrderSequenceDirectDebit["IBAN"] = 12] = "IBAN";
92
+ DecodeOrderSequenceDirectDebit[DecodeOrderSequenceDirectDebit["BIC"] = 13] = "BIC";
93
+ DecodeOrderSequenceDirectDebit[DecodeOrderSequenceDirectDebit["StandingOrderExt"] = 14] = "StandingOrderExt";
94
+ DecodeOrderSequenceDirectDebit[DecodeOrderSequenceDirectDebit["DirectDebitExt"] = 15] = "DirectDebitExt";
95
+ DecodeOrderSequenceDirectDebit[DecodeOrderSequenceDirectDebit["DirectDebitScheme"] = 16] = "DirectDebitScheme";
96
+ DecodeOrderSequenceDirectDebit[DecodeOrderSequenceDirectDebit["DirectDebitType"] = 17] = "DirectDebitType";
97
+ DecodeOrderSequenceDirectDebit[DecodeOrderSequenceDirectDebit["VariableSymbol_"] = 18] = "VariableSymbol_";
98
+ DecodeOrderSequenceDirectDebit[DecodeOrderSequenceDirectDebit["SpecificSymbol_"] = 19] = "SpecificSymbol_";
99
+ DecodeOrderSequenceDirectDebit[DecodeOrderSequenceDirectDebit["OriginatorsReferenceInformation_"] = 20] = "OriginatorsReferenceInformation_";
100
+ DecodeOrderSequenceDirectDebit[DecodeOrderSequenceDirectDebit["MandateID"] = 21] = "MandateID";
101
+ DecodeOrderSequenceDirectDebit[DecodeOrderSequenceDirectDebit["CreditorID"] = 22] = "CreditorID";
102
+ DecodeOrderSequenceDirectDebit[DecodeOrderSequenceDirectDebit["ContractID"] = 23] = "ContractID";
103
+ DecodeOrderSequenceDirectDebit[DecodeOrderSequenceDirectDebit["MaxAmount"] = 24] = "MaxAmount";
104
+ DecodeOrderSequenceDirectDebit[DecodeOrderSequenceDirectDebit["ValidTillDate"] = 25] = "ValidTillDate";
105
+ DecodeOrderSequenceDirectDebit[DecodeOrderSequenceDirectDebit["BeneficiaryName"] = 26] = "BeneficiaryName";
106
+ DecodeOrderSequenceDirectDebit[DecodeOrderSequenceDirectDebit["BeneficiaryAddressLine1"] = 27] = "BeneficiaryAddressLine1";
107
+ DecodeOrderSequenceDirectDebit[DecodeOrderSequenceDirectDebit["BeneficiaryAddressLine2"] = 28] = "BeneficiaryAddressLine2";
108
+ })(DecodeOrderSequenceDirectDebit || (DecodeOrderSequenceDirectDebit = {}));
26
109
  /**
27
110
  * Generating by square Code
28
111
  *
29
112
  * @see {spec 3.14.}
30
113
  */
31
114
  function createModel(tabbedString) {
32
- const model = tabbedString
115
+ const splitted = tabbedString
33
116
  .split("\t")
34
- .filter((ch) => !(ch === "\x00"))
35
- .reduce((acc, value, i) => {
36
- const key = _1.ModelOrdered[i];
117
+ /** The end of the qr-string might contain a NULL-terminated string */
118
+ .map((entry) => entry.replace("\x00", ""));
119
+ /** The model should contain information if it is extended */
120
+ const isStandingOrder = splitted[14] === "1";
121
+ const istDirectDebit = splitted[19] === "1";
122
+ const numericKeys = [
123
+ "Payments",
124
+ "PaymentOptions",
125
+ "Amount",
126
+ "BankAccounts",
127
+ "StandingOrderExt",
128
+ "Day",
129
+ "Month",
130
+ "DirectDebitExt",
131
+ "DirectDebitScheme",
132
+ "DirectDebitType",
133
+ "MaxAmount"
134
+ ];
135
+ const model = splitted.reduce((acc, value, i) => {
37
136
  if (value === "") {
38
137
  return acc;
39
138
  }
40
- const numericKeys = [
41
- "Payments",
42
- "PaymentOptions",
43
- "Amount",
44
- "BankAccounts",
45
- "StandingOrderExt",
46
- "Day",
47
- "Month",
48
- "DirectDebitExt",
49
- "DirectDebitScheme",
50
- "DirectDebitType",
51
- "MaxAmount"
52
- ];
53
- if (numericKeys.includes(key)) {
54
- acc[key] = Number(value);
139
+ if (!isStandingOrder && !istDirectDebit) {
140
+ const key = DecodeSequenceMain[i];
141
+ if (numericKeys.includes(key)) {
142
+ acc[key] = Number(value);
143
+ return acc;
144
+ }
145
+ acc[key] = value;
146
+ return acc;
147
+ }
148
+ if (isStandingOrder) {
149
+ const key = DecodeSequenceStandingOrder[i];
150
+ if (numericKeys.includes(key)) {
151
+ acc[key] = Number(value);
152
+ return acc;
153
+ }
154
+ acc[key] = value;
155
+ return acc;
156
+ }
157
+ if (istDirectDebit) {
158
+ const key = DecodeOrderSequenceDirectDebit[i];
159
+ if (numericKeys.includes(key)) {
160
+ acc[key] = Number(value);
161
+ return acc;
162
+ }
163
+ acc[key] = value;
55
164
  return acc;
56
165
  }
57
- acc[key] = value;
58
- return acc;
59
166
  }, {});
60
167
  return model;
61
168
  }
@@ -67,8 +174,8 @@ exports.createModel = createModel;
67
174
  */
68
175
  function parse(qr) {
69
176
  const inversed = inverseAlphanumericConversion(qr);
70
- const headerBysquare = inversed.slice(0, 2);
71
- const headerCompression = inversed.slice(2, 4);
177
+ const _headerBysquare = inversed.slice(0, 2);
178
+ const _headerCompression = inversed.slice(2, 4);
72
179
  const compressedData = inversed.slice(4);
73
180
  // @ts-ignore: Missing decored types
74
181
  const decoder = lzma.createStream("rawDecoder", {
@@ -112,6 +219,17 @@ function inverseAlphanumericConversion(qr) {
112
219
  return Buffer.from(bytes);
113
220
  }
114
221
  exports.inverseAlphanumericConversion = inverseAlphanumericConversion;
222
+ var Version;
223
+ (function (Version) {
224
+ /**
225
+ * Created this document from original by square specifications
226
+ */
227
+ Version[Version["2013-02-22"] = 0] = "2013-02-22";
228
+ /**
229
+ * Added fields for beneficiary name and address
230
+ */
231
+ Version[Version["2015-06-24"] = 1] = "2015-06-24";
232
+ })(Version || (Version = {}));
115
233
  /**
116
234
  * Simple binary header detector
117
235
  *
@@ -127,9 +245,8 @@ function detect(qr) {
127
245
  return [...headerBysquare.toString("hex")]
128
246
  .map((nibble) => parseInt(nibble, 16))
129
247
  .every((nibble, index) => {
130
- // check version, actual v1.x.x
131
- if (index === 1) {
132
- return nibble <= 2;
248
+ if (index === 1 /** version */) {
249
+ return 0 >= nibble && nibble <= 1;
133
250
  }
134
251
  return 0 <= nibble && nibble <= 15;
135
252
  });
package/lib/types.d.ts CHANGED
@@ -184,9 +184,10 @@ export interface Model {
184
184
  /**
185
185
  * Atributes must follow specific order
186
186
  * Based on Table 15. PAY by square sequence data model (page 30.)
187
+ *
187
188
  * @see{./docs/specification_v1.1.0.pdf}
188
189
  */
189
- export declare enum ModelOrdered {
190
+ export declare enum SequenceOrder {
190
191
  InvoiceID = 0,
191
192
  Payments = 1,
192
193
  PaymentOptions = 2,
package/lib/types.js CHANGED
@@ -1,47 +1,48 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CurrencyCode = exports.ModelOrdered = void 0;
3
+ exports.CurrencyCode = exports.SequenceOrder = void 0;
4
4
  /**
5
5
  * Atributes must follow specific order
6
6
  * Based on Table 15. PAY by square sequence data model (page 30.)
7
+ *
7
8
  * @see{./docs/specification_v1.1.0.pdf}
8
9
  */
9
- var ModelOrdered;
10
- (function (ModelOrdered) {
11
- ModelOrdered[ModelOrdered["InvoiceID"] = 0] = "InvoiceID";
12
- ModelOrdered[ModelOrdered["Payments"] = 1] = "Payments";
13
- ModelOrdered[ModelOrdered["PaymentOptions"] = 2] = "PaymentOptions";
14
- ModelOrdered[ModelOrdered["Amount"] = 3] = "Amount";
15
- ModelOrdered[ModelOrdered["CurrencyCode"] = 4] = "CurrencyCode";
16
- ModelOrdered[ModelOrdered["PaymentDueDate"] = 5] = "PaymentDueDate";
17
- ModelOrdered[ModelOrdered["VariableSymbol"] = 6] = "VariableSymbol";
18
- ModelOrdered[ModelOrdered["ConstantSymbol"] = 7] = "ConstantSymbol";
19
- ModelOrdered[ModelOrdered["SpecificSymbol"] = 8] = "SpecificSymbol";
20
- ModelOrdered[ModelOrdered["OriginatorsReferenceInformation"] = 9] = "OriginatorsReferenceInformation";
21
- ModelOrdered[ModelOrdered["PaymentNote"] = 10] = "PaymentNote";
22
- ModelOrdered[ModelOrdered["BankAccounts"] = 11] = "BankAccounts";
23
- ModelOrdered[ModelOrdered["IBAN"] = 12] = "IBAN";
24
- ModelOrdered[ModelOrdered["BIC"] = 13] = "BIC";
25
- ModelOrdered[ModelOrdered["StandingOrderExt"] = 14] = "StandingOrderExt";
26
- ModelOrdered[ModelOrdered["Day"] = 15] = "Day";
27
- ModelOrdered[ModelOrdered["Month"] = 16] = "Month";
28
- ModelOrdered[ModelOrdered["Periodicity"] = 17] = "Periodicity";
29
- ModelOrdered[ModelOrdered["LastDate"] = 18] = "LastDate";
30
- ModelOrdered[ModelOrdered["DirectDebitExt"] = 19] = "DirectDebitExt";
31
- ModelOrdered[ModelOrdered["DirectDebitScheme"] = 20] = "DirectDebitScheme";
32
- ModelOrdered[ModelOrdered["DirectDebitType"] = 21] = "DirectDebitType";
33
- ModelOrdered[ModelOrdered["VariableSymbol_"] = 22] = "VariableSymbol_";
34
- ModelOrdered[ModelOrdered["SpecificSymbol_"] = 23] = "SpecificSymbol_";
35
- ModelOrdered[ModelOrdered["OriginatorsReferenceInformation_"] = 24] = "OriginatorsReferenceInformation_";
36
- ModelOrdered[ModelOrdered["MandateID"] = 25] = "MandateID";
37
- ModelOrdered[ModelOrdered["CreditorID"] = 26] = "CreditorID";
38
- ModelOrdered[ModelOrdered["ContractID"] = 27] = "ContractID";
39
- ModelOrdered[ModelOrdered["MaxAmount"] = 28] = "MaxAmount";
40
- ModelOrdered[ModelOrdered["ValidTillDate"] = 29] = "ValidTillDate";
41
- ModelOrdered[ModelOrdered["BeneficiaryName"] = 30] = "BeneficiaryName";
42
- ModelOrdered[ModelOrdered["BeneficiaryAddressLine1"] = 31] = "BeneficiaryAddressLine1";
43
- ModelOrdered[ModelOrdered["BeneficiaryAddressLine2"] = 32] = "BeneficiaryAddressLine2";
44
- })(ModelOrdered = exports.ModelOrdered || (exports.ModelOrdered = {}));
10
+ var SequenceOrder;
11
+ (function (SequenceOrder) {
12
+ SequenceOrder[SequenceOrder["InvoiceID"] = 0] = "InvoiceID";
13
+ SequenceOrder[SequenceOrder["Payments"] = 1] = "Payments";
14
+ SequenceOrder[SequenceOrder["PaymentOptions"] = 2] = "PaymentOptions";
15
+ SequenceOrder[SequenceOrder["Amount"] = 3] = "Amount";
16
+ SequenceOrder[SequenceOrder["CurrencyCode"] = 4] = "CurrencyCode";
17
+ SequenceOrder[SequenceOrder["PaymentDueDate"] = 5] = "PaymentDueDate";
18
+ SequenceOrder[SequenceOrder["VariableSymbol"] = 6] = "VariableSymbol";
19
+ SequenceOrder[SequenceOrder["ConstantSymbol"] = 7] = "ConstantSymbol";
20
+ SequenceOrder[SequenceOrder["SpecificSymbol"] = 8] = "SpecificSymbol";
21
+ SequenceOrder[SequenceOrder["OriginatorsReferenceInformation"] = 9] = "OriginatorsReferenceInformation";
22
+ SequenceOrder[SequenceOrder["PaymentNote"] = 10] = "PaymentNote";
23
+ SequenceOrder[SequenceOrder["BankAccounts"] = 11] = "BankAccounts";
24
+ SequenceOrder[SequenceOrder["IBAN"] = 12] = "IBAN";
25
+ SequenceOrder[SequenceOrder["BIC"] = 13] = "BIC";
26
+ SequenceOrder[SequenceOrder["StandingOrderExt"] = 14] = "StandingOrderExt";
27
+ SequenceOrder[SequenceOrder["Day"] = 15] = "Day";
28
+ SequenceOrder[SequenceOrder["Month"] = 16] = "Month";
29
+ SequenceOrder[SequenceOrder["Periodicity"] = 17] = "Periodicity";
30
+ SequenceOrder[SequenceOrder["LastDate"] = 18] = "LastDate";
31
+ SequenceOrder[SequenceOrder["DirectDebitExt"] = 19] = "DirectDebitExt";
32
+ SequenceOrder[SequenceOrder["DirectDebitScheme"] = 20] = "DirectDebitScheme";
33
+ SequenceOrder[SequenceOrder["DirectDebitType"] = 21] = "DirectDebitType";
34
+ SequenceOrder[SequenceOrder["VariableSymbol_"] = 22] = "VariableSymbol_";
35
+ SequenceOrder[SequenceOrder["SpecificSymbol_"] = 23] = "SpecificSymbol_";
36
+ SequenceOrder[SequenceOrder["OriginatorsReferenceInformation_"] = 24] = "OriginatorsReferenceInformation_";
37
+ SequenceOrder[SequenceOrder["MandateID"] = 25] = "MandateID";
38
+ SequenceOrder[SequenceOrder["CreditorID"] = 26] = "CreditorID";
39
+ SequenceOrder[SequenceOrder["ContractID"] = 27] = "ContractID";
40
+ SequenceOrder[SequenceOrder["MaxAmount"] = 28] = "MaxAmount";
41
+ SequenceOrder[SequenceOrder["ValidTillDate"] = 29] = "ValidTillDate";
42
+ SequenceOrder[SequenceOrder["BeneficiaryName"] = 30] = "BeneficiaryName";
43
+ SequenceOrder[SequenceOrder["BeneficiaryAddressLine1"] = 31] = "BeneficiaryAddressLine1";
44
+ SequenceOrder[SequenceOrder["BeneficiaryAddressLine2"] = 32] = "BeneficiaryAddressLine2";
45
+ })(SequenceOrder = exports.SequenceOrder || (exports.SequenceOrder = {}));
45
46
  /**
46
47
  * Currency codes based on ISO 4217
47
48
  */
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bysquare",
3
3
  "description": "It's a national standard for payment QR codes adopted by Slovak Banking Association (SBA)",
4
- "version": "1.2.2",
4
+ "version": "1.2.3",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Filip Seman <filip.seman@protonmail.com>",
7
7
  "keywords": [
@@ -38,8 +38,8 @@
38
38
  },
39
39
  "devDependencies": {
40
40
  "@types/lzma-native": "^4.0.1",
41
- "@types/node": ">= 14.x.x",
42
- "typescript": "4.5.5",
41
+ "@types/node": ">=14",
42
+ "typescript": "~4.7.0",
43
43
  "vitest": "0.22.0"
44
44
  },
45
45
  "files": [
@@ -50,8 +50,8 @@
50
50
  "main": "lib/index.js",
51
51
  "types": "lib/index.d.ts",
52
52
  "engines": {
53
- "node": ">=14.x.x",
54
- "npm": ">= 7.0"
53
+ "node": ">=14",
54
+ "npm": ">=7.0"
55
55
  },
56
56
  "os": [
57
57
  "darwin",