@sincpro/mobile 0.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 (232) hide show
  1. package/README.md +74 -0
  2. package/dist/adapters/Bluetooth.adapter.d.ts +14 -0
  3. package/dist/adapters/Bluetooth.adapter.js +100 -0
  4. package/dist/adapters/Geo.adapter.d.ts +8 -0
  5. package/dist/adapters/Geo.adapter.js +30 -0
  6. package/dist/adapters/JsonSerializer.adapter.d.ts +28 -0
  7. package/dist/adapters/JsonSerializer.adapter.js +47 -0
  8. package/dist/adapters/Network.adapter.d.ts +4 -0
  9. package/dist/adapters/Network.adapter.js +13 -0
  10. package/dist/adapters/ReceiptExporter.adapter.d.ts +19 -0
  11. package/dist/adapters/ReceiptExporter.adapter.js +142 -0
  12. package/dist/adapters/repositories/database_table.repository.d.ts +13 -0
  13. package/dist/adapters/repositories/database_table.repository.js +29 -0
  14. package/dist/adapters/repositories/domain_event.repository.d.ts +32 -0
  15. package/dist/adapters/repositories/domain_event.repository.js +147 -0
  16. package/dist/adapters/repositories/domain_event_dead_letter.repository.d.ts +23 -0
  17. package/dist/adapters/repositories/domain_event_dead_letter.repository.js +81 -0
  18. package/dist/adapters/repositories/setting.repository.d.ts +10 -0
  19. package/dist/adapters/repositories/setting.repository.js +21 -0
  20. package/dist/adapters/webview.adapter.d.ts +10 -0
  21. package/dist/adapters/webview.adapter.js +166 -0
  22. package/dist/domain/connectivity/bluetooth.d.ts +19 -0
  23. package/dist/domain/connectivity/bluetooth.js +1 -0
  24. package/dist/domain/connectivity/events.d.ts +17 -0
  25. package/dist/domain/connectivity/events.js +17 -0
  26. package/dist/domain/connectivity/geo.d.ts +4 -0
  27. package/dist/domain/connectivity/geo.js +1 -0
  28. package/dist/domain/connectivity/index.d.ts +3 -0
  29. package/dist/domain/connectivity/index.js +3 -0
  30. package/dist/domain/connectivity/network.d.ts +7 -0
  31. package/dist/domain/connectivity/network.js +1 -0
  32. package/dist/domain/database/database.d.ts +16 -0
  33. package/dist/domain/database/database.js +1 -0
  34. package/dist/domain/database/index.d.ts +2 -0
  35. package/dist/domain/database/index.js +2 -0
  36. package/dist/domain/database/repository.d.ts +19 -0
  37. package/dist/domain/database/repository.js +1 -0
  38. package/dist/domain/entity/entity.d.ts +109 -0
  39. package/dist/domain/entity/entity.js +246 -0
  40. package/dist/domain/entity/entity_collection.d.ts +396 -0
  41. package/dist/domain/entity/entity_collection.js +824 -0
  42. package/dist/domain/entity/index.d.ts +3 -0
  43. package/dist/domain/entity/index.js +3 -0
  44. package/dist/domain/entity/value_object.d.ts +12 -0
  45. package/dist/domain/entity/value_object.js +39 -0
  46. package/dist/domain/event_sourcing/domain_event.d.ts +58 -0
  47. package/dist/domain/event_sourcing/domain_event.js +164 -0
  48. package/dist/domain/event_sourcing/event.d.ts +25 -0
  49. package/dist/domain/event_sourcing/event.js +25 -0
  50. package/dist/domain/event_sourcing/event_handler.d.ts +7 -0
  51. package/dist/domain/event_sourcing/event_handler.js +13 -0
  52. package/dist/domain/event_sourcing/index.d.ts +2 -0
  53. package/dist/domain/event_sourcing/index.js +2 -0
  54. package/dist/domain/events.d.ts +33 -0
  55. package/dist/domain/events.js +32 -0
  56. package/dist/domain/icon.d.ts +1 -0
  57. package/dist/domain/icon.js +1 -0
  58. package/dist/domain/index.d.ts +9 -0
  59. package/dist/domain/index.js +9 -0
  60. package/dist/domain/print/driver_registry.d.ts +4 -0
  61. package/dist/domain/print/driver_registry.js +29 -0
  62. package/dist/domain/print/events.d.ts +13 -0
  63. package/dist/domain/print/events.js +13 -0
  64. package/dist/domain/print/index.d.ts +2 -0
  65. package/dist/domain/print/index.js +1 -0
  66. package/dist/domain/print/printer.d.ts +35 -0
  67. package/dist/domain/print/printer.js +1 -0
  68. package/dist/domain/receipt.d.ts +31 -0
  69. package/dist/domain/receipt.js +1 -0
  70. package/dist/domain/repositories.d.ts +6 -0
  71. package/dist/domain/repositories.js +7 -0
  72. package/dist/domain/settings.d.ts +7 -0
  73. package/dist/domain/settings.js +1 -0
  74. package/dist/domain/webview/events.d.ts +11 -0
  75. package/dist/domain/webview/events.js +11 -0
  76. package/dist/domain/webview/index.d.ts +1 -0
  77. package/dist/domain/webview/index.js +1 -0
  78. package/dist/domain/webview/webview.d.ts +57 -0
  79. package/dist/domain/webview/webview.js +9 -0
  80. package/dist/entrypoints/cron/Cron.d.ts +13 -0
  81. package/dist/entrypoints/cron/Cron.js +57 -0
  82. package/dist/entrypoints/cron/checkNetworkStatus.cron.d.ts +3 -0
  83. package/dist/entrypoints/cron/checkNetworkStatus.cron.js +10 -0
  84. package/dist/entrypoints/db/index.d.ts +2 -0
  85. package/dist/entrypoints/db/index.js +2 -0
  86. package/dist/entrypoints/db/migrations.d.ts +10 -0
  87. package/dist/entrypoints/db/migrations.js +115 -0
  88. package/dist/entrypoints/db/repositories.d.ts +8 -0
  89. package/dist/entrypoints/db/repositories.js +34 -0
  90. package/dist/entrypoints/queue/QueueProcessor.d.ts +12 -0
  91. package/dist/entrypoints/queue/QueueProcessor.js +75 -0
  92. package/dist/entrypoints/queue/activateDomain.subscriber.d.ts +7 -0
  93. package/dist/entrypoints/queue/activateDomain.subscriber.js +15 -0
  94. package/dist/entrypoints/queue/newAppSettings.handler.d.ts +7 -0
  95. package/dist/entrypoints/queue/newAppSettings.handler.js +17 -0
  96. package/dist/entrypoints/queue/printImage.subscriber.d.ts +7 -0
  97. package/dist/entrypoints/queue/printImage.subscriber.js +14 -0
  98. package/dist/entrypoints/queue/processWebViewMessage.subscriber.d.ts +7 -0
  99. package/dist/entrypoints/queue/processWebViewMessage.subscriber.js +23 -0
  100. package/dist/entrypoints/ui/AppShell.d.ts +15 -0
  101. package/dist/entrypoints/ui/AppShell.js +58 -0
  102. package/dist/entrypoints/ui/common_provider.d.ts +35 -0
  103. package/dist/entrypoints/ui/common_provider.js +244 -0
  104. package/dist/entrypoints/ui/domain_switcher.d.ts +19 -0
  105. package/dist/entrypoints/ui/domain_switcher.js +22 -0
  106. package/dist/entrypoints/ui/theme.d.ts +15 -0
  107. package/dist/entrypoints/ui/theme.js +16 -0
  108. package/dist/exceptions.d.ts +22 -0
  109. package/dist/exceptions.js +60 -0
  110. package/dist/framework/base_module.d.ts +14 -0
  111. package/dist/framework/base_module.js +40 -0
  112. package/dist/framework/createApp.d.ts +6 -0
  113. package/dist/framework/createApp.js +9 -0
  114. package/dist/framework/domain_module.d.ts +13 -0
  115. package/dist/framework/domain_module.js +18 -0
  116. package/dist/framework/kernel.d.ts +18 -0
  117. package/dist/framework/kernel.js +60 -0
  118. package/dist/framework/orchestrator.d.ts +29 -0
  119. package/dist/framework/orchestrator.js +118 -0
  120. package/dist/index.d.ts +16 -0
  121. package/dist/index.js +11 -0
  122. package/dist/infrastructure/database/connector.d.ts +13 -0
  123. package/dist/infrastructure/database/connector.js +165 -0
  124. package/dist/infrastructure/database/index.d.ts +2 -0
  125. package/dist/infrastructure/database/index.js +2 -0
  126. package/dist/infrastructure/database/mapped.d.ts +128 -0
  127. package/dist/infrastructure/database/mapped.js +174 -0
  128. package/dist/infrastructure/database/utils.d.ts +10 -0
  129. package/dist/infrastructure/database/utils.js +35 -0
  130. package/dist/infrastructure/logger.d.ts +45 -0
  131. package/dist/infrastructure/logger.js +125 -0
  132. package/dist/infrastructure/ui/ToastHost.d.ts +1 -0
  133. package/dist/infrastructure/ui/ToastHost.js +19 -0
  134. package/dist/infrastructure/ui/UIEventBus.d.ts +12 -0
  135. package/dist/infrastructure/ui/UIEventBus.js +65 -0
  136. package/dist/infrastructure/ui/errorHandler.d.ts +1 -0
  137. package/dist/infrastructure/ui/errorHandler.js +20 -0
  138. package/dist/infrastructure/ui/events.d.ts +1 -0
  139. package/dist/infrastructure/ui/events.js +1 -0
  140. package/dist/infrastructure/workers/CronWorker.d.ts +42 -0
  141. package/dist/infrastructure/workers/CronWorker.js +143 -0
  142. package/dist/infrastructure/workers/EventBus.d.ts +67 -0
  143. package/dist/infrastructure/workers/EventBus.js +279 -0
  144. package/dist/infrastructure/workers/index.d.ts +2 -0
  145. package/dist/infrastructure/workers/index.js +2 -0
  146. package/dist/services/bluetooth.service.d.ts +14 -0
  147. package/dist/services/bluetooth.service.js +72 -0
  148. package/dist/services/database_table.service.d.ts +8 -0
  149. package/dist/services/database_table.service.js +19 -0
  150. package/dist/services/dead_letter_queue.service.d.ts +38 -0
  151. package/dist/services/dead_letter_queue.service.js +99 -0
  152. package/dist/services/event.service.d.ts +7 -0
  153. package/dist/services/event.service.js +24 -0
  154. package/dist/services/network.service.d.ts +7 -0
  155. package/dist/services/network.service.js +43 -0
  156. package/dist/services/printer.service.d.ts +25 -0
  157. package/dist/services/printer.service.js +220 -0
  158. package/dist/services/webview.service.d.ts +17 -0
  159. package/dist/services/webview.service.js +59 -0
  160. package/dist/tools/utils/Initials.d.ts +1 -0
  161. package/dist/tools/utils/Initials.js +12 -0
  162. package/dist/tools/utils/collections.d.ts +120 -0
  163. package/dist/tools/utils/collections.js +158 -0
  164. package/dist/tools/utils/date.d.ts +70 -0
  165. package/dist/tools/utils/date.js +126 -0
  166. package/dist/tools/utils/maps.d.ts +4 -0
  167. package/dist/tools/utils/maps.js +20 -0
  168. package/dist/tools/utils/monetary.d.ts +3 -0
  169. package/dist/tools/utils/monetary.js +31 -0
  170. package/dist/tools/utils/quantity.d.ts +11 -0
  171. package/dist/tools/utils/quantity.js +44 -0
  172. package/dist/tools/utils/searchTools.d.ts +39 -0
  173. package/dist/tools/utils/searchTools.js +56 -0
  174. package/dist/tools/utils/serializer.d.ts +2 -0
  175. package/dist/tools/utils/serializer.js +44 -0
  176. package/dist/ui/components/atoms/DebugBanner.d.ts +2 -0
  177. package/dist/ui/components/atoms/DebugBanner.js +15 -0
  178. package/dist/ui/components/atoms/index.d.ts +1 -0
  179. package/dist/ui/components/atoms/index.js +1 -0
  180. package/dist/ui/components/molecules/BluetoothDeviceSelectorModal.d.ts +8 -0
  181. package/dist/ui/components/molecules/BluetoothDeviceSelectorModal.js +61 -0
  182. package/dist/ui/components/molecules/DeadLetterErrorBlock.d.ts +8 -0
  183. package/dist/ui/components/molecules/DeadLetterErrorBlock.js +14 -0
  184. package/dist/ui/components/molecules/EventTimelineItem.d.ts +7 -0
  185. package/dist/ui/components/molecules/EventTimelineItem.js +65 -0
  186. package/dist/ui/components/molecules/ProcessToast.d.ts +5 -0
  187. package/dist/ui/components/molecules/ProcessToast.js +51 -0
  188. package/dist/ui/components/molecules/ProcessToastProvider.d.ts +4 -0
  189. package/dist/ui/components/molecules/ProcessToastProvider.js +5 -0
  190. package/dist/ui/components/molecules/index.d.ts +5 -0
  191. package/dist/ui/components/molecules/index.js +5 -0
  192. package/dist/ui/components/organisms/BluetoothPrinterSelector.d.ts +7 -0
  193. package/dist/ui/components/organisms/BluetoothPrinterSelector.js +92 -0
  194. package/dist/ui/components/organisms/DatabaseInfoRow.d.ts +11 -0
  195. package/dist/ui/components/organisms/DatabaseInfoRow.js +8 -0
  196. package/dist/ui/components/organisms/DeadLetterQueueRow.d.ts +7 -0
  197. package/dist/ui/components/organisms/DeadLetterQueueRow.js +72 -0
  198. package/dist/ui/components/organisms/EventRow.d.ts +7 -0
  199. package/dist/ui/components/organisms/EventRow.js +90 -0
  200. package/dist/ui/components/organisms/InjectableWebView.d.ts +35 -0
  201. package/dist/ui/components/organisms/InjectableWebView.js +169 -0
  202. package/dist/ui/components/organisms/Receipt.d.ts +11 -0
  203. package/dist/ui/components/organisms/Receipt.js +207 -0
  204. package/dist/ui/components/organisms/TableInfoInfoRow.d.ts +9 -0
  205. package/dist/ui/components/organisms/TableInfoInfoRow.js +19 -0
  206. package/dist/ui/components/organisms/index.d.ts +7 -0
  207. package/dist/ui/components/organisms/index.js +7 -0
  208. package/dist/ui/index.d.ts +4 -0
  209. package/dist/ui/index.js +4 -0
  210. package/dist/ui/layouts/router_layouts.d.ts +17 -0
  211. package/dist/ui/layouts/router_layouts.js +20 -0
  212. package/dist/ui/screens/database/database.context.d.ts +32 -0
  213. package/dist/ui/screens/database/database.context.js +158 -0
  214. package/dist/ui/screens/database/database.json_detail.d.ts +2 -0
  215. package/dist/ui/screens/database/database.json_detail.js +19 -0
  216. package/dist/ui/screens/database/database.list.d.ts +1 -0
  217. package/dist/ui/screens/database/database.list.js +41 -0
  218. package/dist/ui/screens/database/database.table_rows.d.ts +2 -0
  219. package/dist/ui/screens/database/database.table_rows.js +10 -0
  220. package/dist/ui/screens/dead_letter_queue/dead_letter_queue.context.d.ts +34 -0
  221. package/dist/ui/screens/dead_letter_queue/dead_letter_queue.context.js +166 -0
  222. package/dist/ui/screens/dead_letter_queue/dead_letter_queue.list.d.ts +2 -0
  223. package/dist/ui/screens/dead_letter_queue/dead_letter_queue.list.js +24 -0
  224. package/dist/ui/screens/events/events.context.d.ts +25 -0
  225. package/dist/ui/screens/events/events.context.js +113 -0
  226. package/dist/ui/screens/events/events.list.d.ts +1 -0
  227. package/dist/ui/screens/events/events.list.js +26 -0
  228. package/dist/ui/screens/events/index.d.ts +1 -0
  229. package/dist/ui/screens/events/index.js +1 -0
  230. package/dist/ui/screens/index.d.ts +3 -0
  231. package/dist/ui/screens/index.js +3 -0
  232. package/package.json +125 -0
