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,46 @@
1
+ Bundled license information:
2
+
3
+ reflect-metadata/Reflect.js:
4
+ /*! *****************************************************************************
5
+ Copyright (C) Microsoft. All rights reserved.
6
+ Licensed under the Apache License, Version 2.0 (the "License"); you may not use
7
+ this file except in compliance with the License. You may obtain a copy of the
8
+ License at http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
11
+ KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
12
+ WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
13
+ MERCHANTABLITY OR NON-INFRINGEMENT.
14
+
15
+ See the Apache Version 2.0 License for specific language governing permissions
16
+ and limitations under the License.
17
+ ***************************************************************************** */
18
+
19
+ crypto-js/ripemd160.js:
20
+ /** @preserve
21
+ (c) 2012 by Cédric Mesnil. All rights reserved.
22
+
23
+ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
24
+
25
+ - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
26
+ - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
27
+
28
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
+ */
30
+
31
+ crypto-js/mode-ctr-gladman.js:
32
+ /** @preserve
33
+ * Counter block mode compatible with Dr Brian Gladman fileenc.c
34
+ * derived from CryptoJS.mode.CTR
35
+ * Jan Hruby jhruby.web@gmail.com
36
+ */
37
+
38
+ uuidv7/dist/index.js:
39
+ /**
40
+ * uuidv7: A JavaScript implementation of UUID version 7
41
+ *
42
+ * Copyright 2021-2025 LiosK
43
+ *
44
+ * @license Apache-2.0
45
+ * @packageDocumentation
46
+ */
@@ -0,0 +1,69 @@
1
+ import { PosCore } from "../PosCore";
2
+ /**
3
+ * Opsi untuk menampilkan notifikasi lokal.
4
+ */
5
+ export interface NotificationOptions {
6
+ /**
7
+ * ID channel notifikasi.
8
+ */
9
+ channelId?: string;
10
+ /**
11
+ * Judul notifikasi.
12
+ */
13
+ title: string;
14
+ /**
15
+ * Isi pesan notifikasi.
16
+ */
17
+ message: string;
18
+ [key: string]: any;
19
+ }
20
+ /**
21
+ * Antarmuka adapter untuk notifikasi lokal.
22
+ */
23
+ export interface NotificationAdapter {
24
+ /**
25
+ * Konfigurasi adapter notifikasi.
26
+ * @param options Opsi konfigurasi.
27
+ */
28
+ configure(options: any): void;
29
+ /**
30
+ * Buat channel notifikasi baru.
31
+ * @param options Opsi channel.
32
+ */
33
+ createChannel(options: {
34
+ channelId: string;
35
+ channelName: string;
36
+ importance?: number;
37
+ }): void;
38
+ /**
39
+ * Tampilkan notifikasi lokal segera.
40
+ * @param options Opsi notifikasi.
41
+ */
42
+ localNotification(options: NotificationOptions): void;
43
+ }
44
+ /**
45
+ * Implementasi NotificationAdapter yang tidak melakukan apa-apa.
46
+ */
47
+ export declare class NoopNotificationAdapter implements NotificationAdapter {
48
+ private context;
49
+ /**
50
+ * @param context Konteks PosCore (tidak digunakan).
51
+ */
52
+ constructor(context: PosCore);
53
+ /**
54
+ * Konfigurasi tidak melakukan apa-apa.
55
+ */
56
+ configure(options: any): void;
57
+ /**
58
+ * Pembuatan channel tidak melakukan apa-apa.
59
+ */
60
+ createChannel(options: {
61
+ channelId: string;
62
+ channelName: string;
63
+ importance?: number;
64
+ }): void;
65
+ /**
66
+ * Pengiriman notifikasi tidak melakukan apa-apa.
67
+ */
68
+ localNotification(options: NotificationOptions): void;
69
+ }
@@ -0,0 +1,44 @@
1
+ import { DbAdapter } from 'ofcore';
2
+ import { PosCore } from '../PosCore';
3
+ /**
4
+ * Interface untuk mencatat aktivitas user ke dalam log dan database.
5
+ */
6
+ export interface IActivityLogger {
7
+ /**
8
+ * Mencatat aktivitas user ke log dan database.
9
+ *
10
+ * @param action Deskripsi aktivitas (misal: "CREATE_PRODUCT").
11
+ * @param userId Identifier user yang melakukan aksi.
12
+ * @param extraContext Objek tambahan berisi metadata; bisa berisi itemType, recordId, dll.
13
+ * @returns Promise yang resolve ketika pencatatan selesai.
14
+ */
15
+ logActivity(action: string, userId: string, extraContext?: Record<string, any>, tx?: DbAdapter): Promise<void>;
16
+ }
17
+ /**
18
+ * Implementasi IActivityLogger menggunakan DbAdapter untuk menyimpan riwayat.
19
+ */
20
+ export declare class ActivityLogger implements IActivityLogger {
21
+ private context;
22
+ private readonly dbAdapter;
23
+ private readonly explicitActionTableMap;
24
+ private readonly entityTableMap;
25
+ /**
26
+ * Membuat instance ActivityLogger.
27
+ *
28
+ * @param context Instansi PosCore yang menyediakan registry dan logging.
29
+ */
30
+ constructor(context: PosCore);
31
+ private inferEntityFromAction;
32
+ private inferTableName;
33
+ private resolveRecordId;
34
+ /**
35
+ * Mencatat aktivitas user:
36
+ * - Menulis log melalui context.logInfo
37
+ * - Menyimpan entry ke tabel history
38
+ *
39
+ * @param action Deskripsi aktivitas (misal: "CREATE_PRODUCT").
40
+ * @param userId Identifier user yang melakukan aksi.
41
+ * @param extraContext Objek tambahan berisi metadata; bisa berisi itemType, recordId, dll.
42
+ */
43
+ logActivity(action: string, userId: string, extraContext?: Record<string, any>, tx?: DbAdapter): Promise<void>;
44
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Bridge file for RFC extraction phase.
3
+ *
4
+ * Source of truth for generic activity sink contract is `ofcore`.
5
+ * Shared-core keeps this path for backward import compatibility.
6
+ */
7
+ export { NoopActivitySink, MemoryActivitySink } from 'ofcore';
8
+ export type { ActivitySink, ActivityRecord } from 'ofcore';
@@ -0,0 +1,255 @@
1
+ import type { PosCore } from '../PosCore';
2
+ /**
3
+ * Service untuk berinteraksi dengan API remote, termasuk auth, ERP, dan sinkronisasi.
4
+ */
5
+ export interface IApiService {
6
+ /**
7
+ * Melakukan autentikasi user dan mendapatkan token.
8
+ *
9
+ * @param creds Objek berisi username dan password.
10
+ * @returns Promise yang resolve dengan data respons autentikasi.
11
+ */
12
+ login(creds: {
13
+ username: string;
14
+ password: string;
15
+ }): Promise<any>;
16
+ /**
17
+ * Menghapus token autentikasi lokal.
18
+ *
19
+ * @returns Promise yang resolve ketika logout selesai.
20
+ */
21
+ logout(): Promise<void>;
22
+ /**
23
+ * Mengambil profil user yang sedang login.
24
+ *
25
+ * @returns Promise yang resolve dengan data profil.
26
+ */
27
+ getProfile(): Promise<any>;
28
+ /**
29
+ * Mengambil data ERP.
30
+ *
31
+ * @param path Path endpoint ERP (opsional).
32
+ * @param params Parameter query (opsional).
33
+ * @returns Promise yang resolve dengan data ERP.
34
+ */
35
+ getErpData(path?: string, params?: any, requestContext?: RequestContext): Promise<any>;
36
+ /**
37
+ * Mengirim data ke endpoint ERP (POST).
38
+ *
39
+ * @param path Path endpoint.
40
+ * @param data Payload data (opsional).
41
+ * @returns Promise yang resolve dengan respons server.
42
+ */
43
+ postErpData(path: string, data?: any): Promise<any>;
44
+ /**
45
+ * Memperbarui data di endpoint ERP (PUT).
46
+ *
47
+ * @param path Path endpoint.
48
+ * @param data Payload data (opsional).
49
+ * @returns Promise yang resolve dengan respons server.
50
+ */
51
+ putErpData(path: string, data?: any): Promise<any>;
52
+ /**
53
+ * Menghapus data di endpoint ERP (DELETE).
54
+ *
55
+ * @param path Path endpoint.
56
+ * @param params Parameter query (opsional).
57
+ * @returns Promise yang resolve dengan respons server.
58
+ */
59
+ deleteErpData(path: string, params?: any): Promise<any>;
60
+ /**
61
+ * Mengirim satu perubahan ke server sinkronisasi.
62
+ *
63
+ * @param payload Payload batch perubahan sinkronisasi.
64
+ * @returns Promise yang resolve dengan respons server.
65
+ */
66
+ pushChange(payload: {
67
+ changes: unknown[];
68
+ }, requestContext?: RequestContext): Promise<any>;
69
+ /**
70
+ * Mengambil daftar perubahan dari server sinkronisasi.
71
+ *
72
+ * @param params Objek berisi since dan optional limit.
73
+ * @returns Promise yang resolve dengan array perubahan.
74
+ */
75
+ pullChanges(params: {
76
+ since: number | null;
77
+ limit?: number;
78
+ }, requestContext?: RequestContext): Promise<any[]>;
79
+ /**
80
+ * Membuka shift untuk transaksi.
81
+ *
82
+ * @returns Promise yang resolve dengan respons server.
83
+ */
84
+ openShift(): Promise<any>;
85
+ /**
86
+ * Menutup shift yang sedang aktif.
87
+ *
88
+ * @returns Promise yang resolve dengan respons server.
89
+ */
90
+ closeShift(): Promise<any>;
91
+ /**
92
+ * Mengambil riwayat shift.
93
+ *
94
+ * @returns Promise yang resolve dengan array riwayat shift.
95
+ */
96
+ getShiftHistory(): Promise<any>;
97
+ /**
98
+ * Membuat snapshot backup data tenant.
99
+ *
100
+ * @param payload Opsi backup (opsional).
101
+ * @returns Promise yang resolve dengan metadata backup.
102
+ */
103
+ createBackup(payload?: any): Promise<any>;
104
+ /**
105
+ * Menjalankan restore dari snapshot backup tenant.
106
+ *
107
+ * @param payload Identifier backup dan opsi restore.
108
+ * @returns Promise yang resolve dengan status restore.
109
+ */
110
+ restoreBackup(payload: {
111
+ backupId: string;
112
+ [key: string]: unknown;
113
+ }): Promise<any>;
114
+ /**
115
+ * Mengambil daftar backup tenant.
116
+ *
117
+ * @param params Query filter daftar backup.
118
+ * @returns Promise yang resolve dengan daftar backup.
119
+ */
120
+ listBackups(params?: any): Promise<any>;
121
+ }
122
+ /**
123
+ * Implementasi IApiService menggunakan HttpAdapter untuk HTTP requests.
124
+ */
125
+ export declare class ApiService implements IApiService {
126
+ private context;
127
+ private readonly encryptionService?;
128
+ private readonly httpAdapter;
129
+ private readonly httpRetryPolicy?;
130
+ /**
131
+ * Membuat instance ApiService.
132
+ *
133
+ * @param context Instansi PosCore yang menyediakan konfigurasi dan integrationServices.
134
+ */
135
+ constructor(context: PosCore);
136
+ private validateSyncProtocolHandshake;
137
+ private buildHeaders;
138
+ private requestData;
139
+ /**
140
+ * Melakukan login dan menyimpan token ke penyimpanan terenkripsi.
141
+ *
142
+ * @param creds Objek kredensial user.
143
+ * @returns Promise yang resolve dengan data login.
144
+ */
145
+ login(creds: {
146
+ username: string;
147
+ password: string;
148
+ }): Promise<any>;
149
+ /**
150
+ * Melakukan logout dengan menghapus token.
151
+ *
152
+ * @returns Promise yang resolve ketika selesai.
153
+ */
154
+ logout(): Promise<void>;
155
+ /**
156
+ * Mengambil data profil user.
157
+ *
158
+ * @returns Promise yang resolve dengan data profil.
159
+ */
160
+ getProfile(): Promise<any>;
161
+ /**
162
+ * Mengambil data ERP.
163
+ *
164
+ * @param path Path endpoint (opsional).
165
+ * @param params Parameter query (opsional).
166
+ * @returns Data dari ERP.
167
+ */
168
+ getErpData(path?: string, params?: any, requestContext?: RequestContext): Promise<any>;
169
+ /**
170
+ * Mengirim data ke ERP via POST.
171
+ *
172
+ * @param path Path endpoint.
173
+ * @param data Payload data (opsional).
174
+ * @returns Data respons.
175
+ */
176
+ postErpData(path: string, data?: any): Promise<any>;
177
+ /**
178
+ * Memperbarui data ERP via PUT.
179
+ *
180
+ * @param path Path endpoint.
181
+ * @param data Payload data (opsional).
182
+ * @returns Data respons.
183
+ */
184
+ putErpData(path: string, data?: any): Promise<any>;
185
+ /**
186
+ * Menghapus data ERP via DELETE.
187
+ *
188
+ * @param path Path endpoint (opsional).
189
+ * @param params Parameter query (opsional).
190
+ * @returns Data respons.
191
+ */
192
+ deleteErpData(path?: string, params?: any): Promise<any>;
193
+ /**
194
+ * Mengirim satu perubahan untuk sinkronisasi.
195
+ *
196
+ * @param payload Payload batch perubahan sinkronisasi.
197
+ * @returns Respons server.
198
+ */
199
+ pushChange(payload: {
200
+ changes: unknown[];
201
+ }, requestContext?: RequestContext): Promise<any>;
202
+ /**
203
+ * Mengambil perubahan dari server sinkronisasi.
204
+ *
205
+ * @param params Objek berisi since dan optional limit.
206
+ * @returns Array perubahan.
207
+ */
208
+ pullChanges(params: {
209
+ since: number | null;
210
+ limit?: number;
211
+ }, requestContext?: RequestContext): Promise<any>;
212
+ /**
213
+ * Membuka shift.
214
+ *
215
+ * @returns Respons server.
216
+ */
217
+ openShift(): Promise<any>;
218
+ /**
219
+ * Menutup shift.
220
+ *
221
+ * @returns Respons server.
222
+ */
223
+ closeShift(): Promise<any>;
224
+ /**
225
+ * Mengambil riwayat shift.
226
+ *
227
+ * @returns Array riwayat shift.
228
+ */
229
+ getShiftHistory(): Promise<any>;
230
+ /**
231
+ * Membuat backup tenant.
232
+ *
233
+ * @returns Metadata backup dari server.
234
+ */
235
+ createBackup(payload?: any): Promise<any>;
236
+ /**
237
+ * Menjalankan restore backup tenant.
238
+ *
239
+ * @returns Status restore dari server.
240
+ */
241
+ restoreBackup(payload: {
242
+ backupId: string;
243
+ [key: string]: unknown;
244
+ }): Promise<any>;
245
+ /**
246
+ * Mengambil daftar backup tenant.
247
+ *
248
+ * @returns Daftar backup.
249
+ */
250
+ listBackups(params?: any): Promise<any>;
251
+ }
252
+ export interface RequestContext {
253
+ correlationId?: string;
254
+ syncBatchId?: string;
255
+ }
@@ -0,0 +1,225 @@
1
+ import { RoleData, Role } from '../models/Role';
2
+ import { PosCore } from '../PosCore';
3
+ import { User } from '../models/User';
4
+ import { QueryOptions } from 'ofcore';
5
+ export type GranularAuthorizationAction = 'void' | 'refund' | 'settlement_adjustment' | 'credit_limit_approval';
6
+ export interface GranularAuthorizationRule {
7
+ action: GranularAuthorizationAction;
8
+ requiredPermission: string;
9
+ thresholdAmount: number;
10
+ approvalRequiredAboveThreshold: boolean;
11
+ approverRoles: string[];
12
+ }
13
+ export interface GranularAuthorizationPolicy {
14
+ version: 'gau-v1';
15
+ rules: GranularAuthorizationRule[];
16
+ }
17
+ export interface ApprovalPayload {
18
+ approvedBy: string;
19
+ reason: string;
20
+ approverRole: string;
21
+ }
22
+ export interface GranularAuthorizationDecision {
23
+ decisionId: string;
24
+ action: GranularAuthorizationAction;
25
+ status: 'allow' | 'require_approval' | 'deny';
26
+ reasonCode: 'ALLOW_BELOW_THRESHOLD' | 'ALLOW_WITH_APPROVAL' | 'ROLE_OR_PERMISSION_DENIED' | 'THRESHOLD_APPROVAL_REQUIRED' | 'APPROVAL_INVALID';
27
+ thresholdAmount: number;
28
+ amount: number;
29
+ }
30
+ export declare const DEFAULT_GRANULAR_AUTH_POLICY: GranularAuthorizationPolicy;
31
+ /**
32
+ * Interface publik untuk layanan otorisasi.
33
+ */
34
+ export interface IAuthorizationService {
35
+ /**
36
+ * Menambahkan role baru.
37
+ *
38
+ * @param data Data role.
39
+ * @param userId ID user yang melakukan aksi.
40
+ * @returns Promise yang resolve dengan Role baru.
41
+ */
42
+ addRole(data: RoleData, userId: string): Promise<Role>;
43
+ /**
44
+ * Memperbarui role.
45
+ *
46
+ * @param roleId ID role yang diubah.
47
+ * @param data Data role yang diperbarui.
48
+ * @param userId ID user yang melakukan aksi.
49
+ * @returns Promise yang resolve dengan Role yang diperbarui.
50
+ */
51
+ updateRole(roleId: string, data: Partial<RoleData>, userId: string): Promise<Role>;
52
+ /**
53
+ * Menghapus role.
54
+ *
55
+ * @param roleId ID role yang dihapus.
56
+ * @param userId ID user yang melakukan aksi.
57
+ * @returns Promise yang resolve dengan objek berisi id dan status antrian.
58
+ */
59
+ deleteRole(roleId: string, userId: string): Promise<{
60
+ id: string;
61
+ queued: boolean;
62
+ }>;
63
+ /**
64
+ * Mengambil semua role.
65
+ *
66
+ * @returns Promise yang resolve dengan array Role.
67
+ */
68
+ getRoles(options?: QueryOptions): Promise<Role[]>;
69
+ /**
70
+ * Mengambil role berdasarkan ID.
71
+ *
72
+ * @param roleId ID role.
73
+ * @returns Promise yang resolve dengan Role atau null.
74
+ */
75
+ getRoleById(roleId: string): Promise<Role | null>;
76
+ /**
77
+ * Mengecek apakah role memiliki permission tertentu.
78
+ *
79
+ * @param role Objek role.
80
+ * @param permission Nama permission.
81
+ * @returns true jika permission ada.
82
+ */
83
+ hasPermission(role: {
84
+ permissions?: string[];
85
+ }, permission: string): boolean;
86
+ /**
87
+ * Mengecek akses user terhadap permission.
88
+ *
89
+ * @param user Objek user dengan property role.
90
+ * @param permission Nama permission.
91
+ * @returns Promise yang resolve dengan hasil pengecekan.
92
+ */
93
+ can(user: {
94
+ role: string;
95
+ }, permission: string): Promise<boolean>;
96
+ /**
97
+ * Verifikasi PIN lokal terhadap hash yang disimpan.
98
+ *
99
+ * @param user Objek User.
100
+ * @param pin PIN yang diinput.
101
+ * @returns true jika PIN valid.
102
+ */
103
+ verifyLocalPin(user: User, pin: string): boolean;
104
+ /**
105
+ * Mendapatkan kontrak policy otorisasi granular canonical.
106
+ */
107
+ getGranularPolicy(): GranularAuthorizationPolicy;
108
+ /**
109
+ * Evaluasi matrix role x action x threshold.
110
+ */
111
+ evaluateGranularAuthorization(input: {
112
+ actor: {
113
+ userId?: string;
114
+ role: string;
115
+ };
116
+ action: GranularAuthorizationAction;
117
+ amount: number;
118
+ approval?: ApprovalPayload;
119
+ policy?: GranularAuthorizationPolicy;
120
+ metadata?: Record<string, any>;
121
+ }): Promise<GranularAuthorizationDecision>;
122
+ }
123
+ /**
124
+ * Layanan otorisasi yang menggunakan RoleAdapter dan SyncStore.
125
+ */
126
+ export declare class AuthorizationService {
127
+ private context;
128
+ private roleAdapter?;
129
+ private syncStore?;
130
+ /**
131
+ * Membuat instance AuthorizationService.
132
+ *
133
+ * @param context Instansi PosCore yang menyediakan registry dan logging.
134
+ */
135
+ constructor(context: PosCore);
136
+ /**
137
+ * Menambahkan perubahan ke antrian sinkronisasi.
138
+ *
139
+ * @param type Tipe operasi: 'create' | 'update' | 'delete'.
140
+ * @param model Nama model yang dipengaruhi.
141
+ * @param record Data record yang diubah.
142
+ */
143
+ private enqueue;
144
+ /**
145
+ * Menambahkan role baru dan mencatat aktivitas.
146
+ *
147
+ * @param data Data role.
148
+ * @param userId ID user yang melakukan aksi.
149
+ * @returns Promise dengan Role baru.
150
+ */
151
+ addRole(data: RoleData, userId: string): Promise<Role>;
152
+ /**
153
+ * Memperbarui role dan mencatat aktivitas.
154
+ *
155
+ * @param roleId ID role.
156
+ * @param data Data role yang diperbarui.
157
+ * @param userId ID user yang melakukan aksi.
158
+ * @returns Promise dengan Role yang diperbarui.
159
+ */
160
+ updateRole(roleId: string, data: Partial<RoleData>, userId: string): Promise<Role>;
161
+ /**
162
+ * Menghapus role dan mencatat aktivitas.
163
+ *
164
+ * @param roleId ID role.
165
+ * @param userId ID user yang melakukan aksi.
166
+ * @returns Promise dengan objek berisi id dan status antrian.
167
+ */
168
+ deleteRole(roleId: string, userId: string): Promise<{
169
+ id: string;
170
+ queued: boolean;
171
+ }>;
172
+ /**
173
+ * Mengambil semua role.
174
+ *
175
+ * @returns Promise dengan array Role.
176
+ */
177
+ getRoles(options?: QueryOptions): Promise<Role[]>;
178
+ /**
179
+ * Mengambil role berdasarkan ID.
180
+ *
181
+ * @param roleId ID role.
182
+ * @returns Promise dengan Role atau null.
183
+ */
184
+ getRoleById(roleId: string): Promise<Role | null>;
185
+ /**
186
+ * Mengecek apakah role memiliki permission tertentu.
187
+ *
188
+ * @param role Objek role.
189
+ * @param permission Nama permission.
190
+ * @returns true jika permission ada.
191
+ */
192
+ hasPermission(role: any, permission: string): boolean;
193
+ /**
194
+ * Mengecek akses user terhadap permission.
195
+ *
196
+ * @param user Objek user dengan property role.
197
+ * @param permission Nama permission.
198
+ * @returns Promise yang resolve dengan hasil pengecekan.
199
+ */
200
+ can(user: {
201
+ role: string;
202
+ }, permission: string): Promise<boolean>;
203
+ /**
204
+ * Verifikasi PIN lokal terhadap hash yang disimpan di user.
205
+ *
206
+ * @param user Objek User.
207
+ * @param pin PIN yang diinput.
208
+ * @returns true jika PIN valid; false jika tidak atau terjadi error.
209
+ */
210
+ verifyLocalPin(user: User, pin: string): boolean;
211
+ getGranularPolicy(): GranularAuthorizationPolicy;
212
+ private normalizeRole;
213
+ private isApprovalValid;
214
+ evaluateGranularAuthorization(input: {
215
+ actor: {
216
+ userId?: string;
217
+ role: string;
218
+ };
219
+ action: GranularAuthorizationAction;
220
+ amount: number;
221
+ approval?: ApprovalPayload;
222
+ policy?: GranularAuthorizationPolicy;
223
+ metadata?: Record<string, any>;
224
+ }): Promise<GranularAuthorizationDecision>;
225
+ }