@ksefnik/core 0.0.1
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/LICENSE +21 -0
- package/dist/bank/auto-detect.d.ts +3 -0
- package/dist/bank/auto-detect.d.ts.map +1 -0
- package/dist/bank/auto-detect.js +29 -0
- package/dist/bank/auto-detect.js.map +1 -0
- package/dist/bank/index.d.ts +10 -0
- package/dist/bank/index.d.ts.map +1 -0
- package/dist/bank/index.js +20 -0
- package/dist/bank/index.js.map +1 -0
- package/dist/bank/nip-extractor.d.ts +3 -0
- package/dist/bank/nip-extractor.d.ts.map +1 -0
- package/dist/bank/nip-extractor.js +36 -0
- package/dist/bank/nip-extractor.js.map +1 -0
- package/dist/bank/parsers/csv-base.d.ts +4 -0
- package/dist/bank/parsers/csv-base.d.ts.map +1 -0
- package/dist/bank/parsers/csv-base.js +48 -0
- package/dist/bank/parsers/csv-base.js.map +1 -0
- package/dist/bank/parsers/index.d.ts +8 -0
- package/dist/bank/parsers/index.d.ts.map +1 -0
- package/dist/bank/parsers/index.js +21 -0
- package/dist/bank/parsers/index.js.map +1 -0
- package/dist/bank/parsers/ing.parser.d.ts +7 -0
- package/dist/bank/parsers/ing.parser.d.ts.map +1 -0
- package/dist/bank/parsers/ing.parser.js +43 -0
- package/dist/bank/parsers/ing.parser.js.map +1 -0
- package/dist/bank/parsers/mbank.parser.d.ts +7 -0
- package/dist/bank/parsers/mbank.parser.d.ts.map +1 -0
- package/dist/bank/parsers/mbank.parser.js +39 -0
- package/dist/bank/parsers/mbank.parser.js.map +1 -0
- package/dist/bank/parsers/mt940.parser.d.ts +7 -0
- package/dist/bank/parsers/mt940.parser.d.ts.map +1 -0
- package/dist/bank/parsers/mt940.parser.js +57 -0
- package/dist/bank/parsers/mt940.parser.js.map +1 -0
- package/dist/bank/parsers/pko.parser.d.ts +7 -0
- package/dist/bank/parsers/pko.parser.d.ts.map +1 -0
- package/dist/bank/parsers/pko.parser.js +38 -0
- package/dist/bank/parsers/pko.parser.js.map +1 -0
- package/dist/bank/parsers/santander.parser.d.ts +7 -0
- package/dist/bank/parsers/santander.parser.d.ts.map +1 -0
- package/dist/bank/parsers/santander.parser.js +46 -0
- package/dist/bank/parsers/santander.parser.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/ksef/cache.d.ts +12 -0
- package/dist/ksef/cache.d.ts.map +1 -0
- package/dist/ksef/cache.js +36 -0
- package/dist/ksef/cache.js.map +1 -0
- package/dist/ksef/index.d.ts +6 -0
- package/dist/ksef/index.d.ts.map +1 -0
- package/dist/ksef/index.js +5 -0
- package/dist/ksef/index.js.map +1 -0
- package/dist/ksef/ksef.adapter.d.ts +16 -0
- package/dist/ksef/ksef.adapter.d.ts.map +1 -0
- package/dist/ksef/ksef.adapter.js +81 -0
- package/dist/ksef/ksef.adapter.js.map +1 -0
- package/dist/ksef/retry.d.ts +7 -0
- package/dist/ksef/retry.d.ts.map +1 -0
- package/dist/ksef/retry.js +41 -0
- package/dist/ksef/retry.js.map +1 -0
- package/dist/ksef/session.d.ts +16 -0
- package/dist/ksef/session.d.ts.map +1 -0
- package/dist/ksef/session.js +39 -0
- package/dist/ksef/session.js.map +1 -0
- package/dist/ksef/types.d.ts +56 -0
- package/dist/ksef/types.d.ts.map +1 -0
- package/dist/ksef/types.js +2 -0
- package/dist/ksef/types.js.map +1 -0
- package/dist/ksefnik.d.ts +51 -0
- package/dist/ksefnik.d.ts.map +1 -0
- package/dist/ksefnik.js +104 -0
- package/dist/ksefnik.js.map +1 -0
- package/dist/matching/context.d.ts +5 -0
- package/dist/matching/context.d.ts.map +1 -0
- package/dist/matching/context.js +19 -0
- package/dist/matching/context.js.map +1 -0
- package/dist/matching/index.d.ts +6 -0
- package/dist/matching/index.d.ts.map +1 -0
- package/dist/matching/index.js +6 -0
- package/dist/matching/index.js.map +1 -0
- package/dist/matching/passes/exact.pass.d.ts +3 -0
- package/dist/matching/passes/exact.pass.d.ts.map +1 -0
- package/dist/matching/passes/exact.pass.js +34 -0
- package/dist/matching/passes/exact.pass.js.map +1 -0
- package/dist/matching/passes/fuzzy.pass.d.ts +3 -0
- package/dist/matching/passes/fuzzy.pass.d.ts.map +1 -0
- package/dist/matching/passes/fuzzy.pass.js +40 -0
- package/dist/matching/passes/fuzzy.pass.js.map +1 -0
- package/dist/matching/passes/index.d.ts +9 -0
- package/dist/matching/passes/index.d.ts.map +1 -0
- package/dist/matching/passes/index.js +21 -0
- package/dist/matching/passes/index.js.map +1 -0
- package/dist/matching/passes/invoice-ref.pass.d.ts +3 -0
- package/dist/matching/passes/invoice-ref.pass.d.ts.map +1 -0
- package/dist/matching/passes/invoice-ref.pass.js +32 -0
- package/dist/matching/passes/invoice-ref.pass.js.map +1 -0
- package/dist/matching/passes/ksef-ref.pass.d.ts +3 -0
- package/dist/matching/passes/ksef-ref.pass.d.ts.map +1 -0
- package/dist/matching/passes/ksef-ref.pass.js +25 -0
- package/dist/matching/passes/ksef-ref.pass.js.map +1 -0
- package/dist/matching/passes/partial.pass.d.ts +3 -0
- package/dist/matching/passes/partial.pass.d.ts.map +1 -0
- package/dist/matching/passes/partial.pass.js +55 -0
- package/dist/matching/passes/partial.pass.js.map +1 -0
- package/dist/matching/passes/proximity.pass.d.ts +3 -0
- package/dist/matching/passes/proximity.pass.d.ts.map +1 -0
- package/dist/matching/passes/proximity.pass.js +49 -0
- package/dist/matching/passes/proximity.pass.js.map +1 -0
- package/dist/matching/pipeline.d.ts +3 -0
- package/dist/matching/pipeline.d.ts.map +1 -0
- package/dist/matching/pipeline.js +76 -0
- package/dist/matching/pipeline.js.map +1 -0
- package/dist/matching/scoring.d.ts +5 -0
- package/dist/matching/scoring.d.ts.map +1 -0
- package/dist/matching/scoring.js +28 -0
- package/dist/matching/scoring.js.map +1 -0
- package/dist/plugins/index.d.ts +3 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +3 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/loader.d.ts +3 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +13 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/registry.d.ts +8 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +15 -0
- package/dist/plugins/registry.js.map +1 -0
- package/dist/storage/in-memory.storage.d.ts +13 -0
- package/dist/storage/in-memory.storage.d.ts.map +1 -0
- package/dist/storage/in-memory.storage.js +57 -0
- package/dist/storage/in-memory.storage.js.map +1 -0
- package/dist/storage/index.d.ts +3 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +3 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/sqlite.storage.d.ts +13 -0
- package/dist/storage/sqlite.storage.d.ts.map +1 -0
- package/dist/storage/sqlite.storage.js +225 -0
- package/dist/storage/sqlite.storage.js.map +1 -0
- package/dist/validation/engine.d.ts +10 -0
- package/dist/validation/engine.d.ts.map +1 -0
- package/dist/validation/engine.js +19 -0
- package/dist/validation/engine.js.map +1 -0
- package/dist/validation/index.d.ts +6 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +4 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/rule.d.ts +17 -0
- package/dist/validation/rule.d.ts.map +1 -0
- package/dist/validation/rule.js +2 -0
- package/dist/validation/rule.js.map +1 -0
- package/dist/validation/rules/amount-max.d.ts +3 -0
- package/dist/validation/rules/amount-max.d.ts.map +1 -0
- package/dist/validation/rules/amount-max.js +14 -0
- package/dist/validation/rules/amount-max.js.map +1 -0
- package/dist/validation/rules/amount-positive.d.ts +3 -0
- package/dist/validation/rules/amount-positive.d.ts.map +1 -0
- package/dist/validation/rules/amount-positive.js +13 -0
- package/dist/validation/rules/amount-positive.js.map +1 -0
- package/dist/validation/rules/buyer-nip-format.d.ts +3 -0
- package/dist/validation/rules/buyer-nip-format.d.ts.map +1 -0
- package/dist/validation/rules/buyer-nip-format.js +16 -0
- package/dist/validation/rules/buyer-nip-format.js.map +1 -0
- package/dist/validation/rules/currency-valid.d.ts +3 -0
- package/dist/validation/rules/currency-valid.d.ts.map +1 -0
- package/dist/validation/rules/currency-valid.js +13 -0
- package/dist/validation/rules/currency-valid.js.map +1 -0
- package/dist/validation/rules/date-not-future.d.ts +3 -0
- package/dist/validation/rules/date-not-future.d.ts.map +1 -0
- package/dist/validation/rules/date-not-future.js +18 -0
- package/dist/validation/rules/date-not-future.js.map +1 -0
- package/dist/validation/rules/date-order.d.ts +3 -0
- package/dist/validation/rules/date-order.d.ts.map +1 -0
- package/dist/validation/rules/date-order.js +15 -0
- package/dist/validation/rules/date-order.js.map +1 -0
- package/dist/validation/rules/date-range.d.ts +3 -0
- package/dist/validation/rules/date-range.d.ts.map +1 -0
- package/dist/validation/rules/date-range.js +18 -0
- package/dist/validation/rules/date-range.js.map +1 -0
- package/dist/validation/rules/date-valid.d.ts +3 -0
- package/dist/validation/rules/date-valid.d.ts.map +1 -0
- package/dist/validation/rules/date-valid.js +15 -0
- package/dist/validation/rules/date-valid.js.map +1 -0
- package/dist/validation/rules/description-length.d.ts +3 -0
- package/dist/validation/rules/description-length.d.ts.map +1 -0
- package/dist/validation/rules/description-length.js +19 -0
- package/dist/validation/rules/description-length.js.map +1 -0
- package/dist/validation/rules/duplicate-check.d.ts +3 -0
- package/dist/validation/rules/duplicate-check.d.ts.map +1 -0
- package/dist/validation/rules/duplicate-check.js +17 -0
- package/dist/validation/rules/duplicate-check.js.map +1 -0
- package/dist/validation/rules/index.d.ts +24 -0
- package/dist/validation/rules/index.d.ts.map +1 -0
- package/dist/validation/rules/index.js +44 -0
- package/dist/validation/rules/index.js.map +1 -0
- package/dist/validation/rules/invoice-number-format.d.ts +3 -0
- package/dist/validation/rules/invoice-number-format.d.ts.map +1 -0
- package/dist/validation/rules/invoice-number-format.js +14 -0
- package/dist/validation/rules/invoice-number-format.js.map +1 -0
- package/dist/validation/rules/ksef-reference-format.d.ts +3 -0
- package/dist/validation/rules/ksef-reference-format.d.ts.map +1 -0
- package/dist/validation/rules/ksef-reference-format.js +18 -0
- package/dist/validation/rules/ksef-reference-format.js.map +1 -0
- package/dist/validation/rules/line-items-sum.d.ts +3 -0
- package/dist/validation/rules/line-items-sum.d.ts.map +1 -0
- package/dist/validation/rules/line-items-sum.js +17 -0
- package/dist/validation/rules/line-items-sum.js.map +1 -0
- package/dist/validation/rules/nip-format.d.ts +3 -0
- package/dist/validation/rules/nip-format.d.ts.map +1 -0
- package/dist/validation/rules/nip-format.js +14 -0
- package/dist/validation/rules/nip-format.js.map +1 -0
- package/dist/validation/rules/nip-not-zeros.d.ts +3 -0
- package/dist/validation/rules/nip-not-zeros.d.ts.map +1 -0
- package/dist/validation/rules/nip-not-zeros.js +12 -0
- package/dist/validation/rules/nip-not-zeros.js.map +1 -0
- package/dist/validation/rules/quantity-positive.d.ts +3 -0
- package/dist/validation/rules/quantity-positive.d.ts.map +1 -0
- package/dist/validation/rules/quantity-positive.js +21 -0
- package/dist/validation/rules/quantity-positive.js.map +1 -0
- package/dist/validation/rules/required-fields.d.ts +3 -0
- package/dist/validation/rules/required-fields.d.ts.map +1 -0
- package/dist/validation/rules/required-fields.js +18 -0
- package/dist/validation/rules/required-fields.js.map +1 -0
- package/dist/validation/rules/seller-buyer-different.d.ts +3 -0
- package/dist/validation/rules/seller-buyer-different.d.ts.map +1 -0
- package/dist/validation/rules/seller-buyer-different.js +15 -0
- package/dist/validation/rules/seller-buyer-different.js.map +1 -0
- package/dist/validation/rules/vat-calculation.d.ts +3 -0
- package/dist/validation/rules/vat-calculation.d.ts.map +1 -0
- package/dist/validation/rules/vat-calculation.js +19 -0
- package/dist/validation/rules/vat-calculation.js.map +1 -0
- package/dist/validation/rules/vat-rate-valid.d.ts +3 -0
- package/dist/validation/rules/vat-rate-valid.d.ts.map +1 -0
- package/dist/validation/rules/vat-rate-valid.js +22 -0
- package/dist/validation/rules/vat-rate-valid.js.map +1 -0
- package/package.json +44 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// Facade
|
|
2
|
+
export { Ksefnik, createKsefnik } from './ksefnik.js';
|
|
3
|
+
// Storage
|
|
4
|
+
export { InMemoryStorage, SqliteStorage } from './storage/index.js';
|
|
5
|
+
// KSeF Adapter
|
|
6
|
+
export { KsefAdapterImpl } from './ksef/index.js';
|
|
7
|
+
export { withRetry } from './ksef/index.js';
|
|
8
|
+
export { TtlCache, cacheKey } from './ksef/index.js';
|
|
9
|
+
export { SessionManager } from './ksef/index.js';
|
|
10
|
+
// Bank Parsers
|
|
11
|
+
export { importBankStatement, importBankStatementFromString, extractNIPs, extractFirstNIP, detectBankFormat, Mt940Parser, MbankParser, IngParser, PkoParser, SantanderParser, getDefaultParsers, } from './bank/index.js';
|
|
12
|
+
// Validation
|
|
13
|
+
export { validateInvoice, validateInvoices, allRules } from './validation/index.js';
|
|
14
|
+
// Reconciliation
|
|
15
|
+
export { runPipeline, defaultPasses } from './matching/index.js';
|
|
16
|
+
// Plugins
|
|
17
|
+
export { PluginRegistry, loadPlugin } from './plugins/index.js';
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAGrD,UAAU;AACV,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEnE,eAAe;AACf,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAKhD,eAAe;AACf,OAAO,EACL,mBAAmB,EACnB,6BAA6B,EAC7B,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,SAAS,EACT,SAAS,EACT,eAAe,EACf,iBAAiB,GAClB,MAAM,iBAAiB,CAAA;AAExB,aAAa;AACb,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAGnF,iBAAiB;AACjB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEhE,UAAU;AACV,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare class TtlCache {
|
|
2
|
+
private store;
|
|
3
|
+
private readonly ttlMs;
|
|
4
|
+
constructor(ttlMs?: number);
|
|
5
|
+
get<T>(key: string): T | undefined;
|
|
6
|
+
set<T>(key: string, value: T): void;
|
|
7
|
+
invalidate(key: string): void;
|
|
8
|
+
invalidateAll(): void;
|
|
9
|
+
get size(): number;
|
|
10
|
+
}
|
|
11
|
+
export declare function cacheKey(params: Record<string, unknown>): string;
|
|
12
|
+
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/ksef/cache.ts"],"names":[],"mappings":"AAKA,qBAAa,QAAQ;IACnB,OAAO,CAAC,KAAK,CAAyC;IACtD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;gBAElB,KAAK,GAAE,MAAsB;IAIzC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAUlC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAOnC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI7B,aAAa,IAAI,IAAI;IAIrB,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAEhE"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export class TtlCache {
|
|
2
|
+
store = new Map();
|
|
3
|
+
ttlMs;
|
|
4
|
+
constructor(ttlMs = 5 * 60 * 1000) {
|
|
5
|
+
this.ttlMs = ttlMs;
|
|
6
|
+
}
|
|
7
|
+
get(key) {
|
|
8
|
+
const entry = this.store.get(key);
|
|
9
|
+
if (!entry)
|
|
10
|
+
return undefined;
|
|
11
|
+
if (Date.now() > entry.expiresAt) {
|
|
12
|
+
this.store.delete(key);
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
return entry.value;
|
|
16
|
+
}
|
|
17
|
+
set(key, value) {
|
|
18
|
+
this.store.set(key, {
|
|
19
|
+
value,
|
|
20
|
+
expiresAt: Date.now() + this.ttlMs,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
invalidate(key) {
|
|
24
|
+
this.store.delete(key);
|
|
25
|
+
}
|
|
26
|
+
invalidateAll() {
|
|
27
|
+
this.store.clear();
|
|
28
|
+
}
|
|
29
|
+
get size() {
|
|
30
|
+
return this.store.size;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export function cacheKey(params) {
|
|
34
|
+
return JSON.stringify(params, Object.keys(params).sort());
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/ksef/cache.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,QAAQ;IACX,KAAK,GAAG,IAAI,GAAG,EAA+B,CAAA;IACrC,KAAK,CAAQ;IAE9B,YAAY,QAAgB,CAAC,GAAG,EAAE,GAAG,IAAI;QACvC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;IAED,GAAG,CAAI,GAAW;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACjC,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAA;QAC5B,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACtB,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,OAAO,KAAK,CAAC,KAAU,CAAA;IACzB,CAAC;IAED,GAAG,CAAI,GAAW,EAAE,KAAQ;QAC1B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;YAClB,KAAK;YACL,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK;SACnC,CAAC,CAAA;IACJ,CAAC;IAED,UAAU,CAAC,GAAW;QACpB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACxB,CAAC;IAED,aAAa;QACX,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA;IACxB,CAAC;CACF;AAED,MAAM,UAAU,QAAQ,CAAC,MAA+B;IACtD,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;AAC3D,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { KsefAdapterImpl } from './ksef.adapter.js';
|
|
2
|
+
export { withRetry, type RetryOptions } from './retry.js';
|
|
3
|
+
export { TtlCache, cacheKey } from './cache.js';
|
|
4
|
+
export { SessionManager, type SessionManagerOptions } from './session.js';
|
|
5
|
+
export type { KsefClient, KsefClientConfig, KsefSessionState, KsefRawInvoice, } from './types.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ksef/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACzE,YAAY,EACV,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,GACf,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ksef/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,SAAS,EAAqB,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,cAAc,EAA8B,MAAM,cAAc,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { KsefAdapter, FetchInvoicesOpts, SendInvoiceInput, SendInvoiceResult, UpoResult, Invoice } from '@ksefnik/shared';
|
|
2
|
+
import type { KsefClient, KsefClientConfig, KsefSessionState } from './types.js';
|
|
3
|
+
export declare class KsefAdapterImpl implements KsefAdapter {
|
|
4
|
+
private readonly client;
|
|
5
|
+
private readonly config;
|
|
6
|
+
private session;
|
|
7
|
+
constructor(client: KsefClient, config: KsefClientConfig);
|
|
8
|
+
initSession(): Promise<void>;
|
|
9
|
+
closeSession(): Promise<void>;
|
|
10
|
+
getSession(): KsefSessionState | null;
|
|
11
|
+
private ensureSession;
|
|
12
|
+
fetchInvoices(opts: FetchInvoicesOpts): Promise<Invoice[]>;
|
|
13
|
+
sendInvoice(input: SendInvoiceInput): Promise<SendInvoiceResult>;
|
|
14
|
+
getUpo(ksefReference: string): Promise<UpoResult>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=ksef.adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ksef.adapter.d.ts","sourceRoot":"","sources":["../../src/ksef/ksef.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,OAAO,EACR,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAEhF,qBAAa,eAAgB,YAAW,WAAW;IAI/C,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJzB,OAAO,CAAC,OAAO,CAAgC;gBAG5B,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,gBAAgB;IAGrC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAOnC,UAAU,IAAI,gBAAgB,GAAG,IAAI;YAIvB,aAAa;IAUrB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IA6B1D,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAahE,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;CAaxD"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
export class KsefAdapterImpl {
|
|
2
|
+
client;
|
|
3
|
+
config;
|
|
4
|
+
session = null;
|
|
5
|
+
constructor(client, config) {
|
|
6
|
+
this.client = client;
|
|
7
|
+
this.config = config;
|
|
8
|
+
}
|
|
9
|
+
async initSession() {
|
|
10
|
+
this.session = await this.client.initSession(this.config);
|
|
11
|
+
}
|
|
12
|
+
async closeSession() {
|
|
13
|
+
if (this.session) {
|
|
14
|
+
await this.client.terminateSession(this.session.token);
|
|
15
|
+
this.session = null;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
getSession() {
|
|
19
|
+
return this.session;
|
|
20
|
+
}
|
|
21
|
+
async ensureSession() {
|
|
22
|
+
if (!this.session) {
|
|
23
|
+
await this.initSession();
|
|
24
|
+
}
|
|
25
|
+
if (!this.session) {
|
|
26
|
+
throw new Error('KSeF session init returned no session state');
|
|
27
|
+
}
|
|
28
|
+
return this.session;
|
|
29
|
+
}
|
|
30
|
+
async fetchInvoices(opts) {
|
|
31
|
+
const session = await this.ensureSession();
|
|
32
|
+
const subjectType = opts.subjectType ?? 'Subject2';
|
|
33
|
+
const result = await this.client.fetchInvoices({
|
|
34
|
+
token: session.token,
|
|
35
|
+
dateFrom: opts.from,
|
|
36
|
+
dateTo: opts.to,
|
|
37
|
+
subjectNip: opts.nip,
|
|
38
|
+
subjectType,
|
|
39
|
+
pageSize: opts.pageSize,
|
|
40
|
+
pageOffset: opts.pageOffset,
|
|
41
|
+
});
|
|
42
|
+
return result.invoices.map((raw) => ({
|
|
43
|
+
id: crypto.randomUUID(),
|
|
44
|
+
invoiceNumber: raw.invoiceNumber,
|
|
45
|
+
sellerNIP: raw.subjectNip,
|
|
46
|
+
buyerNIP: raw.buyerNip,
|
|
47
|
+
grossAmount: raw.grossAmountGrosze ?? 0,
|
|
48
|
+
currency: 'PLN',
|
|
49
|
+
issueDate: raw.invoicingDate,
|
|
50
|
+
ksefReference: raw.ksefReferenceNumber,
|
|
51
|
+
sellerName: raw.subjectName,
|
|
52
|
+
buyerName: raw.buyerName,
|
|
53
|
+
rawXml: raw.xml,
|
|
54
|
+
createdAt: new Date().toISOString(),
|
|
55
|
+
}));
|
|
56
|
+
}
|
|
57
|
+
async sendInvoice(input) {
|
|
58
|
+
const session = await this.ensureSession();
|
|
59
|
+
const result = await this.client.sendInvoice({
|
|
60
|
+
token: session.token,
|
|
61
|
+
xml: input.xml,
|
|
62
|
+
});
|
|
63
|
+
return {
|
|
64
|
+
ksefReference: result.ksefReferenceNumber,
|
|
65
|
+
timestamp: result.timestamp,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
async getUpo(ksefReference) {
|
|
69
|
+
const session = await this.ensureSession();
|
|
70
|
+
const result = await this.client.getUpo({
|
|
71
|
+
token: session.token,
|
|
72
|
+
ksefReferenceNumber: ksefReference,
|
|
73
|
+
});
|
|
74
|
+
return {
|
|
75
|
+
ksefReference,
|
|
76
|
+
upoXml: result.xml,
|
|
77
|
+
status: result.status,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=ksef.adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ksef.adapter.js","sourceRoot":"","sources":["../../src/ksef/ksef.adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/ksef/retry.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAsBD,wBAAsB,SAAS,CAAC,CAAC,EAC/B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,IAAI,CAAC,EAAE,YAAY,GAClB,OAAO,CAAC,CAAC,CAAC,CAmBZ"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { KsefApiError, KsefTimeoutError } from '@ksefnik/shared';
|
|
2
|
+
const DEFAULT_OPTIONS = {
|
|
3
|
+
maxAttempts: 3,
|
|
4
|
+
baseDelay: 1000,
|
|
5
|
+
maxDelay: 10000,
|
|
6
|
+
};
|
|
7
|
+
function isRetryable(error) {
|
|
8
|
+
if (error instanceof KsefTimeoutError)
|
|
9
|
+
return true;
|
|
10
|
+
if (error instanceof KsefApiError) {
|
|
11
|
+
const code = error.statusCode;
|
|
12
|
+
return code === 429 || (code !== undefined && code >= 500 && code <= 503);
|
|
13
|
+
}
|
|
14
|
+
if (error instanceof TypeError && error.message.includes('fetch'))
|
|
15
|
+
return true;
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
function delay(ms) {
|
|
19
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
20
|
+
}
|
|
21
|
+
export async function withRetry(fn, opts) {
|
|
22
|
+
const { maxAttempts, baseDelay, maxDelay } = { ...DEFAULT_OPTIONS, ...opts };
|
|
23
|
+
let lastError;
|
|
24
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
25
|
+
try {
|
|
26
|
+
return await fn();
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
lastError = error;
|
|
30
|
+
if (attempt === maxAttempts || !isRetryable(error)) {
|
|
31
|
+
throw error;
|
|
32
|
+
}
|
|
33
|
+
const exponentialDelay = baseDelay * Math.pow(2, attempt - 1);
|
|
34
|
+
const jitter = Math.random() * baseDelay * 0.1;
|
|
35
|
+
const waitMs = Math.min(exponentialDelay + jitter, maxDelay);
|
|
36
|
+
await delay(waitMs);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
throw lastError;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=retry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/ksef/retry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAQhE,MAAM,eAAe,GAA2B;IAC9C,WAAW,EAAE,CAAC;IACd,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,KAAK;CAChB,CAAA;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,KAAK,YAAY,gBAAgB;QAAE,OAAO,IAAI,CAAA;IAClD,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAA;QAC7B,OAAO,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,CAAA;IAC3E,CAAC;IACD,IAAI,KAAK,YAAY,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAA;IAC9E,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AAC1D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,EAAoB,EACpB,IAAmB;IAEnB,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,eAAe,EAAE,GAAG,IAAI,EAAE,CAAA;IAE5E,IAAI,SAAkB,CAAA;IACtB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;QACxD,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAA;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,KAAK,CAAA;YACjB,IAAI,OAAO,KAAK,WAAW,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnD,MAAM,KAAK,CAAA;YACb,CAAC;YACD,MAAM,gBAAgB,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAA;YAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,SAAS,GAAG,GAAG,CAAA;YAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,GAAG,MAAM,EAAE,QAAQ,CAAC,CAAA;YAC5D,MAAM,KAAK,CAAC,MAAM,CAAC,CAAA;QACrB,CAAC;IACH,CAAC;IACD,MAAM,SAAS,CAAA;AACjB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { KsefClient, KsefClientConfig, KsefSessionState } from './types.js';
|
|
2
|
+
export interface SessionManagerOptions {
|
|
3
|
+
renewThresholdMs?: number;
|
|
4
|
+
}
|
|
5
|
+
export declare class SessionManager {
|
|
6
|
+
private readonly client;
|
|
7
|
+
private readonly config;
|
|
8
|
+
private session;
|
|
9
|
+
private readonly renewThresholdMs;
|
|
10
|
+
constructor(client: KsefClient, config: KsefClientConfig, opts?: SessionManagerOptions);
|
|
11
|
+
ensure(): Promise<KsefSessionState>;
|
|
12
|
+
close(): Promise<void>;
|
|
13
|
+
get current(): KsefSessionState | null;
|
|
14
|
+
get isActive(): boolean;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/ksef/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAEhF,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAID,qBAAa,cAAc;IAKvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IALzB,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;gBAGtB,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,gBAAgB,EACzC,IAAI,CAAC,EAAE,qBAAqB;IAKxB,MAAM,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAenC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B,IAAI,OAAO,IAAI,gBAAgB,GAAG,IAAI,CAErC;IAED,IAAI,QAAQ,IAAI,OAAO,CAGtB;CACF"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
const DEFAULT_RENEW_THRESHOLD_MS = 60_000;
|
|
2
|
+
export class SessionManager {
|
|
3
|
+
client;
|
|
4
|
+
config;
|
|
5
|
+
session = null;
|
|
6
|
+
renewThresholdMs;
|
|
7
|
+
constructor(client, config, opts) {
|
|
8
|
+
this.client = client;
|
|
9
|
+
this.config = config;
|
|
10
|
+
this.renewThresholdMs = opts?.renewThresholdMs ?? DEFAULT_RENEW_THRESHOLD_MS;
|
|
11
|
+
}
|
|
12
|
+
async ensure() {
|
|
13
|
+
if (!this.session) {
|
|
14
|
+
this.session = await this.client.initSession(this.config);
|
|
15
|
+
return this.session;
|
|
16
|
+
}
|
|
17
|
+
const timeLeft = this.session.expiresAt.getTime() - Date.now();
|
|
18
|
+
if (timeLeft < this.renewThresholdMs) {
|
|
19
|
+
await this.close();
|
|
20
|
+
this.session = await this.client.initSession(this.config);
|
|
21
|
+
}
|
|
22
|
+
return this.session;
|
|
23
|
+
}
|
|
24
|
+
async close() {
|
|
25
|
+
if (this.session) {
|
|
26
|
+
await this.client.terminateSession(this.session.token);
|
|
27
|
+
this.session = null;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
get current() {
|
|
31
|
+
return this.session;
|
|
32
|
+
}
|
|
33
|
+
get isActive() {
|
|
34
|
+
if (!this.session)
|
|
35
|
+
return false;
|
|
36
|
+
return this.session.expiresAt.getTime() > Date.now();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/ksef/session.ts"],"names":[],"mappings":"AAMA,MAAM,0BAA0B,GAAG,MAAM,CAAA;AAEzC,MAAM,OAAO,cAAc;IAKN;IACA;IALX,OAAO,GAA4B,IAAI,CAAA;IAC9B,gBAAgB,CAAQ;IAEzC,YACmB,MAAkB,EAClB,MAAwB,EACzC,IAA4B;QAFX,WAAM,GAAN,MAAM,CAAY;QAClB,WAAM,GAAN,MAAM,CAAkB;QAGzC,IAAI,CAAC,gBAAgB,GAAG,IAAI,EAAE,gBAAgB,IAAI,0BAA0B,CAAA;IAC9E,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YACzD,OAAO,IAAI,CAAC,OAAO,CAAA;QACrB,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC9D,IAAI,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACrC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;YAClB,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC3D,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;YACtD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACrB,CAAC;IACH,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED,IAAI,QAAQ;QACV,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAA;QAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACtD,CAAC;CACF"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export interface KsefSessionState {
|
|
2
|
+
token: string;
|
|
3
|
+
nip: string;
|
|
4
|
+
environment: 'production' | 'demo' | 'test';
|
|
5
|
+
expiresAt: Date;
|
|
6
|
+
referenceNumber: string;
|
|
7
|
+
}
|
|
8
|
+
export interface KsefClientConfig {
|
|
9
|
+
nip: string;
|
|
10
|
+
environment: 'production' | 'demo' | 'test';
|
|
11
|
+
token: string;
|
|
12
|
+
}
|
|
13
|
+
export type KsefSubjectType = 'Subject1' | 'Subject2' | 'Subject3';
|
|
14
|
+
export interface KsefRawInvoice {
|
|
15
|
+
ksefReferenceNumber: string;
|
|
16
|
+
invoiceNumber: string;
|
|
17
|
+
subjectNip: string;
|
|
18
|
+
subjectName?: string;
|
|
19
|
+
invoicingDate: string;
|
|
20
|
+
xml: string;
|
|
21
|
+
grossAmountGrosze?: number;
|
|
22
|
+
currency?: string;
|
|
23
|
+
buyerNip?: string;
|
|
24
|
+
buyerName?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface KsefClient {
|
|
27
|
+
initSession(config: KsefClientConfig): Promise<KsefSessionState>;
|
|
28
|
+
terminateSession(token: string): Promise<void>;
|
|
29
|
+
fetchInvoices(params: {
|
|
30
|
+
token: string;
|
|
31
|
+
dateFrom: string;
|
|
32
|
+
dateTo: string;
|
|
33
|
+
subjectNip?: string;
|
|
34
|
+
subjectType?: KsefSubjectType;
|
|
35
|
+
pageSize?: number;
|
|
36
|
+
pageOffset?: number;
|
|
37
|
+
}): Promise<{
|
|
38
|
+
invoices: KsefRawInvoice[];
|
|
39
|
+
total: number;
|
|
40
|
+
}>;
|
|
41
|
+
sendInvoice(params: {
|
|
42
|
+
token: string;
|
|
43
|
+
xml: string;
|
|
44
|
+
}): Promise<{
|
|
45
|
+
ksefReferenceNumber: string;
|
|
46
|
+
timestamp: string;
|
|
47
|
+
}>;
|
|
48
|
+
getUpo(params: {
|
|
49
|
+
token: string;
|
|
50
|
+
ksefReferenceNumber: string;
|
|
51
|
+
}): Promise<{
|
|
52
|
+
xml: string;
|
|
53
|
+
status: 'confirmed' | 'pending' | 'rejected';
|
|
54
|
+
}>;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ksef/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,EAAE,YAAY,GAAG,MAAM,GAAG,MAAM,CAAA;IAC3C,SAAS,EAAE,IAAI,CAAA;IACf,eAAe,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,EAAE,YAAY,GAAG,MAAM,GAAG,MAAM,CAAA;IAC3C,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,CAAA;AAElE,MAAM,WAAW,cAAc;IAC7B,mBAAmB,EAAE,MAAM,CAAA;IAC3B,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAChE,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9C,aAAa,CAAC,MAAM,EAAE;QACpB,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,EAAE,MAAM,CAAA;QAChB,MAAM,EAAE,MAAM,CAAA;QACd,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,WAAW,CAAC,EAAE,eAAe,CAAA;QAC7B,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,UAAU,CAAC,EAAE,MAAM,CAAA;KACpB,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC1D,WAAW,CAAC,MAAM,EAAE;QAClB,KAAK,EAAE,MAAM,CAAA;QACb,GAAG,EAAE,MAAM,CAAA;KACZ,GAAG,OAAO,CAAC;QAAE,mBAAmB,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC/D,MAAM,CAAC,MAAM,EAAE;QACb,KAAK,EAAE,MAAM,CAAA;QACb,mBAAmB,EAAE,MAAM,CAAA;KAC5B,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,UAAU,CAAA;KAAE,CAAC,CAAA;CAC3E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/ksef/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { KsefnikConfig, KsefAdapter, Invoice, BankTransaction, ReconciliationReport, FetchInvoicesOpts, SendInvoiceInput, SendInvoiceResult, UpoResult, KsefPlugin, Storage } from '@ksefnik/shared';
|
|
2
|
+
import { PluginRegistry } from './plugins/registry.js';
|
|
3
|
+
import type { ImportBankStatementOpts } from './bank/index.js';
|
|
4
|
+
import type { ValidationReport } from './validation/engine.js';
|
|
5
|
+
export interface CreateKsefnikOpts {
|
|
6
|
+
config: KsefnikConfig;
|
|
7
|
+
adapter?: KsefAdapter;
|
|
8
|
+
storage?: Storage;
|
|
9
|
+
}
|
|
10
|
+
declare class InvoiceNamespace {
|
|
11
|
+
private adapter;
|
|
12
|
+
private storage;
|
|
13
|
+
constructor(adapter: KsefAdapter | undefined, storage: Storage);
|
|
14
|
+
fetch(opts: FetchInvoicesOpts): Promise<Invoice[]>;
|
|
15
|
+
send(input: SendInvoiceInput): Promise<SendInvoiceResult>;
|
|
16
|
+
getUpo(ksefReference: string): Promise<UpoResult>;
|
|
17
|
+
list(): Promise<Invoice[]>;
|
|
18
|
+
}
|
|
19
|
+
declare class BankNamespace {
|
|
20
|
+
private storage;
|
|
21
|
+
constructor(storage: Storage);
|
|
22
|
+
importFromString(content: string, opts?: ImportBankStatementOpts): Promise<BankTransaction[]>;
|
|
23
|
+
list(): Promise<BankTransaction[]>;
|
|
24
|
+
}
|
|
25
|
+
declare class ReconciliationNamespace {
|
|
26
|
+
private registry;
|
|
27
|
+
constructor(registry: PluginRegistry);
|
|
28
|
+
run(invoices: Invoice[], transactions: BankTransaction[]): Promise<ReconciliationReport>;
|
|
29
|
+
}
|
|
30
|
+
declare class ValidationNamespace {
|
|
31
|
+
validate(invoices: Invoice[]): ValidationReport[];
|
|
32
|
+
}
|
|
33
|
+
declare class PluginsNamespace {
|
|
34
|
+
private registry;
|
|
35
|
+
constructor(registry: PluginRegistry);
|
|
36
|
+
register(plugin: KsefPlugin): void;
|
|
37
|
+
load(name: string): Promise<KsefPlugin | null>;
|
|
38
|
+
list(): KsefPlugin[];
|
|
39
|
+
}
|
|
40
|
+
export declare class Ksefnik {
|
|
41
|
+
readonly invoices: InvoiceNamespace;
|
|
42
|
+
readonly bank: BankNamespace;
|
|
43
|
+
readonly reconciliation: ReconciliationNamespace;
|
|
44
|
+
readonly validation: ValidationNamespace;
|
|
45
|
+
readonly plugins: PluginsNamespace;
|
|
46
|
+
readonly storage: Storage;
|
|
47
|
+
constructor(opts: CreateKsefnikOpts);
|
|
48
|
+
}
|
|
49
|
+
export declare function createKsefnik(opts: CreateKsefnikOpts): Ksefnik;
|
|
50
|
+
export {};
|
|
51
|
+
//# sourceMappingURL=ksefnik.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ksefnik.d.ts","sourceRoot":"","sources":["../src/ksefnik.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EACX,OAAO,EACP,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,UAAU,EACV,OAAO,EACR,MAAM,iBAAiB,CAAA;AAMxB,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAEtD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAE9D,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,aAAa,CAAA;IACrB,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,cAAM,gBAAgB;IAElB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,OAAO;gBADP,OAAO,EAAE,WAAW,GAAG,SAAS,EAChC,OAAO,EAAE,OAAO;IAGpB,KAAK,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAOlD,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAKzD,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAKjD,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;CAGjC;AAED,cAAM,aAAa;IACL,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,OAAO;IAE9B,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAM7F,IAAI,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;CAGzC;AAED,cAAM,uBAAuB;IACf,OAAO,CAAC,QAAQ;gBAAR,QAAQ,EAAE,cAAc;IAEtC,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC;CAI/F;AAED,cAAM,mBAAmB;IACvB,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,gBAAgB,EAAE;CAGlD;AAED,cAAM,gBAAgB;IACR,OAAO,CAAC,QAAQ;gBAAR,QAAQ,EAAE,cAAc;IAE5C,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAI5B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAMpD,IAAI,IAAI,UAAU,EAAE;CAGrB;AAED,qBAAa,OAAO;IAClB,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAA;IACnC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;IAC5B,QAAQ,CAAC,cAAc,EAAE,uBAAuB,CAAA;IAChD,QAAQ,CAAC,UAAU,EAAE,mBAAmB,CAAA;IACxC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAA;IAClC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;gBAEb,IAAI,EAAE,iBAAiB;CAWpC;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAE9D"}
|
package/dist/ksefnik.js
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { InMemoryStorage } from './storage/index.js';
|
|
2
|
+
import { importBankStatementFromString } from './bank/index.js';
|
|
3
|
+
import { runPipeline } from './matching/pipeline.js';
|
|
4
|
+
import { validateInvoices } from './validation/engine.js';
|
|
5
|
+
import { allRules } from './validation/rules/index.js';
|
|
6
|
+
import { PluginRegistry } from './plugins/registry.js';
|
|
7
|
+
import { loadPlugin } from './plugins/loader.js';
|
|
8
|
+
class InvoiceNamespace {
|
|
9
|
+
adapter;
|
|
10
|
+
storage;
|
|
11
|
+
constructor(adapter, storage) {
|
|
12
|
+
this.adapter = adapter;
|
|
13
|
+
this.storage = storage;
|
|
14
|
+
}
|
|
15
|
+
async fetch(opts) {
|
|
16
|
+
if (!this.adapter)
|
|
17
|
+
throw new Error('No KSeF adapter configured');
|
|
18
|
+
const invoices = await this.adapter.fetchInvoices(opts);
|
|
19
|
+
await this.storage.saveInvoices(invoices);
|
|
20
|
+
return invoices;
|
|
21
|
+
}
|
|
22
|
+
async send(input) {
|
|
23
|
+
if (!this.adapter)
|
|
24
|
+
throw new Error('No KSeF adapter configured');
|
|
25
|
+
return this.adapter.sendInvoice(input);
|
|
26
|
+
}
|
|
27
|
+
async getUpo(ksefReference) {
|
|
28
|
+
if (!this.adapter)
|
|
29
|
+
throw new Error('No KSeF adapter configured');
|
|
30
|
+
return this.adapter.getUpo(ksefReference);
|
|
31
|
+
}
|
|
32
|
+
async list() {
|
|
33
|
+
return this.storage.getInvoices();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
class BankNamespace {
|
|
37
|
+
storage;
|
|
38
|
+
constructor(storage) {
|
|
39
|
+
this.storage = storage;
|
|
40
|
+
}
|
|
41
|
+
async importFromString(content, opts) {
|
|
42
|
+
const transactions = await importBankStatementFromString(content, opts);
|
|
43
|
+
await this.storage.saveTransactions(transactions);
|
|
44
|
+
return transactions;
|
|
45
|
+
}
|
|
46
|
+
async list() {
|
|
47
|
+
return this.storage.getTransactions();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
class ReconciliationNamespace {
|
|
51
|
+
registry;
|
|
52
|
+
constructor(registry) {
|
|
53
|
+
this.registry = registry;
|
|
54
|
+
}
|
|
55
|
+
async run(invoices, transactions) {
|
|
56
|
+
const passes = this.registry.getPasses();
|
|
57
|
+
return runPipeline(invoices, transactions, passes);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
class ValidationNamespace {
|
|
61
|
+
validate(invoices) {
|
|
62
|
+
return validateInvoices(invoices, allRules);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
class PluginsNamespace {
|
|
66
|
+
registry;
|
|
67
|
+
constructor(registry) {
|
|
68
|
+
this.registry = registry;
|
|
69
|
+
}
|
|
70
|
+
register(plugin) {
|
|
71
|
+
this.registry.register(plugin);
|
|
72
|
+
}
|
|
73
|
+
async load(name) {
|
|
74
|
+
const plugin = await loadPlugin(name);
|
|
75
|
+
if (plugin)
|
|
76
|
+
this.registry.register(plugin);
|
|
77
|
+
return plugin;
|
|
78
|
+
}
|
|
79
|
+
list() {
|
|
80
|
+
return this.registry.list();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
export class Ksefnik {
|
|
84
|
+
invoices;
|
|
85
|
+
bank;
|
|
86
|
+
reconciliation;
|
|
87
|
+
validation;
|
|
88
|
+
plugins;
|
|
89
|
+
storage;
|
|
90
|
+
constructor(opts) {
|
|
91
|
+
const storage = opts.storage ?? new InMemoryStorage();
|
|
92
|
+
const registry = new PluginRegistry();
|
|
93
|
+
this.storage = storage;
|
|
94
|
+
this.invoices = new InvoiceNamespace(opts.adapter, storage);
|
|
95
|
+
this.bank = new BankNamespace(storage);
|
|
96
|
+
this.reconciliation = new ReconciliationNamespace(registry);
|
|
97
|
+
this.validation = new ValidationNamespace();
|
|
98
|
+
this.plugins = new PluginsNamespace(registry);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
export function createKsefnik(opts) {
|
|
102
|
+
return new Ksefnik(opts);
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=ksefnik.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ksefnik.js","sourceRoot":"","sources":["../src/ksefnik.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Invoice, BankTransaction, Match, MatchingContext } from '@ksefnik/shared';
|
|
2
|
+
export declare function createMatchingContext(invoices: Invoice[], transactions: BankTransaction[], alreadyMatched?: Match[]): MatchingContext;
|
|
3
|
+
export declare function getUnmatchedInvoices(invoices: Invoice[], matched: Match[]): Invoice[];
|
|
4
|
+
export declare function getUnmatchedTransactions(transactions: BankTransaction[], matched: Match[]): BankTransaction[];
|
|
5
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/matching/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEvF,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,OAAO,EAAE,EACnB,YAAY,EAAE,eAAe,EAAE,EAC/B,cAAc,GAAE,KAAK,EAAO,GAC3B,eAAe,CAEjB;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,CAGrF;AAED,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,eAAe,EAAE,EAC/B,OAAO,EAAE,KAAK,EAAE,GACf,eAAe,EAAE,CASnB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export function createMatchingContext(invoices, transactions, alreadyMatched = []) {
|
|
2
|
+
return { invoices, transactions, alreadyMatched };
|
|
3
|
+
}
|
|
4
|
+
export function getUnmatchedInvoices(invoices, matched) {
|
|
5
|
+
const matchedIds = new Set(matched.map((m) => m.invoiceId));
|
|
6
|
+
return invoices.filter((i) => !matchedIds.has(i.id));
|
|
7
|
+
}
|
|
8
|
+
export function getUnmatchedTransactions(transactions, matched) {
|
|
9
|
+
const matchedIds = new Set();
|
|
10
|
+
for (const m of matched) {
|
|
11
|
+
matchedIds.add(m.transactionId);
|
|
12
|
+
if (m.transactionIds) {
|
|
13
|
+
for (const id of m.transactionIds)
|
|
14
|
+
matchedIds.add(id);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return transactions.filter((t) => !matchedIds.has(t.id));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/matching/context.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,qBAAqB,CACnC,QAAmB,EACnB,YAA+B,EAC/B,iBAA0B,EAAE;IAE5B,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,CAAA;AACnD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAAmB,EAAE,OAAgB;IACxE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;IAC3D,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACtD,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,YAA+B,EAC/B,OAAgB;IAEhB,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAA;IACpC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,CAAA;QAC/B,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;YACrB,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,cAAc;gBAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACvD,CAAC;IACH,CAAC;IACD,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAC1D,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { runPipeline } from './pipeline.js';
|
|
2
|
+
export { clampConfidence, dateProximityBonus, amountMatchBonus, agePenalty } from './scoring.js';
|
|
3
|
+
export { createMatchingContext, getUnmatchedInvoices, getUnmatchedTransactions } from './context.js';
|
|
4
|
+
export { defaultPasses } from './passes/index.js';
|
|
5
|
+
export * from './passes/index.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/matching/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAChG,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAA;AACpG,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,cAAc,mBAAmB,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { runPipeline } from './pipeline.js';
|
|
2
|
+
export { clampConfidence, dateProximityBonus, amountMatchBonus, agePenalty } from './scoring.js';
|
|
3
|
+
export { createMatchingContext, getUnmatchedInvoices, getUnmatchedTransactions } from './context.js';
|
|
4
|
+
export { defaultPasses } from './passes/index.js';
|
|
5
|
+
export * from './passes/index.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/matching/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAChG,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAA;AACpG,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,cAAc,mBAAmB,CAAA"}
|