@@ -0,0 +1,3 @@
1
+ export * from "../../domain/entity/entity";
2
+ export * from "../../domain/entity/entity_collection";
3
+ export * from "../../domain/entity/value_object";
@@ -0,0 +1,3 @@
1
+ export * from "../../domain/entity/entity";
2
+ export * from "../../domain/entity/entity_collection";
3
+ export * from "../../domain/entity/value_object";
@@ -0,0 +1,12 @@
1
+ export interface IValueObject {
2
+ asJSON(): string;
3
+ fromJSON(json: any): this;
4
+ }
5
+ export declare class ValueObject implements IValueObject {
6
+ static obj<T>(data?: Partial<T>): T;
7
+ static fromJSON<T>(json: any): T;
8
+ asJSON(pretty?: boolean): string;
9
+ fromJSON(json: any): this;
10
+ clone(): this;
11
+ equals(other: any): boolean;
12
+ }
@@ -0,0 +1,39 @@
1
+ import { safeJsonParse, safeJsonStringify } from "../../tools/utils/serializer";
2
+ export class ValueObject {
3
+ static obj(data) {
4
+ const instance = new this();
5
+ if (data) {
6
+ Object.assign(instance, data);
7
+ }
8
+ return instance;
9
+ }
10
+ static fromJSON(json) {
11
+ let data = json;
12
+ if (typeof json === "string") {
13
+ data = safeJsonParse(json);
14
+ }
15
+ const instance = new this();
16
+ Object.assign(instance, data);
17
+ return instance;
18
+ }
19
+ asJSON(pretty = false) {
20
+ if (pretty) {
21
+ return safeJsonStringify(this, true);
22
+ }
23
+ return safeJsonStringify(this);
24
+ }
25
+ fromJSON(json) {
26
+ return this.constructor.fromJSON(json);
27
+ }
28
+ clone() {
29
+ const json = this.asJSON();
30
+ return this.constructor.fromJSON(json);
31
+ }
32
+ equals(other) {
33
+ if (!other)
34
+ return false;
35
+ if (this.constructor !== other.constructor)
36
+ return false;
37
+ return this.asJSON() === other.asJSON();
38
+ }
39
+ }
@@ -0,0 +1,58 @@
1
+ import { ValueObject } from "../../domain/entity/value_object";
2
+ export type HandlerFn<T> = (payload: T) => Promise<void>;
3
+ export type EventName = string;
4
+ export interface IEventHandler<Payload = any> {
5
+ name: EventName;
6
+ handler: HandlerFn<Payload>;
7
+ }
8
+ export declare enum EEventStatus {
9
+ PENDING = "PENDING",
10
+ PROCESSING = "PROCESSING",
11
+ ACKNOWLEDGED = "ACKNOWLEDGED",
12
+ FAILED = "FAILED",
13
+ CANCELLED = "CANCELLED"
14
+ }
15
+ type InfrastructureFields = "name" | "label" | "requiresNetwork" | "uuid" | "createdAt" | "status" | "attempts" | "errorMessage" | "acknowledgedAt" | "failedAt" | "aggregateId" | "sourceId" | "correlationId" | "sequence";
16
+ export type DomainEventClass<T extends DomainEvent> = {
17
+ new (): T;
18
+ create(data?: EventData<T>): T;
19
+ };
20
+ export type EventData<T extends DomainEvent> = Omit<Partial<T>, InfrastructureFields>;
21
+ export declare class DomainEvent extends ValueObject {
22
+ readonly name: string;
23
+ readonly label: string;
24
+ readonly requiresNetwork: boolean;
25
+ readonly uuid: string;
26
+ readonly createdAt: string;
27
+ status: EEventStatus;
28
+ attempts: number;
29
+ errorMessage: string | null;
30
+ acknowledgedAt: string | null;
31
+ failedAt: string | null;
32
+ aggregateId: string | null;
33
+ sourceId: string | null;
34
+ correlationId: string | null;
35
+ sequence: number;
36
+ private static sanitize;
37
+ static create<T extends DomainEvent>(this: new () => T, data?: EventData<T>): T;
38
+ static from<T extends DomainEvent>(this: new () => T, event: DomainEvent): T;
39
+ cloneWithReset(): this;
40
+ withAggregateId(aggregateId: string): this;
41
+ withSourceId(sourceId: string): this;
42
+ withCorrelationId(correlationId: string): this;
43
+ withSequence(sequence: number): this;
44
+ getBusinessPayload(): Record<string, unknown>;
45
+ hasSameBusinessPayload(other: DomainEvent): boolean;
46
+ markAsProcessing(): this;
47
+ markAsAcknowledged(): this;
48
+ markAsFailed(errorMessage: string): this;
49
+ markAsCancelled(): this;
50
+ retry(): this;
51
+ get isPending(): boolean;
52
+ get isProcessing(): boolean;
53
+ get isAcknowledged(): boolean;
54
+ get isFailed(): boolean;
55
+ get isCancelled(): boolean;
56
+ get isPartOfTransaction(): boolean;
57
+ }
58
+ export {};
@@ -0,0 +1,164 @@
1
+ import { ValueObject } from "../../domain/entity/value_object";
2
+ import { generateUUID } from "../../infrastructure/database/utils";
3
+ import { safeJsonParse, safeJsonStringify } from "../../tools/utils/serializer";
4
+ export var EEventStatus;
5
+ (function (EEventStatus) {
6
+ EEventStatus["PENDING"] = "PENDING";
7
+ EEventStatus["PROCESSING"] = "PROCESSING";
8
+ EEventStatus["ACKNOWLEDGED"] = "ACKNOWLEDGED";
9
+ EEventStatus["FAILED"] = "FAILED";
10
+ EEventStatus["CANCELLED"] = "CANCELLED";
11
+ })(EEventStatus || (EEventStatus = {}));
12
+ export class DomainEvent extends ValueObject {
13
+ name = "";
14
+ label = "";
15
+ requiresNetwork = false;
16
+ uuid = "";
17
+ createdAt = "";
18
+ status = EEventStatus.PENDING;
19
+ attempts = 0;
20
+ errorMessage = null;
21
+ acknowledgedAt = null;
22
+ failedAt = null;
23
+ aggregateId = null;
24
+ sourceId = null;
25
+ correlationId = null;
26
+ sequence = 0;
27
+ static sanitize(data) {
28
+ if (data === null || data === undefined) {
29
+ return data;
30
+ }
31
+ if (data instanceof ValueObject) {
32
+ return safeJsonParse(data.asJSON());
33
+ }
34
+ if (Array.isArray(data)) {
35
+ return data.map((item) => DomainEvent.sanitize(item));
36
+ }
37
+ if (typeof data === "object" && data !== null) {
38
+ const result = {};
39
+ for (const [key, value] of Object.entries(data)) {
40
+ result[key] = DomainEvent.sanitize(value);
41
+ }
42
+ return result;
43
+ }
44
+ return data;
45
+ }
46
+ static create(data) {
47
+ const instance = new this();
48
+ if (data) {
49
+ const sanitized = DomainEvent.sanitize(data);
50
+ Object.assign(instance, sanitized);
51
+ }
52
+ Object.assign(instance, {
53
+ uuid: generateUUID(),
54
+ createdAt: new Date().toISOString(),
55
+ });
56
+ return instance;
57
+ }
58
+ static from(event) {
59
+ const instance = new this();
60
+ Object.assign(instance, safeJsonParse(event.asJSON()));
61
+ return instance;
62
+ }
63
+ cloneWithReset() {
64
+ const clone = this.constructor.from(this);
65
+ const mutableClone = clone;
66
+ Object.assign(mutableClone, {
67
+ uuid: generateUUID(),
68
+ createdAt: new Date().toISOString(),
69
+ status: EEventStatus.PENDING,
70
+ attempts: 0,
71
+ errorMessage: null,
72
+ acknowledgedAt: null,
73
+ failedAt: null,
74
+ });
75
+ return mutableClone;
76
+ }
77
+ withAggregateId(aggregateId) {
78
+ this.aggregateId = aggregateId;
79
+ return this;
80
+ }
81
+ withSourceId(sourceId) {
82
+ this.sourceId = sourceId;
83
+ return this;
84
+ }
85
+ withCorrelationId(correlationId) {
86
+ this.correlationId = correlationId;
87
+ return this;
88
+ }
89
+ withSequence(sequence) {
90
+ this.sequence = sequence;
91
+ return this;
92
+ }
93
+ getBusinessPayload() {
94
+ const infrastructureKeys = new Set([
95
+ "uuid",
96
+ "createdAt",
97
+ "status",
98
+ "attempts",
99
+ "errorMessage",
100
+ "acknowledgedAt",
101
+ "failedAt",
102
+ "aggregateId",
103
+ "sourceId",
104
+ "correlationId",
105
+ "sequence",
106
+ ]);
107
+ const payload = {};
108
+ for (const [key, value] of Object.entries(this)) {
109
+ if (!infrastructureKeys.has(key)) {
110
+ payload[key] = value;
111
+ }
112
+ }
113
+ return payload;
114
+ }
115
+ hasSameBusinessPayload(other) {
116
+ if (this.name !== other.name)
117
+ return false;
118
+ return (safeJsonStringify(this.getBusinessPayload()) ===
119
+ safeJsonStringify(other.getBusinessPayload()));
120
+ }
121
+ markAsProcessing() {
122
+ this.status = EEventStatus.PROCESSING;
123
+ this.attempts += 1;
124
+ return this;
125
+ }
126
+ markAsAcknowledged() {
127
+ this.status = EEventStatus.ACKNOWLEDGED;
128
+ this.acknowledgedAt = new Date().toISOString();
129
+ return this;
130
+ }
131
+ markAsFailed(errorMessage) {
132
+ this.status = EEventStatus.FAILED;
133
+ this.errorMessage = errorMessage;
134
+ this.failedAt = new Date().toISOString();
135
+ return this;
136
+ }
137
+ markAsCancelled() {
138
+ this.status = EEventStatus.CANCELLED;
139
+ return this;
140
+ }
141
+ retry() {
142
+ this.status = EEventStatus.PENDING;
143
+ this.errorMessage = null;
144
+ return this;
145
+ }
146
+ get isPending() {
147
+ return this.status === EEventStatus.PENDING;
148
+ }
149
+ get isProcessing() {
150
+ return this.status === EEventStatus.PROCESSING;
151
+ }
152
+ get isAcknowledged() {
153
+ return this.status === EEventStatus.ACKNOWLEDGED;
154
+ }
155
+ get isFailed() {
156
+ return this.status === EEventStatus.FAILED;
157
+ }
158
+ get isCancelled() {
159
+ return this.status === EEventStatus.CANCELLED;
160
+ }
161
+ get isPartOfTransaction() {
162
+ return this.correlationId !== null;
163
+ }
164
+ }
@@ -0,0 +1,25 @@
1
+ import { DomainEvent } from "../../domain/event_sourcing/domain_event";
2
+ export declare class QueueStartEvent extends DomainEvent {
3
+ static readonly name = "common.queue_event.v2.start";
4
+ static readonly label = "Iniciando procesamiento de cola";
5
+ static readonly requiresNetwork = false;
6
+ readonly name = "common.queue_event.v2.start";
7
+ readonly label = "Iniciando procesamiento de cola";
8
+ readonly requiresNetwork = false;
9
+ }
10
+ export declare class QueueEndEvent extends DomainEvent {
11
+ static readonly name = "common.queue_event.v2.end";
12
+ static readonly label = "Finalizando procesamiento de cola";
13
+ static readonly requiresNetwork = false;
14
+ readonly name = "common.queue_event.v2.end";
15
+ readonly label = "Finalizando procesamiento de cola";
16
+ readonly requiresNetwork = false;
17
+ }
18
+ export declare class QueueAttemptEndEvent extends DomainEvent {
19
+ static readonly name = "common.queue_event.v2.attempt_end";
20
+ static readonly label = "Intento de procesamiento finalizado";
21
+ static readonly requiresNetwork = false;
22
+ readonly name = "common.queue_event.v2.attempt_end";
23
+ readonly label = "Intento de procesamiento finalizado";
24
+ readonly requiresNetwork = false;
25
+ }
@@ -0,0 +1,25 @@
1
+ import { DomainEvent } from "../../domain/event_sourcing/domain_event";
2
+ export class QueueStartEvent extends DomainEvent {
3
+ static name = "common.queue_event.v2.start";
4
+ static label = "Iniciando procesamiento de cola";
5
+ static requiresNetwork = false;
6
+ name = QueueStartEvent.name;
7
+ label = QueueStartEvent.label;
8
+ requiresNetwork = QueueStartEvent.requiresNetwork;
9
+ }
10
+ export class QueueEndEvent extends DomainEvent {
11
+ static name = "common.queue_event.v2.end";
12
+ static label = "Finalizando procesamiento de cola";
13
+ static requiresNetwork = false;
14
+ name = QueueEndEvent.name;
15
+ label = QueueEndEvent.label;
16
+ requiresNetwork = QueueEndEvent.requiresNetwork;
17
+ }
18
+ export class QueueAttemptEndEvent extends DomainEvent {
19
+ static name = "common.queue_event.v2.attempt_end";
20
+ static label = "Intento de procesamiento finalizado";
21
+ static requiresNetwork = false;
22
+ name = QueueAttemptEndEvent.name;
23
+ label = QueueAttemptEndEvent.label;
24
+ requiresNetwork = QueueAttemptEndEvent.requiresNetwork;
25
+ }
@@ -0,0 +1,7 @@
1
+ import { DomainEvent } from "../../domain/event_sourcing/domain_event";
2
+ export declare abstract class Subscriber {
3
+ abstract listen: (typeof DomainEvent)[];
4
+ readonly requiresAuth: boolean;
5
+ abstract process(event: DomainEvent): Promise<void>;
6
+ getEvent(event: DomainEvent): DomainEvent;
7
+ }
@@ -0,0 +1,13 @@
1
+ export class Subscriber {
2
+ requiresAuth = true;
3
+ getEvent(event) {
4
+ const EventClass = this.listen.find((E) => {
5
+ const staticName = E.name;
6
+ return staticName === event.name;
7
+ });
8
+ if (EventClass) {
9
+ return EventClass.from(event);
10
+ }
11
+ return event;
12
+ }
13
+ }
@@ -0,0 +1,2 @@
1
+ export * from "../../domain/event_sourcing/domain_event";
2
+ export * from "../../domain/event_sourcing/event_handler";
@@ -0,0 +1,2 @@
1
+ export * from "../../domain/event_sourcing/domain_event";
2
+ export * from "../../domain/event_sourcing/event_handler";
@@ -0,0 +1,33 @@
1
+ import { DomainEvent } from "../domain/event_sourcing/domain_event";
2
+ import { ISetting } from "../domain/settings";
3
+ export * from "../domain/connectivity/events";
4
+ export * from "../domain/event_sourcing/event";
5
+ export * from "../domain/print/events";
6
+ export * from "../domain/webview/events";
7
+ export declare class ActivateDomainEvent extends DomainEvent {
8
+ static readonly name = "common.domain.v2.activate";
9
+ static readonly label = "Activar dominio";
10
+ static readonly requiresNetwork = false;
11
+ readonly name = "common.domain.v2.activate";
12
+ readonly label = "Activar dominio";
13
+ readonly requiresNetwork = false;
14
+ domain: string;
15
+ }
16
+ export declare class DeactivateDomainEvent extends DomainEvent {
17
+ static readonly name = "common.domain.v2.deactivate";
18
+ static readonly label = "Desactivar dominio";
19
+ static readonly requiresNetwork = false;
20
+ readonly name = "common.domain.v2.deactivate";
21
+ readonly label = "Desactivar dominio";
22
+ readonly requiresNetwork = false;
23
+ domain: string;
24
+ }
25
+ export declare class NewAppSettingsEvent extends DomainEvent {
26
+ static readonly name = "common.settings.v2.added_new_settings";
27
+ static readonly label = "Nuevas configuraciones";
28
+ static readonly requiresNetwork = false;
29
+ readonly name = "common.settings.v2.added_new_settings";
30
+ readonly label = "Nuevas configuraciones";
31
+ readonly requiresNetwork = false;
32
+ settings: ISetting[];
33
+ }
@@ -0,0 +1,32 @@
1
+ import { DomainEvent } from "../domain/event_sourcing/domain_event";
2
+ export * from "../domain/connectivity/events";
3
+ export * from "../domain/event_sourcing/event";
4
+ export * from "../domain/print/events";
5
+ export * from "../domain/webview/events";
6
+ export class ActivateDomainEvent extends DomainEvent {
7
+ static name = "common.domain.v2.activate";
8
+ static label = "Activar dominio";
9
+ static requiresNetwork = false;
10
+ name = ActivateDomainEvent.name;
11
+ label = ActivateDomainEvent.label;
12
+ requiresNetwork = ActivateDomainEvent.requiresNetwork;
13
+ domain = "";
14
+ }
15
+ export class DeactivateDomainEvent extends DomainEvent {
16
+ static name = "common.domain.v2.deactivate";
17
+ static label = "Desactivar dominio";
18
+ static requiresNetwork = false;
19
+ name = DeactivateDomainEvent.name;
20
+ label = DeactivateDomainEvent.label;
21
+ requiresNetwork = DeactivateDomainEvent.requiresNetwork;
22
+ domain = "";
23
+ }
24
+ export class NewAppSettingsEvent extends DomainEvent {
25
+ static name = "common.settings.v2.added_new_settings";
26
+ static label = "Nuevas configuraciones";
27
+ static requiresNetwork = false;
28
+ name = NewAppSettingsEvent.name;
29
+ label = NewAppSettingsEvent.label;
30
+ requiresNetwork = NewAppSettingsEvent.requiresNetwork;
31
+ settings = [];
32
+ }
@@ -0,0 +1 @@
1
+ export type IconType = "ionicons" | "fontawesome" | "material" | "fontawesome5" | "simplelineicons" | "antdesign" | "custom" | "feather" | "MaterialCommunityIcons";
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,9 @@
1
+ export * from "../domain/connectivity";
2
+ export * from "../domain/database";
3
+ export * from "../domain/entity";
4
+ export * from "../domain/event_sourcing";
5
+ export * from "../domain/events";
6
+ export * from "../domain/icon";
7
+ export * from "../domain/receipt";
8
+ export * from "../domain/repositories";
9
+ export * from "../domain/settings";
@@ -0,0 +1,9 @@
1
+ export * from "../domain/connectivity";
2
+ export * from "../domain/database";
3
+ export * from "../domain/entity";
4
+ export * from "../domain/event_sourcing";
5
+ export * from "../domain/events";
6
+ export * from "../domain/icon";
7
+ export * from "../domain/receipt";
8
+ export * from "../domain/repositories";
9
+ export * from "../domain/settings";
@@ -0,0 +1,4 @@
1
+ import type { IPrinterDriver } from "../../domain/print/printer";
2
+ export declare function setPrinterDriver(impl: IPrinterDriver): void;
3
+ export declare function getPrinterDriver(): IPrinterDriver;
4
+ export declare function hasPrinterDriver(): boolean;
@@ -0,0 +1,29 @@
1
+ import { loggerUseCases } from "../../infrastructure/logger";
2
+ const noopDriver = {
3
+ getPairedDevices: () => [],
4
+ getPairedPrinters: () => [],
5
+ isConnected: () => false,
6
+ connectBluetooth: async () => {
7
+ loggerUseCases.warn("Printer driver no registrado: connectBluetooth ignorado");
8
+ },
9
+ disconnect: async () => { },
10
+ printText: async () => {
11
+ loggerUseCases.warn("Printer driver no registrado: printText ignorado");
12
+ },
13
+ printImageBase64: async () => {
14
+ loggerUseCases.warn("Printer driver no registrado: printImageBase64 ignorado");
15
+ },
16
+ printPdfBase64: async () => {
17
+ loggerUseCases.warn("Printer driver no registrado: printPdfBase64 ignorado");
18
+ },
19
+ };
20
+ let driver = noopDriver;
21
+ export function setPrinterDriver(impl) {
22
+ driver = impl;
23
+ }
24
+ export function getPrinterDriver() {
25
+ return driver;
26
+ }
27
+ export function hasPrinterDriver() {
28
+ return driver !== noopDriver;
29
+ }
@@ -0,0 +1,13 @@
1
+ import { DomainEvent } from "../../domain/event_sourcing";
2
+ export declare class PrintImageRequestedEvent extends DomainEvent {
3
+ static readonly name = "common.print.v1.image_requested";
4
+ static readonly label = "Imprimiendo...";
5
+ static readonly requiresNetwork = false;
6
+ readonly name = "common.print.v1.image_requested";
7
+ readonly label = "Imprimiendo...";
8
+ readonly requiresNetwork = false;
9
+ imageBase64: string;
10
+ width: number;
11
+ height: number;
12
+ title: string;
13
+ }
@@ -0,0 +1,13 @@
1
+ import { DomainEvent } from "../../domain/event_sourcing";
2
+ export class PrintImageRequestedEvent extends DomainEvent {
3
+ static name = "common.print.v1.image_requested";
4
+ static label = "Imprimiendo...";
5
+ static requiresNetwork = false;
6
+ name = PrintImageRequestedEvent.name;
7
+ label = PrintImageRequestedEvent.label;
8
+ requiresNetwork = PrintImageRequestedEvent.requiresNetwork;
9
+ imageBase64 = "";
10
+ width = 0;
11
+ height = 0;
12
+ title = "";
13
+ }
@@ -0,0 +1,2 @@
1
+ export { getPrinterDriver, hasPrinterDriver, setPrinterDriver, } from "../../domain/print/driver_registry";
2
+ export type { BluetoothDevice, IPrinterDriver, ISelectedPrinter, PairedPrinter, PrintTextOptions, } from "../../domain/print/printer";
@@ -0,0 +1 @@
1
+ export { getPrinterDriver, hasPrinterDriver, setPrinterDriver, } from "../../domain/print/driver_registry";
@@ -0,0 +1,35 @@
1
+ export interface ISelectedPrinter {
2
+ name: string;
3
+ address: string;
4
+ selectedAt: string;
5
+ }
6
+ export interface BluetoothDevice {
7
+ name: string;
8
+ address: string;
9
+ isPrinter?: boolean;
10
+ }
11
+ export interface PairedPrinter {
12
+ name: string;
13
+ address: string;
14
+ isPrinter?: boolean;
15
+ }
16
+ export interface PrintTextOptions {
17
+ alignment?: "left" | "center" | "right";
18
+ bold?: boolean;
19
+ fontSize?: "small" | "medium" | "large";
20
+ }
21
+ /**
22
+ * Puerto del driver de impresora. El core es agnóstico del hardware: la app
23
+ * (o un addon) provee una implementación concreta (p. ej. Bluetooth vía
24
+ * @sincpro/printer-expo) y la registra con setPrinterDriver() al bootstrap.
25
+ */
26
+ export interface IPrinterDriver {
27
+ getPairedDevices(): BluetoothDevice[];
28
+ getPairedPrinters(): PairedPrinter[];
29
+ isConnected(): boolean;
30
+ connectBluetooth(address: string, timeoutMs?: number): Promise<void>;
31
+ disconnect(): Promise<void>;
32
+ printText(text: string, options?: PrintTextOptions): Promise<void>;
33
+ printImageBase64(base64Data: string, options?: unknown): Promise<void>;
34
+ printPdfBase64(base64Data: string, page?: number): Promise<void>;
35
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Maps data keys to display labels. Use `false` to render value centered without label.
3
+ * Use `"separator"` to render a divider line.
4
+ * Use `{ label: string, renderAs: "table" | "list" | "text" }` for custom rendering.
5
+ * You can also control alignment for unlabeled (false) values with `{ label: false, align: "left" | "center" | "right" }`.
6
+ * When `label` is a string you may also optionally provide `align` (defaults to left in key-value rows, center for unlabeled rows).
7
+ */
8
+ export type LabelMap = Record<string, string | false | "separator" | {
9
+ label: string | boolean;
10
+ renderAs?: "table" | "list" | "text";
11
+ align?: "left" | "center" | "right";
12
+ }>;
13
+ /**
14
+ * Optional formatters per key for custom value rendering.
15
+ */
16
+ export type FormatterMap = Record<string, (value: any) => any>;
17
+ export interface ReceiptPrintableResponse {
18
+ data: Record<string, any>;
19
+ labels: LabelMap;
20
+ formatters?: FormatterMap;
21
+ order?: string[];
22
+ strictOrder?: boolean;
23
+ emptyPlaceholder?: string;
24
+ }
25
+ /**
26
+ * Interface for entities that can be exported as printable receipts.
27
+ * Implemented by SaleOrder, Invoice, and CreditNote.
28
+ */
29
+ export interface IReceiptExporter {
30
+ exportReceiptDefinition(userName?: string): ReceiptPrintableResponse;
31
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,6 @@
1
+ export declare enum ECommonRepository {
2
+ DATABASE_TABLE = "common.databaseTable",
3
+ DOMAIN_EVENT = "common.domainEvent",
4
+ DOMAIN_EVENT_DEAD_LETTER = "common.domainEventDeadLetter",
5
+ SETTINGS = "common.settings"
6
+ }
@@ -0,0 +1,7 @@
1
+ export var ECommonRepository;
2
+ (function (ECommonRepository) {
3
+ ECommonRepository["DATABASE_TABLE"] = "common.databaseTable";
4
+ ECommonRepository["DOMAIN_EVENT"] = "common.domainEvent";
5
+ ECommonRepository["DOMAIN_EVENT_DEAD_LETTER"] = "common.domainEventDeadLetter";
6
+ ECommonRepository["SETTINGS"] = "common.settings";
7
+ })(ECommonRepository || (ECommonRepository = {}));
@@ -0,0 +1,7 @@
1
+ export declare const enum ECommonSetting {
2
+ SELECTED_PRINTER = "common.selected_printer"
3
+ }
4
+ export interface ISetting {
5
+ key: string;
6
+ value: unknown;
7
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,11 @@
1
+ import { DomainEvent } from "../../domain/event_sourcing";
2
+ export declare class WebViewMessageReceivedEvent extends DomainEvent {
3
+ static readonly name = "common.webview.v1.message_received";
4
+ static readonly label = "Procesando datos de la web";
5
+ static readonly requiresNetwork = false;
6
+ readonly name = "common.webview.v1.message_received";
7
+ readonly label = "Procesando datos de la web";
8
+ readonly requiresNetwork = false;
9
+ raw: string;
10
+ source: string;
11
+ }