@munchi_oy/react-native-epson-printer 1.0.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 (87) hide show
  1. package/README.md +223 -0
  2. package/android/build.gradle +34 -0
  3. package/android/consumer-rules.pro +0 -0
  4. package/android/libs/ePOS2.jar +0 -0
  5. package/android/src/main/AndroidManifest.xml +17 -0
  6. package/android/src/main/java/com/munchiepsonprinter/MunchiEpsonModule.java +1212 -0
  7. package/android/src/main/java/com/munchiepsonprinter/MunchiPrinterPackage.java +24 -0
  8. package/android/src/main/jniLibs/arm64-v8a/libepos2.so +0 -0
  9. package/android/src/main/jniLibs/armeabi-v7a/libepos2.so +0 -0
  10. package/android/src/main/jniLibs/x86/libepos2.so +0 -0
  11. package/android/src/main/jniLibs/x86_64/libepos2.so +0 -0
  12. package/dist/config.d.ts +14 -0
  13. package/dist/config.d.ts.map +1 -0
  14. package/dist/epson/constants.d.ts +124 -0
  15. package/dist/epson/constants.d.ts.map +1 -0
  16. package/dist/epson/discovery.d.ts +14 -0
  17. package/dist/epson/discovery.d.ts.map +1 -0
  18. package/dist/epson/driver.d.ts +26 -0
  19. package/dist/epson/driver.d.ts.map +1 -0
  20. package/dist/epson/errors.d.ts +8 -0
  21. package/dist/epson/errors.d.ts.map +1 -0
  22. package/dist/epson/eventRouter.d.ts +23 -0
  23. package/dist/epson/eventRouter.d.ts.map +1 -0
  24. package/dist/epson/mapper.d.ts +22 -0
  25. package/dist/epson/mapper.d.ts.map +1 -0
  26. package/dist/epson/modelUtils.d.ts +16 -0
  27. package/dist/epson/modelUtils.d.ts.map +1 -0
  28. package/dist/epson/native.d.ts +21 -0
  29. package/dist/epson/native.d.ts.map +1 -0
  30. package/dist/epson/payloadMapper.d.ts +7 -0
  31. package/dist/epson/payloadMapper.d.ts.map +1 -0
  32. package/dist/epson/queueController.d.ts +15 -0
  33. package/dist/epson/queueController.d.ts.map +1 -0
  34. package/dist/epson/recoveryController.d.ts +15 -0
  35. package/dist/epson/recoveryController.d.ts.map +1 -0
  36. package/dist/epson/sessionManager.d.ts +11 -0
  37. package/dist/epson/sessionManager.d.ts.map +1 -0
  38. package/dist/errorResolver.d.ts +15 -0
  39. package/dist/errorResolver.d.ts.map +1 -0
  40. package/dist/errors.d.ts +23 -0
  41. package/dist/errors.d.ts.map +1 -0
  42. package/dist/index.d.ts +15 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +11 -0
  45. package/dist/index.mjs +11 -0
  46. package/dist/react/PrinterProvider.d.ts +19 -0
  47. package/dist/react/PrinterProvider.d.ts.map +1 -0
  48. package/dist/react/usePrinterStatus.d.ts +12 -0
  49. package/dist/react/usePrinterStatus.d.ts.map +1 -0
  50. package/dist/types.d.ts +123 -0
  51. package/dist/types.d.ts.map +1 -0
  52. package/dist/utils/errorUtils.d.ts +3 -0
  53. package/dist/utils/errorUtils.d.ts.map +1 -0
  54. package/dist/version.d.ts +2 -0
  55. package/dist/version.d.ts.map +1 -0
  56. package/ios/MunchiPrinter-Bridging-Header.h +4 -0
  57. package/ios/Vendors/Epson/Frameworks/libepos2.xcframework/Info.plist +48 -0
  58. package/ios/Vendors/Epson/Frameworks/libepos2.xcframework/_CodeSignature/CodeDirectory +0 -0
  59. package/ios/Vendors/Epson/Frameworks/libepos2.xcframework/_CodeSignature/CodeRequirements +0 -0
  60. package/ios/Vendors/Epson/Frameworks/libepos2.xcframework/_CodeSignature/CodeRequirements-1 +0 -0
  61. package/ios/Vendors/Epson/Frameworks/libepos2.xcframework/_CodeSignature/CodeResources +398 -0
  62. package/ios/Vendors/Epson/Frameworks/libepos2.xcframework/_CodeSignature/CodeSignature +0 -0
  63. package/ios/Vendors/Epson/Frameworks/libepos2.xcframework/ios-arm64/dSYMs/libepos2.framework.dSYM/Contents/Info.plist +20 -0
  64. package/ios/Vendors/Epson/Frameworks/libepos2.xcframework/ios-arm64/dSYMs/libepos2.framework.dSYM/Contents/Resources/DWARF/libepos2 +0 -0
  65. package/ios/Vendors/Epson/Frameworks/libepos2.xcframework/ios-arm64/dSYMs/libepos2.framework.dSYM/Contents/Resources/Relocations/aarch64/libepos2.yml +5177 -0
  66. package/ios/Vendors/Epson/Frameworks/libepos2.xcframework/ios-arm64/libepos2.framework/Headers/ePOS2.h +1809 -0
  67. package/ios/Vendors/Epson/Frameworks/libepos2.xcframework/ios-arm64/libepos2.framework/Headers/libepos2.h +13 -0
  68. package/ios/Vendors/Epson/Frameworks/libepos2.xcframework/ios-arm64/libepos2.framework/Info.plist +0 -0
  69. package/ios/Vendors/Epson/Frameworks/libepos2.xcframework/ios-arm64/libepos2.framework/Modules/module.modulemap +6 -0
  70. package/ios/Vendors/Epson/Frameworks/libepos2.xcframework/ios-arm64/libepos2.framework/PrivacyInfo.xcprivacy +31 -0
  71. package/ios/Vendors/Epson/Frameworks/libepos2.xcframework/ios-arm64/libepos2.framework/libepos2 +0 -0
  72. package/ios/Vendors/Epson/Frameworks/libepos2.xcframework/ios-arm64_x86_64-simulator/dSYMs/libepos2.framework.dSYM/Contents/Info.plist +20 -0
  73. package/ios/Vendors/Epson/Frameworks/libepos2.xcframework/ios-arm64_x86_64-simulator/dSYMs/libepos2.framework.dSYM/Contents/Resources/DWARF/libepos2 +0 -0
  74. package/ios/Vendors/Epson/Frameworks/libepos2.xcframework/ios-arm64_x86_64-simulator/dSYMs/libepos2.framework.dSYM/Contents/Resources/Relocations/aarch64/libepos2.yml +5177 -0
  75. package/ios/Vendors/Epson/Frameworks/libepos2.xcframework/ios-arm64_x86_64-simulator/dSYMs/libepos2.framework.dSYM/Contents/Resources/Relocations/x86_64/libepos2.yml +5062 -0
  76. package/ios/Vendors/Epson/Frameworks/libepos2.xcframework/ios-arm64_x86_64-simulator/libepos2.framework/Headers/ePOS2.h +1809 -0
  77. package/ios/Vendors/Epson/Frameworks/libepos2.xcframework/ios-arm64_x86_64-simulator/libepos2.framework/Headers/libepos2.h +13 -0
  78. package/ios/Vendors/Epson/Frameworks/libepos2.xcframework/ios-arm64_x86_64-simulator/libepos2.framework/Info.plist +0 -0
  79. package/ios/Vendors/Epson/Frameworks/libepos2.xcframework/ios-arm64_x86_64-simulator/libepos2.framework/Modules/module.modulemap +6 -0
  80. package/ios/Vendors/Epson/Frameworks/libepos2.xcframework/ios-arm64_x86_64-simulator/libepos2.framework/PrivacyInfo.xcprivacy +31 -0
  81. package/ios/Vendors/Epson/Frameworks/libepos2.xcframework/ios-arm64_x86_64-simulator/libepos2.framework/_CodeSignature/CodeResources +146 -0
  82. package/ios/Vendors/Epson/Frameworks/libepos2.xcframework/ios-arm64_x86_64-simulator/libepos2.framework/libepos2 +0 -0
  83. package/ios/Vendors/Epson/MunchiEpsonModule.m +35 -0
  84. package/ios/Vendors/Epson/MunchiEpsonModule.swift +455 -0
  85. package/munchi-printer.podspec +22 -0
  86. package/package.json +59 -0
  87. package/react-native.config.js +12 -0
