ofpos-shared-core 1.1.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.
Files changed (143) hide show
  1. package/README.md +37 -0
  2. package/dist/AdapterRegistry.d.ts +83 -0
  3. package/dist/DomainServices.d.ts +151 -0
  4. package/dist/IntegrationServices.d.ts +75 -0
  5. package/dist/PosCore.d.ts +216 -0
  6. package/dist/contracts/contractVersioning.d.ts +6 -0
  7. package/dist/contracts/crossDomainPrimitives.d.ts +5 -0
  8. package/dist/contracts/responseEnvelope.d.ts +6 -0
  9. package/dist/contracts/syncProtocol.d.ts +8 -0
  10. package/dist/data/DbAdapter.d.ts +7 -0
  11. package/dist/data/applyPendingMigrations.d.ts +18 -0
  12. package/dist/data/inMemoryDbAdapter.d.ts +65 -0
  13. package/dist/data/migrations.d.ts +12 -0
  14. package/dist/data/relations.d.ts +3 -0
  15. package/dist/data/schema.d.ts +9 -0
  16. package/dist/data/seed.d.ts +370 -0
  17. package/dist/index.browser.mjs +18 -0
  18. package/dist/index.browser.mjs.LEGAL.txt +46 -0
  19. package/dist/index.cjs.js +18 -0
  20. package/dist/index.cjs.js.LEGAL.txt +46 -0
  21. package/dist/index.d.ts +116 -0
  22. package/dist/index.esm.js +18 -0
  23. package/dist/index.esm.js.LEGAL.txt +46 -0
  24. package/dist/index.umd.js +18 -0
  25. package/dist/index.umd.js.LEGAL.txt +46 -0
  26. package/dist/integration/NotificationAdapter.d.ts +69 -0
  27. package/dist/integration/activityLogger.d.ts +44 -0
  28. package/dist/integration/activitySink.d.ts +8 -0
  29. package/dist/integration/apiService.d.ts +255 -0
  30. package/dist/integration/authorizationService.d.ts +225 -0
  31. package/dist/integration/backupScheduler.d.ts +75 -0
  32. package/dist/integration/checksum.d.ts +9 -0
  33. package/dist/integration/checksumAdapter.d.ts +8 -0
  34. package/dist/integration/configService.d.ts +431 -0
  35. package/dist/integration/defaultChecksumAdapter.d.ts +6 -0
  36. package/dist/integration/defaultEncryptionAdapter.d.ts +9 -0
  37. package/dist/integration/encryption.d.ts +95 -0
  38. package/dist/integration/encryptionAdapter.d.ts +8 -0
  39. package/dist/integration/httpAdapter.d.ts +9 -0
  40. package/dist/integration/loggerAdapter.d.ts +45 -0
  41. package/dist/integration/notificationService.d.ts +45 -0
  42. package/dist/integration/ofauthBridge.d.ts +29 -0
  43. package/dist/integration/ofauthCoreBridge.d.ts +19 -0
  44. package/dist/integration/platformAdapter.d.ts +8 -0
  45. package/dist/integration/roleAdapter.d.ts +61 -0
  46. package/dist/integration/socket.d.ts +60 -0
  47. package/dist/integration/socketAdapter.d.ts +8 -0
  48. package/dist/integration/userService.d.ts +126 -0
  49. package/dist/models/Bom.d.ts +17 -0
  50. package/dist/models/Category.d.ts +13 -0
  51. package/dist/models/Customer.d.ts +17 -0
  52. package/dist/models/CustomerGroup.d.ts +11 -0
  53. package/dist/models/Expense.d.ts +19 -0
  54. package/dist/models/FinancialSetting.d.ts +14 -0
  55. package/dist/models/History.d.ts +18 -0
  56. package/dist/models/InventoryLog.d.ts +23 -0
  57. package/dist/models/InventoryLot.d.ts +34 -0
  58. package/dist/models/KitchenTicket.d.ts +13 -0
  59. package/dist/models/KitchenTicketItem.d.ts +12 -0
  60. package/dist/models/LoyaltyAccount.d.ts +12 -0
  61. package/dist/models/LoyaltyLedger.d.ts +17 -0
  62. package/dist/models/Order.d.ts +45 -0
  63. package/dist/models/OrderItem.d.ts +19 -0
  64. package/dist/models/Payable.d.ts +23 -0
  65. package/dist/models/PriceHistory.d.ts +17 -0
  66. package/dist/models/PriceTier.d.ts +19 -0
  67. package/dist/models/Product.d.ts +25 -0
  68. package/dist/models/Promotion.d.ts +25 -0
  69. package/dist/models/Purchase.d.ts +29 -0
  70. package/dist/models/PurchaseItem.d.ts +21 -0
  71. package/dist/models/PurchaseOrder.d.ts +23 -0
  72. package/dist/models/PurchaseOrderItem.d.ts +19 -0
  73. package/dist/models/Receivable.d.ts +23 -0
  74. package/dist/models/ReportSchedule.d.ts +21 -0
  75. package/dist/models/Return.d.ts +57 -0
  76. package/dist/models/ReturnItem.d.ts +31 -0
  77. package/dist/models/Role.d.ts +13 -0
  78. package/dist/models/Sale.d.ts +43 -0
  79. package/dist/models/SaleItem.d.ts +19 -0
  80. package/dist/models/Settlement.d.ts +23 -0
  81. package/dist/models/Shift.d.ts +41 -0
  82. package/dist/models/StockAdjustment.d.ts +21 -0
  83. package/dist/models/StockOpname.d.ts +22 -0
  84. package/dist/models/StockOpnameItem.d.ts +27 -0
  85. package/dist/models/Supplier.d.ts +19 -0
  86. package/dist/models/TaxRate.d.ts +13 -0
  87. package/dist/models/Transaction.d.ts +32 -0
  88. package/dist/models/Uom.d.ts +15 -0
  89. package/dist/models/User.d.ts +21 -0
  90. package/dist/services/bomService.d.ts +71 -0
  91. package/dist/services/cartService.d.ts +65 -0
  92. package/dist/services/categoryService.d.ts +54 -0
  93. package/dist/services/customerGroupService.d.ts +47 -0
  94. package/dist/services/customerService.d.ts +133 -0
  95. package/dist/services/documentNumberPolicy.d.ts +15 -0
  96. package/dist/services/expenseService.d.ts +47 -0
  97. package/dist/services/exportAdapter.d.ts +48 -0
  98. package/dist/services/exportService.d.ts +263 -0
  99. package/dist/services/financialSettingService.d.ts +47 -0
  100. package/dist/services/historyService.d.ts +60 -0
  101. package/dist/services/inventoryLogService.d.ts +47 -0
  102. package/dist/services/inventoryService.d.ts +43 -0
  103. package/dist/services/orderItemService.d.ts +47 -0
  104. package/dist/services/orderService.d.ts +161 -0
  105. package/dist/services/payableService.d.ts +51 -0
  106. package/dist/services/priceHistoryService.d.ts +61 -0
  107. package/dist/services/priceTierService.d.ts +47 -0
  108. package/dist/services/pricingService.d.ts +192 -0
  109. package/dist/services/productService.d.ts +59 -0
  110. package/dist/services/promotionService.d.ts +47 -0
  111. package/dist/services/purchaseItemService.d.ts +47 -0
  112. package/dist/services/purchaseOrderItemService.d.ts +47 -0
  113. package/dist/services/purchaseOrderService.d.ts +47 -0
  114. package/dist/services/purchaseService.d.ts +130 -0
  115. package/dist/services/receivableService.d.ts +47 -0
  116. package/dist/services/reportScheduleService.d.ts +47 -0
  117. package/dist/services/reportingService.d.ts +251 -0
  118. package/dist/services/returnItemService.d.ts +47 -0
  119. package/dist/services/returnService.d.ts +123 -0
  120. package/dist/services/roleService.d.ts +47 -0
  121. package/dist/services/saleItemService.d.ts +47 -0
  122. package/dist/services/saleService.d.ts +154 -0
  123. package/dist/services/settlementService.d.ts +68 -0
  124. package/dist/services/shiftService.d.ts +92 -0
  125. package/dist/services/stockAdjustmentService.d.ts +47 -0
  126. package/dist/services/stockOpnameItemService.d.ts +47 -0
  127. package/dist/services/stockOpnameService.d.ts +51 -0
  128. package/dist/services/stockTransferService.d.ts +67 -0
  129. package/dist/services/supplierService.d.ts +51 -0
  130. package/dist/services/taxRateService.d.ts +47 -0
  131. package/dist/services/taxService.d.ts +63 -0
  132. package/dist/services/transactionService.d.ts +109 -0
  133. package/dist/services/uiProductService.d.ts +102 -0
  134. package/dist/services/uiTransactionService.d.ts +68 -0
  135. package/dist/services/uomService.d.ts +53 -0
  136. package/dist/services/userService.d.ts +47 -0
  137. package/dist/stores/cartStore.d.ts +109 -0
  138. package/dist/stores/eventBus.d.ts +55 -0
  139. package/dist/stores/sessionStore.d.ts +108 -0
  140. package/dist/stores/storageAdapter.d.ts +44 -0
  141. package/dist/stores/syncService.d.ts +90 -0
  142. package/dist/stores/syncStore.d.ts +163 -0
  143. package/package.json +82 -0
@@ -0,0 +1,75 @@
1
+ import { PosCore } from "../PosCore";
2
+ /**
3
+ * Identifier untuk task backup berkala.
4
+ */
5
+ export declare const TASK_ID = "com.offlinepos.backup";
6
+ /**
7
+ * Abstraksi timer untuk menjadwalkan callback periodik.
8
+ */
9
+ export interface Timer {
10
+ /**
11
+ * Menjadwalkan eksekusi handler setiap interval ms.
12
+ *
13
+ * @param handler Fungsi yang akan dijalankan.
14
+ * @param interval Jeda waktu dalam milidetik.
15
+ * @returns Objek dengan method clear untuk membatalkan jadwal.
16
+ */
17
+ setInterval(handler: () => void, interval: number): {
18
+ clear(): void;
19
+ };
20
+ }
21
+ /**
22
+ * Interface untuk scheduler backup berkala.
23
+ */
24
+ export interface IBackupScheduler {
25
+ /**
26
+ * Memulai scheduler dengan interval dalam milidetik.
27
+ * Jika sudah berjalan, memanggil ulang adalah no-op.
28
+ *
29
+ * @param intervalMs Interval backup dalam ms.
30
+ */
31
+ start(intervalMs: number, restoreDrillIntervalMs?: number): void;
32
+ /**
33
+ * Menghentikan scheduler jika sedang berjalan.
34
+ */
35
+ stop(): void;
36
+ }
37
+ /**
38
+ * Scheduler untuk melakukan backup data lokal secara berkala.
39
+ */
40
+ export declare class BackupScheduler {
41
+ private context;
42
+ private timer;
43
+ private backupTimerInstance;
44
+ private restoreDrillTimerInstance;
45
+ private pendingBackupPayload;
46
+ private apiService?;
47
+ private lastBackupAt;
48
+ private lastRestoreDrillAt;
49
+ private onlineHandler?;
50
+ /**
51
+ * Membuat instance BackupScheduler.
52
+ *
53
+ * @param context Instansi PosCore yang menyediakan registry dan integrationServices.
54
+ * @param timer Abstraksi timer untuk scheduling.
55
+ */
56
+ constructor(context: PosCore, timer: Timer);
57
+ /**
58
+ * Memulai task backup periodik dengan interval yang ditentukan.
59
+ *
60
+ * @param intervalMs Interval antara backup dalam milidetik.
61
+ */
62
+ start(intervalMs: number, restoreDrillIntervalMs?: number): void;
63
+ /**
64
+ * Menghentikan task backup jika sedang berjalan.
65
+ */
66
+ stop(): void;
67
+ getState(): {
68
+ pendingBackup: boolean;
69
+ lastBackupAt: number | null;
70
+ lastRestoreDrillAt: number | null;
71
+ started: boolean;
72
+ };
73
+ runBackupTask(): Promise<void>;
74
+ runRestoreDrill(): Promise<void>;
75
+ }
@@ -0,0 +1,9 @@
1
+ import { PosCore } from '../PosCore';
2
+ /**
3
+ * Menghitung HMAC-SHA256 checksum untuk payload string menggunakan paymentSigningKey.
4
+ *
5
+ * @param data Payload string yang akan dihitung checksum-nya.
6
+ * @param context Instansi PosCore yang menyediakan konfigurasi paymentSigningKey.
7
+ * @returns Checksum dalam format hex; mengembalikan string kosong jika key tidak tersedia.
8
+ */
9
+ export declare const computeChecksum: (data: string, context: PosCore) => string;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Bridge file for RFC extraction phase.
3
+ *
4
+ * Source of truth for generic checksum contract is `ofcore`.
5
+ * Shared-core keeps this path for backward import compatibility.
6
+ */
7
+ export { NoopChecksumAdapter } from 'ofcore';
8
+ export type { ChecksumAdapter, ChecksumAlgorithm, ChecksumInput } from 'ofcore';
@@ -0,0 +1,431 @@
1
+ import { PosCore } from '../PosCore';
2
+ /**
3
+ * Bentuk object yang disimpan/diambil ke/dari storage.
4
+ */
5
+ export interface StoredConfig {
6
+ lowStockThreshold: number | null;
7
+ paymentSigningKey: string | null;
8
+ apiUrl: string | null;
9
+ branchId: string | null;
10
+ demoMode: boolean | null;
11
+ deploymentMode: 'saas' | 'standalone' | null;
12
+ requireActiveShiftForCash: boolean | null;
13
+ maxCashAdjustmentAmount: number | null;
14
+ requireShiftCloseApprovalOnDifference: boolean | null;
15
+ shiftCloseDifferenceApprovalThreshold: number | null;
16
+ requireReasonForReturnOperations: boolean | null;
17
+ requireApprovalForReturnRefund: boolean | null;
18
+ requireApprovalForReturnCancel: boolean | null;
19
+ requireLotExpiryForPurchaseReceiving: boolean | null;
20
+ lotConsumptionPolicy: 'FEFO' | 'FIFO' | null;
21
+ enableCustomerCreditPolicy: boolean | null;
22
+ customerCreditMaxOutstandingAmount: number | null;
23
+ customerCreditBlockOnOverdue: boolean | null;
24
+ customerCreditOverdueGraceDays: number | null;
25
+ customerCreditEscalationThresholdDays: number | null;
26
+ enableReturnFraudGuard: boolean | null;
27
+ returnFraudWindowMinutes: number | null;
28
+ returnFraudMaxEvents: number | null;
29
+ returnFraudAction: 'require_approval' | 'block' | null;
30
+ returnApprovalBypassRoles: string[] | null;
31
+ returnApprovalApproverRoles: string[] | null;
32
+ allowPromotionStacking: boolean | null;
33
+ promotionSelectionStrategy: 'best_discount' | 'first_valid' | null;
34
+ promotionStackingOrder: 'input_order' | 'percent_then_fixed' | 'fixed_then_percent' | null;
35
+ pricingRoundingIncrement: number | null;
36
+ pricingRoundingScope: 'total' | 'line' | null;
37
+ enableSequentialDocumentNumbers: boolean | null;
38
+ syncProtocolVersion: number | null;
39
+ syncCompatibleServerVersions: number[] | null;
40
+ enforceSyncProtocolHandshake: boolean | null;
41
+ onlineAuthMaxFailedAttempts: number | null;
42
+ onlineAuthLockoutSeconds: number | null;
43
+ drRpoTargetMinutes: number | null;
44
+ drRtoTargetMinutes: number | null;
45
+ backupIntervalMinutes: number | null;
46
+ backupRestoreDrillIntervalHours: number | null;
47
+ opsAlertSyncFailureRateThresholdPercent: number | null;
48
+ opsAlertQueueLatencyThresholdMs: number | null;
49
+ opsAlertDeadLetterCountThreshold: number | null;
50
+ opsAlertEscalationCooldownMinutes: number | null;
51
+ auditLogRetentionDays: number | null;
52
+ auditLogArchiveBeforePurge: boolean | null;
53
+ auditLogPurgeBatchSize: number | null;
54
+ sessionIdleTimeoutMinutes: number | null;
55
+ sessionReauthTimeoutMinutes: number | null;
56
+ apiTimeoutMs: number | null;
57
+ syncIntervalMs: number | null;
58
+ syncMaxRetries: number | null;
59
+ syncBackoffDelayMs: number | null;
60
+ syncDebounceMs: number | null;
61
+ reportingTopSellingLimit: number | null;
62
+ reportingLowStockLimit: number | null;
63
+ apiBackupListLimit: number | null;
64
+ encryptionKey: string | null;
65
+ encryptionPassphrase: string | null;
66
+ }
67
+ /**
68
+ * Layanan konfigurasi aplikasi.
69
+ */
70
+ export interface IConfigService {
71
+ /**
72
+ * URL dasar API. Selalu non-null.
73
+ */
74
+ readonly apiUrl: string;
75
+ /**
76
+ * Batas stok rendah. Selalu non-null.
77
+ */
78
+ readonly lowStockThreshold: number;
79
+ /**
80
+ * Kunci signing pembayaran. Selalu non-null.
81
+ */
82
+ readonly paymentSigningKey: string;
83
+ /**
84
+ * Mode demo: true jika demo mode.
85
+ */
86
+ readonly demoMode: boolean;
87
+ /**
88
+ * Identifier cabang. Bisa null.
89
+ */
90
+ readonly branchId: string | null;
91
+ /**
92
+ * Mode deployment host app.
93
+ */
94
+ readonly deploymentMode: 'saas' | 'standalone';
95
+ readonly requireActiveShiftForCash: boolean;
96
+ readonly maxCashAdjustmentAmount: number | null;
97
+ readonly requireShiftCloseApprovalOnDifference: boolean;
98
+ readonly shiftCloseDifferenceApprovalThreshold: number | null;
99
+ readonly requireReasonForReturnOperations: boolean;
100
+ readonly requireApprovalForReturnRefund: boolean;
101
+ readonly requireApprovalForReturnCancel: boolean;
102
+ readonly requireLotExpiryForPurchaseReceiving: boolean;
103
+ readonly lotConsumptionPolicy: 'FEFO' | 'FIFO';
104
+ readonly enableCustomerCreditPolicy: boolean;
105
+ readonly customerCreditMaxOutstandingAmount: number | null;
106
+ readonly customerCreditBlockOnOverdue: boolean;
107
+ readonly customerCreditOverdueGraceDays: number;
108
+ readonly customerCreditEscalationThresholdDays: number;
109
+ readonly enableReturnFraudGuard: boolean;
110
+ readonly returnFraudWindowMinutes: number;
111
+ readonly returnFraudMaxEvents: number;
112
+ readonly returnFraudAction: 'require_approval' | 'block';
113
+ readonly returnApprovalBypassRoles: string[] | null;
114
+ readonly returnApprovalApproverRoles: string[] | null;
115
+ readonly allowPromotionStacking: boolean;
116
+ readonly promotionSelectionStrategy: 'best_discount' | 'first_valid';
117
+ readonly promotionStackingOrder: 'input_order' | 'percent_then_fixed' | 'fixed_then_percent';
118
+ readonly pricingRoundingIncrement: number | null;
119
+ readonly pricingRoundingScope: 'total' | 'line';
120
+ readonly enableSequentialDocumentNumbers: boolean;
121
+ readonly syncProtocolVersion: number;
122
+ readonly syncCompatibleServerVersions: number[];
123
+ readonly enforceSyncProtocolHandshake: boolean;
124
+ readonly onlineAuthMaxFailedAttempts: number;
125
+ readonly onlineAuthLockoutSeconds: number;
126
+ readonly drRpoTargetMinutes: number;
127
+ readonly drRtoTargetMinutes: number;
128
+ readonly backupIntervalMinutes: number;
129
+ readonly backupRestoreDrillIntervalHours: number;
130
+ readonly opsAlertSyncFailureRateThresholdPercent: number;
131
+ readonly opsAlertQueueLatencyThresholdMs: number;
132
+ readonly opsAlertDeadLetterCountThreshold: number;
133
+ readonly opsAlertEscalationCooldownMinutes: number;
134
+ readonly auditLogRetentionDays: number;
135
+ readonly auditLogArchiveBeforePurge: boolean;
136
+ readonly auditLogPurgeBatchSize: number;
137
+ readonly sessionIdleTimeoutMinutes: number;
138
+ readonly sessionReauthTimeoutMinutes: number;
139
+ readonly apiTimeoutMs: number;
140
+ readonly syncIntervalMs: number;
141
+ readonly syncMaxRetries: number;
142
+ readonly syncBackoffDelayMs: number;
143
+ readonly syncDebounceMs: number;
144
+ readonly reportingTopSellingLimit: number;
145
+ readonly reportingLowStockLimit: number;
146
+ readonly apiBackupListLimit: number;
147
+ /**
148
+ * Kunci enkripsi data.
149
+ */
150
+ readonly encryptionKey: string;
151
+ /**
152
+ * Passphrase untuk master key enkripsi.
153
+ */
154
+ readonly encryptionPassphrase: string;
155
+ /**
156
+ * Override konfigurasi dan simpan ke storage.
157
+ * @param config Partial config yang ingin diubah
158
+ * @returns Promise resolving to objek config lengkap yang tersimpan.
159
+ */
160
+ setConfig(config: Partial<Omit<StoredConfig, never>>): Promise<StoredConfig>;
161
+ init?(): Promise<void>;
162
+ }
163
+ /**
164
+ * Implementasi layanan konfigurasi aplikasi.
165
+ */
166
+ export declare class ConfigService implements IConfigService {
167
+ private context;
168
+ private _lowStockThreshold;
169
+ private _paymentSigningKey;
170
+ private _apiUrl;
171
+ private _branchId;
172
+ private _demoMode;
173
+ private _deploymentMode;
174
+ private _requireActiveShiftForCash;
175
+ private _maxCashAdjustmentAmount;
176
+ private _requireShiftCloseApprovalOnDifference;
177
+ private _shiftCloseDifferenceApprovalThreshold;
178
+ private _requireReasonForReturnOperations;
179
+ private _requireApprovalForReturnRefund;
180
+ private _requireApprovalForReturnCancel;
181
+ private _requireLotExpiryForPurchaseReceiving;
182
+ private _lotConsumptionPolicy;
183
+ private _enableCustomerCreditPolicy;
184
+ private _customerCreditMaxOutstandingAmount;
185
+ private _customerCreditBlockOnOverdue;
186
+ private _customerCreditOverdueGraceDays;
187
+ private _customerCreditEscalationThresholdDays;
188
+ private _enableReturnFraudGuard;
189
+ private _returnFraudWindowMinutes;
190
+ private _returnFraudMaxEvents;
191
+ private _returnFraudAction;
192
+ private _returnApprovalBypassRoles;
193
+ private _returnApprovalApproverRoles;
194
+ private _allowPromotionStacking;
195
+ private _promotionSelectionStrategy;
196
+ private _promotionStackingOrder;
197
+ private _pricingRoundingIncrement;
198
+ private _pricingRoundingScope;
199
+ private _enableSequentialDocumentNumbers;
200
+ private _syncProtocolVersion;
201
+ private _syncCompatibleServerVersions;
202
+ private _enforceSyncProtocolHandshake;
203
+ private _onlineAuthMaxFailedAttempts;
204
+ private _onlineAuthLockoutSeconds;
205
+ private _drRpoTargetMinutes;
206
+ private _drRtoTargetMinutes;
207
+ private _backupIntervalMinutes;
208
+ private _backupRestoreDrillIntervalHours;
209
+ private _opsAlertSyncFailureRateThresholdPercent;
210
+ private _opsAlertQueueLatencyThresholdMs;
211
+ private _opsAlertDeadLetterCountThreshold;
212
+ private _opsAlertEscalationCooldownMinutes;
213
+ private _auditLogRetentionDays;
214
+ private _auditLogArchiveBeforePurge;
215
+ private _auditLogPurgeBatchSize;
216
+ private _sessionIdleTimeoutMinutes;
217
+ private _sessionReauthTimeoutMinutes;
218
+ private _apiTimeoutMs;
219
+ private _syncIntervalMs;
220
+ private _syncMaxRetries;
221
+ private _syncBackoffDelayMs;
222
+ private _syncDebounceMs;
223
+ private _reportingTopSellingLimit;
224
+ private _reportingLowStockLimit;
225
+ private _apiBackupListLimit;
226
+ private _encryptionKey;
227
+ private _encryptionPassphrase;
228
+ private platformAdapter;
229
+ private storage;
230
+ /**
231
+ * @param context Konteks PosCore yang menyertakan registry.
232
+ */
233
+ constructor(context: PosCore);
234
+ init(): Promise<void>;
235
+ /**
236
+ * Dapatkan URL dasar API dari environment atau default.
237
+ */
238
+ get apiUrl(): string;
239
+ /**
240
+ * Dapatkan nilai batas stok rendah, menggunakan override jika ada.
241
+ */
242
+ get lowStockThreshold(): number;
243
+ /**
244
+ * Dapatkan kunci signing pembayaran, menggunakan override jika ada.
245
+ */
246
+ get paymentSigningKey(): string;
247
+ /**
248
+ * Demo mode: jika true, sinkronisasi akan dinonaktifkan.
249
+ */
250
+ get demoMode(): boolean;
251
+ get branchId(): string | null;
252
+ get deploymentMode(): 'saas' | 'standalone';
253
+ get requireActiveShiftForCash(): boolean;
254
+ get maxCashAdjustmentAmount(): number | null;
255
+ get requireShiftCloseApprovalOnDifference(): boolean;
256
+ get shiftCloseDifferenceApprovalThreshold(): number | null;
257
+ get requireReasonForReturnOperations(): boolean;
258
+ get requireApprovalForReturnRefund(): boolean;
259
+ get requireApprovalForReturnCancel(): boolean;
260
+ get requireLotExpiryForPurchaseReceiving(): boolean;
261
+ get lotConsumptionPolicy(): 'FEFO' | 'FIFO';
262
+ get enableCustomerCreditPolicy(): boolean;
263
+ get customerCreditMaxOutstandingAmount(): number | null;
264
+ get customerCreditBlockOnOverdue(): boolean;
265
+ get customerCreditOverdueGraceDays(): number;
266
+ get customerCreditEscalationThresholdDays(): number;
267
+ get enableReturnFraudGuard(): boolean;
268
+ get returnFraudWindowMinutes(): number;
269
+ get returnFraudMaxEvents(): number;
270
+ get returnFraudAction(): 'require_approval' | 'block';
271
+ get returnApprovalBypassRoles(): string[] | null;
272
+ get returnApprovalApproverRoles(): string[] | null;
273
+ get allowPromotionStacking(): boolean;
274
+ get promotionSelectionStrategy(): 'best_discount' | 'first_valid';
275
+ get promotionStackingOrder(): 'input_order' | 'percent_then_fixed' | 'fixed_then_percent';
276
+ get pricingRoundingIncrement(): number | null;
277
+ get pricingRoundingScope(): 'total' | 'line';
278
+ get enableSequentialDocumentNumbers(): boolean;
279
+ get syncProtocolVersion(): number;
280
+ get syncCompatibleServerVersions(): number[];
281
+ get enforceSyncProtocolHandshake(): boolean;
282
+ get onlineAuthMaxFailedAttempts(): number;
283
+ get onlineAuthLockoutSeconds(): number;
284
+ get drRpoTargetMinutes(): number;
285
+ get drRtoTargetMinutes(): number;
286
+ get backupIntervalMinutes(): number;
287
+ get backupRestoreDrillIntervalHours(): number;
288
+ get opsAlertSyncFailureRateThresholdPercent(): number;
289
+ get opsAlertQueueLatencyThresholdMs(): number;
290
+ get opsAlertDeadLetterCountThreshold(): number;
291
+ get opsAlertEscalationCooldownMinutes(): number;
292
+ get auditLogRetentionDays(): number;
293
+ get auditLogArchiveBeforePurge(): boolean;
294
+ get auditLogPurgeBatchSize(): number;
295
+ get sessionIdleTimeoutMinutes(): number;
296
+ get sessionReauthTimeoutMinutes(): number;
297
+ get apiTimeoutMs(): number;
298
+ get syncIntervalMs(): number;
299
+ get syncMaxRetries(): number;
300
+ get syncBackoffDelayMs(): number;
301
+ get syncDebounceMs(): number;
302
+ get reportingTopSellingLimit(): number;
303
+ get reportingLowStockLimit(): number;
304
+ get apiBackupListLimit(): number;
305
+ get encryptionKey(): string;
306
+ get encryptionPassphrase(): string;
307
+ private validateConfig;
308
+ setConfig(config: {
309
+ lowStockThreshold?: number;
310
+ paymentSigningKey?: string;
311
+ apiUrl?: string;
312
+ branchId?: string;
313
+ demoMode?: boolean;
314
+ deploymentMode?: 'saas' | 'standalone';
315
+ requireActiveShiftForCash?: boolean;
316
+ maxCashAdjustmentAmount?: number | null;
317
+ requireShiftCloseApprovalOnDifference?: boolean;
318
+ shiftCloseDifferenceApprovalThreshold?: number | null;
319
+ requireReasonForReturnOperations?: boolean;
320
+ requireApprovalForReturnRefund?: boolean;
321
+ requireApprovalForReturnCancel?: boolean;
322
+ requireLotExpiryForPurchaseReceiving?: boolean;
323
+ lotConsumptionPolicy?: 'FEFO' | 'FIFO';
324
+ enableCustomerCreditPolicy?: boolean;
325
+ customerCreditMaxOutstandingAmount?: number | null;
326
+ customerCreditBlockOnOverdue?: boolean;
327
+ customerCreditOverdueGraceDays?: number | null;
328
+ customerCreditEscalationThresholdDays?: number | null;
329
+ enableReturnFraudGuard?: boolean;
330
+ returnFraudWindowMinutes?: number | null;
331
+ returnFraudMaxEvents?: number | null;
332
+ returnFraudAction?: 'require_approval' | 'block';
333
+ returnApprovalBypassRoles?: string[] | null;
334
+ returnApprovalApproverRoles?: string[] | null;
335
+ allowPromotionStacking?: boolean;
336
+ promotionSelectionStrategy?: 'best_discount' | 'first_valid';
337
+ promotionStackingOrder?: 'input_order' | 'percent_then_fixed' | 'fixed_then_percent';
338
+ pricingRoundingIncrement?: number | null;
339
+ pricingRoundingScope?: 'total' | 'line';
340
+ enableSequentialDocumentNumbers?: boolean;
341
+ syncProtocolVersion?: number | null;
342
+ syncCompatibleServerVersions?: number[] | null;
343
+ enforceSyncProtocolHandshake?: boolean;
344
+ onlineAuthMaxFailedAttempts?: number | null;
345
+ onlineAuthLockoutSeconds?: number | null;
346
+ drRpoTargetMinutes?: number | null;
347
+ drRtoTargetMinutes?: number | null;
348
+ backupIntervalMinutes?: number | null;
349
+ backupRestoreDrillIntervalHours?: number | null;
350
+ opsAlertSyncFailureRateThresholdPercent?: number | null;
351
+ opsAlertQueueLatencyThresholdMs?: number | null;
352
+ opsAlertDeadLetterCountThreshold?: number | null;
353
+ opsAlertEscalationCooldownMinutes?: number | null;
354
+ auditLogRetentionDays?: number | null;
355
+ auditLogArchiveBeforePurge?: boolean | null;
356
+ auditLogPurgeBatchSize?: number | null;
357
+ sessionIdleTimeoutMinutes?: number | null;
358
+ sessionReauthTimeoutMinutes?: number | null;
359
+ apiTimeoutMs?: number | null;
360
+ syncIntervalMs?: number | null;
361
+ syncMaxRetries?: number | null;
362
+ syncBackoffDelayMs?: number | null;
363
+ syncDebounceMs?: number | null;
364
+ reportingTopSellingLimit?: number | null;
365
+ reportingLowStockLimit?: number | null;
366
+ apiBackupListLimit?: number | null;
367
+ encryptionKey?: string | null;
368
+ encryptionPassphrase?: string | null;
369
+ }): Promise<{
370
+ lowStockThreshold: number | null;
371
+ paymentSigningKey: string | null;
372
+ apiUrl: string | null;
373
+ branchId: string | null;
374
+ demoMode: boolean | null;
375
+ deploymentMode: "saas" | "standalone" | null;
376
+ requireActiveShiftForCash: boolean | null;
377
+ maxCashAdjustmentAmount: number | null;
378
+ requireShiftCloseApprovalOnDifference: boolean | null;
379
+ shiftCloseDifferenceApprovalThreshold: number | null;
380
+ requireReasonForReturnOperations: boolean | null;
381
+ requireApprovalForReturnRefund: boolean | null;
382
+ requireApprovalForReturnCancel: boolean | null;
383
+ requireLotExpiryForPurchaseReceiving: boolean | null;
384
+ lotConsumptionPolicy: "FEFO" | "FIFO" | null;
385
+ enableCustomerCreditPolicy: boolean | null;
386
+ customerCreditMaxOutstandingAmount: number | null;
387
+ customerCreditBlockOnOverdue: boolean | null;
388
+ customerCreditOverdueGraceDays: number | null;
389
+ customerCreditEscalationThresholdDays: number | null;
390
+ enableReturnFraudGuard: boolean | null;
391
+ returnFraudWindowMinutes: number | null;
392
+ returnFraudMaxEvents: number | null;
393
+ returnFraudAction: "require_approval" | "block" | null;
394
+ returnApprovalBypassRoles: string[] | null;
395
+ returnApprovalApproverRoles: string[] | null;
396
+ allowPromotionStacking: boolean | null;
397
+ promotionSelectionStrategy: "best_discount" | "first_valid" | null;
398
+ promotionStackingOrder: "input_order" | "percent_then_fixed" | "fixed_then_percent" | null;
399
+ pricingRoundingIncrement: number | null;
400
+ pricingRoundingScope: "total" | "line" | null;
401
+ enableSequentialDocumentNumbers: boolean | null;
402
+ syncProtocolVersion: number | null;
403
+ syncCompatibleServerVersions: number[] | null;
404
+ enforceSyncProtocolHandshake: boolean | null;
405
+ onlineAuthMaxFailedAttempts: number | null;
406
+ onlineAuthLockoutSeconds: number | null;
407
+ drRpoTargetMinutes: number | null;
408
+ drRtoTargetMinutes: number | null;
409
+ backupIntervalMinutes: number | null;
410
+ backupRestoreDrillIntervalHours: number | null;
411
+ opsAlertSyncFailureRateThresholdPercent: number | null;
412
+ opsAlertQueueLatencyThresholdMs: number | null;
413
+ opsAlertDeadLetterCountThreshold: number | null;
414
+ opsAlertEscalationCooldownMinutes: number | null;
415
+ auditLogRetentionDays: number | null;
416
+ auditLogArchiveBeforePurge: boolean | null;
417
+ auditLogPurgeBatchSize: number | null;
418
+ sessionIdleTimeoutMinutes: number | null;
419
+ sessionReauthTimeoutMinutes: number | null;
420
+ apiTimeoutMs: number | null;
421
+ syncIntervalMs: number | null;
422
+ syncMaxRetries: number | null;
423
+ syncBackoffDelayMs: number | null;
424
+ syncDebounceMs: number | null;
425
+ reportingTopSellingLimit: number | null;
426
+ reportingLowStockLimit: number | null;
427
+ apiBackupListLimit: number | null;
428
+ encryptionKey: string | null;
429
+ encryptionPassphrase: string | null;
430
+ }>;
431
+ }
@@ -0,0 +1,6 @@
1
+ import type { ChecksumAdapter, ChecksumInput } from './checksumAdapter';
2
+ export declare class DefaultChecksumAdapter implements ChecksumAdapter {
3
+ constructor(_context?: unknown);
4
+ compute(input: ChecksumInput): string;
5
+ verify(input: ChecksumInput, expectedChecksum: string): boolean;
6
+ }
@@ -0,0 +1,9 @@
1
+ import type { PosCore } from '../PosCore';
2
+ import type { EncryptionAdapter, EncryptionContext } from './encryptionAdapter';
3
+ export declare class DefaultEncryptionAdapter implements EncryptionAdapter {
4
+ private readonly context;
5
+ constructor(context: PosCore);
6
+ encrypt(plainText: string, context?: EncryptionContext): string;
7
+ decrypt(cipherText: string, context?: EncryptionContext): string | null;
8
+ private resolveSecretKey;
9
+ }
@@ -0,0 +1,95 @@
1
+ import { PosCore } from '../PosCore';
2
+ /**
3
+ * Antarmuka layanan enkripsi dan dekripsi data.
4
+ */
5
+ export interface IEncryptionService {
6
+ /**
7
+ * Enkripsi data (string atau objek) menjadi cipher text.
8
+ * @param data Data yang akan dienkripsi.
9
+ * @returns Hasil enkripsi dalam bentuk string.
10
+ */
11
+ encryptData(data: string | object): string;
12
+ /**
13
+ * Dekripsi cipher text menjadi objek atau string.
14
+ * @param cipher Teks enkripsi yang akan didekripsi.
15
+ * @returns Data asli atau null jika gagal.
16
+ */
17
+ decryptData<T = object | string>(cipher: string): T | null;
18
+ /**
19
+ * Simpan item terenkripsi di penyimpanan.
20
+ * @param key Kunci penyimpanan.
21
+ * @param value Nilai yang akan disimpan (string atau objek).
22
+ */
23
+ setItem(key: string, value: string | object): Promise<void>;
24
+ /**
25
+ * Ambil item, lalu dekripsi, dari penyimpanan.
26
+ * @param key Kunci penyimpanan.
27
+ * @returns Nilai yang didekripsi atau null.
28
+ */
29
+ getItem<T = object | string>(key: string): Promise<T | null>;
30
+ /**
31
+ * Simpan secret key terenkripsi (master key) di penyimpanan.
32
+ * @param keyId Identifier untuk kunci (opsional).
33
+ */
34
+ storeKey(keyId?: string): Promise<void>;
35
+ /**
36
+ * Ambil dan set secret key dari penyimpanan.
37
+ * @param keyId Identifier untuk kunci (opsional).
38
+ * @returns true jika berhasil, false jika gagal.
39
+ */
40
+ retrieveKey(keyId?: string): Promise<boolean>;
41
+ /**
42
+ * Rotasi secret key dan simpan versi baru.
43
+ * @param newSecretKey Kunci baru.
44
+ * @param keyId Identifier untuk kunci (opsional).
45
+ * @param reencryptKeys Daftar key payload terenkripsi yang harus dimigrasikan agar tetap terbaca.
46
+ */
47
+ rotateKey(newSecretKey: string, keyId?: string, reencryptKeys?: string[]): Promise<void>;
48
+ }
49
+ /**
50
+ * Implementasi layanan enkripsi dan dekripsi menggunakan CryptoJS.
51
+ */
52
+ export declare class EncryptionService implements IEncryptionService {
53
+ private context;
54
+ private readonly adapter;
55
+ private readonly encryptionAdapter;
56
+ private secretKey;
57
+ private readonly keySettingName;
58
+ /**
59
+ * @param context Konteks PosCore dengan registry adapter.
60
+ * @param secretKey Kunci rahasia awal (opsional).
61
+ */
62
+ constructor(context: PosCore, secretKey?: string);
63
+ /**
64
+ * Master key untuk enkripsi kunci, diambil dari env atau default.
65
+ */
66
+ private get masterKey();
67
+ /**
68
+ * Enkripsi data menjadi string cipher text.
69
+ */
70
+ encryptData(data: string | object): string;
71
+ /**
72
+ * Dekripsi cipher text menjadi objek atau string.
73
+ */
74
+ decryptData<T = object | string>(cipher: string): T | null;
75
+ /**
76
+ * Simpan item terenkripsi di penyimpanan settings.
77
+ */
78
+ setItem(key: string, value: string | object): Promise<void>;
79
+ /**
80
+ * Ambil dan dekripsi item dari penyimpanan settings.
81
+ */
82
+ getItem<T = object | string>(key: string): Promise<T | null>;
83
+ /**
84
+ * Simpan secret key terenkripsi dengan master key.
85
+ */
86
+ storeKey(keyId?: string): Promise<void>;
87
+ /**
88
+ * Ambil kunci terenkripsi dan set sebagai secretKey saat ini.
89
+ */
90
+ retrieveKey(keyId?: string): Promise<boolean>;
91
+ /**
92
+ * Rotasi secret key dan simpan versi baru terenkripsi.
93
+ */
94
+ rotateKey(newSecretKey: string, keyId?: string, reencryptKeys?: string[]): Promise<void>;
95
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Bridge file for RFC extraction phase.
3
+ *
4
+ * Source of truth for generic encryption contract is `ofcore`.
5
+ * Shared-core keeps this path for backward import compatibility.
6
+ */
7
+ export { NoopEncryptionAdapter } from 'ofcore';
8
+ export type { EncryptionAdapter, EncryptionContext } from 'ofcore';
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Bridge file for RFC extraction phase.
3
+ *
4
+ * Source of truth for generic HTTP transport contract is `ofcore`.
5
+ * Shared-core keeps this path for backward import compatibility.
6
+ */
7
+ export { DefaultHttpAdapter } from 'ofcore';
8
+ export { executeHttpRequestWithRetry, NoRetryHttpPolicy, ExponentialBackoffHttpPolicy } from 'ofcore';
9
+ export type { HttpAdapter, HttpMethod, HttpRequest, HttpResponse, HttpRetryPolicy } from 'ofcore';