@@ -0,0 +1,24 @@
1
+ package com.munchiepsonprinter;
2
+
3
+ import com.facebook.react.ReactPackage;
4
+ import com.facebook.react.bridge.NativeModule;
5
+ import com.facebook.react.bridge.ReactApplicationContext;
6
+ import com.facebook.react.uimanager.ViewManager;
7
+
8
+ import java.util.ArrayList;
9
+ import java.util.Collections;
10
+ import java.util.List;
11
+
12
+ public class MunchiPrinterPackage implements ReactPackage {
13
+ @Override
14
+ public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
15
+ List<NativeModule> modules = new ArrayList<>();
16
+ modules.add(new MunchiEpsonModule(reactContext));
17
+ return modules;
18
+ }
19
+
20
+ @Override
21
+ public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
22
+ return Collections.emptyList();
23
+ }
24
+ }
@@ -0,0 +1,14 @@
1
+ import { PrinterLogger } from './types';
2
+ /**
3
+ * Sets the global logger instance for the printer SDK.
4
+ * This logger will be used by all printer instances created via getPrinter()
5
+ * if no specific logger is provided in their config.
6
+ *
7
+ * Call this once at the start of your application.
8
+ */
9
+ export declare const setGlobalLogger: (logger: PrinterLogger) => void;
10
+ /**
11
+ * Retrieves the currently configured global logger.
12
+ */
13
+ export declare const getGlobalLogger: () => PrinterLogger | undefined;
14
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAQxC;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,aAAa,SAEpD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,iCAA4B,CAAC"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * TypeScript mirror of Epson ePOS2 SDK enums.
3
+ * Source: libepos2.xcframework/ios-arm64/libepos2.framework/Headers/ePOS2.h
4
+ *
5
+ * Native enums are compiled into the iOS binary and not accessible from JS.
6
+ * Keep these in sync with ePOS2.h when upgrading the SDK.
7
+ */
8
+ export declare enum Epos2StatusEvent {
9
+ ONLINE = 0,
10
+ OFFLINE = 1,
11
+ POWER_OFF = 2,
12
+ COVER_CLOSE = 3,
13
+ COVER_OPEN = 4,
14
+ PAPER_OK = 5,
15
+ PAPER_NEAR_END = 6,
16
+ PAPER_EMPTY = 7,
17
+ DRAWER_HIGH = 8,
18
+ DRAWER_LOW = 9,
19
+ BATTERY_ENOUGH = 10,
20
+ BATTERY_EMPTY = 11,
21
+ AUTO_RECOVER_ERROR = 20,
22
+ AUTO_RECOVER_OK = 21,
23
+ UNRECOVERABLE_ERROR = 22
24
+ }
25
+ export declare enum Epos2ConnectionEvent {
26
+ RECONNECTING = 0,
27
+ RECONNECT = 1,
28
+ DISCONNECT = 2
29
+ }
30
+ export declare enum Epos2ErrorStatus {
31
+ SUCCESS = 0,
32
+ ERR_PARAM = 1,
33
+ ERR_CONNECT = 2,
34
+ ERR_TIMEOUT = 3,
35
+ ERR_MEMORY = 4,
36
+ ERR_ILLEGAL = 5,
37
+ ERR_PROCESSING = 6,
38
+ ERR_NOT_FOUND = 7,
39
+ ERR_IN_USE = 8,
40
+ ERR_TYPE_INVALID = 9,
41
+ ERR_DISCONNECT = 10,
42
+ ERR_ALREADY_OPENED = 11,
43
+ ERR_ALREADY_USED = 12,
44
+ ERR_BOX_COUNT_OVER = 13,
45
+ ERR_BOX_CLIENT_OVER = 14,
46
+ ERR_UNSUPPORTED = 15,
47
+ ERR_DEVICE_BUSY = 16,
48
+ ERR_RECOVERY_FAILURE = 17,
49
+ ERR_FAILURE = 255
50
+ }
51
+ export declare enum Epos2CallbackCode {
52
+ SUCCESS = 0,
53
+ ERR_TIMEOUT = 1,
54
+ ERR_NOT_FOUND = 2,
55
+ ERR_AUTORECOVER = 3,
56
+ ERR_COVER_OPEN = 4,
57
+ ERR_CUTTER = 5,
58
+ ERR_MECHANICAL = 6,
59
+ ERR_EMPTY = 7,
60
+ ERR_UNRECOVERABLE = 8,
61
+ ERR_SYSTEM = 9,
62
+ ERR_PORT = 10,
63
+ ERR_FAILURE = 255
64
+ }
65
+ export declare enum Epos2Lang {
66
+ EN = 0,
67
+ JA = 1,
68
+ ZH_CN = 2,
69
+ ZH_TW = 3,
70
+ KO = 4,
71
+ TH = 5,
72
+ VI = 6,
73
+ MULTI = 7
74
+ }
75
+ export declare enum Epos2Font {
76
+ FONT_A = 0,
77
+ FONT_B = 1,
78
+ FONT_C = 2,
79
+ FONT_D = 3,
80
+ FONT_E = 4
81
+ }
82
+ /**
83
+ * Epson printer series constants.
84
+ * Integer values mirror Epos2PrinterSeries from ePOS2.h — must stay in sync with SDK.
85
+ * Source: libepos2.xcframework/.../Headers/ePOS2.h (Epos2PrinterSeries enum)
86
+ *
87
+ * Pass to EpsonPrinter.connect() as the `model` parameter.
88
+ * The Swift layer uses this integer to initialize Epos2Printer(printerSeries:lang:).
89
+ */
90
+ export declare enum EpsonModel {
91
+ TM_M10 = 0,
92
+ TM_M30 = 1,
93
+ TM_P20 = 2,
94
+ TM_P60 = 3,
95
+ TM_P60II = 4,
96
+ TM_P80 = 5,
97
+ TM_T20 = 6,
98
+ TM_T60 = 7,
99
+ TM_T70 = 8,
100
+ TM_T81 = 9,
101
+ TM_T82 = 10,
102
+ TM_T83 = 11,
103
+ TM_T88 = 12,
104
+ TM_T90 = 13,
105
+ TM_T90KP = 14,
106
+ TM_U220 = 15,
107
+ TM_U330 = 16,
108
+ TM_L90 = 17,
109
+ TM_H6000 = 18,
110
+ TM_T83III = 19,
111
+ TM_T100 = 20,
112
+ TM_M30II = 21,
113
+ TM_M50 = 23,
114
+ TM_T88VII = 24,
115
+ TM_L90LFC = 25,
116
+ TM_L100 = 26,
117
+ TM_P20II = 27,
118
+ TM_P80II = 28,
119
+ TM_M30III = 29,
120
+ TM_M50II = 30,
121
+ TM_M55 = 31,
122
+ TM_U220II = 32
123
+ }
124
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/epson/constants.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,oBAAY,gBAAgB;IAC1B,MAAM,IAAI;IACV,OAAO,IAAI;IACX,SAAS,IAAI;IACb,WAAW,IAAI;IACf,UAAU,IAAI;IACd,QAAQ,IAAI;IACZ,cAAc,IAAI;IAClB,WAAW,IAAI;IACf,WAAW,IAAI;IACf,UAAU,IAAI;IACd,cAAc,KAAK;IACnB,aAAa,KAAK;IAClB,kBAAkB,KAAK;IACvB,eAAe,KAAK;IACpB,mBAAmB,KAAK;CACzB;AAED,oBAAY,oBAAoB;IAC9B,YAAY,IAAI;IAChB,SAAS,IAAI;IACb,UAAU,IAAI;CACf;AAED,oBAAY,gBAAgB;IAC1B,OAAO,IAAI;IACX,SAAS,IAAI;IACb,WAAW,IAAI;IACf,WAAW,IAAI;IACf,UAAU,IAAI;IACd,WAAW,IAAI;IACf,cAAc,IAAI;IAClB,aAAa,IAAI;IACjB,UAAU,IAAI;IACd,gBAAgB,IAAI;IACpB,cAAc,KAAK;IACnB,kBAAkB,KAAK;IACvB,gBAAgB,KAAK;IACrB,kBAAkB,KAAK;IACvB,mBAAmB,KAAK;IACxB,eAAe,KAAK;IACpB,eAAe,KAAK;IACpB,oBAAoB,KAAK;IACzB,WAAW,MAAM;CAClB;AAED,oBAAY,iBAAiB;IAC3B,OAAO,IAAI;IACX,WAAW,IAAI;IACf,aAAa,IAAI;IACjB,eAAe,IAAI;IACnB,cAAc,IAAI;IAClB,UAAU,IAAI;IACd,cAAc,IAAI;IAClB,SAAS,IAAI;IACb,iBAAiB,IAAI;IACrB,UAAU,IAAI;IACd,QAAQ,KAAK;IACb,WAAW,MAAM;CAClB;AAED,oBAAY,SAAS;IACnB,EAAE,IAAI;IACN,EAAE,IAAI;IACN,KAAK,IAAI;IACT,KAAK,IAAI;IACT,EAAE,IAAI;IACN,EAAE,IAAI;IACN,EAAE,IAAI;IACN,KAAK,IAAI;CACV;AAED,oBAAY,SAAS;IACnB,MAAM,IAAI;IACV,MAAM,IAAI;IACV,MAAM,IAAI;IACV,MAAM,IAAI;IACV,MAAM,IAAI;CACX;AAED;;;;;;;GAOG;AACH,oBAAY,UAAU;IACpB,MAAM,IAAO;IACb,MAAM,IAAO;IACb,MAAM,IAAO;IACb,MAAM,IAAO;IACb,QAAQ,IAAK;IACb,MAAM,IAAO;IACb,MAAM,IAAO;IACb,MAAM,IAAO;IACb,MAAM,IAAO;IACb,MAAM,IAAO;IACb,MAAM,KAAQ;IACd,MAAM,KAAQ;IACd,MAAM,KAAQ;IACd,MAAM,KAAQ;IACd,QAAQ,KAAM;IACd,OAAO,KAAO;IACd,OAAO,KAAO;IACd,MAAM,KAAQ;IACd,QAAQ,KAAM;IACd,SAAS,KAAK;IACd,OAAO,KAAO;IACd,QAAQ,KAAM;IACd,MAAM,KAAQ;IACd,SAAS,KAAK;IACd,SAAS,KAAK;IACd,OAAO,KAAO;IACd,QAAQ,KAAM;IACd,QAAQ,KAAM;IACd,SAAS,KAAK;IACd,QAAQ,KAAM;IACd,MAAM,KAAQ;IACd,SAAS,KAAK;CACf"}
@@ -0,0 +1,14 @@
1
+ import { MunchiPrinter } from '../types';
2
+ export type ConnectionType = 'bluetooth' | 'tcp' | 'usb';
3
+ export interface DiscoveryParams {
4
+ timeout?: number;
5
+ connectionType?: ConnectionType;
6
+ }
7
+ /**
8
+ * Discovers available Epson printers via Bluetooth, TCP/LAN, or USB.
9
+ *
10
+ * - Sub-device entries (e.g. `[local_display]`, `[local_TSE]`) are always excluded.
11
+ * - Use `connectionType` to filter by connection method.
12
+ */
13
+ export declare const discoverPrinters: (params: DiscoveryParams) => Promise<MunchiPrinter[]>;
14
+ //# sourceMappingURL=discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/epson/discovery.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAUzC,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,KAAK,GAAG,KAAK,CAAC;AAEzD,MAAM,WAAW,eAAe;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,cAAc,CAAC;CACnC;AAiBD;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAU,QAAQ,eAAe,KAAG,OAAO,CAAC,aAAa,EAAE,CAoBvF,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { EpsonPrinterConfig, MunchiEmbeddedPayload, PrinterConnectionStatus, PrinterStatus, PrintJob } from '../types';
2
+ export declare class EpsonPrinter {
3
+ private disconnectTimer;
4
+ private connectionStatus;
5
+ private isConnecting;
6
+ private target;
7
+ private readonly defaultTarget;
8
+ private readonly model;
9
+ private readonly lang;
10
+ private logger?;
11
+ private readonly sessionManager;
12
+ private readonly queueController;
13
+ private readonly recoveryController;
14
+ private readonly eventRouter;
15
+ constructor(config: EpsonPrinterConfig);
16
+ private resumeQueue;
17
+ connect(target?: string, timeout?: number): Promise<void>;
18
+ print(job: PrintJob): Promise<void>;
19
+ private performDisconnect;
20
+ printEmbedded(payload: MunchiEmbeddedPayload): Promise<void>;
21
+ disconnect(): Promise<void>;
22
+ getStatus(): Promise<PrinterStatus>;
23
+ openDrawer(): Promise<void>;
24
+ onConnectionChange(callback: (status: PrinterConnectionStatus) => void): () => void;
25
+ }
26
+ //# sourceMappingURL=driver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../src/epson/driver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,uBAAuB,EAAiB,aAAa,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAqB3I,qBAAa,YAAY;IACvB,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,gBAAgB,CAA2C;IACnE,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;IACjC,OAAO,CAAC,MAAM,CAAC,CAAgB;IAC/B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsB;IACrD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAuB;IACvD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA0B;IAC7D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmB;gBAEnC,MAAM,EAAE,kBAAkB;IA+BtC,OAAO,CAAC,WAAW;IAQb,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,MAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA+C/D,KAAK,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAiDzC,OAAO,CAAC,iBAAiB;IAoBnB,aAAa,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAa5D,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA2B3B,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC;IAkBnC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKjC,kBAAkB,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,uBAAuB,KAAK,IAAI,GAAG,MAAM,IAAI;CAGpF"}
@@ -0,0 +1,8 @@
1
+ import { MunchiPrinterError, PrinterErrorCode, PrinterTranslationCode } from '../errors';
2
+ export declare class PrinterError extends MunchiPrinterError {
3
+ readonly isHardwareError: boolean;
4
+ constructor(isHardwareError: boolean, code: PrinterErrorCode, translationCode: PrinterTranslationCode, message: string, originalError?: unknown);
5
+ }
6
+ export declare const isHardwareError: (error: any) => boolean;
7
+ export declare const createPrinterError: (error: any) => PrinterError;
8
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/epson/errors.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAGzF,qBAAa,YAAa,SAAQ,kBAAkB;aAE5B,eAAe,EAAE,OAAO;gBAAxB,eAAe,EAAE,OAAO,EACxC,IAAI,EAAE,gBAAgB,EACtB,eAAe,EAAE,sBAAsB,EACvC,OAAO,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,OAAO;CAO9B;AAED,eAAO,MAAM,eAAe,GAAI,OAAO,GAAG,KAAG,OAwB5C,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,OAAO,GAAG,KAAG,YAiB/C,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { PrinterConnectionStatus, PrinterLogger } from '../types';
2
+ import { Epos2StatusEvent } from './constants';
3
+ interface EpsonEventRouterConfig {
4
+ logger?: PrinterLogger;
5
+ getSessionId: () => string | null;
6
+ getConnectionStatus: () => PrinterConnectionStatus;
7
+ onRecoveryEvent: (eventType: Epos2StatusEvent) => void;
8
+ onConnectionEvent: (status: PrinterConnectionStatus) => void;
9
+ }
10
+ export declare class EpsonEventRouter {
11
+ private config;
12
+ private statusSubscription;
13
+ private connectionSubscription;
14
+ private connectionCallbacks;
15
+ constructor(config: EpsonEventRouterConfig);
16
+ emitStatus(status: PrinterConnectionStatus): void;
17
+ ensureStatusListener(): void;
18
+ ensureConnectionListener(): void;
19
+ removeStatusListener(): void;
20
+ onConnectionChange(callback: (status: PrinterConnectionStatus) => void): () => void;
21
+ }
22
+ export {};
23
+ //# sourceMappingURL=eventRouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventRouter.d.ts","sourceRoot":"","sources":["../../src/epson/eventRouter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAU/C,UAAU,sBAAsB;IAC9B,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,YAAY,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAClC,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;IACnD,eAAe,EAAE,CAAC,SAAS,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACvD,iBAAiB,EAAE,CAAC,MAAM,EAAE,uBAAuB,KAAK,IAAI,CAAC;CAC9D;AAED,qBAAa,gBAAgB;IAKf,OAAO,CAAC,MAAM;IAJ1B,OAAO,CAAC,kBAAkB,CAAuC;IACjE,OAAO,CAAC,sBAAsB,CAAuC;IACrE,OAAO,CAAC,mBAAmB,CAA6D;gBAEpE,MAAM,EAAE,sBAAsB;IAElD,UAAU,CAAC,MAAM,EAAE,uBAAuB,GAAG,IAAI;IAMjD,oBAAoB,IAAI,IAAI;IAoB5B,wBAAwB,IAAI,IAAI;IAyBhC,oBAAoB,IAAI,IAAI;IAM5B,kBAAkB,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,uBAAuB,KAAK,IAAI,GAAG,MAAM,IAAI;CAcpF"}
@@ -0,0 +1,22 @@
1
+ import { PrintJob } from '../types';
2
+ export declare enum EpsonNativeCommandEnum {
3
+ ADD_TEXT = "addText",
4
+ ADD_TEXT_ALIGN = "addTextAlign",
5
+ ADD_TEXT_STYLE = "addTextStyle",
6
+ ADD_TEXT_SIZE = "addTextSize",
7
+ ADD_FEED_LINE = "addFeedLine",
8
+ ADD_IMAGE = "addImage",
9
+ ADD_CUT = "addCut",
10
+ ADD_PULSE = "addPulse",
11
+ ADD_BARCODE = "addBarcode",
12
+ ADD_SYMBOL = "addSymbol",
13
+ ADD_TEXT_LANG = "addTextLang",
14
+ ADD_TEXT_FONT = "addTextFont"
15
+ }
16
+ export interface EpsonNativeCommand {
17
+ cmd: EpsonNativeCommandEnum;
18
+ [key: string]: any;
19
+ }
20
+ export declare const mapEpsonDiscoveryResult: (result: unknown) => any;
21
+ export declare const mapEpsonCommand: (job: PrintJob) => EpsonNativeCommand[];
22
+ //# sourceMappingURL=mapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapper.d.ts","sourceRoot":"","sources":["../../src/epson/mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAY,MAAM,UAAU,CAAC;AAE9C,oBAAY,sBAAsB;IAChC,QAAQ,YAAY;IACpB,cAAc,iBAAiB;IAC/B,cAAc,iBAAiB;IAC/B,aAAa,gBAAgB;IAC7B,aAAa,gBAAgB;IAC7B,SAAS,aAAa;IACtB,OAAO,WAAW;IAClB,SAAS,aAAa;IACtB,WAAW,eAAe;IAC1B,UAAU,cAAc;IACxB,aAAa,gBAAgB;IAC7B,aAAa,gBAAgB;CAC9B;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,sBAAsB,CAAC;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAsBD,eAAO,MAAM,uBAAuB,GAAI,QAAQ,OAAO,KAAG,GAiBzD,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,KAAK,QAAQ,KAAG,kBAAkB,EAoFjE,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { EpsonModel } from './constants';
2
+ /**
3
+ * Resolves an EpsonModel from a Bluetooth device name.
4
+ *
5
+ * Epson Bluetooth printers advertise names like "TM-m30III_050937"
6
+ * where the suffix after "_" is the last 3 bytes of the MAC address.
7
+ * This function strips the suffix and matches the model prefix.
8
+ *
9
+ * Returns null if the name doesn't match any known model.
10
+ *
11
+ * @example
12
+ * resolveModelFromBluetoothName('TM-m30III_050937') // → EpsonModel.TM_M30III
13
+ * resolveModelFromBluetoothName('TM-T88VI_A1B2C3') // → EpsonModel.TM_T88
14
+ */
15
+ export declare const resolveModelFromBluetoothName: (deviceName: string) => EpsonModel | null;
16
+ //# sourceMappingURL=modelUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelUtils.d.ts","sourceRoot":"","sources":["../../src/epson/modelUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AA8CzC;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,6BAA6B,GAAI,YAAY,MAAM,KAAG,UAAU,GAAG,IAK/E,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { NativeEventEmitter } from 'react-native';
2
+ import type { MunchiPrinter, PrinterStatus } from '../types';
3
+ import { Epos2Lang, EpsonModel } from './constants';
4
+ import { EpsonNativeCommand } from './mapper';
5
+ export interface MunchiEpsonModuleSpec {
6
+ initSession(): Promise<string>;
7
+ disposeSession(sessionId: string): Promise<void>;
8
+ discover(params: {
9
+ timeout?: number;
10
+ }): Promise<MunchiPrinter[]>;
11
+ connect(sessionId: string, target: string, timeout: number, model: EpsonModel, lang?: Epos2Lang): Promise<void>;
12
+ disconnect(sessionId: string): Promise<void>;
13
+ print(sessionId: string, commands: EpsonNativeCommand[]): Promise<void>;
14
+ getStatus(sessionId: string): Promise<PrinterStatus>;
15
+ addListener(eventName: string): void;
16
+ removeListeners(count: number): void;
17
+ }
18
+ export declare const MunchiEpsonModule: MunchiEpsonModuleSpec;
19
+ export declare const getEpsonEmitter: () => NativeEventEmitter | null;
20
+ export declare const retryOperation: <T>(operation: () => Promise<T>, attempts?: number, delay?: number) => Promise<T>;
21
+ //# sourceMappingURL=native.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../src/epson/native.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAiB,MAAM,cAAc,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,WAAW,qBAAqB;IACpC,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,QAAQ,CAAC,MAAM,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IACjE,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACrD,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,eAAO,MAAM,iBAAiB,EAAsC,qBAAqB,CAAC;AAE1F,eAAO,MAAM,eAAe,iCAI3B,CAAC;AA+BF,eAAO,MAAM,cAAc,GAAU,CAAC,EACpC,WAAW,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,WAAU,MAAU,EACpB,QAAO,MAAY,KAClB,OAAO,CAAC,CAAC,CA6BX,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { MunchiEmbeddedPayload, PrintJob } from '../types';
2
+ /**
3
+ * Expands a compact embedded payload into a PrintJob optimized for Epson printers.
4
+ * Handles header generation (ID, Time, Table) and line formatting.
5
+ */
6
+ export declare const expandEmbeddedPayload: (payload: MunchiEmbeddedPayload) => PrintJob;
7
+ //# sourceMappingURL=payloadMapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payloadMapper.d.ts","sourceRoot":"","sources":["../../src/epson/payloadMapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAA0B,MAAM,UAAU,CAAC;AAEnF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAAI,SAAS,qBAAqB,KAAG,QAmEtE,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { PrinterLogger } from '../types';
2
+ export declare class EpsonQueueController {
3
+ private logger?;
4
+ private queue;
5
+ private isQueuePaused;
6
+ private resumeQueueResolver;
7
+ constructor(logger?: PrinterLogger | undefined);
8
+ isPaused(): boolean;
9
+ pause(): void;
10
+ resume(): void;
11
+ waitUntilResumed(): Promise<void>;
12
+ enqueue<T>(task: () => Promise<T>): Promise<T>;
13
+ enqueueBackground(task: () => Promise<void>): void;
14
+ }
15
+ //# sourceMappingURL=queueController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queueController.d.ts","sourceRoot":"","sources":["../../src/epson/queueController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,qBAAa,oBAAoB;IAKnB,OAAO,CAAC,MAAM,CAAC;IAJ3B,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,mBAAmB,CAA6B;gBAEpC,MAAM,CAAC,EAAE,aAAa,YAAA;IAE1C,QAAQ,IAAI,OAAO;IAInB,KAAK,IAAI,IAAI;IAIb,MAAM,IAAI,IAAI;IASR,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAYvC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAqB9C,iBAAiB,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;CAGnD"}
@@ -0,0 +1,15 @@
1
+ import type { PrinterLogger, PrinterStatus } from '../types';
2
+ interface EpsonRecoveryControllerConfig {
3
+ logger?: PrinterLogger;
4
+ getStatus: () => Promise<PrinterStatus>;
5
+ onRecovered: () => void;
6
+ }
7
+ export declare class EpsonRecoveryController {
8
+ private config;
9
+ private recoveryTimer;
10
+ constructor(config: EpsonRecoveryControllerConfig);
11
+ start(): void;
12
+ stop(): void;
13
+ }
14
+ export {};
15
+ //# sourceMappingURL=recoveryController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recoveryController.d.ts","sourceRoot":"","sources":["../../src/epson/recoveryController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE7D,UAAU,6BAA6B;IACrC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,SAAS,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;IACxC,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,qBAAa,uBAAuB;IAGtB,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,aAAa,CAA+B;gBAEhC,MAAM,EAAE,6BAA6B;IAEzD,KAAK,IAAI,IAAI;IA0Bb,IAAI,IAAI,IAAI;CAMb"}
@@ -0,0 +1,11 @@
1
+ import type { PrinterLogger } from '../types';
2
+ export declare class EpsonSessionManager {
3
+ private logger?;
4
+ private sessionId;
5
+ private sessionInitPromise;
6
+ constructor(logger?: PrinterLogger | undefined);
7
+ getSessionId(): string | null;
8
+ ensureSession(): Promise<string>;
9
+ disposeSession(): Promise<void>;
10
+ }
11
+ //# sourceMappingURL=sessionManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionManager.d.ts","sourceRoot":"","sources":["../../src/epson/sessionManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG9C,qBAAa,mBAAmB;IAIlB,OAAO,CAAC,MAAM,CAAC;IAH3B,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,kBAAkB,CAAgC;gBAEtC,MAAM,CAAC,EAAE,aAAa,YAAA;IAE1C,YAAY,IAAI,MAAM,GAAG,IAAI;IAIvB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAyBhC,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;CAetC"}
@@ -0,0 +1,15 @@
1
+ import { PrinterErrorCode, PrinterTranslationCode } from './errors';
2
+ export type PrinterErrorCategory = 'HARDWARE' | 'BUSY' | 'TIMEOUT' | 'CONNECTION' | 'DISCOVERY' | 'PRINT' | 'UNKNOWN';
3
+ export interface ResolvedPrinterError {
4
+ code: PrinterErrorCode;
5
+ translationCode: PrinterTranslationCode;
6
+ message: string;
7
+ category: PrinterErrorCategory;
8
+ isHardwareError: boolean;
9
+ retryable: boolean;
10
+ shouldPauseQueue: boolean;
11
+ raw: unknown;
12
+ }
13
+ export declare const resolvePrinterError: (error: unknown) => ResolvedPrinterError;
14
+ export declare const resolveEpsonError: (error: unknown) => ResolvedPrinterError;
15
+ //# sourceMappingURL=errorResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorResolver.d.ts","sourceRoot":"","sources":["../src/errorResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAIxF,MAAM,MAAM,oBAAoB,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC;AAEtH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,gBAAgB,CAAC;IACvB,eAAe,EAAE,sBAAsB,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,GAAG,EAAE,OAAO,CAAC;CACd;AAED,eAAO,MAAM,mBAAmB,GAAI,OAAO,OAAO,KAAG,oBA4CpD,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,OAAO,OAAO,KAAG,oBACvB,CAAC"}
@@ -0,0 +1,23 @@
1
+ export declare enum PrinterErrorCode {
2
+ CONNECTION_FAILED = "CONNECTION_FAILED",
3
+ PRINT_FAILED = "PRINT_FAILED",
4
+ DISCOVERY_FAILED = "DISCOVERY_FAILED",
5
+ TIMEOUT = "TIMEOUT",
6
+ NATIVE_MODULE_MISSING = "NATIVE_MODULE_MISSING",
7
+ UNKNOWN = "UNKNOWN"
8
+ }
9
+ export declare enum PrinterTranslationCode {
10
+ ERR_PRINTER_OFFLINE = "printer.error.offline",
11
+ ERR_PRINTER_BUSY = "printer.error.busy",
12
+ ERR_PRINTER_COVER_OPEN = "printer.error.cover_open",
13
+ ERR_PRINTER_PAPER_EMPTY = "printer.error.paper_empty",
14
+ ERR_CONNECTION_TIMEOUT = "printer.error.connection_timeout",
15
+ ERR_UNKNOWN = "printer.error.unknown"
16
+ }
17
+ export declare class MunchiPrinterError extends Error {
18
+ code: PrinterErrorCode;
19
+ translationCode: PrinterTranslationCode;
20
+ originalError?: unknown | undefined;
21
+ constructor(code: PrinterErrorCode, translationCode: PrinterTranslationCode, message: string, originalError?: unknown | undefined);
22
+ }
23
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,oBAAY,gBAAgB;IAC1B,iBAAiB,sBAAsB;IACvC,YAAY,iBAAiB;IAC7B,gBAAgB,qBAAqB;IACrC,OAAO,YAAY;IACnB,qBAAqB,0BAA0B;IAC/C,OAAO,YAAY;CACpB;AAED,oBAAY,sBAAsB;IAChC,mBAAmB,0BAA0B;IAC7C,gBAAgB,uBAAuB;IACvC,sBAAsB,6BAA6B;IACnD,uBAAuB,8BAA8B;IACrD,sBAAsB,qCAAqC;IAC3D,WAAW,0BAA0B;CACtC;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAElC,IAAI,EAAE,gBAAgB;IACtB,eAAe,EAAE,sBAAsB;IAEvC,aAAa,CAAC,EAAE,OAAO;gBAHvB,IAAI,EAAE,gBAAgB,EACtB,eAAe,EAAE,sBAAsB,EAC9C,OAAO,EAAE,MAAM,EACR,aAAa,CAAC,EAAE,OAAO,YAAA;CAQjC"}
@@ -0,0 +1,15 @@
1
+ import { EpsonPrinterConfig } from './types';
2
+ import { EpsonPrinter } from './epson/driver';
3
+ export { VERSION } from './version';
4
+ export * from './types';
5
+ export * from './errors';
6
+ export * from './config';
7
+ export * from './errorResolver';
8
+ export * from './react/PrinterProvider';
9
+ export * from './react/usePrinterStatus';
10
+ export * from './epson/constants';
11
+ export { resolveModelFromBluetoothName } from './epson/modelUtils';
12
+ export { discoverPrinters, type ConnectionType, type DiscoveryParams } from './epson/discovery';
13
+ export { PrinterError } from './epson/errors';
14
+ export declare function getPrinter(config: EpsonPrinterConfig): EpsonPrinter;
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAChG,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,wBAAgB,UAAU,CAAC,MAAM,EAAE,kBAAkB,GAAG,YAAY,CAKnE"}
package/dist/index.js ADDED
@@ -0,0 +1,11 @@
1
+ "use strict";var ue=Object.create;var C=Object.defineProperty;var ce=Object.getOwnPropertyDescriptor;var me=Object.getOwnPropertyNames;var de=Object.getPrototypeOf,le=Object.prototype.hasOwnProperty;var Te=(t,e)=>{for(var r in e)C(t,r,{get:e[r],enumerable:!0})},G=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of me(e))!le.call(t,i)&&i!==r&&C(t,i,{get:()=>e[i],enumerable:!(n=ce(e,i))||n.enumerable});return t};var ge=(t,e,r)=>(r=t!=null?ue(de(t)):{},G(e||!t||!t.__esModule?C(r,"default",{value:t,enumerable:!0}):r,t)),Re=t=>G(C({},"__esModule",{value:!0}),t);var xe={};Te(xe,{Epos2CallbackCode:()=>k,Epos2ConnectionEvent:()=>J,Epos2ErrorStatus:()=>j,Epos2Font:()=>Z,Epos2Lang:()=>Y,Epos2StatusEvent:()=>B,EpsonModel:()=>V,FontSize:()=>O,MunchiPrinterError:()=>g,PrinterError:()=>E,PrinterErrorCode:()=>I,PrinterProvider:()=>_e,PrinterTranslationCode:()=>_,VERSION:()=>te,discoverPrinters:()=>ae,getGlobalLogger:()=>U,getPrinter:()=>H,resolveEpsonError:()=>Ie,resolveModelFromBluetoothName:()=>ie,resolvePrinterError:()=>re,setGlobalLogger:()=>L,usePrinter:()=>q,usePrinterStatus:()=>ye});module.exports=Re(xe);var Q={},L=t=>{Q.logger=t},U=()=>Q.logger;var I=(u=>(u.CONNECTION_FAILED="CONNECTION_FAILED",u.PRINT_FAILED="PRINT_FAILED",u.DISCOVERY_FAILED="DISCOVERY_FAILED",u.TIMEOUT="TIMEOUT",u.NATIVE_MODULE_MISSING="NATIVE_MODULE_MISSING",u.UNKNOWN="UNKNOWN",u))(I||{}),_=(u=>(u.ERR_PRINTER_OFFLINE="printer.error.offline",u.ERR_PRINTER_BUSY="printer.error.busy",u.ERR_PRINTER_COVER_OPEN="printer.error.cover_open",u.ERR_PRINTER_PAPER_EMPTY="printer.error.paper_empty",u.ERR_CONNECTION_TIMEOUT="printer.error.connection_timeout",u.ERR_UNKNOWN="printer.error.unknown",u))(_||{}),g=class t extends Error{constructor(r,n,i,s){super(i);this.code=r;this.translationCode=n;this.originalError=s;this.name="MunchiPrinterError",Object.setPrototypeOf(this,t.prototype)}};var Pe=t=>{if(!t||typeof t!="object")return"";let e=t.code;return typeof e=="string"?e:""},fe=t=>{if(t instanceof Error)return t.message;if(t&&typeof t=="object"){let e=t.message;if(typeof e=="string")return e}return String(t)},l=(t,e,r)=>t.includes(r)||e===r||e.includes(r),f=t=>{if(t instanceof g)return t;let e=fe(t),r=Pe(t),n=e.toUpperCase(),i=r.toUpperCase();return n.includes("ERROR CODE: 4")?new g("PRINT_FAILED","printer.error.cover_open","Printer cover is open",t):n.includes("ERROR CODE: 3")?new g("PRINT_FAILED","printer.error.busy","Printer is performing auto-recovery",t):n.includes("ERROR CODE: 7")?new g("PRINT_FAILED","printer.error.paper_empty","Printer paper is empty",t):l(n,i,"TARGET_IN_USE")||l(n,i,"BUSY")||l(n,i,"IN_USE")||l(n,i,"PRINT_BUSY")||l(n,i,"DISCOVERY_BUSY")?new g("TIMEOUT","printer.error.busy","Printer is busy",t):l(n,i,"TIMEOUT")||l(n,i,"ERR_TIMEOUT")||l(n,i,"PRINT_TIMEOUT")?new g("TIMEOUT","printer.error.connection_timeout","Operation timed out",t):l(n,i,"PERMISSION_DENIED")||l(n,i,"LOCATION_DISABLED")||l(n,i,"BLUETOOTH_DISABLED")?new g("CONNECTION_FAILED","printer.error.offline",e,t):l(n,i,"DISCOVERY_ERROR")||n.includes("DISCOVERY")?new g("DISCOVERY_FAILED","printer.error.unknown",e,t):l(n,i,"PRINTER_OFFLINE")||l(n,i,"SESSION_ERROR")||l(n,i,"STATUS_ERROR")||l(n,i,"INIT_ERROR")||l(n,i,"PRINT_CANCELED")||l(n,i,"DISCONNECT")||l(n,i,"ERR_DISCONNECT")||n.includes("PRINTER NOT CONNECTED")||n.includes("OFFLINE")?new g("CONNECTION_FAILED","printer.error.offline",n.includes("OFFLINE")?e:"Printer disconnected",t):l(n,i,"CONNECT_ERROR")||n.includes("FAILED TO CONNECT")||l(n,i,"ERR_CONNECT")?new g("CONNECTION_FAILED","printer.error.offline","Failed to connect to printer",t):l(n,i,"PRINT_ERROR")||l(n,i,"PRINT_FAILURE")?new g("PRINT_FAILED","printer.error.unknown",e,t):new g("UNKNOWN","printer.error.unknown",e,t)};var O=(n=>(n.Small="Small",n.Medium="Medium",n.Large="Large",n))(O||{});var W=t=>{let e=[];if(t.settings?.fontSize){let r="Medium";t.settings.fontSize==="Small"&&(r="Small"),t.settings.fontSize==="Large"&&(r="Large"),e.push({type:"fontSize",size:r})}t.settings?.fontStyle==="Bold"&&e.push({type:"bold",value:!0}),e.push({type:"align",align:"center"}),t.tbl&&e.push({type:"text",text:`Table: ${t.tbl}
2
+ `,bold:!0,size:"double-height"}),e.push({type:"text",text:`Order: ${t.id}
3
+ `,bold:!0}),e.push({type:"text",text:`${t.ts}
4
+ `}),e.push({type:"text",text:`--------------------------------
5
+ `}),e.push({type:"align",align:"left"});for(let r of t.lines){let n=r.t,i=r.s,s=r.i||0,P=`${" ".repeat(s)}${n}`;if(i==="C"){if(n.includes("---")){e.push({type:"text",text:`--------------------------------
6
+ `,align:"center"});continue}e.push({type:"text",text:P+`
7
+ `,align:"center",bold:!0})}else i==="B"?e.push({type:"text",text:P+`
8
+ `,bold:!0}):i==="R"?e.push({type:"text",text:P+`
9
+ `,bold:!0}):e.push({type:"text",text:P+`
10
+ `,align:"left"})}return e.push({type:"feed",lines:3}),e.push({type:"cut"}),{commands:e}};var E=class t extends g{constructor(r,n,i,s,u){super(n,i,s,u);this.isHardwareError=r;this.name="PrinterError",Object.setPrototypeOf(this,t.prototype)}},F=t=>{if(t instanceof E)return t.isHardwareError;let e=String(t.message||t).toUpperCase();return e.includes("ERR_OFF_LINE")||e.includes("ERR_COVER_OPEN")||e.includes("ERR_PAPER_OUT")||e.includes("ERR_FAILURE")||e.includes("DISCONNECT")||e.includes("PRINT_TIMEOUT")||e.includes("ERROR CODE: 4")||e.includes("ERROR CODE: 7")||e.includes("ERROR CODE: 3")},K=t=>{if(t instanceof E)return t;let e=f(t),r=F(t);return new E(r,e.code,e.translationCode,e.message,e.originalError)};var Ee=(t,e=!1)=>{let r={Small:{normal:{width:1,height:1},item:{width:1,height:1}},Medium:{normal:{width:2,height:2},item:{width:2,height:2}},Large:{normal:{width:2,height:2},item:{width:3,height:3}}},n=e?"item":"normal";return r[t]?.[n]??r.Small.normal},X=t=>{if(typeof t!="object"||t===null)return null;let e=t;return{target:String(e.target||""),name:String(e.name||""),macAddress:e.macAddress?String(e.macAddress):void 0,ipAddress:e.ipAddress?String(e.ipAddress):void 0,bdAddress:e.bdAddress?String(e.bdAddress):void 0,type:"EPSON"}},$=t=>t.commands.map(e=>{switch(e.type){case"text":return{cmd:"addText",data:e.text,align:e.align,bold:e.bold,underline:e.underline,size:e.size};case"align":return{cmd:"addTextAlign",align:e.align};case"bold":return{cmd:"addTextStyle",bold:e.value};case"fontSize":{let r=Ee(e.size,e.isItemName);return{cmd:"addTextSize",width:r.width,height:r.height}}case"newline":return{cmd:"addFeedLine",line:e.lines||1};case"separator":return{cmd:"addText",data:`------------------
11
+ `};case"textLang":return{cmd:"addTextLang",lang:e.lang};case"textFont":return{cmd:"addTextFont",font:e.font};case"image":return{cmd:"addImage",data:e.base64,width:e.width};case"cut":return{cmd:"addCut"};case"drawer":return{cmd:"addPulse"};case"barcode":return{cmd:"addBarcode",data:e.data,type:e.system,width:e.width,height:e.height};case"qr":return{cmd:"addSymbol",data:e.data,type:"QRCODE_MODEL_2",level:e.errorCorrection||"M",width:e.size||3};case"feed":return{cmd:"addFeedLine",line:e.lines};default:return null}}).filter(e=>e!==null);var B=(c=>(c[c.ONLINE=0]="ONLINE",c[c.OFFLINE=1]="OFFLINE",c[c.POWER_OFF=2]="POWER_OFF",c[c.COVER_CLOSE=3]="COVER_CLOSE",c[c.COVER_OPEN=4]="COVER_OPEN",c[c.PAPER_OK=5]="PAPER_OK",c[c.PAPER_NEAR_END=6]="PAPER_NEAR_END",c[c.PAPER_EMPTY=7]="PAPER_EMPTY",c[c.DRAWER_HIGH=8]="DRAWER_HIGH",c[c.DRAWER_LOW=9]="DRAWER_LOW",c[c.BATTERY_ENOUGH=10]="BATTERY_ENOUGH",c[c.BATTERY_EMPTY=11]="BATTERY_EMPTY",c[c.AUTO_RECOVER_ERROR=20]="AUTO_RECOVER_ERROR",c[c.AUTO_RECOVER_OK=21]="AUTO_RECOVER_OK",c[c.UNRECOVERABLE_ERROR=22]="UNRECOVERABLE_ERROR",c))(B||{}),J=(n=>(n[n.RECONNECTING=0]="RECONNECTING",n[n.RECONNECT=1]="RECONNECT",n[n.DISCONNECT=2]="DISCONNECT",n))(J||{}),j=(a=>(a[a.SUCCESS=0]="SUCCESS",a[a.ERR_PARAM=1]="ERR_PARAM",a[a.ERR_CONNECT=2]="ERR_CONNECT",a[a.ERR_TIMEOUT=3]="ERR_TIMEOUT",a[a.ERR_MEMORY=4]="ERR_MEMORY",a[a.ERR_ILLEGAL=5]="ERR_ILLEGAL",a[a.ERR_PROCESSING=6]="ERR_PROCESSING",a[a.ERR_NOT_FOUND=7]="ERR_NOT_FOUND",a[a.ERR_IN_USE=8]="ERR_IN_USE",a[a.ERR_TYPE_INVALID=9]="ERR_TYPE_INVALID",a[a.ERR_DISCONNECT=10]="ERR_DISCONNECT",a[a.ERR_ALREADY_OPENED=11]="ERR_ALREADY_OPENED",a[a.ERR_ALREADY_USED=12]="ERR_ALREADY_USED",a[a.ERR_BOX_COUNT_OVER=13]="ERR_BOX_COUNT_OVER",a[a.ERR_BOX_CLIENT_OVER=14]="ERR_BOX_CLIENT_OVER",a[a.ERR_UNSUPPORTED=15]="ERR_UNSUPPORTED",a[a.ERR_DEVICE_BUSY=16]="ERR_DEVICE_BUSY",a[a.ERR_RECOVERY_FAILURE=17]="ERR_RECOVERY_FAILURE",a[a.ERR_FAILURE=255]="ERR_FAILURE",a))(j||{}),k=(m=>(m[m.SUCCESS=0]="SUCCESS",m[m.ERR_TIMEOUT=1]="ERR_TIMEOUT",m[m.ERR_NOT_FOUND=2]="ERR_NOT_FOUND",m[m.ERR_AUTORECOVER=3]="ERR_AUTORECOVER",m[m.ERR_COVER_OPEN=4]="ERR_COVER_OPEN",m[m.ERR_CUTTER=5]="ERR_CUTTER",m[m.ERR_MECHANICAL=6]="ERR_MECHANICAL",m[m.ERR_EMPTY=7]="ERR_EMPTY",m[m.ERR_UNRECOVERABLE=8]="ERR_UNRECOVERABLE",m[m.ERR_SYSTEM=9]="ERR_SYSTEM",m[m.ERR_PORT=10]="ERR_PORT",m[m.ERR_FAILURE=255]="ERR_FAILURE",m))(k||{}),Y=(d=>(d[d.EN=0]="EN",d[d.JA=1]="JA",d[d.ZH_CN=2]="ZH_CN",d[d.ZH_TW=3]="ZH_TW",d[d.KO=4]="KO",d[d.TH=5]="TH",d[d.VI=6]="VI",d[d.MULTI=7]="MULTI",d))(Y||{}),Z=(s=>(s[s.FONT_A=0]="FONT_A",s[s.FONT_B=1]="FONT_B",s[s.FONT_C=2]="FONT_C",s[s.FONT_D=3]="FONT_D",s[s.FONT_E=4]="FONT_E",s))(Z||{}),V=(o=>(o[o.TM_M10=0]="TM_M10",o[o.TM_M30=1]="TM_M30",o[o.TM_P20=2]="TM_P20",o[o.TM_P60=3]="TM_P60",o[o.TM_P60II=4]="TM_P60II",o[o.TM_P80=5]="TM_P80",o[o.TM_T20=6]="TM_T20",o[o.TM_T60=7]="TM_T60",o[o.TM_T70=8]="TM_T70",o[o.TM_T81=9]="TM_T81",o[o.TM_T82=10]="TM_T82",o[o.TM_T83=11]="TM_T83",o[o.TM_T88=12]="TM_T88",o[o.TM_T90=13]="TM_T90",o[o.TM_T90KP=14]="TM_T90KP",o[o.TM_U220=15]="TM_U220",o[o.TM_U330=16]="TM_U330",o[o.TM_L90=17]="TM_L90",o[o.TM_H6000=18]="TM_H6000",o[o.TM_T83III=19]="TM_T83III",o[o.TM_T100=20]="TM_T100",o[o.TM_M30II=21]="TM_M30II",o[o.TM_M50=23]="TM_M50",o[o.TM_T88VII=24]="TM_T88VII",o[o.TM_L90LFC=25]="TM_L90LFC",o[o.TM_L100=26]="TM_L100",o[o.TM_P20II=27]="TM_P20II",o[o.TM_P80II=28]="TM_P80II",o[o.TM_M30III=29]="TM_M30III",o[o.TM_M50II=30]="TM_M50II",o[o.TM_M55=31]="TM_M55",o[o.TM_U220II=32]="TM_U220II",o))(V||{});var y=require("react-native"),T=y.NativeModules.MunchiEpsonModule,z=()=>T?new y.NativeEventEmitter(T):null,pe=t=>new Promise(e=>setTimeout(e,t)),Ne=t=>{if(!t||typeof t!="object")return"";let e=t.code;return typeof e=="string"?e.toUpperCase():""},he=t=>{if(t instanceof Error)return t.message.toUpperCase();if(t&&typeof t=="object"){let e=t.message;if(typeof e=="string")return e.toUpperCase()}return String(t).toUpperCase()},p=(t,e,r)=>t.includes(r)||e===r||e.includes(r),S=async(t,e=3,r=500)=>{try{return await t()}catch(n){if(e<=1)throw n;let i=he(n),s=Ne(n);if(p(i,s,"TARGET_IN_USE"))throw n;if(p(i,s,"BUSY")||p(i,s,"IN_USE")||p(i,s,"ERR_IN_USE")||p(i,s,"PRINT_BUSY")||p(i,s,"ERR_CONNECT")||p(i,s,"CONNECT_ERROR")||p(i,s,"ERR_TIMEOUT")||p(i,s,"PRINT_TIMEOUT"))return await pe(r),S(t,e-1,r);throw n}};var D=class{constructor(e){this.logger=e}sessionId=null;sessionInitPromise=null;getSessionId(){return this.sessionId}async ensureSession(){if(!T)throw new Error("Native module not found");return this.sessionId?this.sessionId:this.sessionInitPromise?this.sessionInitPromise:(this.sessionInitPromise=T.initSession().then(e=>(this.sessionId=e,e)).finally(()=>{this.sessionInitPromise=null}),this.sessionInitPromise)}async disposeSession(){if(!T||!this.sessionId){this.sessionId=null;return}let e=this.sessionId;this.sessionId=null;try{await T.disposeSession(e)}catch(r){this.logger?.error("[EpsonPrinter] Dispose session failed",r)}}};var M=class{constructor(e){this.logger=e}queue=Promise.resolve();isQueuePaused=!1;resumeQueueResolver=null;isPaused(){return this.isQueuePaused}pause(){this.isQueuePaused=!0}resume(){this.isQueuePaused&&(this.isQueuePaused=!1,this.resumeQueueResolver&&(this.resumeQueueResolver(),this.resumeQueueResolver=null))}async waitUntilResumed(){if(this.isQueuePaused)return new Promise(e=>{let r=this.resumeQueueResolver;this.resumeQueueResolver=()=>{r&&r(),e()}})}enqueue(e){return new Promise((r,n)=>{let i=async()=>{this.isQueuePaused&&(this.logger?.info?.("[EpsonPrinter] Queue is PAUSED. Waiting for resume..."),await this.waitUntilResumed(),this.logger?.info?.("[EpsonPrinter] Queue RESUMED."));try{let s=await e();r(s)}catch(s){n(s)}};this.queue=this.queue.then(i,i)})}enqueueBackground(e){this.queue=this.queue.then(e,e)}};var v=class{constructor(e){this.config=e}recoveryTimer=null;start(){this.recoveryTimer||(this.config.logger?.info?.("[EpsonPrinter] Starting recovery polling..."),this.recoveryTimer=setInterval(async()=>{try{let e=await this.config.getStatus();if(e.online&&!e.coverOpen&&e.errorStatus==="NONE")this.config.logger?.info?.("[EpsonPrinter] Poller detected healthy status. Requesting queue resume."),this.config.onRecovered();else{let n=`[EpsonPrinter] Polling... Status: Online=${e.online}, Cover=${e.coverOpen}, Err=${e.errorStatus}`;this.config.logger?.info?.(n)}}catch(e){this.config.logger?.error("[EpsonPrinter] Recovery poll failed",e)}},2e3))}stop(){this.recoveryTimer&&(this.config.logger?.info?.("[EpsonPrinter] Stopping recovery polling."),clearInterval(this.recoveryTimer),this.recoveryTimer=null)}};var Ce=new Set([0,3,5,21]),x=class{constructor(e){this.config=e}statusSubscription=null;connectionSubscription=null;connectionCallbacks=new Set;emitStatus(e){for(let r of this.connectionCallbacks)r(e)}ensureStatusListener(){if(this.statusSubscription)return;let e=z();e&&(this.config.logger?.info?.("[EpsonPrinter] Starting status listener for queue management"),this.statusSubscription=e.addListener("onPrinterStatusChange",r=>{if(!this.config.getSessionId()||r.sessionId!==this.config.getSessionId())return;let n=`[EpsonPrinter] Received Status Event: ${r.eventType}`;this.config.logger?.info?.(n),Ce.has(r.eventType)&&this.config.onRecoveryEvent(r.eventType)}))}ensureConnectionListener(){if(this.connectionSubscription)return;let e=z();e&&(this.connectionSubscription=e.addListener("onPrinterConnectionChange",r=>{if(!this.config.getSessionId()||r.sessionId!==this.config.getSessionId())return;let n="UNKNOWN";switch(r.status){case"RECONNECTING":n="RECONNECTING";break;case"RECONNECTED":n="CONNECTED";break;case"DISCONNECTED":n="DISCONNECTED";break;default:n="UNKNOWN"}this.config.onConnectionEvent(n),this.emitStatus(n)}))}removeStatusListener(){this.statusSubscription&&(this.statusSubscription.remove(),this.statusSubscription=null)}onConnectionChange(e){return this.connectionCallbacks.add(e),e(this.config.getConnectionStatus()),this.ensureConnectionListener(),()=>{this.connectionCallbacks.delete(e),this.connectionCallbacks.size===0&&this.connectionSubscription&&(this.connectionSubscription.remove(),this.connectionSubscription=null)}}};var ee={online:!1,coverOpen:!1,paperEmpty:!1,paper:"EMPTY",errorStatus:"NONE",drawerOpen:!1},A=class{disconnectTimer=null;connectionStatus="DISCONNECTED";isConnecting=!1;target=null;defaultTarget;model;lang;logger;sessionManager;queueController;recoveryController;eventRouter;constructor(e){this.logger=e.logger,this.defaultTarget=e.target??null,this.model=e.model,this.lang=e.lang??0,this.sessionManager=new D(this.logger),this.queueController=new M(this.logger),this.recoveryController=new v({logger:this.logger,getStatus:()=>this.getStatus(),onRecovered:()=>this.resumeQueue()}),this.eventRouter=new x({logger:this.logger,getSessionId:()=>this.sessionManager.getSessionId(),getConnectionStatus:()=>this.connectionStatus,onRecoveryEvent:()=>{this.queueController.isPaused()&&(this.logger?.info?.("[EpsonPrinter] Printer recovered (Event). Resuming queue..."),this.resumeQueue())},onConnectionEvent:r=>{r==="CONNECTED"&&(this.connectionStatus="CONNECTED"),r==="DISCONNECTED"&&(this.connectionStatus="DISCONNECTED")}})}resumeQueue(){if(!this.queueController.isPaused())return;this.logger?.info?.("[EpsonPrinter] Resuming queue..."),this.recoveryController.stop(),this.queueController.resume()}async connect(e,r=5e3){let n=e??this.defaultTarget;if(!n){let i=new Error("Printer target is required");throw this.logger?.error("[EpsonPrinter] Connect failed: missing target",i),i}return this.disconnectTimer&&(clearTimeout(this.disconnectTimer),this.disconnectTimer=null),this.queueController.enqueue(async()=>{if(!T){this.logger?.error("[EpsonPrinter] Native module not found");return}if(this.connectionStatus==="CONNECTED"&&this.target===n)return;let i=await this.sessionManager.ensureSession();this.isConnecting=!0,this.connectionStatus="CONNECTING",this.eventRouter.emitStatus("CONNECTING");try{await S(()=>T.connect(i,n,r,this.model,this.lang)),this.target=n,this.connectionStatus="CONNECTED",this.eventRouter.emitStatus("CONNECTED"),this.isConnecting=!1,this.eventRouter.ensureStatusListener(),this.eventRouter.ensureConnectionListener()}catch(s){let u=f(s);throw this.logger?.error(`[EpsonPrinter] Connect failed for ${n}`,u),this.connectionStatus="DISCONNECTED",this.eventRouter.emitStatus("DISCONNECTED"),this.isConnecting=!1,u}})}async print(e){if(!T)return;this.disconnectTimer&&(clearTimeout(this.disconnectTimer),this.disconnectTimer=null);let r=0;return this.queueController.enqueue(async()=>{let n=await this.sessionManager.ensureSession(),i=$(e);for(;;){r++,this.logger?.info?.(`[EpsonPrinter] Print attempt ${r}`);try{await S(()=>T.print(n,i));break}catch(s){let u=K(s);if(u.isHardwareError){this.queueController.pause(),this.logger?.error(`[EpsonPrinter] Hardware error on attempt ${r}. Waiting for recovery before retry...`,u),this.recoveryController.start(),await this.queueController.waitUntilResumed(),this.logger?.info?.("[EpsonPrinter] Recovery detected. Sending cut to flush partial print before retry...");try{await T.print(n,[{cmd:"addCut"}])}catch{}this.logger?.info?.("[EpsonPrinter] Retrying print job...")}else throw this.logger?.error(`[EpsonPrinter] Print failed (non-recoverable) on attempt ${r}`,u),u}}}).finally(()=>{this.disconnectTimer&&clearTimeout(this.disconnectTimer),this.disconnectTimer=setTimeout(()=>{this.performDisconnect()},5e3)})}performDisconnect(){this.queueController.enqueueBackground(async()=>{if(!this.disconnectTimer)return;let e=this.sessionManager.getSessionId();if(T&&this.connectionStatus==="CONNECTED"&&e)try{await T.disconnect(e),this.connectionStatus="DISCONNECTED",this.target=null,this.eventRouter.emitStatus("DISCONNECTED"),await this.sessionManager.disposeSession()}catch(r){this.logger?.error("[EpsonPrinter] Auto-Disconnect failed",r)}this.disconnectTimer=null})}async printEmbedded(e){try{let r=W(e);return await this.print(r)}catch(r){let n=f(r);throw String(r).includes("MunchiPrinterError")||this.logger?.error("[EpsonPrinter] Embedded print failed",n),n}}async disconnect(){return this.disconnectTimer&&(clearTimeout(this.disconnectTimer),this.disconnectTimer=null),this.queueController.enqueue(async()=>{if(!T)return;let e=this.sessionManager.getSessionId();if(e)try{await T.disconnect(e),this.connectionStatus="DISCONNECTED",this.target=null,this.eventRouter.emitStatus("DISCONNECTED"),this.eventRouter.removeStatusListener(),this.recoveryController.stop()}catch(r){this.logger?.error("[EpsonPrinter] Disconnect failed",r)}finally{await this.sessionManager.disposeSession()}})}async getStatus(){if(!T)return ee;let e=this.sessionManager.getSessionId();if(!e)return ee;try{return await T.getStatus(e)}catch(r){throw this.logger?.error("[EpsonPrinter] GetStatus failed",r),f(r)}}async openDrawer(){let e={commands:[{type:"drawer"}]};return this.print(e)}onConnectionChange(e){return this.eventRouter.onConnectionChange(e)}};var te="1.0.0";var re=t=>{let e=f(t),r=e.message.toUpperCase(),n=t instanceof E?t.isHardwareError:F(t),i=e.translationCode==="printer.error.busy"||r.includes("BUSY")||r.includes("IN_USE")||r.includes("PRINT_BUSY"),s=e.code==="TIMEOUT"||e.translationCode==="printer.error.connection_timeout"||r.includes("TIMEOUT"),u=e.code==="CONNECTION_FAILED"||e.translationCode==="printer.error.offline",P=e.code==="DISCOVERY_FAILED",d="UNKNOWN";return n?d="HARDWARE":i?d="BUSY":s?d="TIMEOUT":u?d="CONNECTION":P?d="DISCOVERY":e.code==="PRINT_FAILED"&&(d="PRINT"),{code:e.code,translationCode:e.translationCode,message:e.message,category:d,isHardwareError:n,retryable:i||s,shouldPauseQueue:n,raw:t}},Ie=t=>re(t);var R=ge(require("react"));var ne=(0,R.createContext)(void 0),_e=({config:t,logger:e,children:r})=>{let[n,i]=(0,R.useState)();(0,R.useEffect)(()=>{e&&L(e)},[e]);let s=(0,R.useMemo)(()=>{let P={...t,logger:e??t.logger};return H(P)},[t.lang,t.model,t.target,e]),u=(0,R.useMemo)(()=>({printer:s,config:t,isReady:!0,error:n}),[s,t,n]);return R.default.createElement(ne.Provider,{value:u},r)},q=()=>{let t=(0,R.useContext)(ne);if(!t)throw new Error("usePrinter must be used within a PrinterProvider");return t};var N=require("react");var Oe={online:!1,coverOpen:!1,paper:"EMPTY",paperEmpty:!0,drawerOpen:!1,errorStatus:"NONE"};function ye(t={}){let{pollIntervalMs:e=5e3,enabled:r=!0}=t,{printer:n}=q(),[i,s]=(0,N.useState)("DISCONNECTED"),[u,P]=(0,N.useState)(null),[d,b]=(0,N.useState)(!1),h=(0,N.useRef)(null);return(0,N.useEffect)(()=>n.onConnectionChange(m=>{s(m)}),[n]),(0,N.useEffect)(()=>{if(!r||i!=="CONNECTED"){h.current&&(clearInterval(h.current),h.current=null,b(!1));return}let w=async()=>{try{let m=await n.getStatus();P(m)}catch{P(Oe)}};return w(),b(!0),h.current=setInterval(w,e),()=>{h.current&&(clearInterval(h.current),h.current=null,b(!1))}},[n,i,r,e]),{connectionStatus:i,hardwareStatus:u,isPolling:d}}var Se=[[/^TM-m10/i,0],[/^TM-m30III/i,29],[/^TM-m30II/i,21],[/^TM-m30/i,1],[/^TM-m50II/i,30],[/^TM-m50/i,23],[/^TM-m55/i,31],[/^TM-P20II/i,27],[/^TM-P20/i,2],[/^TM-P60II/i,4],[/^TM-P60/i,3],[/^TM-P80II/i,28],[/^TM-P80/i,5],[/^TM-T20/i,6],[/^TM-T60/i,7],[/^TM-T70/i,8],[/^TM-T81/i,9],[/^TM-T82/i,10],[/^TM-T83III/i,19],[/^TM-T83/i,11],[/^TM-T88VII/i,24],[/^TM-T88/i,12],[/^TM-T90KP/i,14],[/^TM-T90/i,13],[/^TM-T100/i,20],[/^TM-U220II/i,32],[/^TM-U220/i,15],[/^TM-U330/i,16],[/^TM-L90LFC/i,25],[/^TM-L90/i,17],[/^TM-L100/i,26],[/^TM-H6000/i,18]],ie=t=>{for(let[e,r]of Se)if(e.test(t))return r;return null};var se=require("react-native");var oe=se.NativeModules.MunchiEpsonModule,De={bluetooth:["BT:"],tcp:["TCP:","TCPS:"],usb:["USB:"]},Me=t=>t.includes("[local_"),ve=(t,e)=>e?De[e].some(n=>t.startsWith(n)):!0,ae=async t=>{if(!oe)return console.warn("[EpsonDiscovery] Native module not found"),[];try{return(await oe.discover({timeout:t.timeout})).map(X).filter(r=>!r||Me(r.target)?!1:ve(r.target,t.connectionType))}catch(e){let r=f(e);throw console.error("[EpsonDiscovery] Discovery failed",r),r}};function H(t){return new A({...t,logger:t.logger??U()})}0&&(module.exports={Epos2CallbackCode,Epos2ConnectionEvent,Epos2ErrorStatus,Epos2Font,Epos2Lang,Epos2StatusEvent,EpsonModel,FontSize,MunchiPrinterError,PrinterError,PrinterErrorCode,PrinterProvider,PrinterTranslationCode,VERSION,discoverPrinters,getGlobalLogger,getPrinter,resolveEpsonError,resolveModelFromBluetoothName,resolvePrinterError,setGlobalLogger,usePrinter,usePrinterStatus});